Plus-addressing normalization
Why it matters
Gmail and many providers route user+tag@gmail.com to the same mailbox as user@gmail.com. Without stripping plus-tags before deduplication, a single subscriber can appear multiple times with different tags (user+promo@, user+news@, user+test@) — each receiving its own copy of every send. The duplication inflates list counts, skews per-contact engagement metrics, and in markets with per-contact billing (most ESPs), directly increases cost. More critically, a suppression or unsubscribe recorded against the base address won't suppress the tagged variants, creating compliance exposure under CAN-SPAM § 5's unsubscribe-honoring requirement.
Severity rationale
Low because plus-address collisions affect a minority of subscribers, but each duplicated contact creates a gap in unsubscribe coverage that compounds across campaigns.
Remediation
Strip the plus-tag from the local part during canonicalization before the deduplication lookup:
function canonicalizeEmail(email: string): string {
const [local, domain] = email.toLowerCase().trim().split('@')
if (!local || !domain) return email.toLowerCase().trim()
return `${local.split('+')[0]}@${domain}`
}
const canonical = canonicalizeEmail(rawEmail)
await db.contact.upsert({
where: { email: canonical },
create: { email: canonical, email_original: rawEmail },
update: { updated_at: new Date() }
})
Store both email (canonical) and email_original (as submitted). Suppressions and unsubscribes must be keyed on the canonical form so all variants are covered. Note: Outlook's plus-addressing behavior differs from Gmail — plus-stripping is safe for @gmail.com and @yahoo.com domains; apply universally with awareness that it is a dedup heuristic, not a routing guarantee.
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)
Taxons
History
- 2026-04-18·v1.0.0·Initial import from data-quality-list-hygiene·automated