TrackParity

HomeGuides › Meta Pixel + CAPI Double Counting: the event_id Deduplication Diagnostic

Meta Pixel + CAPI Double Counting: the event_id Deduplication Diagnostic

← All guides

If Meta’s Ads Manager reports more purchases than Shopify actually had, your Pixel and Conversions API (CAPI) aren’t deduplicating — Meta is counting each sale twice, inflating your conversions and ROAS. (This is the Meta-side twin of duplicate GA4 events.)

Deduplication isn’t automatic magic — it depends on two fields matching exactly. Here’s how it works and the two mistakes that break it.

How deduplication actually works

When you send a purchase through both the browser Pixel and the server-side CAPI (which you should — it’s how you get high Event Match Quality), Meta needs to know they’re the same sale. It deduplicates when all of these hold:

RequirementRule
event_idIdentical, character-for-character, on both events
event_nameIdentical and case-sensitive (PurchasePURCHASE)
TimingBoth arrive within the ~48-hour deduplication window

Match all three → counted once. Miss any → counted twice.

The two mistakes that break it

  1. Missing event_id on the Pixel. The most common cause. The CAPI event has an id, the Pixel event doesn’t, so Meta can’t pair them.
  2. event_name case mismatch. One source sends Purchase, the other PURCHASE (or a custom variant). Case-sensitive means these are treated as different events.

A third, subtler cause: generating two different event_ids (e.g. one on the client, a new one on the server) instead of sharing one.

The fix

  1. Generate the event_id once, client-side, at the moment of conversion (e.g. a UUID on the thank-you page).
  2. Send that exact value with both the Pixel event and the CAPI event.
  3. Keep event_name identical and case-consistent across both.
  4. Make sure both fire within the 48-hour window (retries beyond it get re-counted — use idempotency).

How to verify

In Events Manager → your dataset → Test Events, place a test order and watch the Purchase event. You should see it flagged as received from both Browser and Server, deduplicated into one — and both carrying the same event_id. If you see two separate purchases, re-check the id and the event name casing.

FAQ

How does Meta deduplicate Pixel and CAPI events? Same event_id (character-for-character) + identical case-sensitive event_name, within ~48 hours → counted once.

Why is my Pixel and CAPI double counting? Usually a missing event_id on the Pixel, or an event_name case mismatch (Purchase vs PURCHASE).

How do I fix it? Generate one event_id client-side, send it with both events, keep event_name identical, verify in Test Events.

Sources

Is your tracking gap normal — or a real bug?

Get the free Tracking-Health Mini-Audit: drop in your Shopify, GA4 & Meta numbers and get a red/yellow/green score in ~10 minutes, plus your top 3 fixes.

No spam. Unsubscribe anytime. We never sell your data. By subscribing you agree to our privacy policy.