Most migrations go wrong in the same way. The team spends weeks choosing a platform, then exports everything from the old system, uploads it in an afternoon, and discovers on day two that the new CRM looks exactly as cluttered as the old one, only now with a fresh logo. The import is not the hard part. Deciding what deserves to be imported is.
Start by Deciding What You Are Not Bringing
Before touching a spreadsheet, write down what the new CRM is for. If reps will use it to run live deals, then closed-lost opportunities from six years ago and contacts who left their companies long ago are baggage. You can keep them in an archive file without loading them into the system people look at every day.
In practice, a useful rule is to sort every record type into three buckets: migrate and keep active, migrate as read-only history, and leave in an archive export. Activity logs are a common candidate for the middle bucket. Nobody needs ten thousand logged calls cluttering a contact timeline, but a summary note saying “last meaningful conversation” is valuable.
Take an Honest Inventory
Export each object (contacts, accounts or companies, deals, notes, tasks) to a spreadsheet and look at it with fresh eyes. You are looking for patterns, not individual errors:
- Fields that are empty in most rows. These are candidates to drop rather than recreate.
- Fields where people typed free text that should have been a dropdown, such as country, industry or lead source.
- Records with no owner, or with owners who have left the company.
- Contacts with no email and no phone, which are often just placeholders.
- The same company spelled four ways.
Write the findings down. That list becomes the cleanup scope and gives your sponsor something concrete to approve.
Deduplicate Before You Import, Not After
Duplicates are far cheaper to fix in a spreadsheet than inside a live CRM where records already have activity, owners and automation attached. Decide on your matching keys first. For contacts the usual key is email address; for companies it is often the website domain, since company names vary so much. Normalize both before comparing: lowercase the email, strip “www.” and trailing slashes from domains, and trim stray spaces.
When two records match, keep the one with the most recent activity or an assigned owner, and copy non-empty fields over from the other. Decide this once and apply it consistently.
Map Old Fields to New Fields on Paper First
A field mapping sheet is the most underrated document in any implementation. It has one row per source field and columns for the destination object, destination field, data type, and any transformation needed. Where the old system had a free-text “Status” and the new one has a fixed picklist, you need to translate every distinct old value to a new one, and decide what happens to values that fit nowhere.
Dates, phone numbers and currencies deserve special attention. Check how the new system expects them to be formatted, and be explicit about time zones for any date-time fields. Also confirm how the platform handles relationships: it will usually need to know which company each contact belongs to via an identifier, so you may need to import accounts first, then contacts, then deals.
A Cleanup Checklist You Can Work Through
| Task | Why it matters | Done when |
|---|---|---|
| Archive full raw export | Safety net if something is wrong later | File stored somewhere read-only |
| Remove or archive stale records | Keeps the new CRM relevant | Agreed cutoff applied |
| Normalize emails and domains | Enables reliable matching | Consistent casing and format |
| Merge duplicates | Prevents split histories | Survivor rule applied to every match set |
| Standardize picklist values | Makes reporting possible | Every value maps to a new option |
| Assign owners | Records without owners go unworked | No blank owner column |
| Test import on a small sample | Finds mapping errors cheaply | Sample reviewed by a real user |
A Hypothetical Example
Imagine a small services firm with eight thousand exported contacts. A third have no email, a few former employees still own hundreds of accounts, and the “Industry” field has dozens of spellings. They archive records with no email and no recent activity, hand the orphaned accounts to the sales lead for redistribution, and collapse industries to ten values. A fifty-record test import shows phone numbers losing their country code because the column was formatted as a number. They fix it, retest, and only then run the full load.
Run the Import in Stages
Always do a small test load first, into a sandbox if you have one, otherwise with a clearly labeled tag you can filter and delete. Open a few records as a rep would and check the company link, owner and notes. Then rehearse at larger scale before the real run.
Keep the original record identifiers from the old system in a dedicated field. It looks like clutter until the day someone asks “where did this contact come from?” or you need to reconcile a count against the source.
Verify Afterward
Compare counts by object against what you intended to load, then ask two or three users to find a customer they know well. Their answers will catch gaps no count can.
Frequently Asked Questions
How much cleaning is enough before migrating? Enough that the records people will use daily are findable, unique and owned. You do not need perfection. Fix what blocks matching, ownership and reporting, and leave low-value cosmetic issues for later.
Should we import everything and clean later? Rarely. Cleaning after import means working around live automation, ownership rules and user activity. It is also easy to never get round to it once the project is declared finished.
What if we do not have a sandbox? Tag your test records with an obvious label, such as a lead source called “TEST IMPORT”, so you can filter and bulk delete them. Check your platform’s current documentation for bulk delete behavior before relying on it.
Who should approve the field mapping? Someone who uses the data daily, usually a sales or support lead, together with whoever will build reports. Admins can map fields technically, but only users know what the fields really mean.
Do we need to keep the old system after migrating? Plan to keep read access for a defined period, not forever. Agree on an end date, and make sure you have a full export stored before the subscription lapses.
Next Step
Export one object this week, contacts or accounts, and spend an hour filtering it for blank owners, missing emails and duplicate domains. Write the counts down. That single page will tell you how big your cleanup really is.
By CRMNestly Editorial · Updated November 4, 2026
- CRM data migration
- data cleanup
- CRM import
- deduplication