Contents11
- 01Step 1: decide what you take with you
- 02Step 2: map the fields
- 03Step 3: build the destination before moving
- 04Step 4: export from HubSpot
- 05Step 5: clean and deduplicate, outside both tools
- 06Step 6: import in dependency order
- 07Step 7: bring over the history, emails and attachments
- 08How do you organise the switchover?
- 09What do you lose, and what do you get back after the migration?
- 10Where to start
- 11Frequently asked questions
To migrate from HubSpot to an open source CRM, such as Twenty, Dolibarr or Odoo’s Community edition, the essentials come out without difficulty: contacts, companies and deals export with a few settings. The work lies elsewhere: matching the fields of the two tools, dealing with accumulated duplicates, respecting the import order and deciding what to do with the history, which does not come across by itself.
The method that follows takes seven steps. It is written for Twenty: we have run it in production since early 2025, notably as the CRM of Palmora Property, a real estate listings portal that we operate. Its logic also holds for Dolibarr and Odoo, even though their screens and import rules differ. If the destination tool has not been chosen yet, start with our grid for choosing between Twenty, Dolibarr and Odoo; the other guides in the CRM section cover cleaning and operation.
In short
The HubSpot export brings out the records and their associations: ask for all properties and associations, in CSV format.
The history (activities, emails, attachments) does not come out with this export: it is handled separately.
Clean and deduplicate the files before the import, never in the new tool.
Import in dependency order: companies, people, opportunities, then notes and tasks.
The switchover happens on a fixed date, with no data entry in both tools at once.
Step 1: decide what you take with you
A migration is a chance to leave the attic clutter behind. Twenty’s documentation on migrating from another CRM says so, and sorts things like this:
What you bring over
Active contacts and companies
Open deals
Important notes and activities
The custom fields you really use
What you leave behind
Contacts with no activity for more than two years
Duplicates
Test data
In practice, set three rules before touching a file:
- who is brought over (for example: contacts with a recent interaction or a deal, and all customers);
- which fields are brought over (those used to decide or act, not the forty properties created one day for a campaign);
- what is archived outside the CRM rather than deleted, if you have to keep it.
It is also the right time to ask what you can legitimately keep under the GDPR: we come back to this in our guide to cleaning your CRM data.
Step 2: map the fields
In a simple table, write down each HubSpot field you bring over, the destination field in the new tool, and the transformation if any (a date format, a renamed list of values, two merged fields). Twenty’s documentation recommends this document, and gives the basic equivalences: companies stay companies, contacts become people, deals become opportunities, activities become tasks or notes.
Three points call for particular attention:
- the pipeline stages: HubSpot’s do not necessarily match your real sales process; this is the time to review them;
- the value lists (industry, source, status): multiple spellings of the same value are fixed here, not after the import;
- HubSpot’s custom objects, to be recreated as objects in Twenty.
Step 3: build the destination before moving
In Twenty, an import creates records, not fields: the documentation asks you to create all custom fields in the data model settings before importing. It insists on a second prerequisite.
Watch out
Invite the users before importing
Wait until each has accepted their invitation: otherwise, references to an owner or a person in charge find nobody to attach to.
Step 4: export from HubSpot
According to HubSpot’s documentation on exporting, consulted on 4 October 2026, you can export contacts, companies, deals, tickets, calls, meetings and custom objects, among others, as CSV, XLSX or XLS. Three settings matter:
- choose all properties and all associations, not just the displayed view (the default setting), otherwise you lose columns and the links between contacts, companies and deals;
- prefer CSV: by default, the export stops at 1,000 associated records per association column, and only CSV lets you export them all; it also has no column limit, whereas XLS stops at 256 and XLSX at 16,384;
- download quickly: export links expire after 30 days.
Worth knowing before promising anything to the team: this export contains property values and associations, not the activity history. For the latter, HubSpot points to the export of a contact’s data, certain activity reports or its engagements API.
Step 5: clean and deduplicate, outside both tools
Clean the exported files before the import: correcting a thousand records one by one in the new tool costs far more.
The new tool’s uniqueness rules dictate what has to be sorted out. In Twenty, according to the documentation on uniqueness constraints, uniqueness applies to the identifier, people’s email and companies’ domain. Three behaviours are worth knowing:
- duplicate rows within a file are highlighted in yellow at import, and you can correct or remove them before confirming;
- a row whose email or domain already exists in Twenty updates the existing record instead of creating a second one: an old file can therefore overwrite more recent data;
- deleted records also count in this check: reimporting their value restores them, with the new data.
That leaves the trap of false blanks.
From the field
On Palmora Property, a real estate listings portal that we operate, the migration from a spreadsheet to Twenty left us this lesson: a legacy “empty” value must be treated as blank, otherwise it pollutes the whole set of reference data.
Before the import, look for these filler values, the word “empty” or its cousins (“N/A”, “unknown”), and replace them with a truly empty cell.
Step 6: import in dependency order
The order is not a preference, it is a constraint: you cannot attach a person to a company that does not exist yet. Twenty’s documentation asks you to always import in this order:
The import order in Twenty
- Companies
- People
Attached to companies.
- Opportunities
Attached to companies and people.
- Notes and tasks
Attached to records.
- Custom objects
According to their own dependencies.
According to Twenty’s migration documentation, file import is limited to 10,000 records; beyond that, you split into several files, or go through the API, which has no such limit and which the documentation recommends from 50,000 records.
Start with a trial import on a small sample, checked on screen by the person who knows the customers, before the full import. Through the API, limit the rate and plan for automatic retries of failed calls: in Twenty CRM in production we describe what it costs to forget this.
Step 7: bring over the history, emails and attachments
This is the step that makes the difference between a successful migration and a team that keeps HubSpot open “to look up a past exchange”.
- Emails: according to its documentation on emails and calendar, Twenty attaches to people and company records the emails from the Google Workspace or Microsoft 365 mailbox that each person connects, filtered by period or sender. The history therefore comes from each person’s mailbox, not from HubSpot: check on one account what the synchronisation retrieves before promising it to the team.
- Notes: extracted from HubSpot as described in step 4, they are imported as notes or tasks, attached to records.
- Attachments: Twenty’s documentation warns that they are not included in CSV exports; they have to be uploaded again by hand, or migrated through the API.
When the history is large, a script is better than manual handling, provided you follow the rules used to monitor your n8n workflows: every record processed is logged, and a rerun does not create a duplicate.
How do you organise the switchover?
You fix a date:
- The day before
You freeze changes in HubSpot, export one last time what has changed since the import, and connect the website forms and other integrations to the new tool.
- D-day
The team works in the new CRM.
- For a few weeks
HubSpot stays available to consult, long enough to check that nothing is missing, then you close it.
Twenty’s documentation reminds you: during this period, you do not create new data in both tools at once.
What do you lose, and what do you get back after the migration?
| In HubSpot | After the migration |
|---|---|
| Contacts, companies, deals, associations | Brought over, cleaned, attached |
| Emails and notes | Notes brought over if extracted (engagements API); emails synchronised from each person’s mailbox |
| Attachments | To be migrated through the API or by hand |
| Workflows (automations) | To be recreated by hand: Twenty’s documentation says so |
| Marketing tools (HubSpot emailing, pages, forms) | No equivalent in a pure CRM |
| Reports and dashboards | To be rebuilt in the new tool |
| Per-user licence | Disappears with self-hosted Twenty or Dolibarr, or Odoo Community |
Honest limit: if your marketing team lives in HubSpot’s tools (email campaigns, landing pages, scoring), a pure CRM does not replace them: plan for the tools that will take over, or ask yourself whether the migration is justified.
Where to start
Start with the first two steps, on paper: the list of what you take with you and the mapping table. They set the size of the job before any export, and quickly show whether the history justifies a script.
If you would rather not carry the migration alone, our CRM offer includes the transfer of your HubSpot data, deduplicated and verified: nothing dubious goes in as it stands. You approve the configuration and the data transfer before the build, then the installation proceeds in two-week steps, with training in parallel.
Frequently asked questions
How long does a migration from HubSpot to Twenty take?
According to Twenty’s documentation, a small migration, under 10,000 records, can be done in a few hours, and a large one can take several days, cleaning and testing included. Beyond volume, what lengthens the job is the state of the data, the number of custom objects and the history to bring over, which often requires a script and several trial runs.
How much does a CRM migration cost?
The software is not the big line item: Twenty and Dolibarr can be self-hosted without a per-user licence. The cost lies mainly in the time for preparation, cleaning, verification and training. In our CRM offer, the data transfer is included in the set-up, priced at €4,500 for Twenty and from €6,500 for Dolibarr. To compare with HubSpot, think over three years, hosting included.
What is the best open source alternative to HubSpot?
It depends on what you do in HubSpot. To manage sales and customer relationships, a pure CRM like Twenty is enough. If quotes, invoices and stock must live in the same place, a light ERP like Dolibarr is a better fit, and Odoo when several businesses or companies need to be linked. For HubSpot’s marketing tools (emailing, pages, forms), a pure CRM has no equivalent: plan for other tools.
Can you keep HubSpot for marketing and Twenty for sales?
It is possible, but two contact databases fall out of sync quickly: an unsubscribe, a corrected address or a new customer entered on one side does not appear on the other. If you keep both, you need automatic synchronisation, a written rule on which tool is authoritative for each field, and someone watching for discrepancies. Otherwise, it is better to have a single contact database, with the marketing tools plugged into it.
Does the method work for Pipedrive or Salesforce?
Yes. The export screens change, but the import order, field mapping, deduplication and handling of the history stay the same, and Twenty’s migration guide is written for any source CRM. Just check, in the documentation of the tool you are leaving, what its export contains and what it leaves out, in particular activities and attachments.
Sources
- Twenty’s documentation on migrating from another CRM (new tab)docs.twenty.com
- HubSpot’s documentation on exporting (new tab)knowledge.hubspot.com
- Documentation on uniqueness constraints (new tab)docs.twenty.com
Jim · founder of Brain Plus AI
Also in crm and customer data

Understand8 min
Twenty CRM in production: our view, limits included
We have been running Twenty, an open-source CRM, on our own server since early 2025. What works, what takes effort, what the AGPL licence means for a company, and who we do not recommend it to.

Practical guide9 min
Cleaning your CRM data: duplicates, fields and rules
A CRM full of duplicates and empty fields stops being consulted, and every automation or AI plugged into it repeats its errors. The method for a thorough clean-up, then the rules and automatic checks that make it last.

Choose and price7 min
Twenty, Dolibarr or Odoo: which one for your team?
Twenty, Dolibarr and Odoo are not in the same category: a pure CRM, a light ERP, a full ERP. Rather than a feature table, here is a decision grid by team size and by process, with what moves you from one level to the next.
