Meta can receive a single conversion event from two places — the Pixel in the browser and the Conversions API (CAPI) from the server. Without deduplication logic, your purchase events would be counted twice.
The key: event_id
Send the same event_id value from both the Pixel and CAPI. Meta
uses it to determine that it's the same conversion and counts it only once —
it prefers the CAPI version because it has more match parameters (email, phone, IP).
Match Quality Score
In the Events Manager you see the Event Match Quality per platform. Target: ≥ 7/10. Send as many match parameters as possible:
em— SHA256 hash of the email (lowercase + trim)ph— SHA256 hash of the phone (E.164 format)fn,ln— first + last name (lowercase)fbc,fbp— Facebook click ID + browser IDclient_ip_address,client_user_agent— automatically from the request
How you have it in DataNostro
Dashboard → Platforms → Meta CAPI → fill in the Pixel ID + Access Token. Our sGTM tag automatically generates the event_id (UUID v4), hashes the email/phone per the Meta specification, pulls fbc/fbp from cookies, and sends it all with every event. No templates, no transformations — out-of-the-box.
If you use the Stripe Forwarder, purchase events from Stripe webhooks get the event_id from the Stripe payment intent ID — so they automatically deduplicate with the frontend Pixel event even if they're delayed by a few minutes relative to each other.