Short answer: Clean the spreadsheet first, split it into separate lists for clients, contacts and deals, and build that structure in the new tool before importing anything. Import ten rows as a test, check them, then import the rest and link contacts and deals to their clients. Finally, make the old spreadsheet read-only so nobody keeps updating it.
Still deciding whether to move at all? See Signs you've outgrown your spreadsheet CRM.
Disclosure: I co-founded Teamo.
Step 1: Decide what moves
Not everything in the spreadsheet needs to come with you. Decide per tab:
- Active clients and open deals: always move them.
- Contacts: move the ones you still talk to.
- Closed and lost deals: move them if you report on win rates or want the history on the client; otherwise keep the old file as an archive.
- Notes columns: move them as notes on the record, not as columns of their own.
Moving less makes the first weeks in the new tool cleaner.
Step 2: Clean the spreadsheet
Most import problems we see come from the data: duplicates, mixed statuses and dates. Before you export:
- Remove duplicates. The same client written two ways ("Northfield Realty" and "Northfield Realty Ltd") becomes two records.
- One value per cell. Split "Ana, Ben" into separate contacts, or keep it only in a column that accepts several people.
- Use the same words for statuses. "Won", "won" and "Closed won" should be one value.
- Use one date format in each date column.
- Fill in the column that links things, such as the client's name on every contact and deal row.
Step 3: Split one sheet into lists
A spreadsheet CRM is often one wide sheet: one row per client, with columns like "Contact 2" and "Deal 3". A CRM works with one row per thing instead:
- Clients: one row per company, with its details
- Contacts: one row per person, with the client they belong to
- Deals or projects: one row per deal, with the client, value, stage and dates
Each contact and deal row keeps the client's name, so the import can link it to the right client.
Step 4: Build the structure before you import
Create the lists and columns in the new tool first, and set up every status and dropdown option to match the values in your sheet. In Teamo, when Amo imports a file, any status it doesn't recognize becomes a new option, so "Closed won" and "Won" would end up as two options. Clean the values first. Over the API or MCP, a value that matches no option is rejected.
Turn the sheet's habits into fields at the same time. A row coloured green for "won" becomes a status option, a formula column becomes a formula column, and a "next follow-up" date that someone checks by eye becomes a date column with an automation that reminds the owner when it passes.
In Teamo, you can start by describing your business when you sign up: Amo, the assistant, builds the modules, columns and views for it, and you adjust them in your own words.
Step 5: Import ten rows, check, then import the rest
Import a small sample first and open each record: are the statuses right, the dates readable, the people matched to the right team members, the contacts on the right client? Fix the sheet or the columns, then import everything.
In Teamo, you can attach the spreadsheet (CSV or Excel) in a chat with Amo and ask it to import it into your Clients module. Amo shows what it is about to create and waits for your approval, and it warns you before an import would set off your automations. If you use Claude or ChatGPT, you can also connect them to Teamo over MCP and let them move the data.
Step 6: Link contacts and deals to their clients
Connect each contact and deal to its client, using the client name you kept on every row. After this, opening a client shows all their people and deals in one place, which is the main reason to move.
In Teamo this happens during the import: Amo matches each contact or deal row to its client by name, adds it to that client's Contacts or Deals group, and lists any rows it couldn't match. Keep contacts and deals as groups under the client rather than separate modules with a linked column, because a linked column can't be filled from a file.
Step 7: Switch over on a fixed day
Pick a day, tell the team, and make the old spreadsheet read-only from then on. Keep the file as an archive, not as a backup that people still edit. The client emails that never made it into the sheet can follow too: in Teamo, connecting a Gmail or Outlook account through the Inbox add-on imports its last 12 months and links each thread to the client.
What usually goes wrong?
| Problem | Why it happens | How to avoid it |
|---|---|---|
| Duplicate clients | Names written differently | Clean names before importing |
| Duplicate statuses | Variants like "Won" and "Closed won" | Use one word per status before importing |
| Wrong dates | Mixed formats, or day and month swapped | One format per column, check the test rows |
| People not assigned | Names in the sheet don't match team members | Use emails, or fix names before importing |
| Contacts on no client | The linking column was empty | Fill in the client on every row |
How long does it take?
Most of the time goes into deciding the structure and cleaning the data. The import itself is quick once the sheet is clean. With an assistant such as Amo, or Claude or ChatGPT connected over MCP, a small business can usually move its spreadsheets in hours. Amo imports up to 2,000 rows per file; split bigger sheets.
FAQ
Should I import all my old data into the new CRM? Move active clients, open deals and contacts you still talk to. Move closed deals only if you report on them; otherwise keep the old file as a read-only archive.
What format should my spreadsheet be in for a CRM import? One row per thing (client, contact or deal), one value per cell, the same words for each status, one date format per column, and the client's name on every contact and deal row.
How do I avoid duplicate clients when importing? Clean the names in the spreadsheet first, so each client is written one way, and import a test of ten rows to check before importing the rest.
Can I keep using the spreadsheet after moving to a CRM? Keep it as a read-only archive. If people keep editing it, you end up with two versions of every client.