Short answer
A Salesforce migration goes well when every source record has an external ID, the field mapping is signed off before anyone loads data, records go in parent first, and you rehearse the full load in a sandbox before cutover. Keep the source export and the load logs, because regulated firms may need to show where a record came from.
Before you load anything
- Inventory the sources. Old CRM, spreadsheets, custodian files, email marketing lists. Name an owner for each.
- Write the data mapping document. Source field, target object and field, transformation rule, default value. The business owner signs it off.
- Decide what not to migrate. Closed records older than your retention requirement may belong in an archive instead of the CRM. Confirm with compliance before you drop anything.
- Add an external ID field on every target object and fill it with the source system's ID. It makes reloads safe through upsert and lets you trace any record back to its source.
- Clean before you load. Deduplicate people and companies in the source, standardize states, phone formats and picklist values.
Load order
- Users and ownership mapping
- Accounts (households and businesses), then Person Accounts or Contacts
- Relationship records (Account Contact Relationships)
- Financial accounts, opportunities and other child records
- Activities, notes, files and email history
Use Data Loader or the Bulk API for volume. Turn off validation rules, flows and rollups that the load doesn't need, and turn them back on in the same session.
Rehearse, then cut over
- Run the full load in a Full or Partial Copy sandbox and time it.
- Reconcile counts by object and spot-check 20 to 50 records with the business owner.
- Agree a freeze window for the source system, run the final delta, and keep the source read-only for a period after go-live.
Keep the evidence
Save the source extracts, the mapping document version, load success and error files, and the reconciliation sheet. If an examiner or auditor asks where a client record came from, you can answer from the external ID and the logs.
Official documentation
Frequently asked questions
What is an external ID in a Salesforce migration?
A field marked as an external ID that holds the record's ID from the source system. It lets you upsert, so reloading a file updates existing records instead of creating duplicates, and it traces each record back to its source.
Should we migrate all historical data into Salesforce?
Not always. Migrate what users need to work and what your recordkeeping rules require to be retrievable. Older closed records can go to an archive, but confirm the retention rules with compliance first.
Salesforce, HubSpot, Anthropic and OpenAI change their products often. Check the official documentation before you rely on a specific setting, limit or price.
