Here's something most people get wrong about CRM migrations:
They don't fail at the import button.
They fail three weeks earlier — in a decision nobody wrote down. Someone assumed the data could be cleaned during the move instead of before it.
Then it happens.
18,000 duplicate contacts land in the new portal. Every rep gets buried in duplicate task notifications. Lead scoring breaks. And the workflows you spent a month building start enrolling the wrong people.
The hard truth: a CRM migration isn't a data transfer. It's a data-architecture reset that happens to involve moving records.
Get the architecture right, and the import is boring.
Get it wrong, and you're paying to rebuild a portal you already paid to build. The typical do-over runs €17,500–€44,000 (USD 20,000–50,000) — on top of the original spend.
This guide breaks down what a real migration looks like, what breaks when you skip the boring parts, and the exact record counts that tell you whether you can DIY it or need a HubSpot migration partner.
Let's dig in.
What a Real Migration Actually Involves
A professional migration runs in nine phases. And only one of them is "import."
Here's the sequence:
First, discovery and audit. You inventory every object, field, automation, integration, and report in the source system. Then you flag the duplicates, orphaned records, and dead fields.
Next, data-model design. You decide what moves and what gets archived. (A common rule: records untouched for 18–24 months get archived, not migrated.)
Then comes field mapping, data cleaning and dedupe, a sandbox build, a test migration on real sample data, cutover, post-migration QA, and finally four to six weeks of hypercare — with the old system kept read-only as a safety net.
Now here's the part that matters most.
Notice where the time goes.
Data preparation and cleansing routinely eat 40–60% of the pre-migration effort. The import itself? An afternoon.
Teams that invert that ratio — rush the prep, obsess over the import — are the ones that fail. And they fail at a remarkable rate. Johnny Grow's 2025 CRM Failure Report puts the CRM failure rate at 55% when failure means "didn't hit the planned objectives," with only about a quarter of projects hitting objectives, timeline, and budget at once.
Not sure your data is migration-ready? Get a free async migration scoping session from Superwork. Outline your stack and current CRM, and we'll send back a real timeline, a price band, and the specific risks in your data — before you commit to anything.
Field Mapping: Where the Silent Failures Hide
On paper, HubSpot's import looks simple.
It accepts .csv, .xlsx, or .xls. One sheet. Under 1,000 columns. UTF-8 if you have non-English characters.
The traps are in the details.
Every object has required fields just to create a record. Contacts need a first name, last name, or email. Companies need a name or domain. Deals need a deal name, a pipeline, and a deal stage that's valid in that pipeline. Miss the pipeline-stage match, and the row fails.
But the nastiest failures are the silent ones:
- Picklist values must match exactly. Import "open" when the value is "Open" and it lands blank — no error.
- Owners have to already exist in HubSpot, referenced by name or email, or ownership drops.
- Default date properties like Close date need a UNIX millisecond timestamp. An Excel-formatted date cell imports as garbage.
None of these throw a red error. You find them later — when a report is wrong and nobody knows why.
This is also where you decide what not to bring.
Map every legacy field to a custom property and you get property bloat: the 200-plus unexplained custom properties that make a portal unmaintainable. A good migration is partly a cull.
Preserving History and Relationships
This is the part native CSV import handles worst.
It's also the part that matters most.
Associations — the links between contacts, companies, deals, and tickets — have to be deliberately reconstructed using each record's unique identifier. Association labels (the "Manager," "Billing contact," "Decision maker" tags available on Professional and Enterprise) have to exist in HubSpot before you import them, then get referenced in a dedicated column.
Activity history is harder.
Calls and tasks can import standalone. But emails, meetings, and notes have to be imported and associated with a record. And you can't update existing emails, meetings, notes, or tasks via import at all.
Here's the one that bites everyone:
If you don't include an Activity date column, HubSpot stamps every record with the import date. That's the classic bug where 8,000 historical calls all show today's date — and your "last contacted" data is instantly worthless.
Bottom line: at any real volume, importing timeline activity isn't a CSV job. It's an API job. The Engagements and CRM Imports APIs are the only route to put rich history into the timeline correctly — which is why serious migrations of activity data are code, not spreadsheets. Third-party tools like Import2 and SyncMatters exist precisely because they wrap that API.
Deduplication, Done Right
HubSpot auto-dedupes contacts by email and companies by primary domain on creation.
Useful. But limited.
Here's what it won't catch:
- Companies created through the API — which includes most third-party sync apps — aren't deduped by domain.
- There's no native cross-object or custom-object dedupe.
- The duplicate-management tool caps how many pairs it'll even show you (around 2,000 on Professional, up to 10,000 on Enterprise).
The rule that prevents the duplicate explosion is simple: clean and dedupe at the source, before you import.
Migrate dirty data and you multiply it. A delta sync that isn't idempotent — that re-creates records instead of updating them — will manufacture duplicates on its own during cutover.
What Breaks, by Source CRM
Every source system has its own landmines. Here's where each one hides them.
Salesforce is the big one. HubSpot has no Lead object, so Salesforce Leads and Contacts both collapse into the unified HubSpot Contact. Formula fields don't migrate as live logic — you export the computed value or rebuild it as a HubSpot calculated property. Record types usually become separate pipelines. Apex, Process Builder, and Flows have to be rebuilt as workflows. Reference fields arrive as 18-digit IDs, not labels, so they're useless for segmentation unless you map them properly. The native connector handles under ~50,000 records well; past that, Salesforce API rate limits throttle the move and push you to a custom approach. And you must deactivate active Salesforce automations before export — or they corrupt and duplicate records mid-migration.
Marketo and Pardot lose their engagement history entirely. Opens, clicks, Engagement Studio step data — none of it transfers. Export summary reports before decommissioning. Lead scoring has to be rebuilt from scratch, not copied. Budget 6–12 weeks and roughly €13,000–€70,000 (USD 15,000–80,000+) for a mid-market move.
Pipedrive, Dynamics, and Zoho are supported by HubSpot's Smart Transfer tool, which audits object and record counts and auto-builds reconciliation workflows. The relational data — line items, products, attachments, activities — is where the native path drops things at volume.
Spreadsheet/CSV is the cleanest case. But watch the enum case-matching, the date formats, and multi-line notes that Excel splits across rows. Always include Record ID on re-imports or you'll create duplicates.
Migrating off Salesforce, Pardot, or Pipedrive? See how Superwork's productized migration works — fixed monthly price, async delivery, and a senior practitioner doing the field mapping. Not a junior handed the project after the sale.
Native Tools and Their Ceilings
HubSpot's import tool is genuinely good for standard objects.
But it has hard limits:
- 250,000 records per CSV
- Up to 300 exports per rolling 24 hours
- No scheduled imports
- No transformation during import
- No updating of existing emails, meetings, notes, or tasks
Smart Transfer covers the major source systems for audit and sync. And HubSpot's free guided migration support is real — worth using for smaller, standardized moves.
So where do native tools run out?
Relational data, custom objects, and timeline activity history at scale.
That's where you need the API — and someone who knows how to use it.
The Credential That Actually Means Something
When you're vetting a migration partner, one signal is worth weighting above the rest: the HubSpot Data Migration Accreditation.
It's not a tier badge.
To hold it, a firm needs at least two completed migration projects from a major CRM into HubSpot in the last 12 months — using marketplace apps, APIs, or custom code. And HubSpot states plainly that experience with native import tools alone is not enough to qualify. The assessment includes a practicum, customer references, and an interview, and it's re-evaluated every two years.
That matters more than whether the firm is Gold or Elite.
An accreditation is earned on real migration work. A tier is earned on sales volume.
(More on that gap in why HubSpot tier doesn't equal quality and accreditations vs certifications.)
When You Actually Need a Partner
Here's the honest line.
Do it yourself if you're moving under ~5,000 clean records, standard objects, standard fields, no custom objects, no complex relational data. HubSpot's native import and free migration support handle that fine.
Hire a partner when any of these are true:
- 50,000+ records
- Custom objects
- Multi-object associations
- Years of Salesforce customization
- Marketing-automation history you need to preserve
- Integrations that have to keep working through the cutover
The threshold recurs across the practitioner world for a reason. Past it, the cost of a mistake — broken reporting, lost history, a duplicate explosion, collapsed adoption — outruns the cost of doing it right the first time.
But here's the deciding question. It isn't your record count in isolation.
It's whether the data is load-bearing for revenue.
If your forecast, your routing, and your renewals all depend on the migrated data being correct, the rebuild math makes the partner cheap. (For more on that decision across your whole HubSpot setup, see when do you actually need a HubSpot partner and how much a partner costs.)
A migration is a one-time event with permanent consequences.
The records you lose history on, you lose forever. The associations you break, you rebuild by hand.
The version that goes smoothly is the version where someone did the boring nine phases in order — and that's exactly what you're paying a HubSpot migration partner to guarantee.
Ready to move to HubSpot without losing a decade of history? Book a free migration scoping session with Superwork. You'll get a phased plan, a fixed price, and a clear answer on what's safe to migrate and what isn't.
Related reading: The complete HubSpot partner guide · How much does a HubSpot partner cost? · Choosing a HubSpot partner for B2B SaaS