CRM Migration
Migrations between Salesforce, HubSpot and Odoo, and off spreadsheets, legacy CRMs and ERP-embedded customer lists. Field mapping, cleaned data, rehearsed cutover, and a rollback plan agreed before the window opens rather than debated during it.
Rehearsed into staging first. Reconciled and signed off before cutover. The old system stays read-only until you say otherwise.
What breaks
The records usually arrive. What goes missing is everything that made the records useful: who they belonged to, what happened to them, and which report depended on them.
Two source fields become one target field, or one becomes three. Without an explicit rule, the import picks whichever it reads last and the choice is never recorded.
Contacts arrive. Which contact belongs to which deal, which activity to which record, which historical owner had which account, does not. The records are right and the graph is empty.
Everything lands on the importing admin account. Territory, rep attribution and commission history vanish, and the first forecast after go-live is attributed to one person.
Files live in a different store with different permissions. Proposals, signed contracts and call notes are the records people actually search for, and they are the first thing dropped when the deadline moves.
The old system had approvals, routing and reminders nobody documented. On the new platform they are either forgotten or reinvented differently, and the process changes without anyone deciding it should.
Two reports with the same name counted different things. After migration one of them silently changes meaning, and the number in the board pack moves for reasons nobody can explain.
The part that decides the project
Moving rows between two systems is well understood, and it is rarely where the effort goes. What separates a migration from a data dump is whether the graph around each record survives it.
The easy half
Accounts, contacts, deals, cases, products. Every platform will accept these in bulk, and the mechanics are well understood.
The half that decides it
Which record belongs to which, who owned it, and in what order things happened. This is where a migration either preserves your history or quietly resets it.
How it runs
The migration is performed in full, into staging, before it is performed in production. Go-live is then a repetition of a known-good run rather than the first attempt at one.
Inventory the source: objects, record counts, custom fields, automations, attachments, integrations and the reports people actually use. This is a migration plan or it is guessing.
Field mapping written down, value translations agreed, duplicates merged by a rule you approve. Cleaning happens before import, not as a follow-up project nobody funds.
Full run into a staging copy of the target. Timed, logged, with a reject file for every record refused and the reason attached.
Counts compared object by object, associations spot-checked, reports re-run against both systems and the differences explained. You sign off on evidence, not on reassurance.
The same run, repeated in production inside an agreed window. Source stays read-only rather than switched off, and hypercare starts the morning users arrive.
Nothing is imported into production that has not already been imported into staging. That single rule removes most of the reasons migrations go badly, and it costs one extra run.
Scope decisions
A migration quote without these three answers is a number with nothing behind it. We ask for them in daylight so they can be priced rather than absorbed.
| Decision | What it changes | Typical answer |
|---|---|---|
| History depth | How far back activities and closed deals are carried over. Drives volume, run time and reconciliation effort. | Three to five years of closed deals, all open records |
| Attachments | Whether files move, and whether permissions travel with them. Often the largest data volume and the least planned. | All files on open records, recent files on closed |
| Associations | Whether relationships and historical ownership are reconstructed, or records land flat with a single owner. | Reconstructed, including historical owner |
Every one of these is a decision, not an accident. Where a field has no home, you will see it on a list and choose: carry it as text, drop it, or keep the source read-only for reference. What you will not get is a version of events where it silently disappeared.
When it goes wrong
Cutover happens under time pressure, which is the worst possible moment to invent a decision. So the triggers are agreed, written down and signed while everyone is still calm.
If record counts or association checks miss the threshold you set in advance, the run stops and the window closes without a decision being argued. The threshold is a number you choose, not a judgement made at 2am.
If the automations that gate the business — approvals, routing, invoicing triggers — fail after two repair attempts, that is a rollback rather than a third attempt under pressure.
The old system is not decommissioned at cutover. It goes read-only for an agreed period, so a reversal is a permissions change rather than a data recovery exercise.
The production run repeats a staging run that reconciled and was signed off. A rollback is therefore unusual, and if it happens it is because something differed between the two environments, which is itself a finding.
What actually frightens a mid-market buyer is not the migration failing. It is finding out on Monday morning that nobody had a plan for it. Everything on this page exists to make that specific fear unnecessary.
Proof
Three engagements where the data had to arrive intact for the project to mean anything.
Only around 60% of recurring donations were being processed. Bank integration and a reconciled donation record restored the flow without replacing the platform or losing donor history.
Read case studyRegulated KYC onboarding moved out of email and spreadsheets. Client and document history had to be preserved exactly, because the regulator would ask for it.
Read case studyEnquiry history from several channels consolidated into one service record, so a customer's previous contacts stayed attached when volumes doubled.
Read case studyWhat needs a decision, and which part is likely to be the difficult one.
FAQ
Before the window opens
Name the source system and we will tell you what usually survives it, what usually needs a decision, and which part is likely to be the difficult one. That is the conversation that makes a migration quote mean something.