Read this case study on its own page
Challenge
The same prospect gets in touch twice — from a different device, a different email address, a slightly different company name — and appears as two unrelated contacts. Manual de-duplication doesn't scale, attribution is lost, and follow-up either duplicates itself or misses the earlier conversation.
Approach
A five-stage pipeline. Ingest: enquiry and booking submissions are captured as a fire-and-forget step, so resolution never slows down the visitor's response. Match: exact identifiers first, then name blocking to discard implausible candidates, then a string-similarity score — a high score merges automatically, a middle band is queued for a human decision, and nothing ambiguous is ever merged or discarded silently. Write: confirmed matches merge into one canonical record with field-level audit on every change. Enrich: unresolved contacts are sent overnight to a people-enrichment provider, with retry and back-off. Sync: merged and enriched contacts flow both ways with Microsoft 365 contacts, with last-writer-wins conflict resolution. A dedicated database with versioned migrations holds contacts, identifiers, source links, events, enrichment jobs and the full merge history.
Outcome
- Duplicate submissions resolved into one record automatically, across devices, addresses and company-name variants
- Ambiguous matches surfaced for review rather than guessed
- Every merge and field change traceable
- Records enriched overnight and available in Outlook and Teams without manual research
- No latency added to the contact form
Where judgement mattered
- A human-review band instead of a single threshold — precision matters more than automation rate for customer records
- Resolve identity before anything downstream acts on a contact
- Keep the user-facing path fast; do the clever work asynchronously
Technology stack
C# / .NET 10 · Azure Functions · Azure SQL with versioned migrations · Jaro-Winkler similarity · people-enrichment API with retry policies · Microsoft Graph (Exchange contacts)