If your Meta Pixel is missing Shopify purchases, the good news is that the orders are real — they’re sitting in your Shopify Orders page. The gap is in how the purchase event gets to Meta, not in your sales. A purchase should arrive from two places: the browser pixel (client-side) and the Conversions API (server-side), tied together by a shared event ID so Meta counts one sale, not two or zero. When purchases go missing, it’s almost always one of a handful of causes: only the browser pixel is running, consent blocked the client event, deduplication is misconfigured, event match quality is too low, or the Shopify Meta channel isn’t set up correctly. This is a diagnosis, not a rebuild — work through the sources below in order.
Diagnose first: browser pixel vs Conversions API
Meta receives your Purchase event through two independent channels, and understanding both is the whole game:
- The browser pixel fires in the shopper’s browser when the order-confirmation page loads. It’s easy to set up but fragile — ad blockers, tracking-prevention in Safari and Firefox, and declined consent all silently kill it.
- The Conversions API (CAPI) sends the same event server-side, from Shopify to Meta, without touching the browser. It survives ad blockers and browser limits, and it carries richer, hashed customer data for matching.
You need both. The browser pixel and CAPI each catch purchases the other misses, and
together they cover far more of your real orders than either alone. The catch: when both
fire for the same order, Meta must recognise them as one event. It does that with
deduplication — the two events share an event_id (and event name), so Meta keeps one
and discards the duplicate. Get that shared ID wrong and you either double-count or, worse,
drop the event entirely.
Why this matters (it’s not just reporting)
Missing purchases aren’t only a dashboard problem — they actively cost you money. Meta’s algorithm optimises and attributes on the events it receives. If half your purchases never arrive, Meta is optimising toward a fraction of your real buyers, so it can’t find more people like them, and your reported ROAS looks worse than reality. That leads to two expensive mistakes: pausing campaigns that are actually profitable, and scaling on bad numbers because you can’t trust attribution. Under-reported conversions quietly tax every ad dollar. Fixing the event pipeline is one of the highest-leverage things you can do before touching creative or budget.
Likely causes, ordered by how often they’re the culprit
- Only the browser pixel is running — no CAPI. The most common cause. The pixel alone loses every purchase from a blocker, a privacy browser, or a declined consent banner. Without server-side backup, those sales simply never reach Meta.
- Consent is blocking the browser event. If your cookie banner is set to deny Meta until the shopper opts in — and many don’t — the browser Purchase never fires. Combined with no CAPI, that’s a large, invisible hole.
- Deduplication is misconfigured. The browser and server events don’t share a matching
event_id, so Meta either counts the same sale twice (inflating numbers) or, when the logic is off, treats a real event as a duplicate and drops it. Both look like “wrong” purchase counts. - Low event match quality. CAPI events arrive but carry too few or unhashed match keys (email, phone, name, IP, click ID). Meta can’t confidently tie the event to a person, so it under-attributes even events it technically received.
- The Shopify Meta channel is misconfigured. A missing or wrong pixel ID, a broken connection between Shopify and Meta, an outdated integration, or data-sharing set to the wrong level. The plumbing exists but isn’t wired end to end.
- Order-source differences. Not every order flows through the same path. Draft orders, POS sales, subscription rebills, and some app-driven or accelerated checkouts may never trigger a storefront Purchase event. Those sales are legitimately outside the pixel’s view, and mistaking them for tracking failures sends you chasing a bug that isn’t there.
How to diagnose: Events Manager + a test order
You can’t tell which cause you have from the ad dashboard. Go to Meta Events Manager, open your pixel/dataset, and place one real test order end to end on your storefront. Then watch what arrives:
- Does a Purchase event appear at all? If nothing shows up, the event isn’t reaching Meta from either channel — start with the Shopify Meta channel connection.
- Which source did it come from? Events Manager labels each event Browser, Server, or both. Only Browser means CAPI isn’t sending. Only Server means the pixel is blocked client-side. Both, deduplicated, is the healthy state.
- Is it deduplicated? When both fire, you should see them recognised as one event, not
two separate purchases. Two entries for one test order means your
event_idisn’t shared. - What’s the event match quality? Events Manager scores this. A low score means weak match keys — even received events won’t attribute well.
That single test order, read against these four questions, tells you exactly which of the causes above you’re dealing with.
Diagnostic checklist
| Check | Where to look | What a failure looks like |
|---|---|---|
| Purchase event exists | Events Manager, after a test order | No Purchase event appears at all |
| Sent from both sources | Event’s “Browser / Server” label | Only one source is firing |
| CAPI is live | Server events present in Events Manager | Zero server events ever |
| Deduplication works | Two events collapse to one | One order shows as two purchases |
| Shared event ID | Event details for browser + server | The event_id values don’t match |
| Event match quality | Match-quality score in Events Manager | Low score, few/unhashed match keys |
| Consent behaviour | Test with banner accepted vs declined | Browser event only fires on accept |
| Shopify Meta channel | Shopify → Meta sales channel settings | Wrong/missing pixel ID or broken link |
| Order source | Shopify Orders vs Events Manager count | POS/draft/subscription orders untracked |
How to fix each cause
- No CAPI: Enable the Conversions API through Shopify’s Meta channel (or a server-side setup) so every purchase has a server-side path alongside the pixel.
- Consent blocking: Review your consent configuration so it accurately reflects your policy, and lean on CAPI to cover purchases where the browser event can’t fire. Don’t fake consent — configure it correctly.
- Deduplication: Ensure the browser and server events send the same event name and
event_idfor each order. This is the fix that most often needs a developer, because it lives in how the events are generated. - Match quality: Pass more hashed match keys (email, phone, name, IP, the Meta click ID) through CAPI so Meta can confidently match events to people.
- Shopify Meta channel: Reconnect the channel, confirm the correct pixel/dataset ID, and set data sharing to the intended level. Reinstall the integration if it’s stale.
- Order-source differences: Reconcile which order types should produce a Purchase event and accept that some (POS, drafts, certain rebills) legitimately won’t. Don’t “fix” a gap that’s actually expected behaviour.
Common mistakes
- Trusting the browser pixel alone and assuming missing sales are lost — they’re usually just unsent.
- Turning on CAPI without deduplication, then panicking at double-counted purchases.
- Reading the ad-account ROAS instead of Events Manager, so you never see which source is failing.
- Comparing Meta’s numbers to Shopify’s and expecting an exact match — attribution windows and cross-device behaviour mean they never tie out to the last order. This is the same reconciliation trap that shows up when Shopify revenue doesn’t match GA4.
- Changing several settings at once, so you can’t tell what fixed the count.
When to get help
Do the Events Manager check and the test order yourself — anyone can. Bring in a developer
when the trail points into the plumbing: a deduplication event_id that doesn’t match
across browser and server, CAPI that won’t send or arrives with poor match quality, a
Shopify Meta channel that keeps breaking, or order-source gaps you can’t reconcile.
That’s exactly what our Shopify development service handles
— tracing the purchase event across the pixel, CAPI and deduplication, then fixing the code
and configuration so Meta counts the sales you’re actually making.
Meta under-reporting is nearly always one fixable link in the chain, not a broken store. And it rarely travels alone — the same event gaps often surface as GA4 missing Shopify purchases and as Shopify sales but Google Ads shows no conversions. Diagnose the source, fix the shared event ID and match keys, and your campaigns start optimising on the real picture again.
Meta under-reporting your Shopify sales? Send us your store URL — we’ll check the pixel, the Conversions API and deduplication, find the missing purchases, and tell you what to fix. Get a free profit audit.