CRM migration

Migrate from CRM Service to Twenty CRM

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

CRM Service logo

CRM Service

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

58%

7 of 12

objects map 1:1 between CRM Service and Twenty CRM.

Complexity

BStandard

Timeline

4-6 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from CRM Service to Twenty CRM is a migration from a licensed enterprise platform to a self-hosted open-source CRM. CRM Service uses Salesforce's Account-Contact-Opportunity model with custom __c fields, whereas Twenty CRM uses a Company-People-Opportunity model with a cleaner, modern interface built on React and PostgreSQL. We resolve the Account-to-Company and Contact-to-People mapping, preserve the original Salesforce field labels in Twenty's custom field descriptions for auditability, and handle activity history as Task or Note records in Twenty. Twenty's GraphQL API gives us flexible querying during migration scoping. We do not migrate Salesforce Flows, Approval Processes, or Workflow Rules; we deliver a written inventory of every automation requiring manual rebuild in Twenty's permission and view configuration system. The self-hosted nature of Twenty means the customer's team handles infrastructure provisioning (Docker, PostgreSQL, hosting on PikaPods or similar) before data migration begins.

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

CRM Service logo

CRM Service

What's pushing teams away

  • Requires dedicated Salesforce administrator or ongoing consultant engagement for configuration changes that other CRMs handle through self-service
  • Per-user pricing compounds significantly as teams grow, with essential features like workflow automation and advanced reporting gated behind Enterprise and above
  • Complex data model with multiple object types and custom fields creates migration complexity and data cleaning requirements before switching platforms
  • Implementation costs add approximately 35% to base subscription price when accounting for professional services, training, and change management
  • Limited features in lower tiers force organizations into expensive upgrades when growth requires capabilities like advanced pipeline management or AI-powered insights

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 CRM Service objects map to Twenty CRM

Each row shows how a CRM Service 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.

CRM Service

Account

maps to

Twenty CRM

Company

1:1
Fully supported

CRM Service Accounts map directly to Twenty CRM Company records. The Account Name field becomes Company Name, Industry maps to Twenty's industry select, Annual Revenue maps to the revenue fields, and billing/shipping addresses map to the address fields. We use Account Name as the dedupe key during import. Company is created before any People import so that the relationship is satisfied at the moment of Contact insert.

CRM Service

Contact

maps to

Twenty CRM

People

1:1
Fully supported

CRM Service Contacts map to Twenty CRM People records. The Contact's AccountId lookup resolves to the Twenty Company record already imported. Email, phone, title, and department fields map directly. We preserve the original Salesforce Contact ID in a custom field as a reference back to the source system for audit and reconciliation.

CRM Service

Opportunity

maps to

Twenty CRM

Opportunity

1:1
Fully supported

CRM Service Opportunities map to Twenty CRM Opportunities. StageName maps to Twenty's stage property, Amount maps to the amount field, CloseDate maps to the close date, and Probability migrates as a percentage field. Note that Reddit users have flagged that Twenty v2.0 lacks an automated incremental numbering system for Opportunity or project IDs; we flag this during scoping and the customer's admin sets up a manual naming convention or external ID system before go-live.

CRM Service

Lead

maps to

Twenty CRM

People (new record type)

1:many
Fully supported

CRM Service Leads do not have a direct Twenty equivalent because Twenty CRM does not ship a separate Lead object. We handle this in two ways based on customer preference: either convert all Leads to Twenty People records with a custom type field set to Lead, or create a separate custom object in Twenty called Lead to mirror the source. We preserve the Lead Status and any lead scoring values in custom fields on the destination record.

CRM Service

Custom Object (__c)

maps to

Twenty CRM

Custom Object

1:1
Fully supported

CRM Service custom objects with the __c suffix migrate to Twenty CRM Custom Objects. Twenty requires all custom fields to be created in Settings → Data Model before CSV import begins. We pre-create the destination schema including all custom fields, their types, and any lookup relationships during the schema design phase. Custom object naming conventions differ: Salesforce uses __c suffix; Twenty uses clean API names that we define during mapping.

CRM Service

Task

maps to

Twenty CRM

Task

1:1
Fully supported

CRM Service Tasks migrate to Twenty CRM Tasks. Subject, Status, Priority, ActivityDate, and Description fields map directly. Owner assignments resolve via email matching against the Twenty Members list, which must be provisioned before Task import (Twenty documentation explicitly requires inviting team members before importing data with owner references).

CRM Service

Event

maps to

Twenty CRM

Note

lossy
Fully supported

CRM Service Events (meetings, calendar entries) map to Twenty CRM Notes because Twenty does not have a native Event object equivalent. We preserve the event Subject as the Note title, the StartDateTime and EndDateTime as text in the Note body, and Location as a separate line. The Note is linked to the related Company or People record via Twenty's relationship system.

CRM Service

Attachment

maps to

Twenty CRM

Attachment

1:1
Fully supported

CRM Service Attachments and Files (ContentDocument/ContentVersion) require separate export via Salesforce ContentDocument or Attachment objects. File sizes and storage limits in Twenty depend on the customer's self-hosted PostgreSQL storage allocation. We export files to a staging location, then upload to Twenty's attachment system linked to the parent record. Very large files may require the customer to provision additional storage.

CRM Service

Campaign

maps to

Twenty CRM

Company tag or custom object

lossy
Fully supported

CRM Service Campaigns track marketing initiatives with member status and response data. Twenty CRM does not have a native Campaign object. We map Campaigns to Twenty Companies with a tag applied for segmentation, or we create a custom Campaign object during schema setup. Campaign-to-Contact associations migrate as custom relationship records.

CRM Service

Case

maps to

Twenty CRM

Custom object or Note

lossy
Fully supported

CRM Service Cases from Service Cloud do not have a direct Twenty CRM equivalent. For teams migrating both sales and service data, we create a custom Case object in Twenty during schema setup, mapping Status, Priority, Origin, and the Contact association. For teams only migrating sales data, Cases map to Notes on the related Company or People record.

CRM Service

User

maps to

Twenty CRM

Member

1:1
Fully supported

CRM Service Users map to Twenty CRM Members. We match by email address. Twenty's documentation explicitly requires inviting all Members and waiting for acceptance before importing data that references owners or assignees. We extract every distinct Owner referenced on Contacts, Accounts, Opportunities, and Tasks and match against the provisioned Twenty Members list. Any Owner without a matching Member goes to a reconciliation queue for the customer's admin to provision.

CRM Service

Product2

maps to

Twenty CRM

Custom field or custom object

lossy
Fully supported

CRM Service Products (Product2 records) do not have a native Twenty CRM equivalent. We map Products to a custom Product object in Twenty, creating the schema during setup and importing Product Name, Product Code, and Description fields. Price book entries require a custom pricing configuration in Twenty.

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.

CRM Service logo

CRM Service gotchas

High

API rate limits vary by edition without public documentation

Medium

Data Export frequency limited by edition tier

Medium

Custom object __c suffix causes field name mismatches in exports

High

Automations and flows do not migrate between platforms

Low

Multi-select picklist values may exceed destination field limits

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

  • Twenty requires fields to exist before CSV import begins

    Twenty's CSV import creates records, not fields. This is a fundamental difference from Salesforce's Data Loader which can create fields on the fly. We create all custom fields in Settings → Data Model before any data import begins, including custom field types (text, number, date, select), required flags, and unique constraints. If a field is missing, the import fails for any row containing that field. This requires us to fully inventory the Salesforce schema including every custom field API name (__c suffix) before migration begins.

  • Twenty lacks native workflow automation and Flows

    CRM Service Flows, Process Builder flows, Workflow Rules, and Approval Processes are configuration artifacts that do not transfer between CRM platforms. Twenty CRM does not have a native workflow automation engine; it uses Views and permissions configuration for routing and access control. We document every active Salesforce automation during discovery but do not migrate them. The customer's admin must rebuild automation logic manually in Twenty's configuration system, or accept that manual routing replaces automated processes.

  • Twenty has no automated Opportunity or project ID numbering

    Reddit users on r/selfhosted flagged in April 2026 that Twenty v2.0 lacks an automated incremental numbering system for Opportunities or project IDs. CRM Service Opportunities have auto-generated 18-character IDs. When migrating to Twenty, the customer's admin must decide on a naming convention for Opportunities (manual entry, external numbering system, or accepting Twenty's blank ID). We flag this during scoping so it does not block the migration, but it requires a decision before go-live.

  • Invite Members before importing any owner-referenced data

    Twenty's migration documentation explicitly states that users must exist in the Members list before importing data with owner or assignee references. CRM Service has many owner assignments across Contacts, Accounts, Opportunities, and Tasks. We extract all distinct owner emails, reconcile against a provisioned Twenty Members list, and hold any unmatched owners in a queue. Migration cannot complete past this step because OwnerId references must be satisfied at insert time.

  • Multi-select picklist values may require consolidation

    CRM Service allows unlimited values in multi-select picklists. Twenty CRM uses standard select fields with a defined value list. If the source CRM has multi-select picklists with more than 50 distinct values, we flag these during scoping, prioritize active values, and document any that will be excluded. The customer's admin recreates the full value list in Twenty's field settings before migration or accepts a reduced value set.

Migration approach

Six steps for a successful CRM Service to Twenty CRM data migration

  1. Discovery and schema inventory

    We audit the source CRM Service org across all objects including standard objects (Account, Contact, Opportunity, Lead, Task, Event, Campaign, Case), custom objects with __c suffix, custom fields with their API names and types, active workflows and flows, and engagement volume per object. We also inventory the self-hosted Twenty CRM instance: PostgreSQL version, Docker configuration, hosting environment, and any existing data. The discovery output is a written migration scope document with record counts, object list, and custom field inventory.

  2. Schema design and field pre-creation

    We design the destination Twenty CRM schema based on the source inventory. This includes creating all custom fields in Settings → Data Model (text, number, date, select fields), creating custom objects where needed, and configuring field settings (required, unique, select options). We also map the Salesforce Account-Contact-Opportunity model to Twenty's Company-People-Opportunity model. All fields must be created in Twenty before any CSV import runs.

  3. Member provisioning and owner reconciliation

    We extract every distinct CRM Service User referenced on Contacts, Accounts, Opportunities, Tasks, and any custom object. We match these by email against a provisioned Twenty Members list. Any User without a matching Member goes to a reconciliation queue. The customer's admin provisions missing Members in Twenty, and we verify all users appear in the Members list before proceeding. This step is blocking for all subsequent object imports.

  4. Sandbox migration and data cleansing

    We run a full migration into a staging environment using representative data volume. Twenty's self-hosted model means we can provision a staging instance alongside production. The customer's team reconciles record counts, spot-checks 25-50 random records against the CRM Service source, and validates that Company-People-Opportunity relationships are intact. Data cleansing decisions (removing duplicates, archiving stale records, resolving null required fields) happen here, not in production.

  5. Production migration in dependency order

    We run production migration in record-dependency order: Members (verified), Companies (from Accounts), People (with CompanyId resolved), Opportunities (with CompanyId, OwnerId, and stage resolved), Tasks (with OwnerId resolved), custom objects (last, because they often have lookups to standard objects), and attachments (with parent record reference resolved). Each phase emits a row-count reconciliation report. We use Twenty's CSV import with chunking and email-based owner resolution for standard records.

  6. Cutover, validation, and automation handoff

    We freeze CRM Service writes during cutover, run a final delta migration of records modified during the window, then enable Twenty CRM as the system of record. We deliver the Workflow and Flow inventory document to the customer's admin team for manual rebuild in Twenty's Views and permissions system. We support a one-week hypercare window where we resolve any reconciliation issues. We do not rebuild CRM Service automations as Twenty configurations inside the migration scope; that is manual configuration work handled by the customer's admin.

Platform deep dives

Context on both ends of the pair

CRM Service logo

CRM Service

Source

Strengths

  • Comprehensive standard object coverage including Accounts, Contacts, Opportunities, Leads, Campaigns, and Cases
  • Enterprise-grade API with bulk operations, webhooks, and OAuth 2.0 authentication across all editions
  • Highly customizable data model allowing unlimited custom objects with independent schemas and relationships
  • Large ecosystem of certified administrators, consultants, and implementation partners available for complex deployments
  • Advanced reporting and forecasting capabilities available at Enterprise and above tiers including Einstein AI

Weaknesses

  • Per-user pricing model scales linearly, making large teams expensive relative to flat-rate alternatives
  • Essential features gated behind higher tiers: workflow automation, approval processes, and advanced analytics require Enterprise minimum
  • Implementation costs add significant overhead: approximately 35% above subscription for professional services and training
  • Requires dedicated admin or consultant for configuration changes; self-service customization has practical limits without expertise
  • Custom objects and fields create migration complexity when switching platforms, often requiring field-by-field mapping
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. 3 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 CRM Service and Twenty CRM.

  • Object compatibility

    B

    3 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

    CRM Service: Varies by edition and license type; not publicly documented with specific numbers.

  • Data volume sensitivity

    A

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

Estimator

Estimate your CRM Service 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 CRM Service to Twenty CRM data migrations

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

Can't find your answer?

Walk through your CRM Service 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 four and six weeks for accounts under 25,000 Contacts and 5,000 Opportunities with no custom objects. Migrations with multiple custom objects, large activity histories (over 200,000 task and event records), or complex lookup chains move to eight to sixteen weeks because of data cleansing, schema pre-creation, and the manual Member provisioning step. Twenty CRM's self-hosted model means staging environment setup is included in the timeline.

Adjacent paths

Related migrations to explore

Ready when you are

Move from CRM Service.
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