
One Shopify merchant posted a 7-day check that most D2C teams will recognise. Meta's integration showed 325 purchases. Shopify showed 190 orders. (Shopify Community)
When Meta ads purchases are not matching Shopify orders, your ROAS, your CAC and every budget call that rests on them are off too. The short answer: Meta counts ad-attributed purchase events dated to the ad impression, while Shopify counts every order on the day the customer places it. This guide gives you a 4-number check that shows which number is lying, plus the part most guides skip for Indian brands: COD, RTO and cancelled orders.
Meta and Shopify count different things. Shopify counts orders on the day the customer places them. Meta counts purchase events it can tie back to an ad, inside your attribution window, and it dates them to the ad impression.
So some gap is normal. What matters is how big it is, which way it goes, and whether it suddenly changed.
Here is what each side is actually counting:
| Shopify | Meta Ads Manager | |
|---|---|---|
| What it counts | Orders placed in your store | Purchase events attributed to an ad |
| Which date | Order date | Date of the ad impression (Jon Loomer) |
| Which orders | All channels: organic, email, WhatsApp, direct | Only orders it links to a click or view |
| View-through | Never | Yes, 1-day view by default |
| Cancelled or returned orders | You can see and net them out | Stays counted once the event fires |
The default attribution setting is 7-day click and 1-day view (Jon Loomer). That one setting explains a lot of the "Meta shows more" cases on its own.
The direction of the gap tells you where to look. When Meta reports more purchases than Shopify, you are usually looking at attribution rules or double counting. When Meta reports fewer, you are usually looking at lost tracking or orders Meta was never meant to claim.
These are the usual causes, roughly in the order we would check them:
This direction worries people less, but it hurts optimisation more. Meta can only bid well on purchases it receives.
Pull four numbers for the same closed date range, in the same time zone, and compare them in order. Each step between two numbers isolates one kind of problem.
Use a range that ended at least 7 days ago, so late click-through conversions have landed.
| # | Number | Where to find it | What the gap to the next number means |
|---|---|---|---|
| 1 | Shopify orders (paid, excluding test and draft) | Shopify admin, Orders | 1 vs 2: tracking loss or extra events |
| 2 | Purchase events received | Meta Events Manager | 2 vs 3: attribution, not tracking |
| 3 | Attributed purchases | Ads Manager, your attribution setting | 3 vs 4: post-purchase leakage |
| 4 | Delivered orders | Your 3PL or Shopify fulfilment data | The money you actually kept |
Shopify orders vs Events Manager. If Events Manager receives far fewer purchases than Shopify booked, events are not reaching Meta. Check your data sharing level, the pixel on your checkout, and any recent site change. If Events Manager receives more purchases than Shopify booked, look for duplicates, draft orders or a second store on the same pixel.
Events Manager vs Ads Manager. This gap is attribution, not tracking. If you need a refresher on how windows and models assign credit, see our marketing attribution models guide. Events Manager shows every purchase Meta received. Ads Manager shows only the ones it ties to an ad inside your window. A big gap here is normal if a lot of your sales come from organic, email or WhatsApp.
Ads Manager vs delivered orders. This is the step almost nobody runs, and for Indian D2C it is often the biggest one.
Yes. For a COD-heavy brand, Meta's purchase count can sit well above what you actually got paid for. The Purchase event fires when the customer places the order, and nothing tells Meta later that the parcel came back as RTO (return to origin: the courier could not deliver it, or the customer refused it).
COD is not a corner case here. 60 to 65% of Indian e-commerce orders are COD, according to ET Prime Research cited by Razorpay.
Three things follow:
Here is an illustrative example, not data. Say a brand gets 1,000 attributed purchases in a month at an AOV of ₹1,200, on ₹3L of spend. Ads Manager shows ₹12L of revenue and a 4.0 ROAS. Now say 600 of those orders were COD and 150 of them came back as RTO. Delivered revenue is ₹10.2L, and delivered ROAS is 3.4, before you count forward and reverse shipping.
The campaign did not get worse. Meta just never heard about the 150 parcels. If one ad set drives far more COD than the others, it can look like your best performer while it quietly loses money. The free RTO Simulator helps you put a ₹ number on this for your own mix.
You cannot make the numbers match exactly, and you should not try. You can remove the gaps that come from broken or messy tracking, so the remaining difference is only attribution.
In Shopify, go to Sales channels, Facebook & Instagram, Settings, Data sharing settings. Enhanced and Maximum both add Facebook's Conversions API alongside the pixel (Shopify Help Center).
Then check deduplication. Meta only drops the duplicate when the pixel's eventID matches the server's event_id, and the event names match, within 48 hours (Meta for Developers).
Watch for these setups:
If you send events from only one source, Meta does not deduplicate at all, so you also cannot rely on it to clean up a double setup (Meta for Developers).
Merchants report that Shopify fires the purchase event on completed checkouts, including replacements, free samples and 100% discounted orders. As of October 2026, merchants on the Shopify Community still report no admin toggle to suppress it (Shopify Community).
Workarounds people use include a custom web pixel that sends Purchase only for paid, untagged orders. At the very least, exclude these orders when you count Number 1, and flag manual draft orders to your team.
Most "mismatches" shrink once you compare the same thing:
There is no official benchmark for an acceptable gap between Meta and Shopify (WeltPixel). Forum replies quote ranges, but they vary widely and none of them cite data.
A more useful rule: know your own normal, and watch it every day. If your Meta-to-Shopify ratio has sat in a steady band for months and then jumps or drops in a day, something changed. A theme update, a new checkout, a new app or a second pixel is usually behind it.
That sudden move matters more than the absolute gap. A broken pixel can make ROAS look better while the data is wrong, and you scale into it.
Run the 4-number check every day, not once, and watch the Meta-to-Shopify ratio for sudden moves. By hand, the 4-number check means exports from Shopify, Events Manager, Ads Manager and your 3PL. Most teams run it once, fix the obvious issue, and stop. Then a theme migration breaks the pixel three weeks later and nobody notices until CAC jumps.
This is the gap Clevrr AI watches. Clevrr runs its own attribution anchored to real orders and payments, counts each order once across channels, and factors in RTO, cancellations and COD failures, so you see delivered revenue per campaign instead of Meta's claimed revenue. Its tracking health checks flag events that stop firing. One cookware brand caught a pixel broken by a theme migration on 3 hero SKUs the same morning, before scaling into bad data.
When Meta ads purchases are not matching Shopify orders, do not try to force the numbers together. Use Meta's count as an optimisation signal and your delivered orders as the money number.
Run the 4-number check, fix duplicates and missing events first, then look at attribution, then RTO. For Indian D2C, that last step is usually where the real ₹ gap sits.
If you want this check running every morning without the spreadsheet, start free with 500 credits.
Trust Shopify, or better your delivered orders, for revenue and profit. Trust Meta's purchase count as a signal for optimising campaigns, since that is what its algorithm sees. Meta credits view-through and dates sales to the ad impression, so its revenue will rarely equal your bank account. Use both, for different decisions, and track the ratio between them over time.
No. Once the Purchase event fires at order placement, Meta keeps that conversion even if you or the customer cancel the order later. For COD orders that come back as RTO, Ads Manager still shows the sale and its revenue. To see real performance, compare attributed purchases against delivered orders from your 3PL or Shopify fulfilment data for the same period.
Partly. Conversions API sends purchases server to server, so ad blockers and browser issues lose fewer events. It does not change attribution windows, view-through credit or COD returns. It can also make things worse if pixel and server events lack a matching event ID, because Meta then counts the same purchase twice instead of removing the duplicate.
Join hundreds of D2C brands using Clevrr AI to automate their growth and efficiency.
Join 500+ D2C founders using Clevrr AI to automate their operations and scale faster.
Get Started Free