CRM migration

Migrate from Attio to Twenty CRM

Field-level mapping, validation, and rollback between Attio and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.

Attio logo

Attio

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

67%

8 of 12

objects map 1:1 between Attio and Twenty CRM.

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

Attio logo

Attio

What's pushing teams away

  • The data model flexibility requires significant upfront configuration time, and sales teams without technical resources struggle to build a useful workspace from scratch.
  • Reporting features lack depth—users cite weak pipeline analytics, missing date-based segmentation, and limited data visualization as ongoing frustrations.
  • Native integrations are limited; syncing with tools like Aircall and HubSpot requires workarounds or third-party sync platforms, breaking GTM stack cohesion.
  • The workspace credit model creates unpredictable monthly costs—AI enrichment and automation steps consume credits faster than teams anticipate on Plus plans.
  • Teams cite a steep learning curve where the flexibility that attracts technical founders becomes a burden for adoption across sales, marketing, and CS teams.

Choosing

Twenty CRM logo

Twenty CRM

What's pulling them in

  • Top open-source CRM on GitHub with 40.6K stars, giving teams full source code access and infrastructure ownership without per-feature licensing surprises.
  • Free self-hosting under AGPL-3.0 means unlimited users and custom objects for the cost of cloud infrastructure alone, typically $20–100/month.
  • Pricing page explicitly mocks competitors for charging add-on fees for API access, webhooks, and workflows — transparency that resonates with RevOps teams burned by Salesforce.
  • Unlimited custom objects and fields with no price impact, letting teams shape the data model to their business rather than forcing business into rigid schemas.
  • Modern TypeScript/React/PostgreSQL stack means developer-led teams can extend, self-host, or integrate without fighting legacy architecture.

Object mapping

How Attio objects map to Twenty CRM

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

maps to

Twenty CRM

Person

1:1
Fully supported

Attio 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

maps to

Twenty CRM

Company

1:1
Fully supported

Attio 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

maps to

Twenty CRM

Opportunities

1:1
Fully supported

Attio 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

maps to

Twenty CRM

Custom Objects

1:1
Mapping required

Attio 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

maps to

Twenty CRM

Views (Saved Filters)

lossy
Mapping required

Attio 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

maps to

Twenty CRM

Comments / Activity entries

1:1
Fully supported

Attio 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

maps to

Twenty CRM

Tasks

1:1
Fully supported

Attio 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)

maps to

Twenty CRM

Activities

1:1
Fully supported

Attio'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

maps to

Twenty CRM

Workflows (documentation only)

lossy
Mapping required

Attio 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

maps to

Twenty CRM

Sequences (documentation only)

lossy
Mapping required

Attio 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

maps to

Twenty CRM

Users

1:1
Mapping required

Attio 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

maps to

Twenty CRM

Lookup fields / Relation fields

lossy
Mapping required

Attio 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.

Gotchas + challenges

What specifically takes care here

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 logo

Attio gotchas

High

CSV exports flatten relationship chains

Medium

Credit consumption burns budget faster than seat price suggests

Medium

Custom objects gated by plan tier during migration

Low

Email sync only for People and Company records

Twenty CRM logo

Twenty CRM gotchas

High

Import order is enforced and critical

High

Export limited to 20,000 records and visible columns only

Medium

Soft-deleted records count toward uniqueness and trigger restores

Medium

API rate limits cap at 200 req/min on Organization tier

Low

No native email sequences — follow-up cadences require external tools

Pair-specific challenges

  • CSV exports flatten relationship chains without join keys

    Attio's workspace export produces flat CSV files per object. The Relationship Attributes that define which Company a Deal belongs to, which People are linked to a Deal, and the direction of those links do not export as join keys in the CSV. We handle this by querying Relationship Attributes via the Attio API before any export, reconstructing the full parent-child chain as a staging table, and resolving foreign-key IDs at insert time into Twenty. Without this step, Deals arrive orphaned from their Companies, and multi-contact Deal assignments are lost. This is the single most common cause of incomplete Attio migrations and we treat it as a mandatory pre-flight step.

  • Attio plan tier object limits may exceed simple Twenty configurations

    Attio Free allows 3 objects, Plus allows 5, Pro allows 12. A customer on Attio Pro using 10 custom objects plus People, Companies, and Deals may have 13 total objects. Twenty's open object schema does not impose a hard limit, but a straightforward self-hosted Twenty installation may assume a lighter schema than what an Attio Pro workspace contains. We audit the source object count during scoping and either validate that the Twenty installation can accommodate the full schema or recommend a pre-migration consolidation of redundant Attio custom objects into multi-purpose fields.

  • Attio's last_interaction attribute only updates via email sync

    Attio's last_interaction field on Person records only updates through the Gmail/Outlook email sync integration—it cannot be manually set or updated via API. This means interaction data from calls, meetings, LinkedIn outreach, or any channel other than email does not update the last_interaction field. Teams using last_interaction as a sorting or filtering signal for outreach prioritization should not expect this value to reflect their full GTM activity history after migration. We flag this limitation during scoping and recommend that teams use a custom last_activity_date field that they update manually or via integration instead.

  • Attio Lists require criteria reconstruction as Twenty Views

    Attio Lists support dynamic membership (criteria-based) and static membership (manually curated). Twenty's saved Views provide criteria-based filtering that approximates dynamic Lists, but static List membership has no direct equivalent. We extract every List definition including its filter criteria and static member set, and document it as a written view configuration. The customer rebuilds these as Twenty Views. List membership statistics (how many records are in each List) migrate as reference data so that the admin can validate their rebuilt views against the original counts.

  • Workspace credit consumption creates migration cost surprises

    Attio Plus includes 1,500 workspace credits per month, but migration planning and dry-run phases consume credits as API queries and enrichment calls are made. Teams running migration planning during a month when workflows are also active can hit the credit limit before migration begins. We scope expected credit consumption during discovery and recommend that customers purchase a credit pack ($70/month for 5,000 additional credits) before migration planning starts if their Plus plan is already workflow-heavy.

Migration approach

Six steps for a successful Attio to Twenty CRM data migration

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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

Context on both ends of the pair

Attio logo

Attio

Source

Strengths

  • Flexible object schema allows modeling any business entity, not just contacts and deals.
  • Permanent free tier with 50k records and 3 users for evaluation without a countdown timer.
  • Automatic email and calendar sync builds interaction history without manual data entry.
  • Workspace export to CSV covers all objects for backup and migration scoping.
  • Clean API-first architecture with webhooks and OAuth 2.0 for developer integrations.

Weaknesses

  • Reporting and analytics lack depth compared to established CRM platforms.
  • Integration library is thin—native connections to common GTM tools are limited or missing.
  • Credit consumption model makes monthly costs unpredictable for automation-heavy teams.
  • Learning curve is steep for non-technical users who expect a pre-built CRM experience.
  • Feature gates push growing teams to Pro ($69/user/mo) sooner than expected.
Twenty CRM logo

Twenty CRM

Destination

Strengths

  • AGPL-3.0 open-source license with full source code on GitHub — no vendor lock-in, no sunset risk.
  • Unlimited users and unlimited custom objects on self-hosted, with no feature gating based on headcount.
  • REST and GraphQL APIs available on all paid tiers, not locked behind an enterprise add-on fee.
  • MCP server and webhooks shipped as standard features, not premium upgrades.
  • Modern PostgreSQL-backed data model that developer teams can query, extend, and self-host.

Weaknesses

  • Recent v1.0 release means limited production hardening compared to CRMs with multi-year operational track records.
  • No native email sequencing or sales engagement tools — follow-up cadences require a separate platform.
  • No native two-way email sync or inbox integration, requiring third-party connectors for full activity logging.
  • Self-hosting 'free' pricing hides real infrastructure and DevOps costs that stack up over time.
  • Workflow automation is functional but lacks the complexity needed for sophisticated multi-step sales motions.

Complexity grading

How hard is this migration?

Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Attio and Twenty CRM.

  • Object compatibility

    B

    1 of 8 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    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

    A

    Attio exposes a bulk API — large-volume migrations stream efficiently.

Estimator

Estimate your Attio to Twenty CRM migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about Attio to Twenty CRM data migrations

Answers to the questions buyers ask most during Attio to Twenty CRM migration scoping. Not seeing yours? Book a call.

Can't find your answer?

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 consultation

Most migrations land between three and five weeks for workspaces under 15,000 People, 5,000 Companies, and 3,000 Deals with no custom objects and clean single-hop relationship chains. Migrations with custom objects, complex many-to-many relationships (Deal-to-multiple-People), large activity histories, or more than 10 Lists requiring view-criteria reconstruction move to eight to twelve weeks because of the API-based relationship chain extraction, schema validation, and reconciliation phases.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Attio.
Land in Twenty CRM, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day