Normalize and SHA-256-hash emails and phone numbers exactly the way Google Customer Match / Enhanced Conversions, Meta CAPI, and GA4 user-provided data expect. A wrongly normalized value hashes fine and uploads fine — it just never matches. This tool encodes the per-platform rules so the silent match-rate loss doesn't happen.
🔒 runs entirely in your browser — nothing is sent anywhere · works offline
Nothing leaves your browser. We never see your data. Every normalization and hash runs locally via the Web Crypto API. This page makes zero network requests.
One email or phone number per line. Type is auto-detected per line; lines that fail validation are flagged instead of hashed.
The differences below are why a hash that matches on one platform can silently miss on another. All platforms hash the UTF-8 bytes of the normalized string with SHA-256 and expect lowercase hex output.
| Rule | Meta CAPI | Generic | |
|---|---|---|---|
| Trim leading/trailing whitespace | yes | yes | yes |
| Lowercase | yes | yes | yes |
| Remove dots in the local part of @gmail.com / @googlemail.com | yes | no | no |
Consequence: jane.doe@gmail.com and janedoe@gmail.com produce the same hash for Google and different hashes for Meta.
| Rule | Meta CAPI | Generic | |
|---|---|---|---|
| Strip all non-digits (spaces, dashes, parentheses) | yes | yes | yes |
| Country code required (E.164 — no trunk 0, max 15 digits) | yes | yes | yes |
| Leading + inside the hashed string | yes +14155550132 | no 14155550132 | yes |
Consequence: the same phone number produces different hashes for Google (E.164 with the +) and Meta (digits only, no +). Sending one platform's hash to the other never matches.