CRM migration
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
Source
Twenty CRM
Destination
Compatibility
6 of 10
objects map 1:1 between Cordis CRM and Twenty CRM.
Complexity
CModerate
Timeline
4-8 weeks
Overview
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.
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 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
Twenty CRM
Person
1:1Cordis 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
Twenty CRM
Company
1:1Cordis 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
Twenty CRM
Opportunity (pipeline-scoped)
lossyCordis 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
Twenty CRM
Opportunity
1:1Cordis 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)
Twenty CRM
Task (Activity)
1:1Cordis 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
Twenty CRM
Workspace List / Segment
lossyCordis 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
Twenty CRM
Attachment / File
1:1Cordis 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)
Twenty CRM
File
1:1File 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
Twenty CRM
Custom Field
lossyCordis 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
Twenty CRM
Activity (Email)
lossyCordis 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.
| Cordis CRM | Twenty CRM | Compatibility | |
|---|---|---|---|
| Contact / Profile | Person1:1 | Fully supported | |
| Company | Company1:1 | Fully supported | |
| Pipeline | Opportunity (pipeline-scoped)lossy | Fully supported | |
| Deal | Opportunity1:1 | Fully supported | |
| Task (automated and manual) | Task (Activity)1:1 | Fully supported | |
| Campaign | Workspace List / Segmentlossy | Fully supported | |
| Document | Attachment / File1:1 | Fully supported | |
| Attachment (file) | File1:1 | Fully supported | |
| Custom Field | Custom Fieldlossy | Fully supported | |
| Google Workspace Email History | Activity (Email)lossy | Fully supported |
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.
Cordis CRM gotchas
No documented public API for self-service bulk export
Google Workspace integration does not auto-export email history
Document version history may not export cleanly
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
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.
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.
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.
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.
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.
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
Cordis CRM
Source
Strengths
Weaknesses
Twenty CRM
Destination
Strengths
Weaknesses
Complexity grading
Moderate CRM migration. 4 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Moderate migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Cordis CRM and Twenty CRM.
Object compatibility
4 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
Cordis CRM: Not applicable — no public API..
Data volume sensitivity
Cordis CRM doesn't expose a bulk API — REST + parallelization used for high-volume runs.
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 Cordis CRM to Twenty CRM migration scoping. Not seeing yours? Book a call.
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 consultationAdjacent paths
Other ways to leave Cordis CRM
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.