Meta & Google conversion hashing tool
Paste a customer identifier and get the normalized value and its SHA-256 hash for the Meta Conversions API and Google Enhanced Conversions. These are the exact normalization rules the server-track-lab API uses (mirrored from its source and covered by a parity unit test).
Your data never leaves the browser. Hashing uses WebCrypto on this page; nothing is uploaded.
Single value
| Normalized | SHA-256 |
|---|
Bulk CSV
Paste CSV with a header row. Columns named email, phone, first_name, last_name, country or external_id get Meta and Google hash columns added; others are kept as-is. Simple CSV only (quoted fields supported, no embedded newlines).
The rules
| Field | Meta CAPI | Google Enhanced Conversions |
|---|---|---|
| email (em) | trim, lowercase | trim, lowercase, remove dots and any +suffix before @ for gmail.com / googlemail.com |
| phone (ph) | digits only incl. country code, no + | E.164 with leading + |
| first/last name (fn/ln) | trim, lowercase, letters only (punctuation and spaces removed) | trim, lowercase, then SHA-256 (see the Google EC builder) |
| country | trim, lowercase 2-letter code | not sent |
| external_id | trimmed, hashing recommended | not sent |
Meta sources: Meta: Customer information parameters. Related guides: Meta CAPI deduplication, form & CRM conversions, server-side vs browser pixel.
POST /api/v1/track call: we normalize, hash, dedupe on event_id and forward to Meta CAPI. Free for 1,000 events a month, then CA$2 per 1,000. Get a free API key · Try the playground · API docsFAQ
Does my data leave the browser?
No. Normalization and SHA-256 hashing run locally with the browser's WebCrypto API. Nothing you paste is uploaded, logged or stored by server-track-lab.
Why is the Google hash of a Gmail address different from the Meta hash?
For Google, server-track-lab removes dots and any +suffix from the part before the @ for gmail.com and googlemail.com addresses. For Meta the email is only trimmed and lowercased. Different normalized strings give different SHA-256 hashes.
Why does the phone hash differ between Meta and Google?
Meta takes digits only including the country code, with no plus sign. Google takes E.164 format with a leading plus sign. The tool shows both.
What if my value is already hashed?
A 64-character lowercase hex string is treated as an existing SHA-256 hash and passed through unchanged, the same way the server-track-lab API does.
Do I need this tool if I use server-track-lab?
No. Send the raw values to POST /api/v1/track over HTTPS and server-track-lab normalizes and hashes them before forwarding to Meta.