Migration
Import Spreadsheet Into CRM: The Step-by-Step Guide
How to import spreadsheet into CRM software without losing customers: clean the Excel or Google Sheets file, find duplicates, map columns, test 20 rows first.
By the Ifa team
If your customers live in a Google Sheet or an Excel workbook, the file already is your CRM. Moving it into a proper system is less about the software than about the file. Almost every failed import we have seen was decided before the upload button was pressed: two records in one row, dates in three formats, a formula where a value should be. This guide walks through the cleanup in order, with menu paths as they stand in September 2026. Ifa’s import is the worked example; we say where it is no different from any other tool.
Step 1: One record type per tab
A CRM stores each record type in its own table: customers in one, appointments or jobs in another. A spreadsheet row that reads “Maria Lopez, 555-0132, brake job 14 Mar, oil change 2 Jun” is one customer and two jobs.
Decide which record types you actually have and give each its own tab. Put a linking column on the child tab (customer email, or a customer number you assign) so each appointment knows whose it is.
Do all of this in a copy of the file, never the original. Step 14 depends on the original staying untouched.
Step 2: Headers that name fields
Row 1 of every tab should hold one short header per column and nothing else. Delete title rows, merged banner cells, logos and the blank row people leave under the title. The header names become your column mapping later, so make them say what the column holds: “Email” rather than “Contact”, “Last visit” rather than “Date”.
Two checks that take a minute: no two headers alike, and no blank header above a column that holds values, because that column is invisible to most importers.
Step 3: One row per record
Every row should be exactly one customer on the Customers tab, or exactly one appointment on the Appointments tab. The usual offenses:
- Two people in one row: “Tom and Sue Baker”. Split them, or make the household the record.
- A history in one cell: “Jan 3 color, Feb 14 cut, Mar 20 color”. These are three appointments; give them three rows on the Appointments tab.
- Subtotals at the bottom of a tab. Delete them; the CRM computes its own.
- Section headers inside the data (“Regulars”, “Walk-ins”). Turn them into a “Segment” column and remove the blank rows between.
Step 4: Split name and address columns where the target needs them
Most CRMs store first and last name separately, and many store an address as street, city, region and postal code. If your sheet has one “Name” column, split it before import rather than hoping the tool will guess where a surname starts.
In Google Sheets: select the column, then Data > Split text to columns, separator Space. In Excel: Data > Text to Columns, Delimited, Space. Then scan for names that broke the pattern, such as “Mary Ann Fischer” or “van der Berg”, and fix those by hand.
Split addresses only if the target has separate fields; check first (Step 11).
Step 5: One date format, and make it ISO
“03/04/2025” is March 4 in the United States and April 3 almost everywhere else. A column holding “3/4/25”, “March 4”, “4-Mar” and “2025-03-04” will be read four different ways.
The safe format is ISO 8601: YYYY-MM-DD, so 2025-03-04. In Sheets, select the column and use Format > Number > Custom date and time; in Excel, Format Cells > Custom with yyyy-mm-dd.
Then confirm the cells are real dates and not text that looks like dates. Real dates align right by default; text aligns left. =ISDATE(A2) in Sheets or =ISNUMBER(A2) in Excel, dragged down, exposes the text ones.
Step 6: Phone and email formats
Excel drops leading zeros from anything it thinks is a number, and international numbers lose their plus sign. Format the phone column as Text before pasting anything into it (Format Cells > Text in Excel; Format > Number > Plain text in Sheets). Then pick one shape: the local (555) 013-2200 or the international +1 555 013 2200.
Emails should be lowercase, one per cell, no trailing spaces. Data > Data cleanup > Trim whitespace in Sheets fixes the spaces; in Excel, a helper column with =TRIM(LOWER(B2)) does it.
| Field | Reads cleanly | Usually rejected or misread |
|---|---|---|
| Date | 2025-03-04 |
3/4/25, March 4th, next Tues |
| Phone | +1 555 013 2200 in a text cell |
5550132200 stored as a number, two numbers in one cell |
maria@example.com |
Maria@Example.com with a trailing space, two addresses in one cell |
|
| Money | 45.00 |
$45, 45 USD, 45,00 in a US locale |
| Yes/no | yes / no, one style |
Y, yes, x, ✓ mixed in one column |
Step 7: Remove formulas: values only
A CSV cannot hold a formula, and an XLSX importer usually reads the cached result, which may be stale or an error like #REF!. Convert every formula column to values: select the tab, copy, then Edit > Paste special > Values only in Sheets (Ctrl+Shift+V) or Home > Paste > Values in Excel.
Before you do, ask what each formula was for. A “Days since last visit” column is derived from “Last visit” and should not be imported at all; the CRM computes it live.
Step 8: Merged cells and notes columns
Merged cells are how a “Baker family” heading spans four rows. To an importer, a merged range is one value in the top-left cell and empty cells below it, so rows 2 through 4 lose their family name. Unmerge everything (Format > Merge cells > Unmerge in Sheets; Home > Merge & Center in Excel), then fill the value down into each row.
Notes columns are a judgment call. A free-text cell with “allergic to ammonia, prefers Thursdays, owes $20, new number” holds four different facts. Either import the column as one Notes field and accept that it stays prose, or move the facts you actually filter on (“Allergies”, “Preferred day”) into their own columns and leave the rest.
Step 9: Find duplicates before import
Duplicates in a CRM become two histories for one person, and later somebody texts the wrong one.
The fastest check is a COUNTIF column. Next to your Email column, put =COUNTIF(B:B, B2) and drag down; anything above 1 is a duplicate email. Do the same for phone. Google documents COUNTIF at support.google.com and Microsoft at support.microsoft.com. A pivot table on Email with a count gives the same list.
Both tools also have a one-click Remove duplicates (Data > Data cleanup > Remove duplicates in Sheets; Data > Remove Duplicates in Excel). It keeps the first matching row and drops the rest, so if two rows for the same person differ in the notes, the second one’s notes are gone. Merge those by hand. Near-duplicates (“M. Lopez” and “Maria Lopez”) will not match on name; match on phone or email instead, which is why Steps 5 and 6 come first.
Step 10: Export as CSV or keep XLSX
Check what the target accepts. The honest summary across the tools we have looked at: nearly every CRM accepts a CSV of contacts, and far fewer accept related records like appointments, jobs, vehicles or pets at all.
| What you are importing | Most CRMs, as of September 2026 | Ifa |
|---|---|---|
| Contacts or customers, one CSV | Yes | Yes |
| A second tab of appointments or jobs linked to customers | Sometimes; often contacts only | Yes, as related records |
| An XLSX with several tabs at once | Rarely; export each tab | Yes (XLSX, XLS, inert XLSM) |
| JSON or JSONL from another tool’s export | Rarely | Yes |
| Cell comments, formatting, formulas | No | No |
If you go with CSV: in Google Sheets, File > Download > Comma Separated Values (.csv) exports only the tab you are looking at, so repeat it per tab. In Excel, File > Save As, choose “CSV UTF-8 (Comma delimited)”, again once per tab. Pick UTF-8 so names with accents survive.
Step 11: Map columns
Every importer has a mapping step: your header on the left, the target field on the right. This is where Step 2 pays off. Watch for four things.
- A column with no matching field. Create the field first, or drop the column; do not shove it into Notes.
- A required field (usually Name) when some rows are blank. Those rows will be rejected or skipped, depending on the tool.
- Type mismatches: a text column mapped into a date field, or “yes/no” into a number.
- The linking column on child tabs: “Customer email” must map to the customer record, not to a plain text field.
In Ifa, the mapping arrives with a proposal already made from your headers, and you correct it rather than build it from scratch. That is convenient but not magic; a header called “Contact” still needs you to say whether it is a phone or an email. The import page shows the flow and the file types Ifa reads: CSV, TSV, JSON, JSONL, XLSX, XLS and XLSM with macros made inert.
Step 12: Test with 20 rows first
Never import the whole file on the first pass. Copy the header and 20 rows into a separate file, including a few you know are awkward: the double-barreled surname, the customer with two phones, the leap-day appointment, the row with an empty email. Import that.
Then open the records in the new system and read them as a person. Is the last name in the last-name field? Did the phone keep its plus sign? Is the appointment attached to the right customer?
Before anything is written, it shows a preview of the parsed rows and runs checks on them: probable duplicates within the file and against records already in the workspace, dates it could not read or read ambiguously, empty values in required fields, and rows that did not parse. You look at the flagged rows and approve the write, or fix the file and try again. That said, the checks find what they are designed to find. They do not merge two records for you; they flag and wait.
Step 13: Then the full file
Once the 20-row test reads correctly, import the full file with the same mapping. Do it at a quiet time, and do not edit records in the new system until it finishes; an edit and an import racing each other is a classic source of a “lost” change.
Import in dependency order: customers first, then the records that belong to them. After each file, compare counts. If the Customers tab had 843 rows after cleanup and the system shows 831, find the 12 before moving on. They are usually rows that failed a required field or were flagged as duplicates and skipped. In Ifa, the preview and your approval stay in the audit history, so you can see later what was flagged and what you decided.
Step 14: Keep the original file
Do not delete the spreadsheet. Rename it with the date (“clients-original-2026-09-01.xlsx”) and mark it read-only. Three months from now someone will ask why a customer’s birthday is wrong, and the answer will be in the original.
What you should stop doing is editing it. If a team member keeps adding rows to the old sheet out of habit, share the new system’s link and lock the sheet.
What goes wrong and how to avoid it
The failures that come up most, each with the step that prevents it:
- Dates shifted by a month or a day. Mixed formats read under one locale. Step 5: ISO dates, checked with ISDATE.
- Phone numbers missing a leading zero or plus sign. The column was numeric. Step 6: format as text before pasting.
- Every fourth row missing its family name. Merged cells. Step 8: unmerge and fill down.
- The same person twice, with different notes. Duplicates matched on name only. Step 9: match on email or phone, merge by hand.
- Import “succeeded” but 12 rows are missing. Required fields were blank and the tool skipped them silently. Steps 11 and 13: check required fields in mapping, then compare counts.
A more general point: the spreadsheet is a snapshot. No import, Ifa’s included, keeps it in sync afterward. There is no live two-way sync with Sheets or Excel, and no paid migration service that does the cleaning for you. If you are still deciding which system to move to, our guide to customer management software covers the import side, and the spreadsheet to workspace page shows how a sheet’s tabs and columns become records and fields in Ifa.
Questions people ask
Can I import Excel directly, or do I have to convert to CSV?
It depends on the tool. Many CRMs accept only CSV, so you export one CSV per tab. Some accept XLSX and read the first sheet only. Ifa reads XLSX and XLS, plus XLSM with macros disabled, and shows every tab in the preview. The file format does not fix a dirty file; do Steps 1 through 9 first.
How do I import contacts to a CRM without creating duplicates?
Find them in the sheet first with COUNTIF on email and phone (Step 9), and merge the ones with differing notes by hand. Then treat the importer’s own duplicate check as a second net, not the first. Ifa flags probable duplicates in the preview and waits for your decision before writing.
What if appointments and customers are on the same tab?
Split them (Step 1). Each appointment becomes its own row on an Appointments tab with a column saying which customer it belongs to. Then check whether the target accepts appointment records at all. Most CRMs import contacts and stop there; if yours does, the history stays in the archived spreadsheet. Ifa imports related records and links them to the parent during mapping.
How long does a spreadsheet to CRM import take?
The upload takes minutes. The cleanup is the real cost. For a sheet of a few hundred customers maintained loosely over a few years, budget half a day for Steps 1 through 9 and a quiet hour for the test and the full import.
Should I import the notes column?
Yes, as one free-text field, unless you filter on something inside it. Pull out only the facts you will actually search for, such as allergies or a vehicle plate, and leave the rest as prose.
Last updated September 1, 2026.