CRM migration checklist: contacts, deals and links
Plan a CRM migration with field mapping, stable identifiers, record links, reconciliation and a controlled cutover. Download fictional practice data and acceptance worksheets.
In this guide
- How do you migrate CRM data without losing important relationships?
- What should be included in a CRM migration?
- Create the target model and field map first
- Do contacts, companies and deals always need separate imports?
- Work through a small fictional migration
- How do you check whether the migration worked?
- Which product-specific import rules can change the plan?
- Why does a CRM import create duplicates?
- What should the cutover and recovery plan cover?
- How long will a CRM migration take?
- Download the fictional practice pack and migration worksheets
How do you migrate CRM data without losing important relationships?
Inventory the records and the links between them, preserve source identifiers, map fields and owners, then rehearse a small import in an authorised test environment. Reconcile record counts, deal amounts and relationships before agreeing the final move. Keep a change log and a practical recovery plan for cutover.
Do not accept a migration solely because a CSV uploaded successfully. A contact can exist while its company, deal, follow-up activity or responsible owner is wrong. The downloadable example below makes those links explicit using fictional records.
What should be included in a CRM migration?
List companies or accounts, contacts, open deals, relevant activities, notes, attachments and any custom objects actually used. Decide which historical material must move and which will remain in an accessible archive. Separately inventory automation, reports, forms, calendar or email connections and integrations: a record export does not establish that those configurations will transfer. Name an owner for each item and mark it as migrate, rebuild, archive or exclude. Resolve access and retention requirements with the responsible people before moving live customer information.
Create the target model and field map first
For every source field, record the target object, target property, data type, allowed values, transformation, matching rule and review owner. Keep stable source IDs so you can connect records and explain exceptions. Decide how owners, stages, currencies and dates map before importing. A field called Status can describe different business meanings in two systems. Keep the source key separate from the target CRM’s native Record ID: C001 in the practice files is an old-system reference, not an instruction to update a new CRM record numbered C001. Retain the source-to-target mapping. Blank values also need a rule: in the reviewed HubSpot import documentation, blank cells do not clear an existing property value. Explicitly verify update and deletion behaviour rather than using an empty cell as an assumed instruction.
Do contacts, companies and deals always need separate imports?
No. Import order and file layout depend on the target CRM and the chosen import route. HubSpot documents single-file and multi-file association patterns using suitable unique identifiers. Pipedrive documents linking relevant items represented in the same spreadsheet row. A blanket instruction to always import companies, then contacts, then deals can miss those supported routes. Use the current target requirements for the actual objects and activity types. Separate generic migration preparation from a vendor-specific, tested field map; the practice files here are an illustrative source schema, not ready-made import templates.
Work through a small fictional migration
The practice pack has 2 owner roles and £62,000 of fictional open deal value, all in GBP. It contains source IDs and explicit links between the companies, contacts, deals and activities. These are expected source totals for a teaching exercise, not results from an actual HubSpot, Pipedrive, Salesforce or Zoho import.
| Deal | Company / contact | Owner role | Stage | Amount GBP |
|---|---|---|---|---|
| D001 | C001 / P001 | Sales lead | Qualified | £12,000 |
| D002 | C002 / P003 | Account manager | Proposal | £18,000 |
| D003 | C003 / P005 | Sales lead | Review | £7,500 |
| D004 | C001 / P002 | Sales lead | Qualified | £24,500 |
The stage totals are £36,500 Qualified, £18,000 Proposal and £7,500 Review. A matching grand total is useful, but it cannot prove that every deal belongs to the right company or owner.
How do you check whether the migration worked?
| Check | Expected evidence | Why a row count alone is insufficient |
|---|---|---|
| Record inventory | 3 companies, 6 contacts, 4 deals, 5 activities and 2 mapped owner roles | A duplicate and a missing record can cancel each other numerically. |
| Open value | GBP 62,000 across four open deals, with matching stage subtotals | The total can match while an amount, currency or stage is misassigned. |
| Relationships | Each deal resolves to its intended company, contact and owner; activities resolve to the intended deal and contact | Separate objects can import successfully while their links are wrong. |
| Working follow-up | An authorised user can find the next activity and responsible owner | Historical text may exist without a usable task or assignment. |
| Exceptions | Rejected, skipped and changed rows are reconciled to the source inventory | An import-success message can hide exclusions or partial handling. |
Inspect both totals and selected record chains. For example, follow C001 → P001 → D001 → A001 and A005. In a real migration, choose a representative sample and resolve every known exception before approval. Record what was checked and who accepted it.
Which product-specific import rules can change the plan?
HubSpot requires appropriate identifiers to update or associate records, and some association features depend on the subscription. Its deal creation requirements include a deal name and a valid pipeline and stage. Pipedrive’s minimum import fields differ by item type; its import guidance also describes skipped items and linked records. A file that meets minimum fields may still omit information the sales team needs. Check the current HubSpot CRM or Pipedrive scope alongside the target account. For a broader shortlist, compare HubSpot and Pipedrive or Capsule and Pipedrive.
Why does a CRM import create duplicates?
Start with the matching rule, object and import mode. Two rows with a similar name do not establish that they represent the same business entity. Repeating an import without a supported matching identifier can also create records when the intention was to update an existing one. Preserve source references and review the target’s actual create, update and association behaviour before repeating the job.
HubSpot ordinarily uses contact email and company domains for automatic deduplication, while mapped Record ID takes precedence over other identifiers. Its documented behaviour also depends on the import route and mode: identical object data can be grouped in a single-file, multi-object create-and-update import even without a unique identifier. That is not a universal promise for every import. An explicit, reviewed matching rule is more useful than relying on accidental row similarity.
| Case | Illustrative source values | Review before acting |
|---|---|---|
| Repeated source row | C001 appears twice | Choose an explicit create/update matching rule and retain one source-to-target mapping. |
| Same display name | C010 and C011 both named Example Studio | Ask the record owner whether these are distinct entities or source duplicates; the name alone does not decide. |
| Shared mailbox | P010 and P011 both use team@example.test | Confirm the intended contact model and how the target handles the shared address before combining records. |
| Old-system identifier | C001 is an old-system company key | Keep it as a source reference or mapped unique property where supported; do not assume it is the new CRM native Record ID. |
Do not automatically merge two source IDs because their display names match, or treat an old-system ID as the new CRM’s native Record ID. For an existing target record, obtain and verify its actual target identifier. Keep transformations and merge decisions with an accountable owner, then reconcile links and totals after a permitted rehearsal. These cases are editorial examples, not observed results from a vendor import.
Download the identity-review worksheet ↓
For cutover, record when source editing stops and how changes since the rehearsal will be captured. Reconcile the final dataset rather than assuming the earlier result still applies.
What should the cutover and recovery plan cover?
Name the source-of-truth system for each phase, the permitted editing window, the final export and the acceptance owner. Agree which integrations may write to the target and when they are enabled. Keep the old system or an approved archive available for the agreed verification period. A backup is an input to recovery; the plan must also say who restores access, how newly entered records are handled and how the team is told which system to use. Test the recovery route within the permitted environment and scope before relying on it for a live move.
How long will a CRM migration take?
There is no useful universal duration without the record, relationship and configuration inventory. A small contact list differs from years of activities, custom objects and operational integrations. Estimate discovery, cleaning, field mapping, target configuration, rehearsal, exception resolution, training and cutover separately. Ask a supplier to state the assumptions behind its schedule and what triggers additional work. Include the subscription overlap, implementation work and operating support in the budget. The software total-cost guide helps separate the first invoice from the retained arrangement.
Download the fictional practice pack and migration worksheets
Download the CRM migration practice pack (ZIP) ↓
Download the blank target field map ↓
Download the practice acceptance worksheet ↓
The pack contains five fictional record files, a field map, an acceptance worksheet, expected reconciliation JSON and instructions. Target fields and observed outcomes are deliberately blank. Read the instructions, map the source schema to your chosen CRM and use an authorised test environment. If you are still selecting the product, start with the small-business CRM buying guide. For a booking-to-sales workflow, pair this article with the appointment software checklist.
Frequently asked questions
What data should I move to a new CRM?
Inventory companies, contacts, open deals, required activities and any relevant notes, attachments or custom objects. Agree which historical records move, remain in an accessible archive or are excluded. Configuration and integrations need their own plan.
Should companies always be imported before contacts and deals?
Not as a universal rule. Some target CRMs support a single-file associated import; others use multiple files or another route. Follow the chosen target’s object, identifier and relationship requirements.
How can I check a CRM migration?
Reconcile the agreed record counts and currency-specific deal totals, inspect relationships and owner mapping, test a working follow-up and account for skipped or rejected rows. Keep evidence and acceptance ownership.
Will importing a CSV transfer CRM automations and integrations?
A record import does not establish that workflows, forms, reports or integrations have been recreated. Inventory and validate those items separately.
Are the downloadable CRM files ready to import into any CRM?
No. They are fictional source-schema examples for a controlled rehearsal. Map them to the target CRM’s current fields, unique identifiers and association rules before using an authorised test environment.
Why does a CRM import create duplicates?
Review the object, matching identifier and import mode. Similar names or repeated files do not establish a safe update rule. Verify source-to-target IDs, deduplication behaviour and associations in a controlled rehearsal before repeating the import.
Can an old CRM ID be used as the new CRM Record ID?
Do not assume that. Preserve the old ID as a source reference and map it to the actual target record or a supported unique source property. Native Record IDs belong to the target CRM records.
Do blank HubSpot import cells clear existing values?
The reviewed HubSpot import documentation says blank cells do not clear an existing property value. Use the documented supported method for the actual update or removal requirement.