CRM migration

Migrate from CompanyHub CRM to Twenty CRM

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

CompanyHub CRM logo

CompanyHub CRM

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

73%

8 of 11

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

Complexity

BStandard

Timeline

2-4 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from CompanyHub CRM to Twenty CRM is a migration from a per-seat SMB CRM toward an open-source platform with a Notion-inspired data model and no per-seat licensing for self-hosted deployments. CompanyHub organizes data around Contacts, Companies, Deals, and Custom Tables; Twenty uses People, Companies, Opportunities, and custom objects that support many-to-many relations as first-class citizens. We extract CompanyHub data via its v1 REST API, pre-provision the destination schema including any Custom Tables as Twenty custom objects, then load records in dependency order. CompanyHub's UTrons automation engine does not export its flowchart definitions—every workflow must be rebuilt in Twenty after migration. We deliver a written Utron inventory with recommended Twenty equivalents as part of the standard scope. Email activity logs may be truncated in CompanyHub's API responses; we migrate what the payload contains and flag gaps for customer review.

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

CompanyHub CRM logo

CompanyHub CRM

What's pushing teams away

  • No built-in calling or SMS means sales teams requiring phone workflows must purchase and integrate a separate telephony stack.
  • Custom tables and UTrons automations do not export cleanly—teams with heavy custom data models face significant re-implementation effort when leaving.
  • Reporting provides only surface-level visualizations and lacks weighted deal values, pipeline velocity, or activity-based conversion metrics.
  • Goals and targets tracking is buried in the interface and not surfaced prominently enough for sales managers running weekly reviews.
  • The product is unable to be uninstalled from integrations once connected, creating lock-in friction for teams evaluating a switch.

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

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

CompanyHub CRM

Contact

maps to

Twenty CRM

People

1:1
Fully supported

CompanyHub Contact records map directly to Twenty People. The CompanyHub email address serves as the dedupe key and becomes the primaryEmail field in Twenty. Custom fields on Contact (phone, address, industry, custom selects) map to typed custom fields on the Twenty People object. If the CompanyHub Contact references a linked Company, we resolve that Company to a Twenty Company and set the companyLink relation on People before inserting. Original Lifecycle Stage values from CompanyHub custom properties migrate to a custom select field on People for reporting continuity.

CompanyHub CRM

Company

maps to

Twenty CRM

Company

1:1
Fully supported

CompanyHub Company records map to Twenty Company records using the domain field as the dedupe key, which becomes the website field in Twenty. Company address, industry, size tier, and custom fields transfer to typed Twenty Company fields. Twenty Company is created before any People import so that the companyLink relation is satisfied at the moment of People insert.

CompanyHub CRM

Deal

maps to

Twenty CRM

Opportunity

1:1
Fully supported

CompanyHub Deal records map to Twenty Opportunity records. Standard fields (amount, expectedCloseDate, probability) migrate to the equivalent Twenty Opportunity fields. The CompanyHub pipeline stage becomes a custom select field on Opportunity and we also write the original stage name to a custom field for continuity. We resolve CompanyHub's linked Company and Contact to their Twenty equivalents before inserting Opportunities so that the relation fields are satisfied.

CompanyHub CRM

Pipeline Stages

maps to

Twenty CRM

Custom Select Field on Opportunity

lossy
Mapping required

CompanyHub's customizable pipeline stage names and order are captured during discovery and mapped to a Twenty custom select field called dealStage on the Opportunity object. We create the select options in the same display order as CompanyHub with the same labels. Probability percentages from CompanyHub stage settings are noted for manual configuration in Twenty's pipeline settings post-migration.

CompanyHub CRM

Task

maps to

Twenty CRM

Task

1:1
Fully supported

CompanyHub Task records map to Twenty Task records with title, dueDate, assignee (resolved via owner email match), and completion status preserved. Tasks that were auto-generated by UTrons workflows are flagged in the migration report with a note that the trigger rule requires a new automation in Twenty. Manually created tasks migrate as standard Twenty Tasks.

CompanyHub CRM

Email Activity

maps to

Twenty CRM

Task (Email subtype)

1:1
Fully supported

CompanyHub email sync records are migrated as Twenty Tasks with an email subtype. Subject, body, timestamp, and recipient details transfer. We flag that CompanyHub's API may return only metadata without full message body content in some cases; we migrate what the payload contains and document any records where body text is absent. The link to the associated People record is resolved at migration time.

CompanyHub CRM

Custom Tables

maps to

Twenty CRM

Custom Objects

1:1
Mapping required

CompanyHub Custom Tables (Properties, Courses, Payments, etc.) map to Twenty custom objects. Because CompanyHub's API does not expose Custom Table field definitions programmatically, we request customer-provided screenshots or field documentation during discovery. We pre-provision each Twenty custom object with matching field names and types before any row data is imported. Many-to-many relation fields between Custom Tables and standard objects map to Twenty's relation field types. This is the highest-risk mapping step and the primary reason for pre-provisioning.

CompanyHub CRM

Custom Fields on Standard Objects

maps to

Twenty CRM

Custom Fields on Standard Objects

lossy
Fully supported

CompanyHub unlimited custom fields on Contacts, Companies, and Deals transfer to Twenty custom fields on People, Company, and Opportunity. We export field definitions (name, type, select options) alongside field values so that Twenty custom fields are created before row imports begin. Picklist-type custom fields become Twenty select or multi-select fields with the same option set.

CompanyHub CRM

Owner

maps to

Twenty CRM

Member

1:1
Fully supported

CompanyHub Owners map to Twenty Members. We resolve by email match against the Twenty workspace members list. During discovery we confirm all owners referenced in CompanyHub data have a corresponding Twenty account, because Twenty requires users to exist before importing records that reference them as assignees. Any CompanyHub owner without a Twenty match goes to a reconciliation queue for the customer to provision before record import resumes.

CompanyHub CRM

Quote

maps to

Twenty CRM

Custom Fields on Opportunity

lossy
Fully supported

CompanyHub Quotes (Professional+ tier) do not have a direct equivalent in Twenty CRM. We migrate Quote line items, totals, and template references into a set of custom fields on the related Opportunity record: quoteTotal, quoteLineItems (as a text summary), and quoteTemplate reference. Full Quote PDF documents cannot be migrated programmatically; we deliver a written list of Quote record IDs and recommended steps for manual re-creation in Twenty.

CompanyHub CRM

Notes

maps to

Twenty CRM

Note

1:1
Fully supported

CompanyHub Notes attached to Contacts, Companies, or Deals migrate to Twenty Note records linked via the relation field to the target People, Company, or Opportunity. Note body transfers as text content. Note timestamps preserve the original creation date for timeline continuity. Attachments stored in CompanyHub Notes are listed separately for manual upload to Twenty because the CompanyHub API does not expose attachment binary content in all cases.

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.

CompanyHub CRM logo

CompanyHub CRM gotchas

High

Admin-only export gate blocks non-admin migration scoping

Medium

Custom Table schema is not self-describing in the API

Medium

UTrons workflow logic does not survive migration

Low

API key cap of 5 limits concurrent migration jobs

Low

Email body content may be truncated in activity API responses

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

  • Custom Table schemas require customer-supplied documentation

    CompanyHub Custom Tables have dynamic user-defined schemas that the v1 API does not expose programmatically. The API returns row data but omits field type definitions, which means we cannot auto-discover which columns are text, numbers, dates, select options, or relation lookups. We request the customer to provide screenshots or a field inventory of each Custom Table during discovery. We then provision matching Twenty custom objects before importing row data. Without this documentation, column mappings are guesswork and carry a risk of type mismatches that require rework.

  • UTrons workflow logic does not survive migration

    CompanyHub's UTrons automation engine encodes workflow logic as flowchart nodes with no API export mechanism. Every automation—task creation on stage change, duplicate disallowance, scheduled alerts, field auto-population—must be rebuilt in Twenty after migration. We document each active Utron during discovery (trigger, conditions, actions, assignee logic) and deliver a written rebuild specification with recommended Twenty equivalents. This documentation work is inside the standard migration scope; the actual rebuild in Twenty is a separate task for the customer's admin or a Twenty implementation partner.

  • Twenty requires fields to exist before CSV import

    Twenty's import process creates records, not fields. All custom fields on People, Company, Opportunity, and any custom objects must be created in Settings before importing data. If a CSV column maps to a field that does not exist, the import silently skips that column. We create every custom field identified in the CompanyHub field audit before the first import run, and we verify the field list in Twenty against the mapping document before cutover. This is a planning step that adds one to three days to the project timeline but prevents silent data loss.

  • Twenty requires Members to exist before record import

    Twenty enforces referential integrity: if a CompanyHub record has an assigned Owner and that owner's email does not match a Twenty Member, the relation cannot be written during import. We run owner reconciliation against the Twenty Members list before record migration begins. Any CompanyHub owner without a matching Twenty account goes to a reconciliation queue. The customer provisions the missing accounts before we resume. This is a hard dependency that can stall migration if not addressed early in the project.

  • CompanyHub email body content may be truncated in API responses

    CompanyHub's API may return only email metadata (timestamp, recipient, open status, subject) without full message body text for activity records. We inform customers before migration that full email content fidelity depends on the API response payload. We migrate what the API provides and flag records where body text is absent. If body text is critical, we recommend supplementing with an IMAP export or email platform backup. This limitation is inherent to CompanyHub's API design and is not resolvable through migration tooling.

Migration approach

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

  1. Discovery and field audit

    We audit the CompanyHub portal across all tiers: record counts for Contacts, Companies, Deals, Tasks, Custom Tables, Quotes, and email activity logs. We capture every custom field definition (name, type, select options) and pipeline stage configuration. We document active Utrons including trigger, conditions, actions, and assignee rules. We confirm admin API key availability and verify that the key holder has full organizational data visibility. The discovery output is a written migration scope, a field mapping document, and a Utron inventory list.

  2. Schema pre-provisioning in Twenty

    Before any data moves, we create the destination schema in the Twenty workspace: custom fields on People, Company, and Opportunity; custom objects for each CompanyHub Custom Table (using customer-supplied field documentation); and the pipeline stage select options on Opportunity. We create Twenty Members for every CompanyHub owner referenced in the data, or flag missing accounts for the customer to provision. This step prevents the silent field-skip behavior that occurs when Twenty imports encounter unmapped columns.

  3. Data extraction and transformation

    We extract CompanyHub data via the v1 REST API using the admin API key, starting with Contacts and Companies (dependency-free), then Deals (resolving Company and Contact links), then Tasks and email activity logs (resolving owner references). Custom Table rows are extracted last because they may have lookups to the standard objects. We apply the field mapping transformation (CompanyHub field names to Twenty field names, format corrections for dates and phone numbers, select option normalization) and produce a set of CSV or JSON files ready for Twenty import.

  4. Trial import and reconciliation

    We run a first-pass import into a staging area or test workspace within Twenty to verify record counts, field population, and relation resolution. We spot-check ten to twenty records per object against the CompanyHub source to confirm fidelity. We reconcile owner email matches and resolve any remaining CompanyHub Owner records that lack a Twenty Member. Mapping corrections identified in this step are applied before the production import begins.

  5. Production migration in dependency order

    We run the production migration in record-dependency order: Companies first (People have a required companyLink), then People (with Company relation resolved), then Opportunities (with Company and People lookups resolved), then Tasks and email activity logs (with assignee lookups resolved), then Custom Table rows (with their relation fields to standard objects resolved). Each phase emits a row-count reconciliation report before the next phase begins. Upton records modified during the migration window are captured in a final delta pass.

  6. Cutover, validation, and Utron rebuild handoff

    We freeze CompanyHub writes during cutover and run a final delta migration. We deliver the Utron inventory document with recommended Twenty equivalents to the customer's admin team. We support a brief hypercare window to resolve any reconciliation issues reported by the team in Twenty. We do not rebuild Utrons as Twenty workflows inside the migration scope; that work is handled by the customer's admin or a Twenty implementation partner as a separate engagement.

Platform deep dives

Context on both ends of the pair

CompanyHub CRM logo

CompanyHub CRM

Source

Strengths

  • Per-user pricing capped at $42/month makes it the most affordable option among feature-rich SMB CRMs.
  • Drag-and-drop pipeline and task follow-up reminders keep low-touch sales teams from losing deals.
  • UTrons workflow engine uses a flowchart interface to automate any business logic without code.
  • Field-level and record-level security controls allow granular visibility settings across roles and territories.
  • Custom Tables and Custom Apps extend the data model to verticals beyond standard sales (real estate, education, services).

Weaknesses

  • No native calling, SMS, or voice features—phone-centric sales teams need third-party integrations.
  • API is limited to v1 with no public rate limit documentation and a maximum of 5 API keys per account.
  • Only admin users can export data from the product UI, which complicates migration scoping for non-admin account holders.
  • Custom Table migrations require pre-provisioning the destination schema, adding a planning step not needed for standard objects.
  • Activity logs and email bodies may be truncated in API responses, limiting the fidelity of historical communication data migration.
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. 1 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 CompanyHub CRM and Twenty CRM.

  • Object compatibility

    B

    1 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

    CompanyHub CRM: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

Walk through your CompanyHub 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 two and four weeks for accounts under 10,000 Contacts, 2,000 Deals, and no Custom Tables. Migrations with Custom Tables (requiring schema pre-provisioning and relation mapping), large activity histories, or multiple pipeline stages move to four to eight weeks because of schema design time and owner reconciliation. Twenty's own setup and team onboarding time sits outside the migration fee and typically adds another two to four weeks depending on internal readiness.

Adjacent paths

Related migrations to explore

Ready when you are

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