CRM migration

Migrate from Twenty CRM to HubSpot

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

Twenty CRM logo

Twenty CRM

Source

HubSpot

Destination

HubSpot logo

Compatibility

93%

13 of 14

objects map 1:1 between Twenty CRM and HubSpot.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Try the reverse

HubSpot
Twenty CRM

Overview

What this migration involves

Twenty CRM stores data in four core objects — People (contacts), Companies, Opportunities, and Tasks/Notes — with a relational model built on PostgreSQL. HubSpot uses Contacts (with lifecycle_stage as a single unifying property), Companies, Deals (HubSpot's term for Opportunities), and a native engagement logging system. The migration maps each Twenty People record to a HubSpot Contact, creates or links the corresponding HubSpot Company record, and converts Opportunities to HubSpot Deals with pipeline and stage preserved as HubSpot-native deal properties. Custom objects in Twenty map 1:1 to HubSpot custom objects where available, though Twenty's flexible data model may require HubSpot custom properties or custom objects to be pre-created. FlitStack's migration engine reads Twenty's REST and GraphQL APIs to pull full record payloads, resolves owner email addresses against HubSpot users, and loads data via HubSpot's Bulk API for large volumes or the CRM API v3 for smaller sets. Activity history — Tasks and Notes in Twenty — migrates as HubSpot engagements with original timestamps and associated contact links intact. Workflows, sequences, and any automation logic inside Twenty cannot migrate because HubSpot has no equivalent workflow engine that accepts imported rule definitions; FlitStack exports the workflow structure as a JSON specification your HubSpot admin rebuilds inside HubSpot's automation builder.

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

Twenty CRM logo

Twenty CRM

What's pushing teams away

  • Recently reached v1.0 — the CTO deliberately held off promotion until now, meaning the platform has a shorter operational track record than established CRMs.
  • No native email sequencing or cadence tools, forcing teams to layer on third-party outreach platforms for any automated follow-up flows.
  • Self-hosting 'free' pricing ignores the reality of DevOps hours, infrastructure costs, and maintenance that make it a real investment.
  • Limited native integrations out of the box — no app marketplace ecosystem, meaning most connections require custom API or Zapier/Make work.
  • Workflow automation is functional but limited in complexity, according to early users who find it insufficient for multi-step sales motions.

Choosing

HubSpot logo

HubSpot

What's pulling them in

  • Lowest barrier to entry of any major CRM — the free tier with unlimited contacts lets teams validate fit before committing to a paid plan, according to G2 and Capterra reviewers.
  • Native integration between the CRM and sales engagement tools (sequences, email tracking, dialer) means no separate sync configuration, a theme across G2 Sales Hub reviews.
  • Pipeline visualization, deal tracking, and automated workflows are consistently praised as intuitive and easy to set up without developer involvement.
  • Strong onboarding for new team members — reviewers on Capterra and G2 highlight how quickly new reps become productive without formal training.
  • The HubSpot platform ecosystem (Marketing, Sales, Service, CMS hubs) allows growing companies to consolidate tools without building new integrations.

Object mapping

How Twenty CRM objects map to HubSpot

Each row shows how a Twenty CRM object lands in HubSpot, including any object-level transformations, lookup resolution, or schema-design dependencies.

Typical mapping — final map is confirmed during the sample migration step.

Twenty CRM

People

maps to

HubSpot

Contact

1:1
Fully supported

Twenty People records migrate directly to HubSpot Contacts. The email address is the unique identifier used for de-duplication and owner matching. Any Person without an email address is flagged as a partial record and either assigned to a default owner or held for manual review before the full migration runs.

Twenty CRM

People.jobTitle

maps to

HubSpot

Contact

1:1
Fully supported

Maps to the HubSpot jobtitle standard property. If the source field is empty, the property is left blank — no default value is inserted to avoid polluting reporting. Job title values are stored as free-text in both systems, so no value mapping is required.

Twenty CRM

People (with no associated Opportunity)

maps to

HubSpot

Lead

1:many
Fully supported

HubSpot differentiates Leads from Contacts. FlitStack classifies Twenty People without an associated Opportunity as HubSpot Leads. If a Lead converts to a Contact in HubSpot post-migration, the conversion links the record to the existing Contact and preserves the original create date from Twenty as the Lead creation date.

Twenty CRM

Company

maps to

HubSpot

Company

1:1
Fully supported

Twenty Companies map 1:1 to HubSpot Companies. The domain field in Twenty populates the HubSpot website property. Parent-child company hierarchies in Twenty (where a company has a linked parent company) migrate using HubSpot's parent company association. Circular references are flagged and resolved by flattening to the top-level parent.

Twenty CRM

Opportunity

maps to

HubSpot

Deal

1:1
Fully supported

Twenty Opportunities migrate as HubSpot Deals. The deal name maps to dealname, amount maps to amount, and close date maps to closedate. Each Twenty Opportunity is associated with one Company (via companyId) and optionally linked to People records through the opportunity's contact associations.

Twenty CRM

Opportunity.stage

maps to

HubSpot

Deal.pipeline + Deal.stage

1:1
Fully supported

Twenty stage values are mapped value-by-value to the target HubSpot pipeline stage. If the target pipeline does not yet exist in HubSpot, FlitStack creates a default pipeline and stage set before migration. Probability and forecast category are set per stage as part of the value mapping. Teams with multiple Twenty pipelines map each one to a separate HubSpot pipeline.

Twenty CRM

Task

maps to

HubSpot

Engagement (Task)

1:1
Fully supported

Twenty Tasks map to HubSpot engagements of type TASK. The task body becomes the note on the engagement. The assignee resolves against HubSpot users by email. Completed tasks carry their completion timestamp as the engagement date. Tasks linked to multiple records in Twenty are logged against the primary contact in HubSpot with a reference note.

Twenty CRM

Note

maps to

HubSpot

Engagement (Note)

1:1
Fully supported

Twenty Notes migrate as HubSpot engagement notes attached to the relevant Contact or Company. The rich-text content is preserved where HubSpot's note format allows. If Twenty notes contain embedded images, those are downloaded and re-hosted as HubSpot file attachments linked to the note.

Twenty CRM

Custom Object

maps to

HubSpot

Custom Object

1:1
Fully supported

Twenty custom objects map 1:1 to HubSpot custom objects (HubSpot Enterprise only). If the destination HubSpot instance is not on Enterprise, FlitStack creates a custom object-like structure using custom properties on the standard Contact or Company object. The mapping plan specifies which approach applies before migration begins.

Twenty CRM

People (phone, mobile phone)

maps to

HubSpot

Contact.phoneNumber / Contact.mobilePhoneNumber

1:1
Fully supported

Twenty's phone and phonenumber fields map directly to HubSpot's phoneNumber and mobilePhoneNumber standard properties. Both fields store values as free-text strings with no format normalization applied during migration. Phone number formatting and validation—including international prefixes, dashes, parentheses, and extensions—should be run as a post-migration data-quality step using a dedicated validation tool or HubSpot workflow to standardize formats across your contact records.

Twenty CRM

People (linked to multiple Companies)

maps to

HubSpot

Contact (primary Company) + Company Contact Association

1:1
Fully supported

Twenty allows a Person to be associated with multiple Companies. HubSpot Contacts have one primary Company association. FlitStack sets the most-recently-modified Company in Twenty as the primary in HubSpot and adds secondary associations using HubSpot's Company Contact Relationships feature (available in Sales Hub Professional and above).

Twenty CRM

Opportunity (assigned owner)

maps to

HubSpot

Deal.ownerId

1:1
Fully supported

Twenty owner IDs resolve to HubSpot user IDs by matching the email address stored on the Twenty workspace member. Unmatched owners are flagged before migration — your team either invites them to HubSpot first or assigns their records to a designated fallback owner. No deal lands in HubSpot without a resolved owner.

Twenty CRM

Twenty workspace member (internal user)

maps to

HubSpot

HubSpot User

1:1
Fully supported

Workspace Members in Twenty are matched to HubSpot Users by email. The match is 1:1 where the email exists in both systems. HubSpot's user-level permissions and team structure are not migrated — those are destination-side configuration that your HubSpot admin sets up separately.

Twenty CRM

Activity (Task + Note timestamps)

maps to

HubSpot

Engagement (createDate / updatedAt)

1:1
Fully supported

Original create dates from Twenty records are preserved as custom datetime fields in HubSpot (Created_From_Source__c) because HubSpot sets CreatedDate at the time of import. This preserves historical reporting continuity — your HubSpot analytics can reference the original creation date from Twenty alongside the HubSpot migration timestamp.

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.

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

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

Pair-specific challenges

  • Twenty's unified People object requires a lifecycle split in HubSpot

    Twenty stores contacts and leads as a single People object — there is no separate lead concept. HubSpot separates Leads from Contacts and uses lifecycle_stage to drive the distinction. FlitStack routes Twenty People without an associated Opportunity to HubSpot Leads and People with at least one linked Opportunity to Contacts. The lifecycle split is based on Opportunity association, not on any HubSpot-specific field, because Twenty does not natively store a lifecycle stage equivalent. Teams that want all contacts as HubSpot Contacts (not Leads) should specify this preference during the planning phase before migration runs.

  • HubSpot pipelines require pre-creation before Deals can migrate

    HubSpot requires a pipeline to exist before a Deal can be assigned to it — you cannot bulk-create pipelines and Deals in the same migration operation. FlitStack's schema setup phase delivers a pipeline creation plan: one HubSpot pipeline per Twenty pipeline, with stage names, probabilities, and forecast categories mapped value-by-value. If your Twenty instance uses custom stage names, each one requires a corresponding stage in the target pipeline before the Deal migration step. This is a planning dependency that adds 1–3 days to the pre-migration timeline but prevents Deal import failures on migration day.

  • Multi-company associations collapse to a single primary Company on the Contact

    Twenty allows a single Person to be associated with multiple Companies via its N:1 relation model. HubSpot Contacts have one primary Company association plus optional secondary associations via Company Contact Relationships (a feature available in HubSpot Sales Hub Professional and above). FlitStack migrates the most-recently-modified Company as the primary and surfaces the rest as secondary associations. If your HubSpot instance is on Starter, secondary company associations are lost — the primary company is retained and the remainder are flagged for manual re-association post-migration.

  • HubSpot's marketing contact billing model has no Twenty equivalent

    HubSpot charges based on the number of Marketing Contacts in your portal — contacts that have been in a marketing email, form, or list. Twenty has no equivalent billing flag. When migrating from Twenty, all contacts land as standard HubSpot CRM contacts. If your team plans to use HubSpot's marketing automation (email sequences, forms, ads), those contacts may become Marketing Contacts after they engage with a marketing asset, which triggers HubSpot's billing model. FlitStack preserves a source-system flag (Migrated_From_Twenty__c) on every record so your team can track the origin of contacts for billing reconciliation.

  • Twenty's custom object extensibility may exceed HubSpot Starter's capacity

    Twenty allows unlimited custom objects on its Organization tier, built as PostgreSQL tables under the hood. HubSpot custom objects require the Enterprise tier and have their own schema constraints (property limits, association rules, no custom junctions). Teams migrating from Twenty with complex custom object schemas — especially custom objects with many-to-many relationships to each other — may need to restructure the data model in HubSpot or upgrade to Enterprise. FlitStack audits the Twenty custom object schema during discovery and flags any custom object that cannot map directly to a HubSpot custom object.

Migration approach

Six steps for a successful Twenty CRM to HubSpot data migration

  1. Audit Twenty's data model and export full record payloads

    FlitStack connects to Twenty's REST API using credentials scoped to the workspace. We export every standard object (People, Company, Opportunity, Task, Note) and every custom object as a full JSON payload — not just the fields visible in the default view. Because Twenty's CSV export caps at 20,000 records per file, we use the API for all record volumes. The audit phase also captures relationship metadata: which People are linked to which Companies, which Opportunities have which People associated, and which Tasks/Notes belong to which records. This gives us the complete relational graph before we write a single line of field mapping logic.

  2. Design the HubSpot schema and pre-create pipelines, custom objects, and custom properties

    Before any data moves, FlitStack delivers a HubSpot schema setup plan: pipeline names and stage definitions, custom object schemas (if on Enterprise), and any custom properties needed to store Twenty-specific fields. We also create the value-mapping tables for pick-list fields — stage names, industry values, and any custom select fields in Twenty. Your HubSpot admin executes the schema setup plan in your HubSpot portal. Once confirmed, FlitStack validates the schema is in place before triggering the migration engine.

  3. Run a sample migration with field-level diff

    A representative slice — typically 100–500 records spanning People, Companies, Deals, and a mix of custom properties — migrates first. FlitStack generates a field-level diff comparing each source field against the destination field value so you can verify the mapping is correct before committing. The diff surfaces issues like: wrong probability on a deal stage, blank job title where a value was expected, or a company association that failed to resolve. Your team reviews the diff and signs off before the full migration is scheduled.

  4. Execute full migration with owner resolution and activity history

    The full migration loads all records in the correct sequence: Companies first (since Contacts and Deals have foreign keys to them), then People split into Contacts and Leads, then Opportunities as Deals with stage and pipeline mapping. Owner IDs resolve against HubSpot users by email — unmatched owners are held in a flag report and assigned to a fallback owner you designate. Task and Note records migrate as HubSpot engagements with original timestamps and parent record links. For large volumes, FlitStack uses HubSpot's Bulk API to keep migration time within the 48–72 hour window.

  5. Capture delta changes during cutover and run post-migration validation

    After the full migration completes, FlitStack opens a delta-pickup window of 24–48 hours. Any record created or modified in Twenty during this window is captured and merged into HubSpot so the destination reflects Twenty's final state at go-live. Post-migration validation checks record counts, association integrity (every Deal linked to a Company, every Contact linked to at least one Company), and a spot-check of field values against the source export. An audit log records every operation. If validation fails, one-click rollback reverts the HubSpot instance to its pre-migration state.

Platform deep dives

Context on both ends of the pair

Twenty CRM logo

Twenty CRM

Source

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

HubSpot

Destination

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.

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 Twenty CRM and HubSpot.

  • 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

    Twenty CRM: 100 req/min (Pro), 200 req/min (Organization).

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

Walk through your Twenty CRM to HubSpot migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most Twenty-to-HubSpot migrations complete in 48–72 hours of clock time for datasets under 50,000 records. Larger migrations with 500,000+ records or custom object schemas that require HubSpot Enterprise custom object setup extend to 5–10 days. The longest single step is the HubSpot schema setup phase — creating pipelines, custom objects, and property definitions — which runs in parallel with the migration planning and adds 1–3 days before the first record moves.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Twenty CRM.
Land in HubSpot, 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