Skip to content
LATYNEX
Insights & Guides

How to migrate spreadsheet data to a database or web app

LATYNEX Digital · Published 25 Sept 2026

Cleaning the sheet is most of the work. The import itself is the short part.

Direct answer

Moving spreadsheet data into a database is mostly a cleaning and decision-making job. A spreadsheet tolerates ambiguity that a database does not: two spellings of one customer, a date typed as text, a column that means three things depending on the row. The reliable order is: find out what the sheet really holds, choose a key for each kind of record, write cleaning rules, import into the new structure, reconcile the result against the source, run both side by side for a short defined period, then retire the sheet.

There is no button that converts a messy workbook into a correct database; anyone promising automatic conversion is skipping the decisions that determine whether the result can be trusted. This page covers the data-move procedure. If you are still deciding whether to replace the spreadsheet at all, start with when to replace spreadsheets.

1. Find out what the sheet really holds

Before designing anything, inventory the workbook as it is actually used, not as it was intended. Open every tab, including hidden ones, and note what each contains and who edits it.

  • Separate genuine records (one row per customer, order, asset) from summaries, pivots and scratch calculations
  • Identify columns that mix several facts, such as a name plus a phone number or a status plus a date in the same cell
  • Note colour coding, comments and bold text that carry meaning; these are data hiding in formatting and will not survive an import unless you turn them into real columns
  • List formulas that encode business rules, and write each rule down in plain words
  • Find links to other workbooks, and any tab that another file or person depends on
  • Ask the people who edit it what they do that the sheet does not show, such as a personal copy or a side note

2. Keys and duplicates

Every kind of record needs a stable identifier that never changes and is never reused. Spreadsheets often rely on row number or on a name, and both break: rows get sorted and names get retyped. Decide the key per record type before importing. If a natural identifier exists and is reliably filled (an invoice number, an order reference), use it. If not, generate an internal ID and keep the old reference as a separate searchable field.

Then find duplicates deliberately. Sort and group by the likely matching fields (normalised name, email, phone, address) and review the groups by hand. Decide a survivor rule before merging: which record wins, which fields are taken from the other, and what is kept as history. Merges are hard to undo, so keep the original file untouched and merge in a copy.

3. Write cleaning rules, then apply them the same way every time

Cleaning done by hand in the sheet cannot be repeated or audited. Write each rule as a sentence, apply it in a script or a documented sequence of steps, and keep the untouched original next to the cleaned result. Typical rules cover:

  • Dates: one format, and a decision for values that cannot be read (flag them, do not guess)
  • Numbers and currency: strip symbols and text, fix decimal separators, decide what an empty cell means versus a zero
  • Text: trim spaces, unify capitalisation and spelling variants using an agreed mapping list
  • Categories and statuses: collapse free-text values into a fixed list, with an explicit place for exceptions
  • Required fields: decide which records are rejected or held for review when a mandatory value is missing
  • Encoding and special characters, especially for names and addresses in several languages

4. Import and reconcile

Import into a test copy of the new system first. Then reconcile, meaning prove the new data matches the source instead of assuming it does. Compare record counts per type, totals of any numeric column that matters, and a sample of individual records checked by a person who knows them.

Keep a rejects list: every row that did not import, with the reason. A rejects list you can hand to the data owners turns silent loss into a work queue. Do not treat an import as done until every source row is either in the new system or explained on that list. Repeat the import as many times as needed on the test copy; the real import happens once the process is boring.

5. Parallel run

For a defined short period, people work in the new system while the old sheet is kept as a read-only reference, or, where the risk is high, both are updated and compared. The purpose is to find rules that were only in people's heads. Choose the length in advance and what would extend it, for example a missing report or an unresolved discrepancy.

During this period, log every case where someone reaches for the old sheet. Each one is either a missing field, a missing view or a habit. Fix the first two; the third needs a conversation.

6. Retire the sheet

A spreadsheet that stays editable will keep being edited, and you will have two versions of the truth again. Set a cutover date, make the file read-only, move it to an archive location and remove shortcuts to it. Keep it for reference for as long as your own record-keeping rules require. Announce the change plainly and say where to go instead.

7. Ownership after the move

Name who owns the data in the new system: who approves new categories, who fixes bad records, who can export, and who decides when a field changes. Without an owner, the database drifts back toward the mess it replaced. Also decide how corrections are made, since people used to overtype cells will now need an edit path with a history.

Where LATYNEX fits

LATYNEX builds the internal web application the data moves into and helps plan the migration around it, scoped per project. We do not promise automatic conversion or that every row will import unchanged; the reconciliation and rejects list exist precisely because that is rarely true. The natural next step is replacing spreadsheets with an internal tool, and the broader options are on the internal business tools page. To see which manual processes are worth moving first, try the automation opportunity finder.

Questions

Can a spreadsheet be converted to a database automatically?+

Data can be loaded automatically once it is clean and structured. Deciding keys, duplicate handling and cleaning rules cannot be skipped, and that is where most of the effort goes.

How long should the parallel run last?+

Choose it in advance based on how often the process cycles. It should be long enough to cover at least one full normal cycle of the work, plus any month-end or similar peak, and short enough that people do not settle into double entry.

What if some rows cannot be imported?+

Put them on a rejects list with the reason and give it to the data owners. Every source row should end up either imported or explained.

Should we keep the old spreadsheet?+

Yes, as a read-only archive for as long as your own retention needs require. Just make sure nobody can keep editing it as if it were current.

Do we need a custom web app, or can a database alone do it?+

A database stores data; people also need screens, permissions and validation to work with it safely. Whether that should be a custom app or a lighter tool is covered in the low-code versus custom comparison.

Replace spreadsheets with an internal tool
Related