Deduplication API

Deduplicate a contact list with one API call

Send your records, get back duplicate clusters with confidence scores and a suggested survivor for each group.

The problem

Exact-match dedupe misses the real duplicates: "Acme, Inc." vs "acme inc", the same person under two emails, a typo in a last name. Building fuzzy matching in-house means tuning similarity thresholds, blocking strategies, and merge rules — then maintaining them forever.

What you get

  • Fuzzy matching across fields, not brittle exact-string comparison
  • A confidence score and plain-language reason for every match
  • High-confidence pairs merge automatically; the rest go to review
  • Deterministic and auditable — the same input always yields the same clusters

Call it in one request

Plain HTTPS and JSON against /api/v1/dedupe. Use the SDK for typed calls, or hit the endpoint directly — same contract either way.

cURL
curl https://zapinner.com/api/v1/dedupe \
  -H "Authorization: Bearer zap_live_••••••" \
  -H "Content-Type: application/json" \
  -d '{"records":[{"id":1,"email":"a@acme.com"},{"id":2,"email":"A@ACME.com"}]}'
JavaScript (fetch)
const res = await fetch("https://zapinner.com/api/v1/dedupe", {
  method: "POST",
  headers: {
    Authorization: "Bearer zap_live_••••••",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
  "records": [
    {
      "id": 1,
      "email": "a@acme.com"
    },
    {
      "id": 2,
      "email": "A@ACME.com"
    }
  ]
}),
})
const data = await res.json()
@zapinner/sdk
import { Zapinner } from "@zapinner/sdk"

const zap = new Zapinner({ apiKey: process.env.ZAPINNER_API_KEY })

const result = await zap.request("/api/v1/dedupe", {
  "records": [
    {
      "id": 1,
      "email": "a@acme.com"
    },
    {
      "id": 2,
      "email": "A@ACME.com"
    }
  ]
})

Frequently asked

How does it decide two contacts are the same?
It compares records field-by-field with similarity scoring (name, email, company, phone), combines the signals into a confidence score, and clusters records above your threshold. Every match carries the reason and score so you can audit it.
Will it merge records automatically?
Only above a high-confidence threshold. Ambiguous pairs are returned for review instead of being merged silently, so you never lose data to an over-eager match.
How many records can I send at once?
Small batches run inline in a single request. For large lists, submit an async job and poll for the result — the same dedupe engine, sized for bigger inputs.

Related solutions

Ship it today with Zapinner

One API key, one consistent interface, 79 data capabilities. Start on the free plan — no credit card required.

Canonical: https://zapinner.com/solutions/deduplicate-contact-list