Data Migration for Finance Systems
Data migration — extracting, cleansing, mapping, loading and reconciling data into a new finance system — is the highest-risk part of a cutover. Why source data is always dirtier than you think, and how to migrate balances that reconcile to the penny.
Data migration is the process of moving data from the old finance system to the new one — extracting, cleansing, mapping, loading and reconciling it — and it's the highest-risk part of a cutover. Two things make it dangerous: finance data must be complete and correct to the penny (a wrong balance or a lost open item corrupts the books from day one), and source data is always dirtier than anyone expects. Migration is far less a technical load than a data-quality project wearing a technical costume — and teams that treat it as the former are the ones whose migrations run late and land wrong.
What it is
Migration takes the data your business depends on and moves it into a new home with a different structure. It's not a copy-paste; it's extract, clean, reshape to the new model, load, and — the step everyone shortchanges — prove it's right. In finance, the payload is three layers: master data, opening balances, and open items.
Why it's the riskiest part
Most systems start empty and fill up. Finance systems start full, with the whole past carried forward — so migration isn't a nice-to-have, it's the foundation the new system stands on. And the source is never clean:
Every finance data migration reveals the same secret: the old system was full of data that never quite reconciled either. Migration is where a decade of small data sins finally have to be paid off.
Duplicates, gaps, inconsistent codes, balances that never tied — it's all there, and now it has to be confronted rather than tolerated.
The layers
- Master data first. Accounts, entities, bank details, counterparties, standing instructions. Everything else references it, so it's migrated and validated before anything transactional.
- Opening balances. The carried-forward position at the cut — which must tie exactly to the old system.
- Open items. In-flight invoices, unreconciled payments, open deals — the transactions that must continue their life in the new system, none lost.
The process: extract, cleanse, map, load, reconcile
- Extract the data from the legacy system.
- Cleanse it — fix duplicates, gaps and inconsistencies. Usually the biggest, most-underestimated effort.
- Map and transform it from the old data model to the new one, where the same concept is often structured differently.
- Load it into the new system.
- Reconcile and validate — prove the loaded data equals the source.
The last step is not optional and not a formality; it's the point.
Data quality is a workstream, not a task
The single biggest planning error is treating cleansing as a step rather than a workstream. Dirty source data is the norm, and cleaning it takes time, business knowledge and decisions ("these 400 records are duplicates — which survives?"). Start it early, run it in parallel, and staff it with people who understand the data — not as a scramble the week of cutover.
Mapping old model to new
The old and new systems rarely model the same concept identically — a field in one is three in the other; a code scheme changes. Mapping is where those decisions get made and documented. Get it wrong and data lands in the wrong place looking fine, which is worse than an obvious failure.
Reconciliation: prove it, don't hope it
Every migrated layer is reconciled with control totals — record counts and amount sums, source versus target — exactly as with any interface. Source has 12,438 open items totalling €X; target must have 12,438 totalling €X. Counts catch losses; sums catch corruption. And it ends in an explicit sign-off that the migrated data is accepted.
Rehearse it: mock migrations
Like cutover itself, migration should not be run live for the first time. Do mock migrations — trial loads on real data — to find the problems (bad mappings, missed cleansing, load errors) while they're cheap. Each rehearsal improves the runbook; the live migration should be the nth time you've done it.
How much history?
A common trap is migrating everything. Usually you migrate master data, open items and opening balances — the data the new system needs to operate — and archive the closed historical detail rather than dragging years of it across. Migrating too much history adds risk and effort for data you could keep accessible elsewhere. Decide the cut deliberately.
What usually goes wrong
- Underestimating cleansing. Treating dirty data as an edge case instead of the main event, so the timeline blows.
- Migrating garbage. Loading dirty data faithfully — now it's dirty in the new system too.
- No reconciliation. "It loaded" mistaken for "it's correct," so a wrong balance surfaces in the first close.
- No rehearsal. A big-bang live migration with no mock run, so every surprise lands at the worst moment.
- Migrating too much history. Hauling years of closed data across, adding risk for little value.
Cleanse early as a real workstream, map deliberately, reconcile every layer to the penny, rehearse with mock loads, and migrate only the history you need — and data migration stops being the thing that quietly corrupts the new system and becomes the solid foundation a clean go-live stands on. Get the data right, and most of cutover's risk is already behind you.
Part of the Finance Systems Delivery guide. See also cutover and go-live and interface monitoring and reconciliation. The newsletter sends one finance-systems pattern every two weeks.