Why Meta shows a different number of purchases than Shopify
Meta says 52 purchases, Shopify says 80 orders, or Meta says 110. How to find out whether purchases are going missing, being counted twice, or just being counted differently.
If you run Meta ads on a Shopify store, you’ve probably compared the two numbers and found they don’t match. Sometimes Meta shows fewer purchases than you had orders. Sometimes it shows more. Both are common, and they have different causes.
This guide walks through how to tell which problem you have, in about fifteen minutes.
First, compare the right numbers
Ads Manager and Shopify measure different things, so a gap there isn’t proof of a tracking problem:
- Ads Manager shows purchases attributed to your ads, using Meta’s attribution window (by default, 7 days after a click or 1 day after a view). A sale from a shopper who never saw an ad isn’t counted there.
- Events Manager shows every Purchase event your pixel and server sent, whether or not an ad was involved. This is the number to compare with Shopify.
So open Events Manager, select your pixel, and look at the Purchase event for one full week. Then look at your Shopify orders for the same week. Make sure both use the same timezone: a store set to New York and an ad account set to Los Angeles will disagree on which day late-evening orders belong to.
If Events Manager shows clearly fewer purchases than Shopify, read the next section. If it shows more, skip to the one after.
Fewer purchases in Meta: events going missing
A browser pixel can only report what the shopper’s browser lets it report. Purchases go missing when:
- An ad blocker or privacy browser blocks the pixel. Many shoppers run one, and they block Meta’s script outright.
- iOS and browser privacy settings limit tracking. Safari and iOS restrict how long identifiers live and what scripts can do.
- The shopper declines marketing cookies. If your store asks for consent and they say no, Shopify won’t run marketing pixels for them. That’s working as intended, but it shows up as a gap.
- The thank-you page never fully loads. The shopper pays and closes the tab, or the connection drops, before the pixel fires.
The fix is to send purchases from the server as well, using Meta’s Conversions API. The server learns about the order from Shopify itself, so blockers and closed tabs don’t matter. Consent still does: a server-side setup should respect what the shopper agreed to.
More purchases in Meta: events counted twice
This is the one that makes ROAS look too good to be true. The usual causes:
1. More than one thing is sending purchases
Go to Settings → Customer events in Shopify. You’ll see every app pixel and custom pixel
installed. Then check your theme for leftover pixel code (search the theme files for fbq().
It’s common to find two or three sources:
- Meta’s own Facebook & Instagram channel
- a tracking app installed later, or one that was uninstalled but left code behind
- a pixel snippet pasted into the theme years ago
Each one sends its own Purchase. Meta only merges them if they share the same event_id,
and different tools almost never do.
2. The thank-you page loads more than once
Shoppers paying with redirect-based methods (iDEAL, Klarna, MobilePay, some wallets) leave your checkout and come back. If they land on the thank-you page again, or simply reload it, a browser pixel can fire Purchase a second time, with a new ID each time. Meta sees two different purchases.
A quick check: in Events Manager, look at a handful of Purchase events and compare their order IDs or values. Repeats of the same order give it away.
3. A rule in Meta is creating purchases
Meta’s event setup tool can create events from URL rules, such as “count a Purchase when
someone visits a page containing /thank”. A rule that’s too broad can fire Purchase on
pages that have nothing to do with buying. Use Test events in Events Manager, browse
your store without buying anything, and see whether a Purchase appears.
How to fix duplicates for good
The principle is simple: one purchase per order, with an ID that never changes.
- Pick one source of truth for purchases. Turn off or remove the others, including old theme code.
- Use the order ID as the basis of the
event_id. If the same order is reported twice, by a reload or by both browser and server, Meta recognises it as the same purchase and counts it once. Meta deduplicates events with the same name andevent_idthat arrive within 48 hours of each other. - Send purchases server-side. The server sees each order exactly once, no matter how many times the thank-you page loads.
The fifteen-minute checklist
| Check | Where | What you’re looking for |
|---|---|---|
| Purchases vs orders, same week and timezone | Events Manager and Shopify | Which direction the gap goes |
| Every installed pixel | Shopify → Settings → Customer events | More than one source of purchases |
| Leftover code | Theme files, search for fbq( |
Old pixel snippets |
| Repeated orders | Events Manager → Purchase details | The same order ID twice |
| Phantom purchases | Events Manager → Test events | Purchase firing without a sale |
If you work through this and the numbers still don’t add up, email me at hello@superpixel.app and tell me what you found. I’m happy to take a look.