Phase 0
Decide & Plan
Lock scope, owners, and the cutover window before any data moves.
-
Risk if skipped: Unscoped objects surface mid-migration and force re-export, re-mapping, and an extended freeze window.
-
Risk if skipped: Loading all-time activity history multiplies row counts and can push the project past contact-tier limits without warning.
-
Risk if skipped: Importing past the Marketing Contacts ceiling auto-bills the next tier for the full annual term.
-
Risk if skipped: Provisioning in the wrong region forces a separate residency migration after cutover, doubling the project.
-
Risk if skipped: Without a pre-agreed rollback gate, teams push through partial loads and create reconciliation work that takes weeks.
-
Risk if skipped: Late-discovered HIPAA scope can force a portal rebuild because Sensitive Data settings cannot be retro-applied to all properties.
Phase 1
Pre-Migration Prep
Get the source clean and the destination schema fully built before any export.
1a. Source-system audit and cleansing
-
Risk if skipped: Without a baseline, post-migration delta investigation has nothing to compare against.
-
Risk if skipped: HubSpot uses email as the contact unique key — duplicates in the source collapse on import and history attaches to the wrong record.
-
Risk if skipped: Multiple source companies sharing a domain merge into one HubSpot company, losing per-entity context.
-
Risk if skipped: Rows missing required fields are rejected silently into an error file and never reach the destination.
1b. Destination HubSpot setup
-
Risk if skipped: Wrong region locks the portal to a residency that may violate procurement or contract clauses signed with EU customers.
-
Risk if skipped: Testing in production guarantees that data corruption from a bad mapping cannot be reversed cleanly.
-
Risk if skipped: Changing currency after deals load forces a portal-wide re-derivation of historical amounts.
-
Risk if skipped: Imported records with unknown owners default to the importer, mis-attributing pipeline ownership.
-
Risk if skipped: Properties that do not exist at import time cause those columns to be silently dropped — data loss with no error.
-
Risk if skipped: Wrong primary display property forces a costly rebuild because that field is immutable after creation.
-
Risk if skipped: Without a unique External ID, re-running an import creates duplicates instead of upserting.
-
Risk if skipped: Importing deals into a non-existent stage rejects the row.
-
Risk if skipped: Sequences fire welcome emails to migrated contacts who were never opted in, generating spam complaints and deliverability damage.
1c. People prep
-
Risk if skipped: Late writes in the source create a delta that is not captured in the final export.
Phase 2
Source Export
Pull every byte you will need out of the source system in transformable formats.
-
Risk if skipped: Omitting source record ID makes idempotent re-runs impossible — re-loads create duplicates.
-
Risk if skipped: Missing association exports break the parent/child relationships that HubSpot uses for reporting and roll-ups.
-
Risk if skipped: Losing the join table means files can be re-uploaded but not re-linked to their owning records.
-
Risk if skipped: Without per-file timestamps the delta export at cutover may miss or double-count records changed during the export window.
Phase 3
Transform & Map
Turn raw exports into HubSpot-shaped files with explicit mapping decisions.
3a. Master mapping spreadsheet
-
Risk if skipped: Without a single source of truth, transform code and import templates drift and silently disagree.
-
Risk if skipped: Mapping to display labels causes silent value drops because the import engine does not recognize the string.
3b. Data transformation
-
Risk if skipped: Ambiguous date formats (03/04/2026) are interpreted under the portal's date locale and can land months off.
-
Risk if skipped: A single un-escaped comma in a Notes field shifts every subsequent column for that row, scrambling the entire record.
-
Risk if skipped: A file that exceeds the row cap is rejected outright with no partial-load option.
3c. Relationship and audit-trail decisions
-
Risk if skipped: Accepting the default re-stamps every record to cutover day, breaking historical pipeline-velocity and tenure reporting.
3d. CRM-specific transforms
-
Risk if skipped: Unmapped stages cause deal rows to reject and break weighted-pipeline reporting on day one.
-
Risk if skipped: Open deals imported with past Close Dates show as overdue and pollute forecast reports.
-
Risk if skipped: Migrated numeric scores from another system have no meaning in HubSpot's model and mislead reps.
-
Risk if skipped: Bulk imports often default everyone to 'subscriber' regardless of true state, silently downgrading SQLs and customers.
-
Risk if skipped: Post-import merges in HubSpot can break workflow enrollment history and attribution on the surviving record.
Phase 4
Sandbox Test Migration
Catch every problem in the standard sandbox before production load.
-
Risk if skipped: A non-representative sample passes validation but production load hits unknown edge cases.
-
Risk if skipped: Reversed association direction is silent and only surfaces when a report shows zero linked records.
-
Risk if skipped: Hitting the 50k ceiling mid-load rejects associations silently and reports show under-counted relationships.
-
Risk if skipped: Skipping written sign-off lets ambiguity about 'good enough' bleed into the production go/no-go call.
Phase 5
Production Cutover
Execute the production load in dependency order with idempotent upserts.
-
Risk if skipped: Writes during cutover create a delta that the final export misses, leaving records behind in the source.
-
Risk if skipped: A workflow created mid-project that no one paused fires on every imported contact and triggers notification spam.
-
Risk if skipped: Without per-step row counts, reconciliation in Phase 6 becomes guesswork.
-
Risk if skipped: Pushing through partial loads creates orphan records and double-counted rows that take weeks to untangle.
Phase 6
Validate
Prove the migration was correct before letting users in.
6a. Reconciliation
-
Risk if skipped: Silent row drops show up as a count delta with no error file — the only way to catch them is the reconciliation step.
-
Risk if skipped: Currency normalization bugs only surface in totals — per-record spot checks miss them.
-
Risk if skipped: Standard fields look fine in spot checks while custom properties show as blank, and the issue surfaces weeks later.
6b. Relationship validation
-
Risk if skipped: Activities attached to the wrong record corrupt the timeline view that reps rely on for context.
6c. Audit and compliance
-
Risk if skipped: EU customer contracts often demand documented residency evidence; missing it surfaces during a customer audit later.
6d. User-acceptance check
-
Risk if skipped: QA by the migration team alone misses the subtle business-context mistakes that real users spot immediately.
6e. Sign-off
Phase 7
Post-Migration Cleanup
Wrap up so HubSpot becomes the unambiguous system of record.
-
Risk if skipped: Leaving the source writable invites confusion about which system is the truth.
-
Risk if skipped: Auto-deletion turned on too aggressively after a migration removes recently-loaded but as-yet-unengaged records.
-
Risk if skipped: Deleting source exports too early leaves no recovery path if a data issue surfaces in month four.
Watch list
Risks to track throughout
These risks live across multiple phases — keep an eye on them from kickoff through cutover.
-
Marketing Contacts tier creep during bulk import
HubSpot bills by Marketing Contacts ceiling per subscription tier. Importing past the ceiling triggers an immediate billing jump to the next tier for the full annual term, with no downgrade until renewal. Decide before Phase 5 which imported contacts will be flagged as Marketing Contacts versus non-marketing, and validate the count against the tier ceiling before any production load.
-
Picklist internal-value vs. display-label mismatches
HubSpot enumeration properties (Lifecycle Stage, Lead Status, Deal Stage, custom dropdowns) match imports against internal values, not the display labels users see. Mapping against labels silently drops the value and leaves the property blank. Maintain the source-value-to-internal-value table from Phase 3a as the single source of truth and validate the mapping on the sandbox sample before production.
-
Freeze-window slippage and source-system delta
Every hour the source stays writable after the announced freeze creates a delta the prepared transform does not include. Communicate the freeze in writing, set source permissions to read-only at the freeze moment, and diff the final cutover export against the Phase 2 baseline so the delta is loaded explicitly rather than discovered missing post-cutover.
-
Custom property pre-creation discipline
Properties that do not exist at import time are silently dropped — there is no error file row for missing properties, just blank fields after load. Pre-create every custom property in Phase 1b with the correct type and the Unique flag where it serves as an upsert key, and confirm the internal property name in your mapping spreadsheet matches the destination before any sandbox or production run.
Pair this with the long-form guide
The complete HubSpot migration guide
Same research, written as prose: data model, import mechanisms, mapping strategy, pitfalls, and partner landscape.