Articles ·

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.

  1. Pick one source of truth for purchases. Turn off or remove the others, including old theme code.
  2. 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 and event_id that arrive within 48 hours of each other.
  3. 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 [email protected] and tell me what you found. I’m happy to take a look.