Selling the same lead to two different buyers — whether from the same campaign or across different campaigns — is one of the fastest ways to lose buyer trust and generate disputes. Cross-campaign deduplication prevents this by checking every incoming lead against your organization's full lead history before it enters the delivery queue.
The challenge is that dedup needs to happen in real time, at ingestion, before any buyer receives the lead. Post-hoc dedup (checking later and issuing credits) is better than nothing but creates unnecessary disputes and erodes confidence in your operation.
How dedup works at ingestion
The core mechanism is straightforward: when a lead arrives, hash its canonical identifier (email, phone, or a composite of both), then look up that hash in your dedup store against all leads received within the configured window. If a match exists, reject the incoming lead immediately and return a duplicate rejection response to the source. If no match, accept the lead and write its hash to the dedup store for future checks.
The hash lookup must be atomic — meaning the read-and-write happen as a single operation — to prevent race conditions where two simultaneous submissions of the same contact both pass the check before either is recorded.
Choosing your dedup key and window
Three common key strategies:
- Phone only: catches resubmissions from people who use different email addresses, common with auto-fill abuse. Miss: same phone, different person (rare but possible in households).
- Email only: catches repeat submitters who know their phone number will be checked. Miss: same person with a different email.
- Email + phone composite: both must match for a rejection. Tightest dedup, fewest false positives. Best default for most campaigns.
Window selection depends on your buyers' exclusivity expectations. A 7-day window is the standard for most lead distribution verticals. Mortgage and solar often use 30-day windows because buyers expect exclusive contact rights for longer.
Single-campaign vs. cross-campaign dedup
| Scope | What it catches | What it misses | Tools with support |
|---|---|---|---|
| Single-campaign only | Duplicates within one campaign | Same contact submitted via different campaigns | Most basic tools |
| Cross-campaign (org-wide) | All duplicate submissions regardless of campaign | Contacts from before the dedup window | LeadMove ($149/mo), LeadProsper ($499+), Boberdoo ($1,000+) |
| Manual Sheets lookup | Periodic checks, not real-time | Parallel submissions, high-volume campaigns | Spreadsheets |
Why manual dedup fails at real-time scale
Spreadsheet dedup runs a lookup formula at query time, not at ingestion time. In a campaign receiving even 50 leads per hour, two identical submissions can arrive within milliseconds of each other. Both lookups run against the same spreadsheet state before either write completes, and both pass. This race condition is not solvable with spreadsheet-based tooling — it requires a proper atomic data store with write locking or atomic compare-and-set operations.
Manual dedup also can't cover multiple campaigns simultaneously without complex sheet architecture that breaks when any schema changes.
Monitoring your dedup rate
A healthy dedup rejection rate depends heavily on your traffic sources. Pure SEO or referral traffic might see 1-3% duplicate rate. Paid traffic campaigns, especially affiliate-driven ones, can run 5-15% or higher if sources are gaming your system. A sudden spike in duplicate rate from a specific source is a reliable fraud signal worth investigating immediately.
Cross-campaign dedup is the unglamorous infrastructure layer that keeps your buyer relationships intact. Buyers who receive duplicates will eventually compare notes — and when they do, a systematic dedup log is the only way to demonstrate you're taking quality seriously.