All articles

How to move from a spreadsheet to a CRM: step by step

Clients and CRM Nadya Neykova Updated 6 minute read

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:

From one wide spreadsheet row to a client record One wide spreadsheet row becomes one client record, with a row per contact and per deal Client Northfield Realty Contact 1 Anna K. Email 1 anna@northfield.example Contact 2 Ben M. Email 2 ben@northfield.example Client details Two columns per contact The same row, continued to the right: Deal 1 Website relaunch Value 1 €12,000 Stage 1 Won Deal 2 Lead automation Value 2 €4,500 Stage 2 Proposal sent Three columns per deal Three columns per deal Northfield Realty Client Contacts NAME EMAIL Anna K. anna@northfield.example Ben M. ben@northfield.example Deals DEAL VALUE STAGE Website relaunch €12,000 Won Lead automation €4,500 Proposal sent Each contact and deal keeps the client's name in the sheet, so the import can link it here. From the Client column From Contact and Email From Deal, Value and Stage
  • 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.

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.

See your own setup in Teamo

Sign up, answer a few questions about your business, and Amo builds your setup.