OdinTask field-service app OdinTask ODINTASK · GUIDE
data migration

Migrate Your Customer List From Excel: A Step-by-Step Guide

3 July 2026 · 9 min · data migrationcustomer listexcelgetting startedfield service software

To migrate a customer list from Excel into a field service system, do it in five passes: export one clean sheet per entity (customers, addresses, price list, suppliers), delete every column you have not used in 12 months, de-duplicate on a normalised phone number and postcode before you upload anything, import a 20-row test batch first, then verify the full import row by row against your top 30 customers by revenue. For a firm with a few hundred customers this is an afternoon, not a project. The part that takes the afternoon is the cleaning. The upload itself takes about four minutes.

Why the cleaning is the whole job

Spreadsheet import and export is now standard in field systems, so the mechanics are boring: map a column, press a button. What is not boring is that a spreadsheet has no rules. Nothing stopped you typing 070-123 45 67 in one row and +46701234567 in the next. Nothing stopped a customer existing three times because they moved, married, or rang you from a different phone.

Import that as-is and you have not migrated a customer list. You have moved the mess into a system that will now enforce it, put it on your engineers' phones, and print it on invoices. So clean it in Excel, where you have filters and formulas and no consequences. Import once, clean.

What to bring across

Bring the data that appears on a job, a quote, or an invoice. That is a shorter list than you think.

EntityBringWhy
CustomerName, type (private/business), email, mobile, phone, notesEverything downstream keys off this record
Business customerCompany registration number, VAT number, invoice email, payment terms, reference/PONeeded the first time you invoice them, and hard to chase later
AddressStreet, number, postcode, town, and a flag for site vs invoice addressSite and billing addresses differ often enough that one field will bite you
Property detailsProperty designation or apartment number and housing association name (Sweden: fastighetsbeteckning, lägenhetsnummer, brf)Required on a Swedish ROT claim. Elsewhere, still useful for repeat work
Price listArticle number, description, unit, cost price, sell price, VAT rateThe one place where a bad import costs you money on every quote
SuppliersName, customer number with them, contact, email, termsNeeded before you can register material or match supplier invoices

Split addresses into columns before you export

The single most common blocker: one column called Address containing Storgatan 12, 3 tr, 411 38 Göteborg. Every import tool wants postcode and town separately, because that is what the map, the route, and the invoice need.

Split it in Excel with Text to Columns, or lift the postcode with a formula, and eyeball the results. Swedish postcodes are five digits, usually written as three plus two. UK postcodes are alphanumeric and Text to Columns will mangle a few. Sort by postcode length afterwards; anything that is not the right length is broken and sitting at the top or bottom of the sort.

What to deliberately leave behind

A migration is the only free chance you will ever get to throw things away. Take it.

Org numbers, VAT numbers and personal ID numbers

Business identifiers are easy: bring the company registration number and VAT number, and normalise the format (Sweden: ten digits, NNNNNN-NNNN; the VAT number is the same digits prefixed with SE and suffixed 01). Strip spaces. Check the length. A missing VAT number surfaces later as a rejected e-invoice, which is a worse day than fixing it now.

Personal identity numbers are different, and this is where a lot of firms get careless. In Sweden you need a customer's personnummer to file a ROT claim with Skatteverket — but you need it for that claim, at the point you make it. You do not need it sitting in a spreadsheet column for 300 people who might one day want a ROT job.

Under GDPR, holding it requires a purpose. If the purpose has expired, so has your right to keep it. The Swedish regulator, IMY, is explicit that personal identity numbers may only be processed when clearly justified. The practical rule: do not bulk-import personnummer. Collect it in the job flow when a ROT deduction is actually being applied, encrypted at rest, and let it live against that job. If your old sheet has a personnummer column, that is a reason to delete the column, not to migrate it. (Outside Sweden, the same logic applies to national insurance numbers, IRD numbers, or anything similar.)

For the ROT rules themselves — 30% of the labour cost, with an annual per-person ceiling shared with RUT — check the current amounts at Skatteverket rather than trusting a number in a blog post.

Clean the duplicates before you import

Do this in the spreadsheet, in four passes, in this order. Each pass gets narrower.

  1. Normalise the keys. Add three helper columns. Phone: strip spaces, hyphens and brackets, drop the leading zero, force one country format. Email: lowercase, trim. Postcode: strip spaces, uppercase. Do not clean by hand. Formulas do not get bored at row 200.
  2. Exact matches on phone. Sort by the normalised phone column and use conditional formatting to highlight duplicate values. This catches the honest duplicates: the same person entered twice with a typo in the name.
  3. Match on postcode plus house number. This catches the sneaky ones: the same address held under a husband's name and a wife's name. Usually you keep both people and merge the address, not the other way round.
  4. Read the near-misses. Sort alphabetically by surname and scroll. Andersson, K and Karin Andersson on the same street are one customer. No formula finds this; ten minutes of your eyes does.

When you merge, keep the record with the most recent job and copy the useful fields onto it. Add a column called merged_from holding the old row as text, so a bad merge is visible rather than lost. Then filter for blank email and blank phone: a customer you cannot contact is not worth importing.

The import itself, step by step

Order matters, because later imports reference earlier ones.

  1. Suppliers first. Small list, low risk, and your price list may reference them.
  2. Price list second. Import cost and sell price, not just sell. Without cost price, job margin is a guess forever. If your wholesaler ships a price file, import that rather than typing it — most field systems, OdinTask included, take supplier price files directly and keep them updated, which is a better answer than a one-off spreadsheet.
  3. A 20-row customer test batch. Pick your 20 weirdest customers: the housing association, the one with an apostrophe in the name, the one with a site address in a different town, the one with no email. Import them. Look at what happened. Fix the mapping. This is the step people skip and then regret.
  4. The full customer import. Once the 20 look right, the other 380 will too.
  5. Addresses last, if your system holds them separately.

Keep the exact file you uploaded, timestamped, in a folder called migration. If something looks wrong in week three, you will want to know what you actually sent.

How to verify the import row by row

Do not verify by scrolling and feeling good. Verify with counts and samples.

Then close the spreadsheet

The migration is not finished when the data is in. It is finished when the old file cannot be edited. Move it to an archive folder, mark it read-only, and tell whoever else touched it that it is dead.

A firm running two customer lists is worse off than a firm running one bad one, because now nobody knows which is true. Pick the new one. Fix the rest as you go — records get corrected fastest by the engineer standing in the customer's hallway, not by an admin day you will never schedule.

If you want somewhere to import to, OdinTask takes customers, price-list articles and suppliers straight from a spreadsheet, re-runs as an upsert so a second import corrects rather than duplicates, and gives you a 14-day trial to test the migration before you commit. Start a free trial and try it with your 20 weirdest customers first.

FAQ

How long does it take to migrate a customer list from Excel?

For a firm with a few hundred customers, an afternoon. The upload takes minutes; the time goes on cleaning. Budget roughly two hours to split addresses into columns, normalise phone numbers and postcodes, and de-duplicate, then 30 minutes to import and about an hour to verify. Larger or messier lists take longer, but the ratio holds: cleaning is roughly 80% of the work.

Should I import my customers' personal identity numbers?

No. Collect a personnummer at the point you actually file a ROT claim with Skatteverket, not in bulk beforehand. GDPR requires a purpose for holding it, and a maybe-one-day ROT job is not one. Swedish regulator IMY is clear that personal identity numbers may only be processed where clearly justified. Import the customer without it, and capture it in the job flow when a deduction is applied.

How do I find duplicates in a customer spreadsheet?

Use normalised helper columns rather than the raw data. Strip spaces and formatting from phone numbers into one column, lowercase the emails into another, and strip spaces from postcodes into a third. Then highlight duplicate values on the phone column, check postcode plus house number to catch the same household under two names, and finally sort by surname and read the near-misses yourself.

What should I not bring across from the old spreadsheet?

Dead customers with no contact in three years, colour coding you never converted into a real column, historic job columns like Job 2024-03, free-text notes about money owed, personal identity numbers you have no current purpose for, and internal shorthand only you understand. Keep the old file archived, but leave that data in it. A migration is the one free chance to throw things away.

How do I check the import actually worked?

Compare row counts first: a mismatch means skipped blanks or a de-dupe rule you did not expect. Then open your top 30 customers by revenue and check each field against the sheet, plus ten records chosen at random. Sort the price list by value and check the highest and lowest for decimal errors. Finally, build one real quote and read the PDF.

What order should I import the data in?

Suppliers first, because they are a short list and your price list may reference them. Price list second, with cost price as well as sell price so margins work. Then a 20-row test batch of your most awkward customers to prove the column mapping. Then the full customer import, and addresses last if your system stores them separately. Save every file you upload, timestamped.

One system for your field-service business

Booking, quotes with ROT, scheduling, an offline app, time tracking and invoicing — in your own brand.

Try OdinTask free