Some gap between Meta and Shopify is normal — Meta counts view-through conversions and uses a different attribution window than your store does. A large, persistent gap in Meta’s favour is different. It usually means something is reporting purchases that did not happen: a duplicate pixel, duplicate events, or a purchase event firing on a page that is not a purchase.
The way to tell them apart is to stop comparing totals and start comparing the right pair of numbers.
This is one of the most common questions in ecommerce advertising, and one of the worst-served. Search it and you will find Reddit threads with thirty comments and no conclusion, Shopify Community posts marked unsolved, and vendor articles that list nine causes and then suggest their product.
So here is a specific account, a specific cause, and the reconciliation that found it.
The situation
I took over a Shopify skincare brand’s Meta advertising. The handover came with a problem the previous marketer had not been able to solve: Meta was reporting around 100 orders. Shopify was showing 55 to 70.
That gap had been running long enough that the client had stopped trusting either number. And because they could not tell which campaigns were reporting honestly, they were adjusting budgets essentially at random — increasing spend on whatever looked good in Ads Manager, with no way to know whether “good” meant anything.
That is the real damage. Not the wrong number itself, but every decision made downstream of it.
One Shopify account I took over and audited — a skincare brand running Meta ads at roughly PKR 100,000 per day. The client asked me not to name them, so I have not. The numbers below are as they stood in the account during that engagement.
This is one account, not a study. I am giving you the mechanism and one worked example, not a statistic about the industry. And I am not stating precise engagement dates here because I would rather leave them out than approximate them.
First: compare the correct pair of numbers
Most people compare Meta’s reported conversions against Shopify’s total orders, panic at the difference, and start rebuilding things that were never broken. Those two figures are supposed to differ.
| Number | What it counts | How it should compare |
|---|---|---|
| Shopify orders | Every paid order, from every source | The ground truth |
| Events Manager purchases | Purchase events Meta received | Should approach Shopify, never exceed it |
| Ads Manager conversions | Purchases Meta credits to your ads | A subset — not every sale came from an ad |
Read the middle row again, because it is the one that matters and the one nobody looks at. Events Manager purchases should be close to your Shopify order count, since it is counting purchase events regardless of which campaign gets credit. If that number exceeds your real orders, you are not looking at an attribution question. You are looking at events that do not correspond to sales.
Ads Manager conversions being lower than Shopify orders is normal and healthy. Events Manager purchases being higher than Shopify orders is a defect.
What was actually happening
The account had two Meta pixels installed at the same time:
- One installed through the official Facebook & Instagram sales channel on Shopify. This one was accurate.
- One installed by a third-party app. This one was reporting purchases that never happened.
The second pixel is the interesting one, because it was not silent. A silent pixel is easy — you notice zero conversions and go looking. This one was noisy. It reported purchases, those purchases appeared in Ads Manager, and the campaigns optimising toward it showed strong ROAS.
None of it existed in Shopify.
Campaign set A Purchases: strong ROAS: strong Verdict: "scale this"
Campaign set A Orders: none traceable Revenue: none traceable Verdict: phantom
The number that made it urgent
Of roughly PKR 100,000 in daily ad spend, approximately PKR 30,000 to 40,000 per day was going to campaigns optimising toward the pixel that was reporting purchases that never happened.
That is 30 to 40% of daily budget flowing to campaigns whose reported success was an artefact. And because those campaigns looked like the best performers in Ads Manager, they were the ones most likely to receive more budget. The reporting error was actively recruiting spend toward itself.
The shape of the problem
- Meta reported
- ~100
- Shopify actual
- 55–70
- Daily budget
- ~100k
- To phantom campaigns
- 30–40%
Order counts are for the comparison period described above. Budget figures are Pakistani rupees per day. The percentage is the number that travels — it does not depend on currency or market.
The fix, and what it looked like
I disabled the third-party pixel. The immediate consequence was dramatic and, if you have not seen it before, alarming: every campaign optimising toward that pixel stopped delivering.
That is not a side effect to be nervous about. It is the diagnosis confirming itself. Those campaigns had been running on a conversion signal that was not real; remove the signal and there is nothing left for them to optimise toward.
Within a day or two of clean data, the picture resolved. Reported performance came down — and became true. The client could finally answer the question they had been guessing at for months: which campaigns are actually producing orders?
When you remove a source of phantom conversions, your reported ROAS falls. Nothing about the business has changed — you have simply stopped counting sales that were never there. Brief the client before you do it, or you will be explaining a “drop in performance” you actually caused on purpose.
Run this reconciliation on your own account
- Pick one settled weekAt least two weeks in the past, so attribution windows have closed and reporting has finished filling in.
- Write down three numbersShopify orders, Events Manager purchases, Ads Manager conversions — for the same week, same timezone.
- Check the middle number against the firstIf Events Manager purchases exceed Shopify orders, stop. You have phantom or duplicate events, and no amount of attribution theory will explain it away.
- Count your pixelsShopify admin: Settings → Customer events, the Facebook & Instagram sales channel, and Online Store → Themes → Edit code searching
theme.liquidforfbq. More than one pixel ID across those locations is your prime suspect. - Segment by pixel before you touch budgetsIdentify which campaigns optimise toward which pixel. If one group’s reported orders cannot be traced in Shopify, you have found the leak.
What I am not claiming
I am not telling you a normal discrepancy percentage, because there is not one worth quoting. It depends on your traffic mix, your customers’ browsers, your attribution settings and your market. Every published benchmark I have seen comes from a company selling the fix.
Establish your own baseline while things are known to be healthy. Then the signal is deviation from your number, which is a real measurement rather than someone else’s average.
And this is one account. The mechanism generalises — two pixels, one lying, budget following the lie. The specific split between real and phantom will not.
Do your Meta numbers match your Shopify numbers?
If they do not, send me your store URL. I will tell you whether it is normal attribution drift or something reporting sales you never made.
Get a free tracking audit →