CRM migration

Migrate from ContactDB to Twenty CRM

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

ContactDB logo

ContactDB

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

20%

2 of 10

objects map 1:1 between ContactDB and Twenty CRM.

Complexity

CModerate

Timeline

2-4 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

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

ContactDB logo

ContactDB

What's pushing teams away

  • Lists become stale quickly as personnel change roles and companies shift; re-purchasing updated lists creates ongoing cost without accumulating owned CRM data.
  • No ownership or tracking of engagement data means teams lose visibility into which contacts responded, creating disconnected feedback loops between outreach and CRM records.
  • Limited post-purchase support and data enrichment options make it difficult to extend or verify contact records beyond the initial purchase fields.
  • Subscription costs scale with list volume and refresh frequency, making it expensive to maintain current data across multiple campaigns and regions simultaneously.

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

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

maps to

Twenty CRM

People

1:1
Fully supported

ContactDB 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)

maps to

Twenty CRM

Company

1:many
Fully supported

ContactDB 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)

maps to

Twenty CRM

People (custom field: original_segment_category)

lossy
Fully supported

ContactDB 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

maps to

Twenty CRM

Opportunity

lossy
Fully supported

ContactDB 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

maps to

Twenty CRM

User

lossy
Fully supported

ContactDB 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

maps to

Twenty CRM

Custom field (multi-select text)

lossy
Not supported

ContactDB 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

maps to

Twenty CRM

Custom Fields

lossy
Not supported

ContactDB 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

maps to

Twenty CRM

Tasks and Notes

1:1
Not supported

ContactDB 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

maps to

Twenty CRM

Company (deduped)

lossy
Fully supported

ContactDB 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

maps to

Twenty CRM

People (custom field: original_data_tier)

lossy
Fully supported

ContactDB 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.

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.

ContactDB logo

ContactDB gotchas

High

No public API requires manual CSV export

High

No engagement or lifecycle data to migrate

Medium

Segment membership is not a first-class object

Medium

Data freshness depends on purchase tier

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

  • No API requires manual CSV export as the first dependency

    ContactDB does not publish a REST or bulk API for programmatic access. All data export must be performed manually through the customer portal as a CSV or delimited file download. We depend on the customer completing this step before we can begin any migration work. If the customer needs to refresh data mid-migration or post-migration, they must repeat the manual download step themselves. This dependency affects project scheduling and should be accounted for during scoping and timeline estimation.

  • No engagement or activity history exists in ContactDB

    ContactDB stores flat contact records with firmographic attributes. It does not track email opens, clicks, call outcomes, meeting history, or deal stages. Any warmth or engagement signal in Twenty CRM must come from the team's outreach activities recorded after migration, not from ContactDB. We scope migration explicitly to contact and company records and clearly exclude activity objects that do not exist in the source. The customer's sales team should plan for a fresh engagement timeline in Twenty CRM.

  • Segment membership is not a first-class export field

    ContactDB segments contacts by industry, profession, title, country, and software-usage criteria, but these segment labels are not exported as standalone tags or objects. They appear as data values within rows or as separate exports that must be joined. We reconstruct segment membership as a custom text field on People, but this requires the customer to confirm which segment categories are meaningful post-migration and whether a simple text field or a multi-select field better serves their segmentation workflow in Twenty CRM.

  • Data freshness depends on ContactDB subscription tier

    The Data Integrity Guarantee is tier-dependent, and out-of-date records (person changed companies, email bounced, title promoted) may be present in the export. We apply a pre-import validation step that flags records with missing or malformed email formats, titles that appear stale, and company names that do not resolve to a known domain. The customer reviews these flagged records before the final import to avoid loading bounced contacts into Twenty CRM.

Migration approach

Six steps for a successful ContactDB to Twenty CRM data migration

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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

Context on both ends of the pair

ContactDB logo

ContactDB

Source

Strengths

  • Massive B2B contact database spanning 30M+ records with global country coverage.
  • Multiple segmentation axes: industry, profession, title, country, and business software usage.
  • Data Integrity Guarantee policy promises accuracy and updated records for campaign reliability.
  • Firmographic data includes SICCODE, company size, and credit rating for B2B targeting precision.

Weaknesses

  • No documented API for programmatic data export or integration with CRM platforms.
  • No engagement or activity data—purchased contacts carry no behavioral history.
  • List-based product model means data ownership remains with the vendor, not the buying team.
  • Limited ability to extend contact records with custom fields or internal annotations.
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. 2 of 8 objects need a manual workaround.

C

Overall complexity

Moderate migration

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

  • Object compatibility

    D

    2 of 8 objects need a manual workaround.

  • 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

    ContactDB: Not applicable — no live API surface..

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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 consultation

We migrate Contact records from ContactDB into Twenty CRM People, and firmographic attributes (company name, industry, company size, SICCODE, credit rating) into Twenty CRM Companies. We deduplicate company records by domain and name, reconstruct segment membership as a custom text field on People, and capture any original data-tier metadata as a custom field. No engagement history, pipeline stages, or owner assignments migrate because ContactDB does not store them.

Adjacent paths

Related migrations to explore

Ready when you are

Move from ContactDB.
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