
Tekunda Team

Tekunda Team

Short answer: a Salesforce data migration is decided in the data-quality phase, weeks before load day. Profile the source data, decide deliberately what not to move, map every field with an external ID behind it, then rehearse the cutover until it is boring. Loading is the easy part, and it is almost never what goes wrong.
Rarely because of the load. Data Loader, Bulk API and the ETL tools all work. Failures trace back to decisions dodged earlier:
All four are cheap to fix in week two and brutal on cutover night. That is the whole argument for front-loading data quality.
Profiling is measurement, not inspection. Before anyone writes a mapping row, produce numbers for each source object:
The output is a short profile report. Its real job is turning opinions into numbers, so scope conversations end in a decision instead of a meeting.
This is the highest-leverage decision in the project and the one most plans skip. Every record has four possible fates, and only one of them is expensive:
Sensible defaults: closed records older than your reporting horizon get summarised, contacts with no activity and no reachable email get archived, and free-text fields nobody reports on do not come across at all. Every record you exclude removes mapping effort, validation failures, test cases and post-go-live support. Reduced scope is the cheapest performance improvement available.
One row per target field, carrying: source field, transform rule, default value, owner, the validation it must pass, and the sign-off date. A row with no owner is not a mapping, it is a hope.
Two technical decisions determine how calm the rest of the project is:
Then decide, in writing, which automation is suspended during the load and who turns it back on: validation rules, triggers, flows, assignment rules, duplicate rules and email alerts. An unplanned welcome email to 40,000 migrated contacts is the classic version.
Three, minimum, in a sandbox that resembles production.
Keep every error log and treat the error rate as a trend. If run three is not materially cleaner than run one, the mapping is not converging and the go-live date is fiction.
A cutover plan is a sequence with clock times and an owner per line, not a narrative:
Define rollback before cutover night, while it is a design question and not a panic. In practice: keep the legacy system authoritative and read-only until sign-off, and keep an external ID on every migrated record so a targeted delete or full re-load stays possible. Then staff the first 48 to 72 hours properly, because day-one questions reveal what the profile report missed.
We run migrations this way on client delivery, and it is part of how we have taken 16+ organisations live in production. Scoping one and want a second opinion on the data before a date is committed? Start here.
How long does a Salesforce data migration take?
The load takes hours. The project takes as long as data-quality decisions take, which is why the timed dry run, not the plan, should set your cutover window.
Should we clean the data in the source system or during the load?
In the source where the owners are, wherever possible. Transform rules in a load script are invisible to the business and get re-litigated after go-live.
Do we need external IDs if we migrate only once?
Yes. They make retries safe, resolve relationships without Salesforce IDs, and are what makes a rollback or a targeted re-load possible later.
How much history should we bring across?
Only what a named process or report uses. Summarise the rest and archive the remainder outside the CRM: history is the most common source of scope creep here.