Aadvanced matching with pre-hashed PII – clarification on Meta’s expectations
Hi everyone 👋
I’m working on a browser-only setup for conversion tracking and I’d like to double-check a few details specifically on the Meta side (naming, hashing detection, and what the Pixel actually expects).
Context
- the lead/conversion event fires on a thank-you page
- the user data (email, phone, name…) is collected on the previous page
- I can’t fire the event on the form page as the tracking wouldn't be always truthful
- I don’t have a server / CAPI in this flow, so this is 100% client-side
To bridge the two pages, I’m doing this:
- on the form page I collect the user fields
- I normalize them in two ways (Google-style and Meta-style)
- I hash the Meta-normalized version with SHA-256
- I temporarily store it in sessionStorage
- on the thank-you page I read it and want to send it with the Meta Pixel event
So far, so good.
What I’d like to confirm 👇
- Does the Pixel reliably accept SHA-256 hashed customer data sent via fbq('track', 'Lead', ..., { …customer data… })? In other words: if I send the customer info already hashed, Meta will still match it, right?
- Do I need to tell Meta explicitly that the values are already hashed (like a flag or a specific param), or will the Pixel detect it automatically from the format? I know Google makes you use different parameter names for hashed values – I couldn’t find something equally explicit for Meta.
- What’s the most “standard” way to send hashed user data client-side right now?
- plain fbq('track', ...) with customer data object
- GTM template (e.g. facebookarchive or Stape style?)
- other approach you’ve seen working better in production
I’m trying to avoid situations where the template re-hashes what I already hashed and we end up with double-hash and no matching.
- In your experience, do current Meta templates auto-hash by default? If yes, is there a clean way to say “I’m already sending hashed values, please don’t touch them”?
I’m aware that server-side CAPI would make all of this nicer, but in this scenario I need to stay client-only and make sure I’m not breaking matching just because the actual event is on a different page.
Any real-world examples/snippets from would be super helpful 🙏
Hi chiara.88995
We're unable to provide support for Meta Pixel products as this forum is for VR Development on HorizonOS.
For Meta Pixel support, please visit their support site . Good luck with development!