Data migration without the horror stories
moved, verified, and never deleted twice
Most migrations go wrong because someone skips the boring steps: no backup, no verification, one all-at-once cutover with no way back. We rebuilt a factory's ERP from scratch on self-hosted servers, so we treat every migration like something could break, and plan for that before it does.
Why migrations go wrong
Data migration moves data from one system to another: a CRM, an ERP, an e-commerce platform. The hard part is never the export and import themselves. Both systems describe the same real thing (a customer, a product, an order) in slightly different ways. The real engineering work is translating between them. That means mapping fields correctly, handling the records that don’t map cleanly, and checking that nothing got lost along the way.
When it’s worth doing (and when it’s not)
You need this when you’re switching platforms: a CRM, an e-commerce engine, an ERP. It’s also what you need when you’re pulling data out of a system you’re losing access to. Maybe a SaaS account got locked, a vendor is shutting down, or a cloud contract is ending. The same applies when two systems that grew up separately need to become one, say two brands’ CRMs after a merger.
You don’t need a full migration project to move a small amount of simple data between two systems that both support standard export and import formats. That’s just a task, not a project. The careful, staged approach earns its cost once the data volume, the complexity, or the cost of getting it wrong goes up.
How we handle the move
Every migration starts with a full backup of the source system, taken before anything else happens. It doesn’t matter how confident anyone is that the move will go smoothly. We document the field mapping and review it with you before running anything, instead of finding problems through trial and error on live data.
We test the migration against a copy of the source data first. This is where we find the edge cases, before any of it touches something real. A field might not map cleanly. The destination might reject a record format outright. Where we can, we stage the actual cutover, moving and checking data in groups instead of flipping everything at once. A parallel-run period lets us compare both systems side by side before we retire the old one. The rollback plan is tested before cutover starts, not written in a panic afterward.
This is the same discipline that let us rebuild a factory’s full production and stock ERP on self-hosted servers with zero data loss. We used the same approach migrating a store’s catalog and order history during a platform rebuild.
What can still go wrong
The costliest mistakes come from skipping verification: assuming an export that looks complete actually is, without checking record counts and sampling real values against the source. We treat verification as a required step with a clear pass condition, not a nice-to-have if time allows.
Keep the source system untouched and available until the destination is fully verified and your team has actually used it and confirmed it works. Deleting or disabling the old system too early is the single most common way a migration becomes unrecoverable. Cost of ownership after a migration is usually low. It’s a one-time project. Still, budget a short window after the move where edge cases surface under real use that a test run didn’t catch.
We also keep the migration scripts as artifacts after the project ends. We don’t throw them out once the cutover succeeds. Months later, when someone asks why a specific record looks the way it does, the actual transformation logic answers that question far better than anyone’s memory.
What it costs and how long it takes
| Scope | Price | Timeline |
|---|---|---|
| Clean, documented source system | from $1,500 | 1 to 3 weeks |
| Legacy or undocumented system, large volume | from $5,000 | 4 to 6 weeks |
What this pairs with
Built as part of custom development. It often follows an ERP integration or CRM integration project, and pairs with monitoring and observability once the new system is live. See the full story in the factory ERP recovery on self-hosted infrastructure. Tell us which systems you’re moving and how much data, and we’ll take it from there: get in touch.
FAQ
How much does a data migration cost?
A migration between two systems with a straightforward, well-documented data model starts at $1,500. A migration involving a legacy system with an undocumented or unusual structure, or very large data volume, runs $4,000 to $12,000.
How long does it take?
It is almost always 1 to 6 weeks, and the deciding factor is how well we understand the source system going in. A clean, well-documented export takes days. A legacy system nobody has documented in years needs real investigation first.
What if something goes wrong during the migration?
The source system stays backed up and untouched until we verify the destination. We also have a tested rollback plan ready before cutover starts, not a vague promise to figure it out if something breaks.
Can you migrate from a platform we no longer have admin access to?
Sometimes, depending on what access is left: read-only access, an old export, or browser automation against a surviving login. We recovered a full ERP's data this way after a client lost a cloud account, so we know what is actually recoverable before we promise anything.
Do you migrate the whole system at once?
Usually not. We prefer a staged cutover over one irreversible all-at-once switch. We move and verify data in groups, checking both systems against each other during a parallel-run period.