CRM Data Migration Checklist: Mapping, Testing, and Cutover
A CRM migration is successful when people can continue their work with trustworthy customer records, relationships, and history. An import that finishes without errors is only one checkpoint. This guide proposes a practical acceptance plan for moving between CRMs or bringing spreadsheet data into a CRM, with specific import behaviors grounded in HubSpot and Odoo documentation.
1. Define what must survive the move
Inventory contacts, companies, deals, activities, notes, attachments, owners, custom fields, pipelines, and integrations. For each item, decide whether to migrate it, archive it with controlled access, or exclude it with the business owner's agreement. A record export should not be assumed to include every attachment, activity, permission, or configuration.
Write acceptance criteria around real work: a salesperson can find an open opportunity, its company and contact, the latest activity, its next action, and the responsible owner. Identify which reports must reconcile and which old links or integrations will need updating.
- Object inventory with counts, owners, and scope decisions
- Source export and target import capabilities checked separately
- Access, retention, and communication preferences preserved
- Named business owner for migration acceptance
2. Build an identity and field-mapping workbook
Keep source record IDs as text and maintain a crosswalk from each source object and ID to the target record ID. Names alone are weak matching keys: different customers can share a name, and the same company can appear under several spellings. Preserve original values alongside transformations so a disputed change can be traced.
HubSpot documents object-specific unique identifiers for matching records during import. Odoo 19 documents consistent External IDs for updating records on later imports. These are platform-specific mechanisms, not interchangeable ID formats; test the chosen matching rule in the actual destination.
- Source object and field; destination object and field
- Data type, required values, option mapping, date format, and time zone
- Matching key, transformation rule, and blank-value behavior
- Owner mapping and treatment of inactive users
3. Resolve duplicates and preserve relationships
Agree on duplicate rules before loading. Separate exact matches from uncertain candidates, and send ambiguous cases to an accountable reviewer. Decide which record contributes each field rather than keeping whichever row happens to import last. Record the merge decision and surviving identifier.
Treat relationships as their own deliverable. A contact-to-company link and an opportunity-to-contact link must survive even when names change. Plan the dependency order and retain unresolved references in an exception list. HubSpot supports multi-object imports and associations, but required properties and available features depend on the object and account.
- Duplicate decision log with reversible source evidence
- Parent and child ID crosswalks
- Expected relationship counts and checks for orphaned records
- Explicit exceptions for records lacking a reliable match
4. Rehearse a small but difficult sample
Use an isolated test environment where available, or a tightly controlled pilot with an agreed recovery method. Include difficult records: missing optional values, shared email addresses, multiple company relationships, inactive owners, non-English characters, long notes, and dates near a time-zone boundary. Protect personal data in every export and test copy.
Odoo provides a Test action to validate an import before loading it. Validation does not prove business completeness. After any test import, inspect the resulting records and compare them with the mapping workbook. In HubSpot, existing emails, meetings, notes, and tasks cannot be updated through import; plan activity history separately instead of assuming every object supports a repeatable update.
- Expected versus actual created, updated, rejected, and skipped records
- Correct owner, stage, dates, permissions, and relationships
- Representative attachments and activity history opened by an operator
- Repeat-import behavior tested for each supported object type
5. Make cutover and recovery explicit
Choose when the destination becomes the system of record. Record how writes in the old CRM will be paused or captured, how the final changes will be extracted, and who can stop the cutover. Identify integrations and workflows that could send messages, create tasks, or overwrite migrated data, and control their activation during the move.
A source export alone is not a rollback plan. Distinguish removing newly created records from restoring overwritten values, and account for new work entered after launch. Verify the platform's recovery options and rehearse the steps you intend to use. If recovery cannot preserve new transactions, document that boundary before proceeding.
- Final export timestamp and incremental-change procedure
- Cutover decision owner and stop conditions
- Backup or restore evidence and tested recovery steps
- Integration activation sequence and user communication plan
6. Reconcile the result and hand it over
Reconcile records by object and business status, not just one total row count. Compare open opportunities by stage, owner, and currency; do not combine amounts in different currencies into a misleading total. Match critical fields and relationships by stable ID, and investigate every unexplained difference.
Ask business users to complete representative workflows before accepting the migration. Keep the source available under the agreed retention and access plan until reconciliation and handoff are complete. Assign an owner to each remaining exception and document how to maintain mappings, monitor integrations, and correct records after launch.
The minimum handoff package is an approved scope, mapping workbook, ID crosswalk, import logs, exception register, reconciliation results, recovery instructions, and operating ownership. This is a proposed delivery checklist, not a claim that every CRM supports the same import or recovery features.