How to Deduplicate CRM Records
Exact matching only catches half the problem. Here's how to catch human-entry near-duplicates, choose a confidence threshold, and merge without losing data.
Duplicate records inflate your counts, split activity history, and quietly break every report that groups by account. The hard part isn't finding byte-identical copies — it's catching the near-duplicates a human would spot instantly and a string comparison never will.
Two kinds of duplicate
- Exact duplicates come from form double-submits and webhook replays. They're identical and easy to catch.
- Near-duplicates come from human entry: "Jon Smith" and "John Smith" at the same company. Exact matching misses them entirely.
Normalize before you match
Matching is far more accurate on normalized identity fields. Canonicalize name, email, and company first so matching compares like with like rather than tripping over casing and whitespace.
Match with confidence, not a yes/no
Send records to the dedupe endpoint with the identity fields that matter. Every candidate match comes back with a confidence score — you decide the threshold at which records merge versus go to human review.
curl -X POST https://zapinner.com/api/v1/dedupe \
-H "Authorization: Bearer $ZAPINNER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"records": [
{ "name": "Jon Smith", "email": "j.smith@acme.io" },
{ "name": "John Smith", "email": "j.smith@acme.io" }
],
"fields": ["name", "email"]
}'
# -> duplicate groups, each with a confidence scoreChoosing a threshold
There's no universal number. Start conservative so you only auto-merge obvious matches, review the borderline band by hand, and tune from real results. A false merge is more expensive than a missed one, so err high at first.
Merge without losing data
Survivorship rules keep the best value for each field across the matched group — the most complete or most recently updated — so the surviving record is better than any single input, not just one row picked arbitrarily.
Deduplicate at write time and the duplicate never exists — nothing downstream has to un-learn it.
Fix messy data before it breaks your workflow.
Start free with 1,000 credits a month across every capability — no credit card required.
