CRM migration

Migrate from Concord CRM to Twenty CRM

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

Concord CRM logo

Concord CRM

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

60%

6 of 10

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

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Concord CRM to Twenty CRM is a migration between two self-hosted, open-source CRMs with different data models and API architectures. Concord CRM organizes around Contacts, Companies, Deals, Products, and Activities with a Laravel-based REST API and CSV export capability. Twenty CRM uses People instead of Contacts, Opportunities instead of Deals, and supports Custom Objects via a metadata API at /metadata with data queried through GraphQL at /graphql. We sequence the export starting with Companies (referenced by Contacts via company_id), map Concord pipeline stages to Twenty Opportunity stages, and reconstruct Activity associations using the linked resource type and ID. Concord workflows, Views, and permission sets do not migrate; we document every active workflow trigger and action for the customer to rebuild in Twenty's workflow engine. Attachment files stored in Concord's storage/app directory require manual file-system extraction and re-upload because Concord provides no attachment export feature.

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

Concord CRM logo

Concord CRM

What's pushing teams away

  • Support response times are slow — G2 reviewers report waiting over a week for assistance with no video tutorials available to compensate.
  • Self-hosted model requires ongoing server maintenance, security updates, and PHP/Laravel version management that many teams lack resources for.
  • No built-in migration tool or guided export — teams transferring to another CRM must manually sequence CSV exports and handle relationship mapping themselves.
  • Server scaling and performance optimization fall entirely on the customer, with no SLA guarantees or managed hosting options available.
  • Limited ecosystem compared to major SaaS CRMs — fewer integrations, no marketplace of pre-built add-ons, and community resources are sparse.

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

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

Concord CRM

Company

maps to

Twenty CRM

Company

1:1
Fully supported

Concord CRM Companies map directly to Twenty CRM Companies. We export Companies first in the migration sequence because Concord Contacts reference company_id as a foreign key. The Concord company name maps to Company.displayName, domain maps to Company.domainName, and address fields map to Company.address with street, city, state, country, and postalCode parsed from the exported address string. Custom fields on Company migrate to custom fields on Twenty's Company object.

Concord CRM

Contact

maps to

Twenty CRM

People

1:1
Fully supported

Concord CRM Contacts map to Twenty CRM People. The contact's email is the primary identifier used for deduplication during import. We resolve the company association by looking up the Concord company_id against the migrated Company records and populate CompanyMember on the Twenty People record. First name and last name split from the exported full name or name fields. Phone, email, job title, website, and all standard fields map to their Twenty equivalents.

Concord CRM

Deal

maps to

Twenty CRM

Opportunity

1:1
Fully supported

Concord CRM Deals map to Twenty CRM Opportunities. The Concord dealstage maps to the Twenty Opportunity stage field, but stage names must be reconciled because Concord stages are free-text values exported from the pipeline configuration, and Twenty Opportunity stages are configured in workspace settings before import. We require the customer to configure matching stage names in Twenty before migration begins so that stage assignment lands correctly.

Concord CRM

Deal Stage

maps to

Twenty CRM

Opportunity Stage

lossy
Fully supported

Concord CRM pipeline stages export as raw values (e.g., 'Qualified', 'Proposal Sent', 'Won', 'Lost'). Twenty CRM Opportunity stages must be pre-created in Settings with exact name matches. We generate a stage mapping table during scoping that the customer uses to create matching stages in Twenty. Probability percentages from Concord custom stage configuration map to stage probability fields in Twenty if available.

Concord CRM

Pipeline

maps to

Twenty CRM

Pipeline

lossy
Fully supported

Concord CRM supports multiple deal pipelines. Twenty CRM uses a single pipeline model with stage-based progression. If the customer uses multiple pipelines in Concord, we map each pipeline to a Twenty Opportunity stage group or document the mapping for manual segmentation after migration. Multi-pipeline reporting in Concord will require rebuilding views in Twenty.

Concord CRM

Product

maps to

Twenty CRM

Product

1:1
Fully supported

Concord CRM Products export with name, price, SKU, and description. These map directly to Twenty CRM Products with the SKU mapping to the product code field. Product records are independent of other objects in Concord and import straightforwardly. Price book and pricing information is a future-state consideration for Twenty's pricing model if the customer expands use.

Concord CRM

Activity

maps to

Twenty CRM

Task or Note

1:many
Fully supported

Concord CRM Activities (calls, meetings, tasks) are reconstructed in Twenty as Task records for calls and tasks, and as Note records for meeting notes and standalone notes. We use the Concord activity linkedResourceType and linkedResourceId to reconstruct the association to the correct People or Company record in Twenty. The original activity date and notes body transfer to the Twenty record. Meeting invitations and attendee lists do not have a direct Twenty equivalent and are stored as Note body text.

Concord CRM

Custom Field

maps to

Twenty CRM

Custom Field

lossy
Fully supported

Concord CRM custom fields use UUID as the API key and support boolean, date, select, text, and number types. Twenty CRM custom fields are created via the /metadata API. We create matching custom fields on the target object (People, Company, Opportunity, Product) before importing records, mapping the Concord field UUID and type to the Twenty field API name and data type. Select fields require value mapping if Concord uses picklist-style values.

Concord CRM

User

maps to

Twenty CRM

WorkspaceMember

1:1
Fully supported

Concord CRM Users and roles are not available via the standard export feature. We retrieve user data via the Concord API (email, name, role) for mapping purposes. Twenty CRM WorkspaceMembers are provisioned by email during workspace setup. We match Concord owners on email and flag any Concord owner without a matching Twenty WorkspaceMember for manual provisioning before record import.

Concord CRM

Workflow

maps to

Twenty CRM

Workflow (manual rebuild)

1:1
Fully supported

Concord CRM workflows (trigger: Company/Contact/Deal created, Deal stage changed; actions: Create Activity, Send Email, Trigger Webhook) do not execute during data import and cannot be migrated as automation code. We audit every active Concord workflow during scoping and deliver a written inventory documenting the trigger, conditions, actions, and recommended Twenty workflow equivalent. The customer's admin rebuilds workflows in Twenty after migration. This applies to both Concord's native workflow engine and any webhook-based integrations.

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.

Concord CRM logo

Concord CRM gotchas

High

Workflows do not fire during data import

Medium

Self-hosted data export requires role permission

Medium

API pagination cap at 100 records per page

Low

Domain transfer requires full server migration

Low

CSRF headers cause API auth failures

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

  • Concord workflows do not fire during data import

    Concord CRM explicitly states that workflow actions do not execute during data import. Any automation triggers configured in Concord — such as Create Activity or Send Email on Contact creation — will not run when we import your records. We flag all active workflow configurations during scoping and provide a documented list with trigger, conditions, and action details for your admin to rebuild in Twenty's workflow engine after migration. Skipping this step means you lose the automation logic without realizing it.

  • Twenty requires Docker for self-hosted deployment

    Concord CRM runs on a traditional PHP/Laravel stack on any web server that supports PHP. Twenty CRM requires Docker for self-hosted deployment, which introduces a different hosting requirement. Teams migrating from Concord must ensure their infrastructure can run Docker containers (or use a Docker-first host like PikaPods, Railway, or a VPS with Docker installed). If your team lacks Docker experience, expect an additional setup learning curve outside the data migration scope.

  • Concord API requires CSRF header stripping

    Concord CRM uses Laravel Sanctum for API authentication, which rejects requests that include referer or origin headers — common in third-party HTTP clients. We configure our integration client to strip these headers before sending requests, preventing the CSRF token mismatch error documented in Concord's API reference. This is a technical configuration step that must be handled during extraction; failing to do so results in silent 401 failures on every API call.

  • Twenty has no native CSV export, only CSV import

    Concord CRM provides CSV and XLSX export for all standard objects, which is the primary extraction mechanism for this migration. Twenty CRM supports CSV import but has no built-in CSV export feature. This means the migration is a one-way data push into Twenty using our API-based integration, not a file-based import that the customer prepares in a UI. The customer uploads a CSV template into Twenty, which is a different workflow than exporting from Concord.

  • Activity association requires manual reconstruction

    Concord CRM Activities export with a linkedResourceType (Contact, Company, Deal) and linkedResourceId. Twenty CRM does not have a single Activities object; calls and tasks become Task records, and notes become Note records linked via different relationship mechanisms. We reconstruct the activity-to-record association by resolving the Concord linkedResourceId against the migrated People and Company records, but any Concord activity that references a Deal must be linked to the matching Opportunity, which requires mapping the deal ID to the Opportunity identifier.

Migration approach

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

  1. Discovery and Concord audit

    We audit the Concord CRM installation across object types (Contacts, Companies, Deals, Products, Activities), custom field definitions, pipeline and stage configurations, and active workflows. We verify API access by confirming the Bearer token permissions, the export permission assigned to the API user (role-based access control restricts export to admin or permitted users), and the server's ability to accept our integration client's requests without CSRF header rejection. We also assess the Activity volume because large activity histories require chunked processing through the Concord API pagination (100 records per page cap with header-based rate limit monitoring). The discovery output is a written migration scope with object counts, field inventory, and a workflow audit summary.

  2. Twenty workspace preparation

    Before any data import, we set up the Twenty CRM workspace. This includes configuring Opportunity stage names to match the Concord deal stages (required because Twenty stages must exist before Opportunity records can be assigned), creating Custom Objects and Custom Fields via the /metadata API to mirror Concord's custom field schema, and provisioning WorkspaceMembers for every Concord owner so that OwnerId references resolve during import. We recommend a clean Twenty workspace rather than pre-populated demo data to avoid record count confusion during reconciliation.

  3. Export sequencing and company-first migration

    We export Concord data in strict dependency order: Companies first, then Products (independent), then Contacts (with company_id resolved to the migrated Company), then Deals (with company_id and contact_id resolved), then Activities last. Companies must migrate first because Contacts reference company_id as a foreign key. We handle Concord's API pagination by iterating pages sequentially with rate limit header monitoring (X-RateLimit-Limit and X-RateLimit-Remaining) and exponential backoff on 429 responses. CSRF header stripping is applied to every API request to prevent authentication failures.

  4. Activity reconstruction and custom field mapping

    We reconstruct Concord Activities by parsing the linkedResourceType and linkedResourceId from the export, mapping each to the corresponding Twenty People or Company record using the migrated record identifiers. Calls and tasks become Task records with TaskSubtype=Call for call engagements; meeting notes and standalone notes become Note records. We map Concord custom field values to the Twenty custom field equivalents created in step two, handling type differences (Concord select fields become Twenty select fields, boolean fields become boolean fields). Concord select field values must be whitelisted in Twenty's field configuration before import.

  5. Delta validation and sample reconciliation

    We run a sample migration of the first 50-100 records of each object type and validate the following: record counts match between Concord export and Twenty import, People records are correctly associated to Companies via the company link, Opportunity records show the correct stage assignment, and Activity records appear on the correct People or Company timeline. The customer reviews the sample and confirms mapping accuracy before we proceed to full production migration. This step catches stage name mismatches, custom field type errors, and association resolution failures before they affect the full dataset.

  6. Production migration and cutover

    We run production migration in dependency order: Companies, Products, People (with CompanyMember resolved), Opportunities (with companyId and peopleId resolved), and Activities. Each phase emits a row-count reconciliation report. We freeze Concord writes during the cutover window, extract a final delta of any records modified during migration, load the delta into Twenty, and confirm the final record counts match the Concord source. We deliver the workflow inventory document to the customer's admin team for post-migration rebuild. Attachments stored in Concord's storage/app directory are outside our extraction scope and must be manually transferred via file-system access.

Platform deep dives

Context on both ends of the pair

Concord CRM logo

Concord CRM

Source

Strengths

  • One-time $64–$390 license with lifetime access and no per-user or per-contact recurring fees.
  • Full source code access enables deep customization, white-labeling (Extended License), and full data portability.
  • Unlimited users and unlimited data records as long as the server infrastructure supports it.
  • Native CSV/XLS/XLSX export for Contacts, Companies, Deals, Products, and Activities without requiring API access.
  • REST API with Bearer token auth supports custom integrations, automations, and programmatic data access.

Weaknesses

  • Self-hosted only — requires PHP/Laravel server setup, maintenance, and ongoing security management by the customer.
  • No built-in migration or import tool; workflow automations do not execute during data import.
  • Support limited to ticket system with documented delays of over a week for some requests.
  • Single installation per license with no SaaS-ready code out of the box.
  • Limited ecosystem, integrations, and community resources compared to major SaaS CRM platforms.
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. 2 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 Concord CRM and Twenty CRM.

  • Object compatibility

    B

    2 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

    Concord CRM: Per-minute limits documented in X-RateLimit-Limit and X-RateLimit-Remaining response headers; exact values vary and are not publicly specified.

  • Data volume sensitivity

    B

    Concord CRM doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

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

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

Can't find your answer?

Walk through your Concord CRM to Twenty CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most Concord CRM to Twenty CRM migrations complete in three to five weeks for accounts under 10,000 Contacts, 2,000 Deals, and no active custom object schemas. Migrations with large Activity histories (over 100,000 records), multiple Concord pipeline configurations, active workflows to audit, or custom field schemas that require per-field type mapping extend to six to ten weeks. The Concord-to-Twenty migration benefits from simpler API authentication (Bearer token) and smaller ecosystem complexity compared to major SaaS CRMs, which keeps timelines shorter.

Adjacent paths

Related migrations to explore

Ready when you are

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