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
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
What Sloose does not do
- It does not merge duplicates already in your CRM. It finds records to update. Clean the ones you hold in Zoho first.
- Punctuation and accents count when it compares names. Among the records this run has made, case and spaces at either end are ignored, and so is how an accent is encoded; the accent itself and punctuation are not, so "Café" and "Cafe", or "Saltbush Solar Co." and "saltbush solar co", are different records until a formula tidies the name. For a record already in Zoho, Zoho's own search decides which records come back, so a name written one way in your file can miss the same name written another way in your CRM.
- A rule on a field that is not unique can update the wrong record. A company name looks fine on ten rows and fails on the real file, where two branches share one: with "Ask me" you are asked, but "Use the first" updates whichever the search returned first. If nothing identifies one record, this file is a create.
- There is no undo. Zoho's import can undo the records it added, for a limited time (its help gives 30 days in one place and seven in another), though not its updates; Sloose can undo neither. The dry run and Validate come first because of that.
- Matching costs Zoho API credits. The searches that find existing records are calls too, and a file that writes to a module it matches is written one record a call. Only a file of all-new records, with no field searching for a record in a module that same file creates and nothing filled after the save, goes ten records to a call, at one credit a call (Zoho's API limits).
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.