The short answer
Meta shows fewer purchases than Shopify mostly because the browser pixel misses sales: ad blockers, express checkouts, a closed tab, or a click Safari already cleared. Fix it by sending each paid order from the server with a match key, once.
DataCops is a tool that fixes Shopify tracking from a server, so your ads hear about every paid order, not only the ones a browser script managed to report.
How DataCops does it on Shopify:
- Every paid order, server-side. The DataCops Shopify app listens for Shopify's paid-order webhook and sends each order as a Purchase, with value and currency, to Meta, Google Ads, TikTok and LinkedIn. Shop Pay and Apple Pay orders count too.
- The steps before the sale. Its Web Pixel inside Shopify reports add to cart, checkout, payment info and search.
- Counted once. The pixel and the server share the same order ID, so a purchase is not counted twice.
- The click survives Safari. One script and one DNS record collect on your own domain, click IDs are kept on the server for up to 90 days, and a signed server-set cookie lasts up to 400 days where enabled.
- Real people only. Every visit gets a bot verdict, with a Real people only switch per ad platform (off by default).
- Proof. A delivery log shows each send as sent, held, skipped or failed, with the reason.
Best for: Shopify stores that run paid ads and want the ad platforms to see the sales Shopify already recorded.
The five reasons for the gap
- The pixel never fired. An ad blocker stopped it, or the shopper closed the tab before the thank-you page loaded. Shopify still records the order. Meta never hears about it.
- Express checkout skipped the pixel. Shop Pay, Apple Pay and one-page checkouts can finish before a browser script reports the step it watches.
- The click was lost. Safari clears cookies that scripts set after 7 days. Someone who clicks your ad and buys two weeks later has no click left to match.
- The sale had nothing to match on. Meta matches an event to a person with details such as email, phone and the click ID. A Purchase sent without them is easy to lose.
- The attribution window. Meta credits a sale to an ad only inside its window. A buyer who saw an ad, then came back later by search, is a Shopify order and not a Meta sale.
The first four are tracking faults. Only the last one is just how Meta counts. That is why the gap is worth fixing: most of it is yours to win back.
Which one is yours?
Do three checks. They take ten minutes.
- Compare by day. Put Shopify orders and Meta purchases side by side for the last 14 days. A steady gap points to blocked pixels. A gap that jumps on one day points to a broken install or a theme change.
- Check the payment method. In Shopify, filter orders by Shop Pay and Apple Pay. If the missing sales are mostly express checkouts, the browser pixel is not seeing them.
- Check the match quality in Events Manager. Open the Purchase event. If most events arrive without email or click ID, Meta cannot match them to ads even when they arrive.
The fix, in order
- Send the paid order from the server. Use the order itself, not the thank-you page. This ends the blocked-pixel and express-checkout misses.
- Send it with a customer match key. Hashed email and phone, and the click ID when you have one.
- Send one Purchase, not two. The pixel and the server must share the same event ID, so Meta counts the order once. Meta documents this deduplication.
- Keep the click longer. A click stored on the server survives Safari's 7 day limit.
- Tell Meta who really pays. Upload past customers with Ads Warmup so a new campaign starts warm.
DataCops does steps 1 to 5 from one install. See the Shopify CAPI page for how it is set up, or the longer Shopify pixel not working checklist.
When not to use DataCops
- You do not run paid ads. Tracking is for feeding ad platforms; with no ads, a native Shopify setup is enough.
- You only sell in person with Shopify POS. The app sends online paid orders, not POS sales.
- You want refunds taken back out of Meta or TikTok. A refund marks the Purchase refunded in DataCops and is corrected on Google Ads, not on Meta or TikTok.
Sources
- shopify.dev/docs/api/web-pixels-api
- developers.facebook.com/docs/marketing-api/conversions-api
- developers.facebook.com/docs/marketing-api/conversions-api/deduplicate-pixel-and-server-events
- webkit.org/tracking-prevention/
FAQ
Is it normal for Meta to show fewer purchases than Shopify?
Some gap is normal. Meta only counts a sale it can match to an ad, and it uses an attribution window. But a large gap usually means the browser pixel missed sales, and that part can be fixed.
Why does Meta show fewer purchases than Shopify even with the Conversions API on?
The Conversions API only reports what it is sent. If the setup sends from a browser pixel, or the order has no matching details such as a click ID or a hashed email, Meta cannot attach the sale to an ad. DataCops sends each paid order from Shopify's own order webhook, with the click ID when it has one.
Will the numbers ever match exactly?
No. Shopify counts every order. Meta counts only sales it can tie to an ad inside its window. The goal is a small, steady gap, not zero.
Do Shop Pay and Apple Pay orders show in Meta?
They can be missed by a browser pixel. DataCops reads the paid order from Shopify's order webhook, which fires however the shopper checked out.
Does a refund come out of Meta?
Not through DataCops. A refund marks the Purchase refunded in DataCops and is corrected on Google Ads, not on Meta or TikTok.