CRM migration

Migrate from Cordis CRM to Twenty CRM

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

Cordis CRM logo

Cordis CRM

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

60%

6 of 10

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

Complexity

CModerate

Timeline

4-8 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Cordis CRM to Twenty CRM is a migration from a closed, vendor-assisted export model to an open, self-hosted platform with a documented REST API. Cordis CRM does not appear to publish bulk export endpoints, which means the first phase of every migration is a manual data extraction step coordinated directly with the customer, followed by format normalization, deduplication, and staged import into Twenty. We preserve contact-company relationship graphs using company-name matching or external IDs, map Cordis pipeline stages to Twenty opportunity stages, and carry forward task status and due dates. Document attachments migrate as file imports with the latest version noted and version lineage flagged for manual post-migration restoration. We do not migrate Cordis automations, campaign engagement sequences, or Google Workspace email threads as code; we deliver a written inventory of these for the customer's admin to rebuild in Twenty's workflow builder.

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

Cordis CRM logo

Cordis CRM

What's pushing teams away

  • Vendor explicitly states 'VCA software does not provide an API' (per SoftwareSuggest listing) — closing off programmatic integration and self-serve data extraction.
  • Pricing is fully sales-led with no public tier breakdown, making procurement and budgeting unpredictable.
  • Limited public review footprint — SourceForge shows zero user reviews, leaving teams without independent third-party validation.
  • Documentation footprint is thin compared to mainstream CRMs, slowing onboarding and reducing peer-driven knowledge resources.
  • Bundled with broader VCA suite — teams wanting only CRM may find the broader BPM/ERP framing heavier than needed.

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

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

Cordis CRM

Contact / Profile

maps to

Twenty CRM

Person

1:1
Fully supported

Cordis CRM contact profiles map to Twenty Person records. The first name, last name, email address, phone number, and job title migrate directly. We identify all active custom contact properties during the scoping survey before migration and map them to Twenty custom fields with equivalent data types. The Cordis interaction history timeline (tasks, notes, call records) migrates as Twenty Activity records linked to the Person.

Cordis CRM

Company

maps to

Twenty CRM

Company

1:1
Fully supported

Cordis CRM company records map directly to Twenty Company. Company name becomes the name field, domain maps to the website field, and any industry, employee count, or address properties map to corresponding Twenty Company fields. We preserve the relationship graph linking contacts to companies so that after migration, each Person record shows its linked Company on the Twenty timeline. Deduplication uses company name as the match key with external ID preservation for reconciliation.

Cordis CRM

Pipeline

maps to

Twenty CRM

Opportunity (pipeline-scoped)

lossy
Fully supported

Cordis CRM pipelines and their stage configurations map to Twenty Opportunity records scoped by a Pipeline field. We extract the stage names and order from the customer's Cordis instance during scoping and create matching Pipeline records in Twenty before importing any Opportunities. Stage probability percentages transfer where available; otherwise we use sensible defaults that the customer adjusts in Twenty's pipeline settings post-migration.

Cordis CRM

Deal

maps to

Twenty CRM

Opportunity

1:1
Fully supported

Cordis CRM Deals map to Twenty Opportunity. The deal amount, close date, stage assignment, and linked company all transfer to the corresponding Twenty Opportunity fields. We resolve the Opportunity's Pipeline reference and the Company lookup at import time. Note that Twenty (as of v2.0) does not have an automated incremental numbering system for Opportunity IDs, so we preserve the original Cordis deal ID as a custom field for audit trails and cross-reference during reconciliation.

Cordis CRM

Task (automated and manual)

maps to

Twenty CRM

Task (Activity)

1:1
Fully supported

Cordis CRM task records map to Twenty Task activities. Task title, description, due date, status (open, completed), and assignee migrate directly. Recurrence rules from Cordis are flagged as requiring manual reconfiguration in Twenty because recurrence behavior may differ between platforms. Task assignment migrates by resolving the Cordis owner email against the Twenty user email in the destination workspace.

Cordis CRM

Campaign

maps to

Twenty CRM

Workspace List / Segment

lossy
Fully supported

Cordis CRM campaign membership and engagement data map to Twenty List records or segment structures depending on the customer's intended use. Campaign name becomes the list name; campaign members become list members linked to the corresponding Person records. We deliver a campaign inventory document listing every active Cordis campaign, its member count, and the recommended Twenty list structure for the customer to finalize before import.

Cordis CRM

Document

maps to

Twenty CRM

Attachment / File

1:1
Fully supported

Cordis CRM documents linked to contact or company records migrate as Twenty file attachments. We export the latest version of each document, preserve the original filename and file type, and re-associate each attachment to the migrated Person or Company record using the ID mapping table built during the import phase. Version lineage is flagged in the migration report; customers who need historical versions restore them manually from their Cordis export.

Cordis CRM

Attachment (file)

maps to

Twenty CRM

File

1:1
Fully supported

File attachments linked to individual records in Cordis migrate as Twenty Files attached via the ActivityTarget relationship. We preserve the original upload date, filename, and file type. Attachments are imported in a separate phase after all Person, Company, and Opportunity records are committed to Twenty to satisfy the parent-record lookup dependency.

Cordis CRM

Custom Field

maps to

Twenty CRM

Custom Field

lossy
Fully supported

Cordis CRM custom fields are identified during the pre-migration scoping survey. We map each custom field to a Twenty custom field of the closest matching data type (text, number, date, picklist, checkbox, relation). Because Cordis does not publicly document its custom field schema, this mapping is customer-specific and validated during the scoping call before the migration contract is finalized. We do not assume field names or types from generic CRM patterns.

Cordis CRM

Google Workspace Email History

maps to

Twenty CRM

Activity (Email)

lossy
Fully supported

Cordis CRM's Google Workspace integration does not auto-export email history. We extract email threads directly from Gmail where the customer authorizes access, then import them as Twenty Activity records of type email linked to the corresponding Person records. This step is optional and scoped separately; it requires explicit customer authorization and adds time to the migration timeline depending on email volume.

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.

Cordis CRM logo

Cordis CRM gotchas

High

No documented public API for self-service bulk export

Medium

Google Workspace integration does not auto-export email history

Medium

Document version history may not export cleanly

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

  • Cordis CRM has no documented bulk export API

    Cordis CRM does not appear to publish a public REST API with bulk export endpoints based on sources reviewed. Self-service migration is therefore limited to manual CSV exports from the Cordis interface or a vendor-assisted export request. We coordinate with the customer to obtain a scoped data export file, normalize the CSV format, and load it into our migration pipeline. If the export is unavailable at scoping, we escalate to a vendor-assisted export request before beginning any migration work. This adds one to two weeks to the project timeline compared to migrations from platforms with documented APIs.

  • Twenty lacks automated incremental Opportunity numbering

    As reported in r/selfhosted discussions of Twenty v2.0, the platform does not currently generate automated sequential IDs for Opportunities or project records. We preserve the original Cordis deal ID as a custom field (cordis_deal_id__c) on each migrated Opportunity so that teams can reference the original identifier. Customers who require sequential numbering should configure a naming convention using Twenty's custom field formulas post-migration or track this as a feature request on the Twenty GitHub repository.

  • Document version history may not export completely

    Cordis CRM's document management tracks version history for Excel files and other documents, but version lineage is not guaranteed to survive CSV export. We export the latest version of each document and re-associate it with the migrated record. Any document with multiple recorded versions is flagged in the migration report with the version count. Customers who need historical document versions restore them manually from their Cordis export package after migration.

  • Google Workspace email history requires separate extraction

    Cordis CRM's Google Workspace integration provides document access from Drive but does not automatically sync email conversations or activity logs. We handle email history as a separate migration vector, extracting directly from Gmail with explicit customer authorization rather than relying on the Cordis export. This step is optional and scoped at the customer's request; it requires OAuth authorization to the Gmail account and adds time proportional to the email volume retained.

  • Cordis custom field schema is not publicly documented

    Cordis CRM custom fields exist in customer instances but their data types and naming conventions are not publicly enumerated in sources reviewed. We survey the customer's instance during scoping to identify all active custom fields, their types, and their current values before migration. This discovery step is included in the migration timeline at no additional charge; it ensures accurate field-to-field mapping rather than assumptions based on generic CRM patterns.

Migration approach

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

  1. Scoping and export coordination

    We schedule a scoping call with the customer to identify the Cordis CRM instance configuration: record counts per object, active custom fields, pipeline count and stage names, active campaigns, document attachment volume, and any Google Workspace integration scope. We also confirm whether the customer has admin access to run manual CSV exports or whether a vendor-assisted export request is required. The scoping output is a written migration scope document with record counts, object list, and a confirmed export method before any migration work begins.

  2. Data export and format normalization

    The customer executes the manual CSV export from Cordis CRM or coordinates with Cordis support for a vendor-assisted export. We receive the export files and run a format audit: character encoding normalization (UTF-8), date format standardization (ISO 8601), null value handling, and duplicate identification. We flag any records with missing required fields (no email on contacts, no company name on deals) and return a data quality report to the customer for remediation before import begins.

  3. Twenty workspace provisioning and schema setup

    We provision the customer's Twenty workspace (self-hosted instance URL or managed cloud) and configure the schema before importing any data. This includes creating Pipeline records with stage values, setting up custom fields to match the identified Cordis custom field list, and configuring the workspace permissions structure. The schema setup is validated in a staging pass with a subset of records before full migration begins.

  4. Record import in dependency order

    We import records into Twenty in dependency order: Companies first (since People and Opportunities reference them), then People (with company lookups resolved), then Opportunities (with pipeline and company lookups resolved), then Tasks and Activities, then Documents and Attachments. Each phase emits a row-count reconciliation report. Any record that fails import is logged with the error reason, corrected, and retried in the next batch. We preserve external IDs from Cordis throughout to support post-migration reconciliation.

  5. Activity and document attachment migration

    After all primary records are committed, we import task activities linked to the migrated Person, Company, and Opportunity records using the ID mapping table. Document attachments are imported in a separate batch, with each file linked to its parent record via the Twenty ActivityTarget relationship. We flag any document with multiple version records for the customer's manual review. Email history, if scoped, is imported last from the Gmail direct extraction with authorization confirmed.

  6. Cutover, validation, and automation inventory handoff

    We freeze Cordis CRM writes during cutover and run a final delta migration of any records modified during the migration window. The customer validates a random sample of migrated records in Twenty against the Cordis source data. We deliver a written inventory of Cordis automations, campaign sequences, and workflow triggers for the customer's admin to rebuild in Twenty's workflow builder. We do not rebuild automations as code inside the migration scope. A one-week post-cutover support window is included to resolve any record linkage or import errors raised during validation.

Platform deep dives

Context on both ends of the pair

Cordis CRM logo

Cordis CRM

Source

Strengths

  • Integrated with the broader Cordis VCA suite (CRM + ERP + BPM), useful for teams consolidating multiple business functions.
  • User-based pricing scales with team size rather than feature gating.
  • Real-time sales, financial, and forecast reporting dashboards.
  • 24/7 live support plus online support channels per vendor listing.
  • Free trial available to evaluate before commitment.

Weaknesses

  • Vendor confirms no API is provided, blocking standard programmatic integration patterns.
  • Pricing is sales-led with no public tier disclosure.
  • Negligible third-party review footprint (zero reviews on SourceForge).
  • Catalog website discrepancy — cordissolutions.com (in the catalog) is a different company (SAP-Microsoft interoperability) while the actual CRM lives at cordis.us, causing confusion in vendor identification.
  • Public documentation on data export, schema, and migration paths is not available.
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?

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

C

Overall complexity

Moderate migration

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

  • Object compatibility

    C

    4 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

    Cordis CRM: Not applicable — no public API..

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

Walk through your Cordis CRM 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 eight weeks for accounts under 10,000 records with clean CSV exports and no document version complexity. The primary timeline variable is the export coordination phase on the Cordis side; if manual CSV exports are available immediately, migrations proceed faster. Migrations with custom fields, complex document attachment volumes, multi-stage pipeline structures, or dirty data requiring deduplication extend to ten to fourteen weeks. We provide a written timeline estimate during scoping based on the record counts and export readiness assessment.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Cordis 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