Why Meta reports fewer purchases than your Shopify admin
Why Meta shows fewer purchases than Shopify, which part of the gap is normal, and a step-by-step way to measure how many orders your tracking missed.
A gap between Meta and Shopify is normal. Part of it comes from the tools counting different things, and part is tracking that missed real orders. Here's how to measure the tracking part in about fifteen minutes, without installing anything.
Three tools, three different counts
- Shopify counts every order: online store, Point of Sale, draft orders, subscription renewals and other sales channels. Ad blockers and cookies don't change this number.
- Events Manager counts the Purchase events Meta received from your pixel and the Conversions API, attributed to ads or not. Its total count is not deduplicated, so a purchase sent from both browser and server counts twice there.
- Ads Manager counts only purchases Meta credits to your ads, under the ad set's attribution setting (for example, 7-day click or 1-day view). It reports them on the date of the ad impression, not the purchase. Part of the number can be modeled estimates.
So to check tracking, compare Shopify online orders with Events Manager, not with Ads Manager.
Measure the gap yourself
- Pick one full week in the past. Use whole days and the same time zone in both tools.
- In Shopify admin, go to Orders and set the date range to that week.
- Filter by sales channel and keep only Online Store. POS, draft orders and subscription apps show up as their own channels.
- In Meta, go to Events Manager → Data sources and open your pixel.
- Find Purchase and click View details.
- If you send browser and server events, read the two sources separately on the Event overview tab. Don't use the combined total: it isn't deduplicated.
- Divide Purchase events by online orders. That's your coverage.
- Multiply the missed orders by your average order value. That's what the gap is worth.
- In Shopify admin, go to Settings → Customer events. List every pixel that can send Meta events.
- In the Facebook & Instagram channel, go to Settings → Data sharing settings. Standard uses only the browser pixel. Enhanced and Maximum also send purchases through the Conversions API.
- Place a test order. In Events Manager, watch the Test events tab and confirm one Purchase arrives from each source you expect.
- Open the Diagnostics tab in Events Manager and fix the errors it lists.
Worked example
These numbers are made up. A store has 240 orders in one week: 205 Online Store, 18 Point of Sale, 5 draft orders and 12 from a subscription app. It uses the Standard data-sharing level, so only browser events.
Events Manager shows 168 Purchase events. Coverage is 168 ÷ 205, about 82%. That's 37 online orders Meta never saw, or about €2,220 at a €60 average order value.
Ads Manager shows 92 purchases. From 205 to 168 is tracking. From 168 to 92 is attribution.
Repeat this for three or four weeks. Stable coverage points to consent and ad blockers. A sudden drop means something changed that week: a theme update, a new app, a cookie banner change, or a pixel added or removed.
Why purchase events go missing
| Cause | How to check | What to do |
|---|---|---|
| Ad blockers and browser privacy | Steady gap week after week | Expected. Server-side events are less affected. |
| Customer declined marketing cookies | Your store requires consent in some regions, usually the EEA and UK | Nothing. This gap is expected and correct. |
| Cookie banner doesn't pass consent | Accept cookies, place a test order, and no Purchase shows in Test events | Your third-party banner must pass consent to Shopify through the Customer Privacy API. |
| Thank you page didn't load | Shopify's checkout_completed event fires on the Thank you page or first upsell page |
If that page fails to load, no Purchase is sent. Fix the page. |
| Order didn't use online checkout | POS, draft, subscription renewal, manual or imported orders | Leave them out of the comparison. A checkout pixel never sees them. |
| Old pixel code after the checkout upgrade | Meta pixel was in checkout.liquid or Additional scripts. Shopify retired both on the Thank you and Order status pages (Plus: August 28, 2025; others: August 26, 2026). |
Replace it with an app pixel or custom pixel in Settings → Customer events. If the old code ignored consent, expect fewer events. |
When Meta shows more purchases than Shopify
Usually two things send the same Purchase event:
- The Facebook & Instagram channel plus a separate Meta pixel app
- An app pixel plus a custom pixel in Customer events
- A Customer events pixel plus old code in the theme, Additional scripts or
checkout.liquid
Sending a purchase from browser and server is fine, but only with deduplication. Meta counts them once when the event names match and the browser eventID matches the server event_id, within 48 hours. Meta suggests the order number as the ID.
Missing or mismatched IDs mean both count. One ID reused across different orders means real purchases get dropped.
What server-side events fix
The Conversions API sends events from a server instead of the browser. Meta says these events are less affected by ad blockers, loading errors and connection problems. On Shopify, the Enhanced and Maximum data-sharing levels already do this, so check that setting first.
Server events still follow your consent settings, don't cover orders outside checkout unless sent separately, and don't change attribution. If browser and server both send, every purchase needs a matching event ID.
Where PixelGuard fits
I built PixelGuard to run this check daily. The free plan compares Shopify orders with the Purchase events your checkout tracking fired. It measures what fired, not what Meta received.
The Pro plan sends purchases through the Conversions API. Shopify's pixel sandbox doesn't let an app share an event ID with another browser pixel, so PixelGuard is designed to be your only Purchase sender.
Sources
- Differences between event counts in Ads Manager, Ads Reporting and Events Manager (Meta)
- About attribution models and attribution settings (Meta)
- Handling duplicate Pixel and Conversions API events (Meta)
- About Conversions API (Meta)
- Pixels overview (Shopify)
- Facebook data sharing (Shopify)
- Upgrading and replacing your Thank you and Order status pages (Shopify)