Přeskočit na obsah
DATANOSTRO ACADEMY

Meta CAPI without duplicate conversions — event_id and deduplication

When you send a purchase event from both the Pixel and CAPI, Meta has to match them. How to do it with event_id and why it works out-of-the-box in DataNostro.

10 min čtení Středně pokročilý Aktualizováno 5.6.2026

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 ID
  • client_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.

Pomohl vám tento článek?
✓ Děkujeme za zpětnou vazbu