CRM migration

Migrate from HubSpot to Twenty CRM

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

HubSpot logo

HubSpot

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

83%

10 of 12

objects map 1:1 between HubSpot and Twenty CRM.

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Try the reverse

Twenty CRM
HubSpot

Overview

What this migration involves

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.

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

HubSpot logo

HubSpot

What's pushing teams away

  • Feature tier surprises drive churn — sequences, calling, quoting, and advanced automation are locked behind Professional at $100/seat, causing sticker shock when teams outgrow Starter.
  • Workflow configuration complexity increases at scale — multiple reviewers on Capterra and G2 note that HubSpot experts or significant admin time are required to maintain advanced automation.
  • Cost scales linearly with seats and marketing contacts, creating large bills for teams that grow quickly or inherit high contact counts from a previous CRM.
  • Frequent product updates and UI changes force ongoing re-training — Reddit reviewers in r/hubspot cite difficulty keeping up with constant new features and interface shifts.
  • Multi-brand, multi-region, and complex permission structures expose friction that Enterprise pricing cannot fully resolve, according to RevOps feedback in HubSpot community discussions.

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

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

maps to

Twenty CRM

Person

1:1
Fully supported

HubSpot 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

maps to

Twenty CRM

Company

1:1
Fully supported

HubSpot 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

maps to

Twenty CRM

Opportunity

1:1
Fully supported

HubSpot 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

maps to

Twenty CRM

Opportunity Stage

lossy
Fully supported

Each 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

maps to

Twenty CRM

Pipeline

lossy
Fully supported

HubSpot 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

maps to

Twenty CRM

Product

1:1
Fully supported

HubSpot 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

maps to

Twenty CRM

OpportunityLineItem

1:1
Fully supported

HubSpot 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

maps to

Twenty CRM

User

1:1
Fully supported

HubSpot 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

maps to

Twenty CRM

Task (type=Email)

1:1
Fully supported

HubSpot 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

maps to

Twenty CRM

Task (type=Call)

1:1
Fully supported

HubSpot 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

maps to

Twenty CRM

Task (type=Meeting)

1:1
Fully supported

HubSpot 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

maps to

Twenty CRM

Comment (on Person or Opportunity)

1:1
Fully supported

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

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.

HubSpot logo

HubSpot gotchas

High

Marketing Contacts billing model is migration-critical

High

Feature tier gating is not visible until onboarding

Medium

Mandatory onboarding fees inflate year-one cost

Medium

HubSpot CSV importer cannot migrate engagements or attachments

Medium

Custom objects require Enterprise and a pre-existing schema

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

  • Twenty's Activity model differs from HubSpot's Engagement model

    HubSpot treats emails, calls, meetings, and tasks as distinct Engagement objects with association records linking them to Contacts, Companies, and Deals. Twenty uses a task-first Activity model with a type discriminator (Email, Call, Meeting, Task) on a single Task object. We transform HubSpot Engagement records into Twenty Task records with the appropriate type flag and custom fields for HubSpot-specific metadata (call disposition, email thread ID, meeting attendees). The activity timeline order is preserved by setting the Task createdAt timestamp to the original HubSpot engagement timestamp. Any HubSpot Engagement Sequence enrollment state is not migrated (no equivalent in Twenty).

  • HubSpot Workflows do not migrate to Twenty workflows

    HubSpot Workflows use property-triggered branching with built-in delays, CRM actions, and enrollment criteria that have no direct equivalent in Twenty's workflow builder. Twenty's workflow builder handles automation triggers on record creation and field changes, but the trigger model, action library, and delay mechanism differ structurally from HubSpot. We do not migrate Workflows as code. We deliver a written inventory of every active HubSpot Workflow with its trigger conditions, actions, and a recommended Twenty workflow configuration, and the customer's admin rebuilds them post-migration. Sequences (sales engagement cadences) similarly do not migrate; the inventory documents each sequence as a template for manual rebuild in Twenty's task or email sequence tool.

  • Twenty's GraphQL API requires pagination and batch handling

    HubSpot's REST API uses token-bucket rate limiting with documented burst and per-second limits. Twenty uses a GraphQL API with cursor-based pagination and server-side batch limits. We implement cursor-based pagination loops for all list queries, respect the returned pageSize and hasNextPage flags, and batch mutations where Twenty's schema allows. Large record sets (over 50,000 contacts) require chunked processing with checkpointing between chunks to handle connection resets gracefully. We validate all field type mappings against Twenty's schema before migration runs to avoid type-mismatch rejections mid-import.

  • The Marketing Contacts billing flag has no Twenty equivalent

    HubSpot's Marketing Contacts billing model (a flag determining whether a contact counts against the marketing-priced contact tier) has no equivalent in Twenty's data model. We preserve the flag value in a custom field on the Person record during migration so that if the customer later migrates to another marketing automation tool, the original marketing contact status is auditable. Email opt-in and opt-out preferences migrate to a custom boolean field on Person for use with any future email sending tool integrated with Twenty.

  • HubSpot Custom Objects (Enterprise-only) require schema mapping

    HubSpot Custom Objects are Enterprise-only and require a pre-existing schema in the destination portal before data import. Twenty supports custom fields on standard objects and allows custom object types via its schema builder. We map each HubSpot custom object to a corresponding Twenty object type, create the schema in Twenty before importing data, and resolve any lookup relationships to standard objects (Contact, Company, Deal) at migration time. HubSpot custom object associations (many-to-many via junction objects) map to Twenty workspace relationship records.

Migration approach

Six steps for a successful HubSpot to Twenty CRM data migration

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

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

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

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

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

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

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

Context on both ends of the pair

HubSpot logo

HubSpot

Source

Strengths

  • Genuinely useful free CRM tier with no seat limit on contact records.
  • All-in-one sales engagement layer (sequences, email tracking, calling, dialer) embedded natively in the CRM, eliminating a separate integration.
  • Intuitive interface and fast onboarding for individual reps, per G2 and Capterra reviews.
  • Workflow automation triggers across contacts, deals, and tickets with a visual builder.
  • API coverage for all standard objects including custom objects at Enterprise tier.

Weaknesses

  • Pricing model is contact-based at the marketing layer — importing all records as marketing contacts can multiply the monthly bill by 4×.
  • Feature tier cliffs are frequent surprises: sequences, calling, advanced reporting, and quoting are all gated, often requiring plan upgrades mid-implementation.
  • Mandatory onboarding fees at Professional ($1,500) and Enterprise ($3,500) are not prominently disclosed on the pricing page.
  • API rate limits are restrictive for bulk migration — burst limits of 100-200 req/10sec and search endpoint limits of 4 req/sec require careful job queuing.
  • Custom objects, additional pipelines, and advanced forecasting are Enterprise-only, making cost projections difficult for growing teams.
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 HubSpot 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

    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

    A

    HubSpot exposes a bulk API — large-volume migrations stream efficiently.

Estimator

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

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

Can't find your answer?

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 consultation

Most migrations land between three and five weeks for accounts under 20,000 Contacts, 5,000 Deals, and no custom objects. Migrations with custom properties, large engagement histories (over 200,000 activity records), or multiple HubSpot pipelines move to eight to twelve weeks because of GraphQL API pagination handling, Activity-to-Task transformation work, and workflow inventory scope. The migration timeline also depends on how quickly the customer provisions Twenty User accounts and approves the sandbox validation sign-off.

Adjacent paths

Related migrations to explore

Ready when you are

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