A CRM data migration has seven phases: audit what you have, clean it in a spreadsheet, map every field to the new system, import a 25-record test batch, run the full import, verify counts and spot-check records, then cut over and keep the old system read-only for 30–60 days. A team with under 5,000 records can finish in one to two weeks with about a day of hands-on work; 50,000 or more records with deal history usually takes four to six weeks. The three most common failures are duplicate contacts, picklist values that do not match, and record owners that do not map.
Switching CRMs, or moving off a spreadsheet, rarely fails because the new software is bad. It fails because 4,000 contacts arrived with 600 duplicates, every deal shows today's date as its creation date, and half the notes are attached to nobody. The team stops trusting the data in week two and drifts back to the inbox.
This CRM data migration checklist prevents that. It runs in seven phases, each with a short list of steps you can tick off, plus a field-mapping example, the failures we see most often, and realistic timelines by record count. It applies whether you are leaving another CRM or a spreadsheet; our CRM vs spreadsheet guide covers when to make that move.
What a CRM migration actually moves
A CRM holds more than a contact list, and each type of record moves differently. Contacts and companies are easy: one row each, imported first. Deals are harder, because each one must link to a contact or company and land in a stage that exists in the new system. Activities and notes are harder still; most import tools want them in a separate file linked by email address or an external ID. Users and record owners must exist in the new CRM before anything is assigned to them.
Some things usually do not move at all. Full email threads rarely import; you keep the old system for reference or forward the important ones. File attachments often need manual re-uploading. Audit history, who changed what and when, is almost never portable. Decide up front which of these you can live without, and write it down so nobody is surprised at cutover.
Check the destination's limits before you start. HubSpot's free plan caps at 1,000 contacts and Bigin's free plan at 500 records. monday CRM Basic allows 1,000 contacts and Standard 10,000. If your export has 3,000 rows, you need a paid tier before the import will complete; our best free CRM guide lists every cap.
Phase 1: Audit what you have
You cannot clean what you have not counted. This phase takes an hour for a spreadsheet and half a day for a CRM with several years of history.
- Export every object raw. Contacts, companies, deals, activities, notes, and users, each as its own CSV. Save these originals in a folder you never edit.
- Count records per object. Write the numbers down. These are the totals you will reconcile against after the full import.
- List every field and how full it is. A column that is 4% populated is a candidate to drop. A custom field nobody remembers creating is a candidate to ask about.
- Identify the records that matter most. Open deals, active customers, and anything touched in the last 12 months. These get spot-checked by hand later.
Phase 2: Clean the data in a spreadsheet
Fix problems in a copy of the export, not after import. Editing 2,000 rows in a spreadsheet takes an afternoon; editing 2,000 CRM records one by one takes a week.
- De-duplicate contacts. Match on lowercase email first, then on name plus company. Merge, do not delete, so notes from both copies survive.
- Standardise formats. Dates to one format (yyyy-mm-dd is safest), phones to one pattern with country code, currency values as plain numbers without symbols.
- Remove dead records. Leads with no activity in two years and no email address are noise. Archive them in a separate file rather than importing them.
- Fix picklist values by hand. If your old stage column contains "Proposal", "proposal sent" and "Prop", pick one and replace the others now.
Phase 3: Map every field
Import wizards auto-match columns whose names look similar. They get "Email" right and quietly skip or misfile "Stage", "Owner" and "Created". Build the map yourself, in a table like the one below, before you open the wizard.
| Source column | Target field | Transform | Watch for |
|---|---|---|---|
| Full Name | First name + Last name | Split on first space | Titles ("Dr."), single-word names, company names in the person column |
| Email (primary key) | Lowercase, trim spaces | Two addresses in one cell; this field drives de-duplication | |
| Phone | Phone | Convert to +1 555 000 0000 pattern | Extensions, letters, leading zeros dropped by the spreadsheet |
| Stage | Deal stage (picklist) | Map each old value to one new stage | Any value not in the new picklist fails or defaults silently |
| Owner | Record owner (user) | Replace names with the user's login email | Users must exist in the new CRM first; ex-employees need a reassignment rule |
| Created | Create date | yyyy-mm-dd | Many tools stamp today's date if this is blank or unmapped |
| Value | Amount | Strip "$" and commas | Currency mismatch on multi-currency pipelines |
| Notes | Note / activity | Separate file, linked by email or external ID | Length limits; notes attached to a merged duplicate |
| Old record ID | Custom field "Legacy ID" | Copy as text | Keep it; it is how you trace any record back to the source |
- Create custom fields and picklist values in the new CRM first. The wizard can only map to fields that already exist.
- Create every user before importing deals. Owners that do not match a user get dumped on the importer's account.
- Write the picklist map explicitly. Old value on the left, new value on the right, for stages, sources, types and statuses.
- Decide what happens to unmapped columns. Drop them, or park them in a "Legacy notes" text field. Do not let the wizard decide.
Phase 4: Import a test batch
Twenty-five records is enough to find every mapping error and small enough to delete cleanly if it goes wrong. Pick records that use every field, including the messy ones.
- Import 25 contacts and companies, then 10 linked deals. Use real records from your cleaned file, not the first 25 rows.
- Open five records and compare them field by field to the source. Check dates, owners, stages and phone formatting specifically.
- Fix the mapping, not the records. If a stage landed wrong on one record, it landed wrong on all of them. Correct the map and re-import.
- Delete the test batch completely before the full import. Otherwise the full run creates duplicates of your test records.
Still choosing the CRM you're moving to?
Our ranked guide compares six CRMs on ease of use, features and price, including import tools and export limits. Pricing verified this month.
Phase 5: Run the full import
Order matters. Import parents before children so links resolve: companies, then contacts, then deals, then activities and notes. Run it outside working hours if the team is still using the old system.
- Freeze edits in the old system. Announce a cut-off time. Anything entered after it will need re-entering by hand.
- Import in dependency order. Companies, contacts, deals, then notes and activities, checking the wizard's error report after each file.
- Save every error file. Rows the wizard rejects are the ones you will fix and re-import, so keep them separate from the originals.
Phase 6: Verify before anyone uses it
Verification is where you catch the errors that did not throw an error. Budget half a day for it.
- Reconcile counts. Records per object in the new CRM should equal your audit totals minus the duplicates and dead records you removed on purpose.
- Spot-check 20 records across objects. Include your most important open deals. Compare dates, owners, stages and amounts to the source.
- Check the three usual casualties. Deal stages, creation dates and record owners. Filter for deals created today, deals in the default stage, and records owned by the importer.
- Confirm notes landed on the right records. Open five contacts with long histories and read the notes. Orphaned notes are the hardest thing to fix later.
Phase 7: Cut over and keep the old system read-only
Cutover is a decision, not a technical step. From a named day, the new CRM is the only place work gets recorded.
- Pick a Monday. Import over the weekend, verify on Sunday, and start everyone on the new tool on Monday morning with a 30-minute walkthrough.
- Make the old system read-only. Remove edit rights or cancel down to a free or view-only plan, but do not delete it.
- Keep it for 30–60 days. Something will surface that did not migrate. Knowing you can look it up removes most of the anxiety.
- Export the old system one final time before it closes. Store the CSVs somewhere permanent, even if you never open them.
The rest of the launch, from user set-up to first-month adoption, is covered in our CRM implementation checklist.
What breaks most often, and how long it really takes
What breaks most often. Across the migrations we hear about, the same five problems account for most of the pain.
- Duplicates. Same person, two email spellings, or one export per rep. Fix in the spreadsheet by matching lowercase email.
- Picklist mismatches. A stage or source value that does not exist in the new CRM is dropped or defaulted without a warning.
- Owners. Names instead of login emails, or ex-employees who have no account. Everything lands on the importer.
- Dates. Blank or unmapped creation dates become today's date, which wrecks every "deals this quarter" report.
- Orphaned notes. Notes imported before the contact they belong to, or linked to a duplicate that was later merged.
How long the whole thing takes depends on record count and on whether you are moving deal history and notes, not just contacts. The estimates below assume one person doing the work part-time alongside their normal job.
| Record count | Typical source | Hands-on work | Elapsed time | Freeze on the old system |
|---|---|---|---|---|
| Under 1,000 | Spreadsheet or free CRM | 2–4 hours | 1–3 days | None; import in an evening |
| 1,000–5,000 | Entry-tier CRM, contacts and deals | About 1 day | 1–2 weeks | Half a day |
| 5,000–25,000 | CRM with deals, notes and custom fields | 2–4 days | 2–4 weeks | One day, ideally a Friday |
| 25,000–100,000 | Multi-object CRM, several years of history | 1–2 weeks | 4–6 weeks | A weekend |
| Over 100,000 | Several source systems or a large sales org | Vendor or partner services | 6–12 weeks | Staged, one object at a time |
If your migration is in the bottom two rows, ask the new vendor what migration help is included. Salesforce Pro Suite and HubSpot Professional (which carries a $1,500 onboarding fee) both come with structured onboarding that covers import; entry tiers generally leave you with the wizard and the help centre.
Frequently asked questions
How long does a CRM data migration take?
One to three days for under 1,000 records, one to two weeks for up to 5,000, and four to six weeks for 25,000–100,000 records with deal history and notes. Hands-on work is a fraction of that: about a day for a small business, one to two weeks for a large multi-object migration. Cleaning the data is usually the longest phase.
Can I migrate email history to a new CRM?
Usually not in full. Most import tools accept notes and logged activities as a CSV, but complete email threads rarely transfer. Connect your mailbox to the new CRM so future email logs automatically, keep the old system read-only for reference, and forward the handful of threads that matter to the relevant records by hand.
Should I clean CRM data before or after importing?
Before, in a spreadsheet copy of the raw export. De-duplicating, standardising dates and phones, and fixing picklist values takes an afternoon in a spreadsheet and a week in a CRM, record by record. Keep the untouched original export as a backup and clean a copy.
How do I avoid duplicates when migrating CRM data?
Match on lowercase email address first, then on name plus company, and merge rather than delete so notes from both copies survive. Delete your test batch before the full import, and check whether the new CRM's importer offers "update existing records by email" so a re-run does not create a second copy of everything.
Do I need a consultant to migrate CRM data?
Not for a migration under about 25,000 records with a clear field map. The seven phases in this checklist are discipline, not technical skill. Above that, or when moving from several source systems at once, ask the vendor what onboarding is included and get a fixed quote from a partner before deciding.
Conclusion
A CRM data migration goes wrong in predictable places: duplicates, picklists, owners, dates and orphaned notes. The seven phases here, from audit and cleaning through mapping, a test batch, the full import, verification and cutover, exist to catch each of those before your team sees the data. None of the steps is technical. All of them are tempting to skip.
The decision rule: never run a full import until a 25-record test batch matches the source field for field. And before you pick the CRM you are moving to, confirm it exports as cleanly as it imports; our best CRM software guide notes export support for every tool it ranks.
