How to Stop Duplicate Contacts in Zoho CRM
By Nehal Azhar, Zoho Certified Consultant / AWS Certified Solutions Architect · Published · Updated
To stop duplicate contacts in Zoho CRM, turn on the duplicate check for email, choose Skip or Overwrite on every import, and set your web forms to update an existing record instead of always creating one. Then match incoming leads to contacts in a Deluge function and clean up what already exists with Find & Merge. Each step closes a different way duplicates get in.
How do you stop new duplicates at the source?
Mark the field that identifies a person as unique, usually email. Zoho then checks it whenever someone adds a record. For Leads and Contacts, open Setup, then Customization, then Modules and Fields, pick the module, and choose More options, then Duplicate Check Preference. Zoho says you must enable it separately for Leads and for Contacts.
- If the system Email field is hidden, the feature is not available.
- Zoho lists cases where the check does not run: edits in Sheet View, data migration, restoring from the Recycle Bin, and Outlook plug-in or Google Contacts sync.
- Unique fields only prevent new duplicates. They do not remove the ones you already have.
What should you pick when importing a file?
Zoho's import options for duplicates are skip, overwrite and clone. Matching uses one field per module. Leads and Contacts match on Email, Accounts on Account Name and Deals on Deal Name. With the email check on, Clone is disabled, so you choose Skip or Overwrite. Zoho's import FAQ says Overwrite is available on Enterprise and above, so check your edition.
- Skip leaves existing records alone. Use it for a cold list you only want new names from.
- Overwrite replaces the mapped fields on the match. Map only the columns you mean to change, because blanks in your file can wipe good data.
- If email is not the right key, export the records, keep the Record ID column, edit and import with Overwrite, which also needs Enterprise or above. Zoho then matches on Record ID, and with that column unmapped no new records are created.
Do a dry run on ten rows first and keep the original file so you can undo the import.
How do you stop Zoho Forms creating duplicate leads?
In Zoho Forms, the CRM integration has an Upsert Record action. If a record with an identical value exists, it is updated, and if not, a new one is created. The article does not say which fields define "identical", so test with a repeat submission before you trust it.
For people already in CRM, the Update Record option looks up the existing record and prefills the form. Turn on Do not overwrite - Empty Values so a blank answer never erases a value you already hold.
What happens to duplicates when you convert a lead?
Zoho's Kaizen guide on lead conversion says it checks Contacts by your unique fields first, then Email, and Accounts by unique fields, then Account name. Without unique fields it compares the lead's Email, Company and name against existing records. The Lead Conversion Options API returns the likely matches before you convert, so a script can warn rather than guess.
Watch the overwrite option, which defaults to false. It controls whether an existing contact's account name is replaced by the lead's company when the two conflict, so check the result when they differ.
How can a Deluge function match a new lead to a contact?
Normalize the email, search Contacts, and act on how many matches come back. This is our suggested pattern, not Zoho's. It is an example, so test it in a sandbox. Zoho's page does not document what a search with zero matches returns, so check that in your own org.
// Example only. Workflow on Lead create, passing Email and the lead ID.
email = leadEmail.trim().toLowerCase();
matches = zoho.crm.v8.searchRecords("Contacts", "(Email:equals:" + email + ")");
if(matches.size() == 1)
{
// One match: link the lead to this contact, fill empty fields only.
contactId = matches.get(0).get("id");
}
else if(matches.size() > 1)
{
// Several matches: do not guess. Notify the owner.
info "Needs a human: " + matches.size() + " contacts for " + email;
}Zoho documents zoho.crm.v8.searchRecords with the criteria format (Field:equals:value), a default of 200 records per page and a maximum of 10 criteria. Each execution that gets a response counts against your external calls limit, so keep loops short. Use zoho.crm.updateRecord to write the fill-the-blanks update.
How do you clean up duplicates you already have?
Zoho has two tools. Find & Merge Duplicates works on one record: open it, click the More icon, and choose it. It covers Leads, Accounts, Contacts, Deals, Vendors and custom modules, and merges up to three records at a time. De-duplicate runs from a module's list view and checks up to three fields at a time. Exact copies merge automatically, while conflicts need a person to decide.
What rules should a clean-up follow?
In our Zoho One cleanup for a travel agency the rule was one person, one contact. Leads matched contacts by email, empty fields were filled and conflicts were flagged instead of overwritten. Multiple matches alerted the owner, unsubscribes always won, and every import had a dry run and an undo file.
If you want that done for your CRM, see our CRM integration service. If the duplicates come from a connected system, the Pipedrive guide covers the same idea on the API side.
Frequently asked questions
Why are rows missing after my Zoho import?
Zoho's import FAQ gives one cause: an empty row in the file is interpreted as the end of the file, so everything below it is not imported. Remove blank rows and import again.
What happens to the merged-away records in Zoho CRM?
Zoho says the duplicate records are deleted permanently once merged and the action cannot be reverted, so export the records first.
Does a unique email field fix my existing duplicates?
No. Unique fields only stop new duplicates, so you still need Find & Merge or De-duplicate for the records already in CRM.
Does the duplicate check run on every way a record is added?
No. Zoho lists exceptions including Sheet View edits, data migration, Recycle Bin restores, and Outlook plug-in or Google Contacts sync.
What happens when a web form submits an email that already exists?
With the duplicate check on, Zoho says duplicates from web forms are automatically sent for approval, even when the approval option is off.
Sources
Checked 31 Oct 2026. Provider settings and limits change, so confirm against the linked documentation.