A CRM migration checklist is only useful if it is ordered by what you cannot undo, and on the levelpartner.ai platform three things are hard to reverse: a custom field created on the wrong object, an import mapped onto the wrong fields, and a merge of two contacts. This checklist puts them in the right order across the 30 days around a move. Custom fields come first, then a test import of contacts and opportunities, then the duplicate merge, then cutover. It assumes the decisions about what to bring and what to rebuild are already made; those belong to the CRM migration strategy.
Why the order matters
The import screen maps each column of your file to a field that already exists. If the field is not there, that column cannot land anywhere useful, and creating fields halfway through an import is how teams end up with "Service type", "Service Type 2" and "service_type_old" on every record. So fields are built before any file is touched.
Merging is the other irreversible step. A merge cannot be undone, and the losing record's history moves onto the master. Run it on a test import first and you learn which rule picks the master before it matters. Run it on live data first and a wrong rule becomes permanent.
Treating a successful import as the finish line. An import where every count matches can still have dropped a consent flag, mapped deal values into a text field or merged two different people who shared an office email. Sign-off checks behaviour and relationships, not totals.
Day minus 30: the inventory
Write down what exists before you change anything. You cannot reconcile later against figures you never recorded.
- Every object the old system holds: contacts, companies, deals, notes, tasks, appointments and files.
- The record count for each object, in a sheet you will check against on cutover day.
- Every automation, scheduled email and assignment rule, with what triggers it and who relies on it.
- Every place consent lives: unsubscribes, do-not-call flags and suppression lists.
- Three named owners: one for data, one for behaviour, one senior person who signs off.
Suppose the inventory finds 18,400 contacts, 310 open opportunities and nine active automations. It might also turn up a renewals spreadsheet with 140 rows nobody had counted as CRM data, and four fields in the old system with no equivalent on the platform: sector, contract end date, account tier and referral partner. Those four would become the first custom fields, created before any import is attempted.
Day minus 21: build the custom fields
Take your mapping sheet, with one row per old field, and mark every field that has no standard match. Each one needs a custom field, created on the right object. A field's object cannot be changed after creation, so decide now whether "contract end date" belongs to the contact or to the opportunity. The usual rule: if it describes the person or company, it is a contact field. If it describes one deal, it is an opportunity field.
- Go to Settings, then Custom Fields.
- Select the object you want to manage, Contact or Opportunity.
- Open the Fields tab to see the fields that already exist, and search the list to avoid duplicates.
- Click Create field.
- Open Field type and choose the type that matches the data, such as Single line, a date, a number or a dropdown.
- Set the Field name and the Folder name, and add a Description so the next person knows why it exists.
- Check the Live preview, then click Create custom field.
Group migration fields into one folder, such as "Imported from old CRM", so they are easy to review and retire later. Match field types to the data: a contract end date imported into a text field cannot drive a renewal reminder.
Day minus 14: the test import
A test import is a deliberate attempt to break the mapping with awkward records. Take a few hundred rows covering every edge case: contacts with no email, companies with many contacts, deals at every stage, and the four new custom fields filled in. Prepare the CSV to the platform's rules: a single sheet, a header row in the first line, at least one of name, email or phone on every row, and phone numbers without spaces or dashes.
- From the Contacts tab, click Import Contacts.
- Select Contacts and Opportunities so both are created from the same file.
- Click Next, upload your CSV and select the import type for new contacts or updates to existing ones.
- Match each CSV column to a field, including the custom fields you created.
- Set the optional preferences, such as tagging the imported contacts or creating a SmartList from them.
- Review the mappings and start the import.
- Track progress under Bulk Actions, click Show Stats and read the Error tab.
For opportunities to be created, the file needs Pipeline, Stage, Status and Opportunity Name columns. A contact and an opportunity on the same row are linked automatically. Tag the test batch so you can find and remove it later.
Then check it by hand. Open twenty records at random in both systems side by side. Confirm the deal sits on the right contact, in the right stage, with the right value. Confirm a suppressed contact arrived with its do-not-disturb setting. If anything is wrong, fix the mapping sheet and run the test again. Two or three rounds is normal.
Day minus 7: merge duplicates
Most migrations bring duplicates with them: the same person entered by two salespeople, or once with a work email and once with a personal one. Find them in the test data first, agree the rule for which record wins, then run the same process on the full data after cutover.
- Click Contacts, then the three-dot menu.
- Click Manage Duplicates.
- Under Find By, choose Email, Phone or Name.
- Click Find Duplicates.
- Expand a group with the down arrow to see the contacts in it, and click Review to check it in detail.
- Choose which value to keep for each conflicting field and which record is the Master.
- Click Merge Contacts, or click Reject to keep the records separate.
Merges cannot be undone, and rejected pairs are excluded from future scans. A merge handles up to 10 records at a time. Custom field values from the other records only fill blank fields on the master, so pick the master with the most complete data.
Day zero: freeze and cutover
- Agree a freeze time and tell everyone who touches client records. After it, nobody edits the old system.
- Pause the old system's automations at the freeze, not earlier, so nothing goes unsent and nothing fires twice.
- Take the final export and run the full import with the mapping you tested.
- Reconcile counts against the inventory and explain every difference in writing.
- Run Manage Duplicates on the full data using the rule agreed on day minus 7.
- Repoint every inbound route: website forms, booking links, phone numbers and email forwarding.
Say that after the freeze the old system holds 18,412 contacts and 312 open opportunities, and the platform shows 18,207 contacts and 312 opportunities after import and merge. The gap is 205 contacts. If 198 are duplicates merged on email and seven are records with neither email nor phone that the mapping sheet marked to drop, 198 plus 7 accounts for all 205. With every difference explained, the sign-off owner can approve.
Day plus 30: the follow-through
- Day one: each salesperson opens their own open deals and confirms stage and value.
- Week one: every rebuilt automation has fired at least once on a real contact, and none twice.
- Week two: compare pipeline value with last month's figure from the old system.
- Day thirty: take a final archive export of the old system, check it opens, then cancel the licence.
What you give up by working this way
The trade-off is a freeze. Between the final export and sign-off nobody updates a record anywhere, and on a busy day that costs a few hours of catching up afterwards. The alternative, both systems taking edits at once, sounds friendlier and produces a week of arguments about which version of a deal is true.
The second cost is time before the import. Fields, mapping and test rounds take far longer than the import itself, and they cannot be delegated to someone who does not know how the business sells. That is the real work of a migration.
Troubleshooting
A column has nothing to map to
The custom field does not exist or was created on the other object. Create it under the correct object and re-run the import as an update.
Opportunities did not appear
The file was imported as contacts only, or it lacks Pipeline, Stage, Status and Opportunity Name columns. Add them and import again with both objects selected.
Updates created new contacts instead
Updates match on contact ID, then email, then phone. If the old export has no IDs and emails differ, the platform cannot match. Clean the email column first.
Empty cells wiped existing values
The update import overwrote them. Tick Don't update Empty Values on the next run.
Where the rest of the move lives
Once the data is in, the pipeline stages, user roles and pilot follow the five-phase implementation sequence. If the custom field list grew long, read designing a client database before adding more. Companies setting up with no old system to move from should start with how to set up a CRM instead.
Frequently asked questions
How early should we start the checklist?
Thirty days suits one pipeline and reasonably tidy data. Several pipelines or years of neglected records push the start earlier, because fields and mapping take longer. The import itself rarely takes more than a day.
Who can run the import?
An admin user. Give the import to the data owner named in the inventory, so the person who built the mapping also runs it.
Should we merge duplicates before or after import?
Both. Remove obvious duplicates from the file before import, then use Manage Duplicates on the platform to catch the ones that only show up once records from different sources meet.
Can we undo a merge?
No. That is why the master rule is tested on the test import first, and why rejected pairs are reviewed before you dismiss them.