Fuzzy name matching for same-email contacts
Why it matters
When the same email address is submitted multiple times with name variations (Alice Smith, A. Smith, ALICE SMITH), a naive upsert creates duplicate contact records or silently discards the newer name with no record of what was changed. Multiple records for the same email send duplicate campaigns to the same person, overcount subscribers in reporting dashboards, and create ambiguity when the contact later requests deletion under GDPR Art. 17 — which record is erased? Without a defined merge strategy, data quality degrades with every import, and the marketing list progressively diverges from reality.
Severity rationale
Low because duplicate name records cause reporting inflation and confusion rather than compliance violations or deliverability damage, but unresolved merges accumulate across every import.
Remediation
Define an explicit merge strategy in the upsert path rather than letting the ORM choose implicitly:
await db.contact.upsert({
where: { email: normalizedEmail },
create: { email: normalizedEmail, name: incomingName },
update: {
// Prefer the more complete name (longer string = more information)
name: incomingName.length > (existingName?.length ?? 0)
? incomingName
: existingContact.name,
updated_at: new Date()
}
})
For split first/last name fields, log the discrepancy to a review queue instead of silently overwriting. The review queue is a simple DB table with contact_id, field, current_value, incoming_value, created_at — populate it in the upsert transaction and surface it in your admin interface.
DetectionPro
The detection method for this pattern is part of AuditBuffet Pro.
The full method (what to look for, pass and fail conditions, and how results get reported) ships inside the Data Quality & List Hygiene Audit. The pattern definition, severity rationale, and remediation remain openly licensed under CC-BY-4.0.
External references
- iso-25010:2011 · functional-correctness — Functional Correctness (functional suitability)
- gdpr · Art. 17 — Right to erasure ('right to be forgotten')
Taxons
History
- 2026-04-18·v1.0.0·Initial import from data-quality-list-hygiene·automated