CRM migration
Field-level mapping, validation, and rollback between Attio and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
Attio
Source
Twenty CRM
Destination
Compatibility
8 of 12
objects map 1:1 between Attio and Twenty CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Attio and Twenty CRM are both modern, developer-friendly CRMs, but they diverge on the core question of infrastructure ownership. Attio is a polished SaaS platform with a relational object model, workspace credit billing, and automation gated on Pro and Enterprise tiers. Twenty CRM is an open-source platform (AGPL-3.0, 40.6k GitHub stars) that teams can self-host or run on Twenty's SaaS, eliminating per-seat subscription costs. The primary migration driver is escaping Attio's credit consumption model and gaining full data sovereignty. The primary migration risk is Attio's CSV export flattening relationship chains, which we resolve by querying relationship attributes via the Attio API to reconstruct parent-child links before writing to Twenty. Attio Lists, Workflows, and Sequences do not migrate as functional equivalents; we deliver a written inventory of their logic for the customer to rebuild in Twenty's view and automation framework.
Every standard and custom field arrives verified.
AI proposes the map; you confirm before any record moves.
Parent–child, lookups, and ownership stay linked.
Calls, emails, meetings — with original timestamps.
Documents, uploads, and inline notes move with the record.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a Attio object lands in Twenty CRM, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Attio
People
Twenty CRM
Person
1:1Attio People records map 1:1 to Twenty Person records. We preserve all standard attributes (name fields, email, phone, job title, location) and custom attributes as Twenty custom fields. Attio's email sync history (Gmail/Outlook ingested) migrates as read-only Activity entries in Twenty. Note that Attio Person records linked to a Company via a Relationship Attribute carry a company_id that must be resolved to the corresponding Twenty Company record during import; we reconstruct this lookup chain via the Attio API before writing.
Attio
Companies
Twenty CRM
Company
1:1Attio Company records map 1:1 to Twenty Company records. Domain-based enrichment from Attio transfers as read-only fields. Companies are imported before People to satisfy the foreign-key dependency on the Person-to-Company relationship. We deduplicate on domain name during import.
Attio
Deals
Twenty CRM
Opportunities
1:1Attio Deals map to Twenty Opportunities. Deal stage names map to Twenty pipeline stage values that we configure before migration. Amount, close date, probability, and owner assignment migrate directly. Deals linked to multiple People (Attio supports many-to-many via Relationship Attributes) map to a primary OpportunityContactRole in Twenty with secondary contacts recorded as custom multi-lookup fields.
Attio
Custom Objects
Twenty CRM
Custom Objects
1:1Attio custom objects (gated 3 on Free, 5 on Plus, 12 on Pro, unlimited on Enterprise) migrate to Twenty custom objects of equivalent name. We pre-create the destination schema in Twenty before import, including all custom fields and lookup relationships to standard objects. A common migration blocker is Attio Plus plans using 5 custom objects that exceed what a simple Twenty configuration expects—validation during scoping flags this before any data moves. If the Attio workspace uses custom objects beyond the customer's target Twenty setup, we recommend consolidation or schema redesign during scoping.
Attio
Lists
Twenty CRM
Views (Saved Filters)
lossyAttio Lists are workflow-context collections of records with dynamic or static membership. Twenty does not have a Lists equivalent—saved Views with filter criteria provide the closest functional match. We extract every List definition, including its filter conditions (field, operator, value), and document it as a Twenty View configuration that the customer's admin recreates post-migration. List membership counts migrate as informational reference records attached to each Person and Company.
Attio
Notes
Twenty CRM
Comments / Activity entries
1:1Attio Notes attach to records as threads and are first-class API objects. We migrate Notes with timestamp, author attribution, and record association preserved. In Twenty, Notes attach to the corresponding Person, Company, or Opportunity record as a comment-style entry. Rich text content migrates as plain text if the destination field type does not support rich text.
Attio
Tasks
Twenty CRM
Tasks
1:1Attio Tasks migrate to Twenty Tasks with assignee, due date, status, and priority preserved. Owner assignment migrates by resolving Attio owner email to Twenty User records. Tasks attached to a specific record carry the parent lookup to the corresponding Twenty Person, Company, or Opportunity.
Attio
Activities (Emails, Meetings, Calls)
Twenty CRM
Activities
1:1Attio's automatic email and calendar sync produces engagement records for People and Company records. These migrate as read-only Activity entries in Twenty's timeline, with the original timestamp preserved. Call duration and disposition from Attio migrate as custom Activity fields. Manual activity logs (logged calls, emails, meetings) migrate as equivalent Twenty Activity entries. Note that Attio's last_interaction attribute only updates via email sync and cannot be manually set—we flag this limitation in scoping so teams do not expect it to carry forward as a usable sorting signal.
Attio
Workflows
Twenty CRM
Workflows (documentation only)
lossyAttio Workflows consume workspace credits and define automation logic with trigger conditions and action blocks. Twenty's workflow and automation capabilities are actively developing and do not have a feature-parity mapping to Attio's workflow model. We do not migrate Workflows as code. We document every active Attio Workflow with its trigger, conditions, action sequence, and credit consumption estimate, and deliver it as a written specification for the customer's admin to rebuild in Twenty when Twenty's workflow feature set matures to support the use case.
Attio
Sequences
Twenty CRM
Sequences (documentation only)
lossyAttio Sequences (available on Pro and Enterprise plans) are sales engagement cadences with step timing and delay logic. Twenty does not have a native Sequences or sales cadence feature. We document each sequence's step structure (step type, delay, template content) as a written handoff for the customer's admin to implement via email sequences in a separate sales engagement tool or via Twenty's workflow framework when available.
Attio
Users
Twenty CRM
Users
1:1Attio Users (team members who own records) map to Twenty User records via email match. Owner assignments on People, Companies, Deals, and Tasks resolve to Twenty User references at migration time. Any Attio User without a matching Twenty User goes to a reconciliation queue for the customer to provision before the final migration phase runs.
Attio
Relationship Attributes
Twenty CRM
Lookup fields / Relation fields
lossyAttio Relationship Attributes define how records across objects link together (e.g., a Deal linked to a Company and multiple People). These are the highest-risk element of this migration because Attio's workspace CSV export produces flat files without join keys. We query Relationship Attributes via the Attio API before any import, reconstruct the parent-child chains, and write lookup resolution records to temporary staging. We then import in dependency order (Companies first, then People, then Deals) with the resolved foreign-key IDs so that relationships are established at insert time rather than patched afterward.
| Attio | Twenty CRM | Compatibility | |
|---|---|---|---|
| People | Person1:1 | Fully supported | |
| Companies | Company1:1 | Fully supported | |
| Deals | Opportunities1:1 | Fully supported | |
| Custom Objects | Custom Objects1:1 | Mapping required | |
| Lists | Views (Saved Filters)lossy | Mapping required | |
| Notes | Comments / Activity entries1:1 | Fully supported | |
| Tasks | Tasks1:1 | Fully supported | |
| Activities (Emails, Meetings, Calls) | Activities1:1 | Fully supported | |
| Workflows | Workflows (documentation only)lossy | Mapping required | |
| Sequences | Sequences (documentation only)lossy | Mapping required | |
| Users | Users1:1 | Mapping required | |
| Relationship Attributes | Lookup fields / Relation fieldslossy | Mapping required |
Gotchas + challenges
Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.
Attio gotchas
CSV exports flatten relationship chains
Credit consumption burns budget faster than seat price suggests
Custom objects gated by plan tier during migration
Email sync only for People and Company records
Twenty CRM gotchas
Import order is enforced and critical
Export limited to 20,000 records and visible columns only
Soft-deleted records count toward uniqueness and trigger restores
API rate limits cap at 200 req/min on Organization tier
No native email sequences — follow-up cadences require external tools
Pair-specific challenges
Migration approach
Discovery and scoping
We audit the source Attio workspace across plan tier, object count, record volumes per object, Relationship Attribute definitions, active Workflows, active Sequences, List definitions, and credit consumption patterns. We pair this with a Twenty installation audit (self-hosted or SaaS, current schema, object count, and API access). The discovery output is a written migration scope that includes the full object inventory, the relationship chain map reconstructed via API, the List-to-View translation plan, and a credit consumption estimate for the migration planning period.
Relationship chain reconstruction and schema design
We query Attio's Relationship Attributes via the API to reconstruct the full relational graph before any CSV-based export is touched. We design the Twenty destination schema to accommodate all Attio objects and custom fields, configure pipeline stages and custom fields, and validate that the relationship structure (many-to-many Person-to-Company, Deal-to-multiple-People) can be represented in Twenty's field model. This step happens in parallel with the API-based relationship extraction and produces the data model that all subsequent imports reference.
Sandbox migration and reconciliation
We run a full dry-run migration into a Twenty test environment using production-like data volumes. The customer spot-checks 25-50 records against the Attio source for field accuracy, relationship correctness (Deals linked to their Companies, People linked to their primary Company), and List member counts. Any mapping corrections happen here before production migration begins. This step is mandatory when the source workspace has more than 5 custom objects or complex many-to-many relationships.
User provisioning and owner reconciliation
We extract every distinct Attio User referenced as an owner on People, Companies, Deals, Tasks, and Activities. We match by email against the Twenty User table. Any Attio User without a matching Twenty User goes to a reconciliation queue for the customer to provision before record import resumes. Owner resolution is a prerequisite for the Deals/Opportunities import phase because OwnerId is required on Opportunity records.
Production migration in dependency order
We run production migration in record-dependency order: Companies (no dependencies) → People (with CompanyId resolved from the relationship chain) → Custom Objects (if they have lookups to Companies or People, parent records are resolved first) → Opportunities (with CompanyId and primary contact resolved) → Tasks and Activities (with parent Person, Company, or Opportunity resolved) → Comments/Notes. Each phase emits a row-count reconciliation report before the next phase begins. Lists are documented during this phase and delivered as view-specification documents.
Cutover and Workflow handoff
We freeze writes to Attio during the cutover window, run a delta migration of any records modified during the migration window, then designate Twenty as the system of record. We deliver the Workflow and Sequence inventory document to the customer's admin team with step-by-step specifications for rebuilding in Twenty's workflow framework. We offer a one-week hypercare window to resolve any reconciliation issues. Workflow rebuild and post-migration admin training are outside standard scope and can be scoped as a separate engagement if needed.
Platform deep dives
Attio
Source
Strengths
Weaknesses
Twenty CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Attio and Twenty CRM.
Object compatibility
1 of 8 objects need a mapping; the rest are 1:1.
Field mapping clarity
Field mapping is derived from defaults — final spec confirmed during the sample migration.
Timeline complexity
8-object category — typical timelines run 2–7 days end-to-end.
API constraints
Attio: 100 requests/sec for reads, 25 requests/sec for writes; sliding window algorithm with 10-second window. 429 responses include a Retry-After header.
Data volume sensitivity
Attio exposes a bulk API — large-volume migrations stream efficiently.
Estimator
Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.
Step 1
Pick a category, then your source and destination platforms.
Category
FAQ
Answers to the questions buyers ask most during Attio to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your Attio to Twenty CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave Attio
Other ways to arrive at Twenty CRM
Ready when you are
Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.