CRM migration
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
Source
Twenty CRM
Destination
Compatibility
8 of 11
objects map 1:1 between CompanyHub CRM and Twenty CRM.
Complexity
BStandard
Timeline
2-4 weeks
Overview
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.
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 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
Twenty CRM
People
1:1CompanyHub 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
Twenty CRM
Company
1:1CompanyHub 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
Twenty CRM
Opportunity
1:1CompanyHub 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
Twenty CRM
Custom Select Field on Opportunity
lossyCompanyHub'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
Twenty CRM
Task
1:1CompanyHub 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
Twenty CRM
Task (Email subtype)
1:1CompanyHub 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
Twenty CRM
Custom Objects
1:1CompanyHub 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
Twenty CRM
Custom Fields on Standard Objects
lossyCompanyHub 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
Twenty CRM
Member
1:1CompanyHub 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
Twenty CRM
Custom Fields on Opportunity
lossyCompanyHub 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
Twenty CRM
Note
1:1CompanyHub 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.
| CompanyHub CRM | Twenty CRM | Compatibility | |
|---|---|---|---|
| Contact | People1:1 | Fully supported | |
| Company | Company1:1 | Fully supported | |
| Deal | Opportunity1:1 | Fully supported | |
| Pipeline Stages | Custom Select Field on Opportunitylossy | Mapping required | |
| Task | Task1:1 | Fully supported | |
| Email Activity | Task (Email subtype)1:1 | Fully supported | |
| Custom Tables | Custom Objects1:1 | Mapping required | |
| Custom Fields on Standard Objects | Custom Fields on Standard Objectslossy | Fully supported | |
| Owner | Member1:1 | Fully supported | |
| Quote | Custom Fields on Opportunitylossy | Fully supported | |
| Notes | Note1:1 | 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.
CompanyHub CRM gotchas
Admin-only export gate blocks non-admin migration scoping
Custom Table schema is not self-describing in the API
UTrons workflow logic does not survive migration
API key cap of 5 limits concurrent migration jobs
Email body content may be truncated in activity API responses
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
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.
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.
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.
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.
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.
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
CompanyHub CRM
Source
Strengths
Weaknesses
Twenty CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across CompanyHub CRM and Twenty CRM.
Object compatibility
1 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
CompanyHub CRM: Not publicly documented.
Data volume sensitivity
CompanyHub 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 CompanyHub CRM to Twenty CRM migration scoping. Not seeing yours? Book a call.
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 consultationAdjacent paths
Other ways to leave CompanyHub 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.