Guide · Zoho CRM

Import a spreadsheet into Zoho CRM without creating duplicates

Importing a file twice, or importing one whose companies are already in your CRM, is how duplicates are made. This guide covers what Zoho's own import does about it, how to update the records you hold instead with Sloose, and what Sloose cannot do.

What Zoho CRM's own import does

Zoho offers three choices: add as new records, update existing records only, or both. To find an existing record it matches on one unique CRM field. With "add as new" and a unique field chosen, "rows in the file with matching values already in the CRM will be skipped". Zoho's FAQ gives the usual unique fields: Email for Leads and Contacts, Account Name for Accounts, Deal Name for Deals. To update records you first exported, the FAQ says to check for duplicates by the Record ID the export includes (Zoho help, Zoho FAQ, read 5 October 2026).

Four things to know. Zoho matches on one field, and it has to be a field that is unique in the CRM (a Sloose rule is one field too). For a file that holds accounts and their contacts, Zoho's advice is: "To avoid the creation of duplicate accounts, you need to separate the account information in another file." And when it updates, Zoho can skip the empty values in your file, so a blank cell does not clear a field. On undo, Zoho says: "You can undo records that have been added via import. You will not be able to undo updates made to records via import."

The Sloose way

  1. Say whether the rows may already exist. For each module choose All new, Some may exist or Updates only. The first does no matching, so every row creates; with the second, rows that find their record are handled your way and the rest create; with the third, rows that find their record are updated and anything unmatched is left out.
  2. Choose the field that identifies one record, and the value to compare it with, from a column or a formula. Sloose says what the rule produces on your file, or on its first 1,000 rows when it is longer ("9 values, all different, none blank"), and can test it against your CRM first: each value tested, up to 300 distinct ones, is found, not found, or matches several.
Match settings for contacts in Sloose: match on email in lower case, update on one match, ask on several.
Match each module on the field that identifies it, and say what happens on one match or several. Shown with Zoho CRM.
  1. Say what happens on one match and on several. On one match: update the record or skip it, and an update can be made conditional on the old and new values. Under Skip it the record is given none of the row's mapped values, apart from a field filled after the save, which can still be written. On several: ask, use the first, skip the row or create a new record. Either skip is for that module only: the row still goes to its other modules. "Use the first" is whatever Zoho's search returned first, so narrow the rule before you trust it.
  2. Make sure the key is written. A record the run creates is built from your mappings alone. The value the rule compares is also what the key field is written from, so a second run finds the records the first made. If nothing writes the key, a second run matches nothing and creates everything again; the run's log, a dry run's included, warns when it sees that.
  3. The same company on several rows becomes one record. When accounts are matched on the name, the second row finds the account the first made, because a match asks what the run has made before it asks Zoho.
  4. Run a dry run. Every row shows, for each module, what would happen to it, such as Would create, Would update, Would skip, or Would ask where several match, and Exists where the row only links to a record it found. A row that is held back or would fail says that instead. Nothing is written. A dry run cannot answer a question, so it goes on with the first match and says the real run would ask.
Dry-run results in Sloose: each row marked Would create or Exists for Accounts, Contacts and Deals, with nothing written to the CRM.
A dry run writes nothing. It shows what each row would create, and what it would find already there. Shown with Zoho CRM.
A dialog during an import asking which of two matching contacts to update, or whether to skip or create.
When a row matches more than one record, you choose, record by record. Shown with Zoho CRM.

What Sloose does not do

Watch one file go in both ways, see pricing (a 14-day Business trial with 200 AI credits, no card), or read the docs on matching.

Bring the spreadsheet. We do the rest.

Start with a 14-day Business trial and 200 AI credits. No card needed.

Start free See the examples