AuditTag

Why Meta reports more purchases than Shopify, and when it means your tracking is broken

By Sam Parkinson19 September 20267 min read

Meta Ads Manager says your ads drove 140 purchases last week. Shopify says you took 100 orders, and not all of them came from Meta. Either Meta is very generous, or something is counting twice. Both happen, and they need opposite responses. Here is how to tell them apart.

The short answer: Ads Manager does not count orders. It counts purchases it credits to your ads, using its own rules about which clicks and views get credit and which day the purchase belongs to. That alone can make Meta's number bigger than your real orders, and it is not a fault.

It is a fault when Meta receives the same purchase twice. To find out which you have, compare Meta's Events Manager, which counts what your pixel actually sent, with your Shopify orders. Not Ads Manager.

Two different questions, two different screens

Most of the confusion comes from comparing the wrong screen. Meta gives you two:

ScreenWhat it countsCompare it with Shopify?
Events ManagerPurchase events your pixel and Conversions API sent to Meta, whether or not anyone saw an adYes. This should track your online orders closely
Ads ManagerPurchases Meta attributes to a specific ad, under your attribution settingNo. It answers a different question, and is expected to differ

Hold that distinction and the rest of this post is straightforward. The first half covers why Ads Manager is bigger when nothing is wrong. The second covers how Events Manager tells you when something is.

Why Ads Manager is bigger even when tracking is fine

It credits purchases to ads people clicked days ago, or only saw

Every ad set has an attribution setting: how many days after a click, and sometimes after a view, Meta may credit a purchase to the ad. A shopper who saw your ad on Monday, forgot about it, then came back through Google on Wednesday and bought, can be a purchase in Ads Manager and a Google order in your other reports.

How to check: in Ads Manager, add the Attribution setting column, and use Compare attribution settings to split results into click and view. If a large share of purchases are view-through, that explains much of the gap.

It files each purchase under the day of the ad, not the day of the order

Meta's help centre explains that in Ads Manager, conversions are reported against the time of the impression or click that led to them, not the time of the purchase. Your Shopify report counts orders on the day they were placed. So "last week" in the two tools contains different purchases, and a short date range can disagree even if every purchase is tracked perfectly.

How to check: compare a longer window, such as 30 days, and the gap from dating should shrink.

Other platforms claim the same order

Meta credits a purchase to Meta. Google Ads credits it to Google. Your email tool credits it to the email. Each platform counts the orders it touched, so the platforms together can claim far more orders than you took. This is why adding up each platform's reported purchases never gives your real sales, and why Shopify, not an ad platform, is the number to run the business on.

Some purchases are estimated

Since Apple's iOS 14.5 privacy changes, Meta cannot observe every conversion directly and uses statistical modelling to account for some of them. Those modelled purchases appear in Ads Manager, but no Shopify order corresponds one-to-one with them. Meta's own explanation of count differences covers this and the other reasons above.

Would you rather check your store than read a checklist? AuditTag reads your public pages and flags a Meta Pixel sitting in your theme, the most common cause of double counting on Shopify, in about a minute. Run a free audit →

The ten-minute test that finds a real fault

None of the above means Meta receives more purchases than you took. So the check is simple:

  1. In Shopify admin, open Orders, filter by Sales channel › Online Store, and count orders for the last 7 full days. Orders from other channels never pass through your storefront, so Meta was never going to see them. We explain why in Why Shopify and GA4 purchases don't match, and the same applies to Meta.
  2. In Events Manager, open your dataset (pixel) and read the number of Purchase events received over the same days.
  3. Compare the two.
Events Manager Purchase vs Online Store ordersWhat it means
A bit lowerNormal. Shoppers who decline consent or block tracking never send a Purchase.
Much lower, or zeroThe purchase is not reaching Meta. On Shopify this is usually a pixel installed in the theme, which does not run on checkout. See the theme.liquid trap.
About the sameTracking is fine. The extra purchases in Ads Manager are attribution, covered above.
Noticeably higher, often close to doublePurchases are being sent twice. Read on.

When Meta really is counting twice

If Events Manager receives more purchases than you took, one of these is almost always why.

Browser pixel and Conversions API without a shared event ID

Sending purchases from the browser and the server (the Conversions API) is good practice, because each catches purchases the other misses. But Meta only treats the two as one purchase under strict conditions. Its deduplication documentation requires the pixel's eventID to match the Conversions API event_id, the event names to match, and both to arrive within 48 hours of the first. Miss any one and both events count.

This usually happens when the server events come from one source, such as an app or a server-side container, and the browser events from another, and nobody made the IDs agree.

How to check: open Test events in Events Manager and place a test order. You want one browser Purchase and one server Purchase for the order, marked as deduplicated. Two purchases that are not deduplicated is the fingerprint.

Two pixels, or one pixel installed twice

The Shopify classic: the Facebook & Instagram app sends purchases through Shopify's checkout events, and an old pixel snippet is still pasted in theme.liquid or left in the retired Additional scripts box. Every page view is sent twice, and depending on the setup, so can the purchase. A second pixel ID, perhaps from an agency or an old ad account, has the same effect across datasets.

How to check: view the source of a product page and search for fbevents.js and fbq('init'. Then look in Settings › Customer events for app and custom pixels. Meta should be installed in one place, not both.

A purchase that fires on every visit to the confirmation page

Hand-built purchase code on an order status page can fire again each time a customer revisits it, from a bookmark or an order email. Shopify's own checkout_completed event is triggered once per checkout, so purchases sent through the official app or a Customer events pixel do not have this problem. Custom code and old snippets can.

What to do with the answer

What AuditTag checks on your public pages

  • Meta Pixel detected in the page source
  • GA4 and Google Tag Manager detected
  • Google Ads tag detected
  • Legacy Universal Analytics still present

What this doesn't prove

Finding a Meta Pixel in your theme tells you a second installation may exist. It does not show what Meta receives, whether purchases are deduplicated, or what is installed under Customer events. That needs Events Manager and a test order. Catching the day the ratio changes is what Guardrails monitors.

See what's actually installed on your store

The free audit reads your public pages and tells you which tracking it can detect: Meta Pixel, GA4, Google Tag Manager and Google Ads. It flags a pixel sitting in your theme, the usual source of a second installation. It takes about a minute. No account, no card, nothing installed, and it never touches your store.

Run a free audit →

The audit confirms presence on your public pages. Watching what Meta and GA4 actually receive, and catching the day it changes, is what Guardrails monitoring covers.

Keep reading