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:
| Requirement | Rule |
|---|---|
event_id | Identical, character-for-character, on both events |
event_name | Identical and case-sensitive (Purchase ≠ PURCHASE) |
| Timing | Both arrive within the ~48-hour deduplication window |
Match all three → counted once. Miss any → counted twice.
The two mistakes that break it
- Missing
event_idon the Pixel. The most common cause. The CAPI event has an id, the Pixel event doesn’t, so Meta can’t pair them. event_namecase mismatch. One source sendsPurchase, the otherPURCHASE(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
- Generate the
event_idonce, client-side, at the moment of conversion (e.g. a UUID on the thank-you page). - Send that exact value with both the Pixel event and the CAPI event.
- Keep
event_nameidentical and case-consistent across both. - 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.
Related
Sources
- Meta — About event deduplication (Business Help)
- AGrowth — Event deduplication in Meta Ads
- SignalBridge — Event deduplication
- Analyzify — Event deduplication for Meta Conversions