Gmail Address Normalization for User Deduplication
Gmail's Normalisation Rules
Gmail silently ignores two categories of variation in addresses:
1. Dots in the Local Part
[email protected], [email protected], and [email protected]
all deliver to the same inbox. Dots are cosmetic only.
2. Plus-Aliases
[email protected], [email protected], and [email protected]
all go to Alice's inbox. The +tag suffix is stripped during delivery.
The Deduplication Problem
Without normalisation, your database may contain:
| Email stored | Actual user |
|---|---|
| [email protected] | Alice |
| [email protected] | Alice |
| [email protected] | Alice |
Three records, one person — and three separate free trials claimed.
Normalising via API
curl -X POST https://api.toolkitapi.io/v1/email/normalize \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{"email": "[email protected]"}'
{
"original": "[email protected]",
"normalized": "[email protected]",
"provider": "gmail",
"rules_applied": ["lowercase", "remove_dots", "strip_plus_alias"]
}
Other Providers with Similar Rules
- Googlemail.com — alias for gmail.com
- ProtonMail — supports plus-aliases but not dot normalisation
- Outlook/Hotmail — plus-aliases supported; dots are significant
The API applies provider-specific rules automatically based on the MX record.
When to Normalise
Normalise at signup, not at login. Store the normalised form as the canonical key for deduplication, but keep the original for display purposes.
email_input = "[email protected]"
canonical = normalize_email(email_input) # "[email protected]"
if User.query.filter_by(canonical_email=canonical).first():
raise DuplicateSignupError