Once the decision to build a new custom business system is made, most of the attention goes to what the new system will do — the screens, the workflows, the reports. What often gets left until the last minute is what happens to everything already sitting in spreadsheets, an old off-the-shelf tool, or a system that's being replaced: years of customer records, stock counts, past orders and notes. Moving that data across properly is not automatic, and it's one of the most common places a system launch goes wrong. This guide walks through what actually needs to migrate, a worked example of what that looks like for a fairly ordinary customer list, and how to tell a migration plan is solid before you sign off on it.
Why data migration is often the part nobody plans for
A new system's screens and workflows are visible from the first demo, so they get scoped, discussed and signed off early. The data behind them tends to get treated as an afterthought — "we'll just export the old spreadsheet" — until the export turns out to be three different spreadsheets kept by three different staff, none of which quite agree with each other. Planning for data migration at the same time the system itself is scoped, rather than the week before go-live, is what actually prevents this.
The cost of leaving it late isn't just stress in the final week. A migration discovered too close to go-live gets rushed, and a rushed migration is exactly where duplicate customers, dropped records and malformed dates slip through unnoticed — right before the business starts depending on that data every day.
What actually needs to move — and what doesn't
Not everything in an old spreadsheet or system deserves a place in the new one. Active customers, current stock levels and open orders clearly need to migrate; a decade of cancelled orders or discontinued products usually doesn't, and dragging it all in just adds noise a new system has to carry forward. Deciding what's active, what's historical-but-worth-keeping-for-reference, and what can simply be archived as a read-only export is a judgement call worth making deliberately rather than by default.

Cleaning up before you move
Data that's accumulated over years in spreadsheets or an ageing system is rarely clean: the same customer entered twice with slightly different spellings, dates typed in three different formats, required fields left blank because the old tool didn't enforce them. Migrating that as-is just moves the mess somewhere new — a new system will happily import duplicate customers or malformed dates, and then every report built on top of that data quietly inherits the error. Cleaning up duplicates, standardising formats and filling in genuinely required fields before migration is slower up front but far cheaper than fixing it after staff are relying on the new system.
- Duplicate customers or products. The same person or item entered more than once, usually with a slightly different spelling, phone number or SKU each time.
- Inconsistent date and number formats. Dates typed as DD/MM/YYYY in one row and MM/DD/YYYY in another, or phone numbers with and without the country code.
- Blank required fields. A field the old spreadsheet never enforced, such as a postcode or category, left empty on a meaningful share of rows.
- Free-text fields standing in for structured data. A "notes" column quietly holding information — a customer's preferred branch, a discount tier — that the new system actually needs as its own field.
Mapping old fields to the new system's structure
An old spreadsheet's "Customer Name" column and a new system's customer record rarely line up field for field — the new system might split name into first and last, add a required field the old one never had, or store phone numbers in a different format. Mapping each old field to where it belongs in the new structure, and deciding what to do with anything that doesn't have an obvious home, is what makes an import actually usable rather than a pile of data sitting in the wrong places.
Three situations come up in almost every mapping exercise: an old field with no equivalent in the new system (decide whether it's worth keeping as a custom field or safe to drop), a new required field the old data never captured (decide on a sensible default or flag it for manual follow-up), and one old field that needs to split into several new ones, such as a single "Address" column becoming street, city, state and postcode. None of these are hard problems on their own, but they need a decision made for every field, not discovered one at a time during the import.
A worked example: migrating a customer list with three years of mess
Picture a fairly ordinary retail business: 1,400 customer records spread across two spreadsheets kept by different staff, plus a paper-based reward card scheme nobody ever digitised. Here's roughly what a careful migration of that list looks like in practice:
| Step | What happens | Typical finding |
|---|---|---|
| 1. Export and combine | Both spreadsheets pulled into one working file | 1,400 rows, two different column layouts |
| 2. De-duplicate | Rows matched by name, phone and email | ~180 duplicate customers found |
| 3. Standardise | Dates, phone numbers and state names normalised | ~310 records needed a format fix |
| 4. Map to new fields | Old columns matched to the new system's customer record | 40 records had no clear match for a new required field |
| 5. Pilot import | 50 representative records moved first | 3 mapping errors caught before the full run |
| 6. Full import and verification | Remaining records moved, spot-checked against source | 1,220 clean records, 180 merged, rest archived |
None of this is unusual — it's a fairly ordinary result for data that's accumulated over a few years across more than one spreadsheet. Catching the duplicates and formatting issues during the pilot, rather than after staff are relying on the new system day to day, is what keeps a problem like this from quietly becoming the new system's problem too.
Migration sources compared: what each one actually needs
| Source | Typical cleanliness | What it usually needs |
|---|---|---|
| A single well-kept spreadsheet | Fairly clean | Standard field mapping, bulk import |
| Several spreadsheets kept by different staff | Inconsistent | De-duplication across files, format standardisation |
| An old off-the-shelf system with export | Structured but a different schema | Field mapping, format conversion |
| Paper records or no export function | Unstructured | Manual review and re-entry for some or all of it |
Running a pilot before the full cutover
Migrating everything in one pass and hoping it worked is how small mapping errors turn into a business-wide problem. A safer approach is a pilot migration: a small, representative batch of records — a handful of customers, a slice of the product catalogue — moved first and checked field by field against the original source. Any mismatches show up while they're still easy to fix, before the same mistake gets repeated across every record in the full data set.
A useful pilot batch is deliberately varied rather than just the first fifty rows in the file: it should include at least one record from each branch or category, one with unusual characters in the name, one with a blank optional field, and one that was flagged as a likely duplicate. A pilot made only of tidy, typical records won't surface the edge cases that cause problems later.
Keeping a safety net through cutover
Even a carefully tested migration benefits from a fallback. Keeping the old system or spreadsheet accessible in a read-only state for a period after go-live means that if a record looks wrong in the new system, staff can check it against the original rather than guessing. Most businesses only retire the old system once the new one has run cleanly through at least a full business cycle — a month-end close, a stock count, a busy sales period — with no data questions left unanswered.
This period is also when staff naturally discover the gaps a pilot batch didn't catch — an unusual order type, a customer with two accounts under different spellings — because they're using the full, real data set for the first time. Treating the first business cycle as a verification period, not just a formality, is what turns an apparently successful migration into one that's actually trusted.
How to tell a migration plan is solid before you sign off
- Ask for the pilot batch size and what gets checked. A plan that moves straight to a full import with no pilot batch is skipping the step that catches mapping errors early.
- Ask what counts as "done" for cleanup. "We'll clean it up" means little without a definition — duplicates found and merged, dates standardised, required fields filled are concrete, checkable outcomes.
- Ask who decides what's archived versus migrated. Someone on your side should own that judgement call; a developer guessing which records still matter to the business is a recipe for losing something useful.
- Ask how long the old system stays accessible read-only after go-live. A plan with no stated fallback period is assuming the migration will be perfect, which is optimistic for any data set with real history behind it.
Common mistakes
- Treating migration as a simple export-and-import step. Real data from more than a few months of use almost always needs cleaning and mapping first, not just moving.
- Migrating everything, including years of dead records. Dragging in a decade of cancelled orders or discontinued products just adds noise the new system has to carry forward.
- Skipping the pilot batch. A full import with no small test run first means mapping errors get repeated across every record before anyone notices.
- Retiring the old system the day the new one launches. Without a read-only fallback, staff have nothing to check a questionable record against during the most error-prone early weeks.
- Not naming one person to own data decisions. Decisions about what's active, what's archived and what's simply wrong need one accountable owner on the business side, not a group guess.
- Assuming the new system's fields match the old ones exactly. They rarely do — a mapping exercise is required even when both systems seem to track "the same" information.
Where Gotka Technologies fits
Working out what needs to migrate, cleaning it up, mapping it to the new structure and testing it before cutover is scoping work Gotka does as part of building the system itself, not a separate project bolted on afterward. Gotka's App & System Development service quotes business systems with integrations from an indicative RM12,000, confirmed by written quote once the scope — including how much existing data needs to move — is known. If you're still deciding whether a custom build is the right call in the first place, see signs your business has outgrown spreadsheets. Whatever the new system runs on still needs somewhere reliable to live; Gotka's Cloud Hosting on LiteSpeed servers covers that alongside the rest of a growing business's website and email.
Key terms used in this guide
- Data migration: moving existing records from spreadsheets or an old system into a new system's structure.
- Pilot migration: a small, representative batch of records moved and verified first, before the full data set is migrated.
- Field mapping: matching each column or field in the old data to where it belongs in the new system's structure.
- De-duplication: finding and merging records that represent the same customer, product or order entered more than once.
- Cutover: the point at which a business switches from the old system to the new one for day-to-day work.
- Read-only safety net: keeping the old system or spreadsheet accessible, but not editable, for a period after cutover.
- Legacy data: the records that exist in the old spreadsheet or system before migration begins.
- Source system: the spreadsheet, old software or paper records a migration pulls data from.
What actually happens to my existing data when I move to a new business system?
It doesn't move automatically. Your customer records, inventory, past orders or spreadsheet data get reviewed, cleaned and mapped into the new system's structure, then imported in a controlled batch — usually starting with a small test batch that's checked against the original records before the full migration runs. Skipping the review step is the most common reason data ends up duplicated, missing fields, or in the wrong format once it lands in the new system.
Do I need to clean up my spreadsheets before migration?
Yes, ideally before the new system is scoped, not after. Years of manual entry in spreadsheets or an old system tend to accumulate duplicate customers, inconsistent date formats, blank required fields and abbreviations only the original staff understood. Cleaning this up first is slower up front but far cheaper than importing the mess and discovering it once staff are relying on the new system day to day.
Can my old data be imported automatically, or does someone have to do it by hand?
It depends on the source. Data already in a structured system or a well-organised spreadsheet can usually be mapped and imported in bulk. Data scattered across paper records, inconsistent spreadsheets from different staff, or a system with no export function often needs manual review and entry for at least part of it — a written quote for the system build would scope out which applies.
How long does data migration add to a new business system build?
It varies with how much data there is and how clean it already is, and is scoped as part of the overall build rather than quoted on its own. A small, tidy customer list migrates quickly; years of inconsistent records across multiple spreadsheets or systems takes longer to clean, map and verify before cutover — Gotka's App & System Development service scopes this alongside the rest of the build in a written quote.
Do I have to give up my old system or spreadsheets right away?
No — the safer approach is to keep the old system or spreadsheets accessible in a read-only state for a period after cutover, so staff can check a record against the source if something looks off in the new system. Most businesses only retire the old system once the new one has been running cleanly for a few weeks or a full business cycle.
Is data migration included in the cost of a new business system, or extra?
It's scoped as part of the build rather than sold as a separate add-on. Gotka's indicative starting price for a business system with integrations is RM12,000, confirmed by a written quote once the scope — including how much existing data needs to be migrated and how clean it already is — is known.
What's the biggest risk in migrating business data, and how do you avoid it?
The biggest risk is moving data that's already wrong — duplicates, outdated records or missing fields — straight into the new system, where it then quietly undermines every report and decision built on top of it. The safeguard is a pilot migration with a small, representative batch of records, checked field by field against the original source, before the full data set is ever moved.
How Long Does Building a Custom Business System Take, Realistically?
A single-workflow business tool takes 4 to 6 weeks; a multi-role system with integrations runs 2 to 4 months. What actually drives a custom system's timeline.
App DevelopmentDashboards and Reporting: Turning Your Business Data Into Decisions
Data scattered across spreadsheets means decisions made on guesswork. What a business dashboard does, what it costs, and when it is worth building one.
App DevelopmentManaging Multiple Outlets or Branches With One Custom System
A chain running each outlet on its own spreadsheet loses visibility the moment it opens a second branch. What one shared system fixes, and what it costs.


