CRM migration
Field-level mapping, validation, and rollback between HubSpot and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
HubSpot
Source
Twenty CRM
Destination
Compatibility
10 of 12
objects map 1:1 between HubSpot and Twenty CRM.
Complexity
BStandard
Timeline
3-5 weeks
Try the reverse
Overview
Moving from HubSpot Sales Hub to Twenty CRM is a migration from a tiered, per-seat CRM with marketing-contact metering to a flat-rate, open-source CRM with a simplified data model. HubSpot uses Deals with pipeline stages, a separate Companies object, and an Activities model built around engagements; Twenty uses Opportunities with a streamlined pipeline builder, Companies, and a task-first Activity timeline. We resolve the Deal-to-Opportunity field mapping, preserve the HubSpot Owner-to-User assignment, and migrate Activity history (calls, emails, meetings, tasks) through Twenty's GraphQL API with pagination and batch handling. HubSpot Workflows, Sequences, and the Marketing Contacts billing flag do not migrate; we deliver a written inventory of every active automation for the customer's admin to rebuild in Twenty's workflow builder. The mandatory HubSpot onboarding fees ($1,500 at Professional, $3,500 at Enterprise) are eliminated in the switch, and Twenty's $9/seat/month cloud pricing or free self-hosted deployment significantly reduces the ongoing subscription cost.
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.
Source platform
HubSpot platform overview
Scorecard, SWOT, gotchas, and pricing for HubSpot.
Destination platform
Twenty CRM platform overview
Scorecard, SWOT, gotchas, and pricing for Twenty CRM.
Data migration guide
The complete Twenty CRM migration guide
Data model, import mechanisms, field mapping strategy, pitfalls, and cutover — by the engineers running it.
Source platform guide
HubSpot migration guide
Understand the data you're exporting from HubSpot before mapping it.
Destination checklist
Twenty CRM migration checklist
Pre- and post-cutover tasks for moving onto Twenty CRM.
Source checklist
HubSpot migration checklist
Exit checklist for unwinding your HubSpot setup cleanly.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a HubSpot 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.
HubSpot
Contact
Twenty CRM
Person
1:1HubSpot Contact records map directly to Twenty Person records. The HubSpot firstname, lastname, email, phone, and address properties map to Twenty's corresponding Person fields. Custom contact properties migrate as custom fields on the Person object. HubSpot's lifecyclestage property maps to a custom picklist field on Person (Twenty does not have a native Lifecycle Stage equivalent). The HubSpot Marketing Contact billing flag value is preserved in a custom field for audit purposes.
HubSpot
Company
Twenty CRM
Company
1:1HubSpot Company records map 1:1 to Twenty Company records. The HubSpot company domain becomes the Company website field and is used as the dedupe key during import. All standard and custom company properties migrate as fields on the Twenty Company object. The HubSpot contact-to-company association (the primary company link) migrates to Twenty's Person-Company workspace relationship.
HubSpot
Deal
Twenty CRM
Opportunity
1:1HubSpot Deals map to Twenty Opportunities. The HubSpot dealname becomes Opportunity name; dealstage maps to Twenty pipeline stage; amount maps to Opportunity amount; closedate maps to Opportunity close date. HubSpot pipeline configurations migrate as Twenty pipeline definitions with stage names and probabilities preserved. The HubSpot closedate becomes the Opportunity expectedCloseDate in Twenty.
HubSpot
Deal Stage
Twenty CRM
Opportunity Stage
lossyEach HubSpot pipeline stage maps to a Twenty pipeline stage definition. Stage display names and probability percentages migrate as stage metadata in Twenty's pipeline configuration. HubSpot's pipeline-level display order is preserved in Twenty's stage ordering. Customers with multiple HubSpot pipelines create corresponding Twenty pipelines during schema setup.
HubSpot
Pipeline
Twenty CRM
Pipeline
lossyHubSpot deal pipelines (up to 15 on Professional, 100 on Enterprise) map to Twenty pipeline definitions. Each HubSpot pipeline becomes a separate Twenty pipeline with its own stage set. The mapping preserves pipeline-level properties including default currency and display color. Pipeline access permissions in Twenty are set during user provisioning.
HubSpot
Product
Twenty CRM
Product
1:1HubSpot Products map to Twenty Product records. The HubSpot hs_sku maps to Product sku; name maps to Product name; price maps to Product priceAmount. Products are created before any line item or opportunity association so that the foreign key reference is satisfied at insert time.
HubSpot
Line Item
Twenty CRM
OpportunityLineItem
1:1HubSpot Line Items map to Twenty OpportunityLineItem records linked to the corresponding Opportunity. We resolve the Product reference, quantity, and unit price at migration time. The line item's hs_discount_percentage migrates as a custom discount field on the line item record.
HubSpot
Owner
Twenty CRM
User
1:1HubSpot Owners map to Twenty User records. We resolve owners by email match against the Twenty user table. Any HubSpot Owner without a matching Twenty User goes to a reconciliation queue for the customer's admin to provision before record import resumes. Owner assignment on Deals and Contacts is resolved via the User mapping after User records are confirmed.
HubSpot
Engagement: Email
Twenty CRM
Task (type=Email)
1:1HubSpot email engagements migrate to Twenty Task records with type set to Email. The email subject, body, from address, and to address transfer to custom fields on the Task. The Task is linked to the target Person and optionally to the related Opportunity via Twenty's workspace relationship. Activity timestamp is preserved from the original HubSpot engagement creation date.
HubSpot
Engagement: Call
Twenty CRM
Task (type=Call)
1:1HubSpot call engagements map to Twenty Task records with type set to Call. Call disposition, duration in seconds, and recording URL transfer to custom fields on the Task. Activity timestamp preserves the original HubSpot call start time. The Task is linked to the target Person via the workspace relationship.
HubSpot
Engagement: Meeting
Twenty CRM
Task (type=Meeting)
1:1HubSpot meeting engagements map to Twenty Task records with type set to Meeting. Title, description, start time, end time, and location migrate to corresponding fields on the Task. Attendees are linked via the workspace PersonTaskInteraction records. Activity timestamp preserves the original HubSpot meeting start time.
HubSpot
Engagement: Note
Twenty CRM
Comment (on Person or Opportunity)
1:1HubSpot Notes migrate as Comment records in Twenty, linked to the target Person or Opportunity via the workspace relationship. Note body text migrates as the Comment text field. If the HubSpot Note is attached to a Deal, the Comment links to the corresponding Twenty Opportunity.
| HubSpot | Twenty CRM | Compatibility | |
|---|---|---|---|
| Contact | Person1:1 | Fully supported | |
| Company | Company1:1 | Fully supported | |
| Deal | Opportunity1:1 | Fully supported | |
| Deal Stage | Opportunity Stagelossy | Fully supported | |
| Pipeline | Pipelinelossy | Fully supported | |
| Product | Product1:1 | Fully supported | |
| Line Item | OpportunityLineItem1:1 | Fully supported | |
| Owner | User1:1 | Fully supported | |
| Engagement: Email | Task (type=Email)1:1 | Fully supported | |
| Engagement: Call | Task (type=Call)1:1 | Fully supported | |
| Engagement: Meeting | Task (type=Meeting)1:1 | Fully supported | |
| Engagement: Note | Comment (on Person or Opportunity)1: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.
HubSpot gotchas
Marketing Contacts billing model is migration-critical
Feature tier gating is not visible until onboarding
Mandatory onboarding fees inflate year-one cost
HubSpot CSV importer cannot migrate engagements or attachments
Custom objects require Enterprise and a pre-existing schema
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 HubSpot tier audit
We audit the source HubSpot portal across tier (Free/Starter/Professional/Enterprise), custom properties, custom objects, pipeline count, active workflows, active sequences, and engagement volume. We identify every feature that requires an upgrade to access (Sequences, Calling, Custom Objects) and flag these in the scope document. We pair this with a Twenty workspace setup review: cloud-hosted ($9/seat) or self-hosted deployment decision, user seat count, and any self-hosting infrastructure requirements. The discovery output is a written migration scope with record counts, field inventory, and a Twenty workspace configuration checklist.
Schema setup and field mapping design
We configure the Twenty destination workspace before any data import. This includes creating pipeline definitions (mapped from HubSpot pipelines with stage names and probabilities), setting up Company and Person custom fields (mapped from HubSpot custom properties), configuring the Opportunity object with product line item support, and provisioning User accounts for each HubSpot Owner. We validate field type compatibility between HubSpot property types (phone, date, enumeration, checkbox, number) and Twenty field types during this phase to catch type mismatches before migration begins.
Data extraction and transformation from HubSpot
We extract data from HubSpot using a combination of the CRM REST API (for contacts, companies, deals, owners, products) and the bulk API for large engagement histories. We transform records during extraction: HubSpot Companies to Twenty Companies, HubSpot Contacts to Twenty Persons with the lifecyclestage preserved as a custom field, HubSpot Deals to Twenty Opportunities with pipeline and stage mapping applied. Activity records (emails, calls, meetings, tasks) are extracted in chronological batches and transformed into Twenty Task records with the appropriate type discriminator.
Sandbox validation and reconciliation
We run a full migration into a Twenty sandbox environment (or a test schema if self-hosted) using production-like data volume. The customer's RevOps lead reconciles record counts (Persons in, Companies in, Opportunities in, Tasks in), spot-checks 25-50 random records against the HubSpot source, and signs off the field mapping before production migration begins. Any mapping corrections, custom field additions, or pipeline stage adjustments happen here, not in production.
Owner reconciliation and User provisioning
We extract every distinct HubSpot Owner referenced on Contact, Company, Deal, and Engagement records and match by email against the Twenty destination workspace's User table. Owners without a matching Twenty User go to a reconciliation queue. The customer's admin provisions any missing Users before record import resumes. Migration cannot proceed past this step because Opportunity assignment requires an OwnerId reference in Twenty.
Production migration in dependency order
We run production migration in record-dependency order: Users (manual provisioning, validated), Companies (from HubSpot Companies), Persons (with workspace relationships established to Companies), Opportunities (with pipeline, stage, Person, and Owner references resolved), Products and OpportunityLineItems, Activity history (Tasks via Twenty GraphQL API with cursor pagination). Each phase emits a row-count reconciliation report before the next phase begins. We freeze HubSpot writes during the final cutover window and run a delta migration for any records modified during the migration.
Cutover, validation, and automation rebuild handoff
We enable Twenty as the system of record after the final delta migration completes and the customer validates record counts in production. We deliver the Workflow and Sequence inventory document to the customer's admin team with recommended Twenty workflow configurations. We support a one-week hypercare window where we resolve any reconciliation issues raised by the customer's team. We do not rebuild HubSpot Workflows or Sequences inside the migration scope; that is documented for the customer's admin to handle.
Platform deep dives
HubSpot
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 HubSpot 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
HubSpot: 110 requests per 10 seconds per installed account for OAuth apps on the latest platform versions (2025.2 / 2026.03). Free accounts: 100 req/10s and 250,000 daily requests. Professional and Enterprise: 190 req/10s. The CRM Search API has a separate ceiling of 4 requests per second per auth token. 429 is returned on exhaust..
Data volume sensitivity
HubSpot exposes a bulk API — large-volume migrations stream efficiently.
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 HubSpot to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your HubSpot 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 HubSpot
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.