CRM migration
Field-level mapping, validation, and rollback between ContactDB and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
ContactDB
Source
Twenty CRM
Destination
Compatibility
2 of 10
objects map 1:1 between ContactDB and Twenty CRM.
Complexity
CModerate
Timeline
2-4 weeks
Overview
ContactDB is a purchased B2B contact database, not a CRM. Its export is a flat list of contact records with name, title, email, phone, and firmographic attributes (industry, company size, SICCODE, credit rating) but no engagement history, no pipeline data, and no owner assignments. Twenty CRM uses a relational model: People (Contacts) linked to Companies, with Opportunities, Tasks, Notes, and Custom Objects. We receive your ContactDB CSV export, validate records against email format and data-quality rules, split firmographic attributes into a Company dedupe pass and a People import pass, reconstruct segment membership as a custom text field on People, and load the resulting records into Twenty via its CSV import interface. There are no workflows, sequences, or automations to migrate because ContactDB does not expose them; we document this in the handoff package.
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 ContactDB 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.
ContactDB
Contact
Twenty CRM
People
1:1ContactDB contact records map directly to Twenty CRM People. We extract first name, last name, email, phone, job title, and any free-text fields from the export and map them to the corresponding Twenty People fields. Email address serves as the primary dedupe key; records with duplicate emails are flagged for customer review before final import. The original ContactDB record identifier is preserved in a custom field for audit traceability.
ContactDB
Contact (firmographic fields)
Twenty CRM
Company
1:manyContactDB exposes firmographic attributes per contact: company name, industry, company size, SICCODE, and credit rating. We run a company dedupe pass using normalized company name and domain extraction before import, then load the resulting unique Company records into Twenty CRM. Each Person record is linked to their parent Company via the Twenty relation field at import time.
ContactDB
Segment membership (reconstructed)
Twenty CRM
People (custom field: original_segment_category)
lossyContactDB segments contacts by industry, profession, title, country, and software-usage criteria, but these segment labels are not exported as standalone tag objects. We reconstruct segment membership as a custom text field on People in Twenty CRM, encoding the original segment category as a pipe-delimited string (e.g., 'industry:Technology | country:US | software:Salesforce'). The customer confirms during scoping which segment categories are meaningful for post-migration reporting.
ContactDB
Pipeline
Twenty CRM
Opportunity
lossyContactDB does not implement a pipeline model, so there are no pipeline stages to migrate. We configure Twenty CRM with a standard Opportunities object and a default deal stage set (Prospecting, Qualification, Proposal, Negotiation, Closed Won, Closed Lost) during the workspace setup phase of migration. If the customer has deal-related data encoded in custom ContactDB fields, we map those to Opportunity fields in Twenty.
ContactDB
Owner
Twenty CRM
User
lossyContactDB is a data product without internal user accounts. No owner assignments exist in the source data. During migration, we assign all imported People and Companies to a designated admin User in Twenty CRM, or we configure a migration-owner placeholder that the customer's admin updates post-import when team Members are provisioned in Twenty.
ContactDB
Tags
Twenty CRM
Custom field (multi-select text)
lossyContactDB segments lists by industry, profession, title, country, and software usage, but these segment labels are not exported as standalone tag objects. We do not migrate Tags because none exist as discrete exportable records. Instead, we reconstruct segment membership as described in the segment mapping above. If the ContactDB export includes a tags or segments column with pipe-delimited values, we parse and write those to a custom multi-select field on People.
ContactDB
Custom Fields
Twenty CRM
Custom Fields
lossyContactDB does not document a custom fields schema. Any extended attributes stored against contacts in ContactDB are proprietary to the platform and not exposed in export packages. We document any unnamed or undocumented columns in the source CSV as part of the discovery audit and ask the customer to confirm their meaning before mapping. If columns represent meaningful data, we create equivalent custom fields in Twenty CRM under Settings → Data Model before import.
ContactDB
Activities
Twenty CRM
Tasks and Notes
1:1ContactDB does not store engagement history, email opens, call logs, or meeting records. No activity data is available to migrate. This is a fundamental limitation of moving from a purchased list database to a live CRM: the contact history in the target system will be blank until the team begins using Twenty CRM's native engagement tools post-migration.
ContactDB
Company deduplication
Twenty CRM
Company (deduped)
lossyContactDB exports contacts as flat records, meaning the same company can appear multiple times with slight name variations (e.g., 'Acme Corp', 'Acme Corporation', 'ACME'). We run a normalization step that strips legal suffixes (Inc, LLC, Ltd, Corp), standardizes capitalization, and flags records with matching domains for dedupe review. Unique Company records are loaded first; the Person-Company relation is resolved at import time using company name and domain matching.
ContactDB
Data Integrity metadata
Twenty CRM
People (custom field: original_data_tier)
lossyContactDB offers a Data Integrity Guarantee, but recency of data updates depends on the customer's subscription tier. We capture any metadata columns in the export that indicate data source tier, refresh date, or verification status and write these to a custom text field on People in Twenty CRM. This gives the sales team a signal for prioritizing outreach to contacts with more recent verification timestamps.
| ContactDB | Twenty CRM | Compatibility | |
|---|---|---|---|
| Contact | People1:1 | Fully supported | |
| Contact (firmographic fields) | Company1:many | Fully supported | |
| Segment membership (reconstructed) | People (custom field: original_segment_category)lossy | Fully supported | |
| Pipeline | Opportunitylossy | Fully supported | |
| Owner | Userlossy | Fully supported | |
| Tags | Custom field (multi-select text)lossy | Not supported | |
| Custom Fields | Custom Fieldslossy | Not supported | |
| Activities | Tasks and Notes1:1 | Not supported | |
| Company deduplication | Company (deduped)lossy | Fully supported | |
| Data Integrity metadata | People (custom field: original_data_tier)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.
ContactDB gotchas
No public API requires manual CSV export
No engagement or lifecycle data to migrate
Segment membership is not a first-class object
Data freshness depends on purchase tier
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
CSV export and discovery audit
We receive the ContactDB CSV export from the customer and audit the full schema. We identify every column, categorize each as a standard field (first name, last name, email, phone, title, company) or a firmographic attribute (industry, company size, SICCODE, credit rating), and flag any columns that do not map to documented ContactDB fields. We also identify whether the export includes any segment-category or tags columns that need reconstruction. This audit produces a written field inventory and a column-by-column mapping brief for the customer to review.
Data validation and cleaning
We run the ContactDB export through a pre-import validation step that checks email address format, flags duplicate email addresses, identifies records with missing required fields, and surfaces records where company name, title, or industry appears stale or inconsistent. We apply domain extraction to company names to support the dedupe pass. The customer reviews the validation report and makes retention decisions on flagged records before import begins.
Twenty CRM workspace setup
We configure the Twenty CRM workspace before importing any data. This includes creating any custom fields required to capture original ContactDB segment categories, data tier metadata, and any unmapped firmographic attributes that the customer wants to preserve. We create a default Opportunities pipeline with standard stages (Prospecting, Qualification, Proposal, Negotiation, Closed Won, Closed Lost) and configure the workspace Members list so that owner assignment can be resolved during import.
Company dedupe and import
We run a normalization and dedupe pass on all unique company names extracted from the ContactDB export. We strip legal suffixes, standardize capitalization, and extract domains where available. We group potential duplicates for customer review and load the unique Company records into Twenty CRM first. The company record ID in Twenty is captured for use in the Person import step.
People import with Company linkage
We import People records from the ContactDB export, resolving the parent Company via name and domain matching. Email address serves as the dedupe key. Segment membership is reconstructed from the source data and written to the custom field on People. We apply the validation pass results to exclude or flag records that failed quality checks. Owner assignment is set to the migration admin or placeholder User and documented for update by the Twenty CRM admin post-import.
Cutover, validation, and handoff
We run a final row-count reconciliation comparing the exported ContactDB records against the imported Twenty CRM People and Companies. We deliver the migration report documenting the mapping, any records excluded due to data quality, and a written inventory of any workflows, automations, or segment lists in ContactDB that cannot migrate because they do not exist as discrete objects in the source. The customer admin reviews and signs off; we do not perform post-migration admin configuration, user training, or workflow rebuild as standard scope.
Platform deep dives
ContactDB
Source
Strengths
Weaknesses
Twenty CRM
Destination
Strengths
Weaknesses
Complexity grading
Moderate CRM migration. 2 of 8 objects need a manual workaround.
Overall complexity
Moderate migration
Derived from compatibility, mapping clarity, API constraints, and data volume across ContactDB and Twenty CRM.
Object compatibility
2 of 8 objects need a manual workaround.
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
ContactDB: Not applicable — no live API surface..
Data volume sensitivity
ContactDB 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 ContactDB to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your ContactDB 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 ContactDB
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.