Your Meta Pixel is not tracking purchases on Shopify the way it should: Events Manager shows fewer Purchase events than you have orders. Sometimes it is a slow leak, sometimes purchases stopped overnight after a theme or checkout change. Either way, Meta now optimizes your campaigns on part of your sales, and your reported ROAS looks worse than it really is.
These are the eight causes I find most often when I audit Shopify stores, in the order I check them.
First, measure the real gap
Before fixing anything, compare like with like:
- In Shopify, count orders from the Online Store sales channel only, for the same dates and in the same timezone as your Meta ad account.
- In Meta, look at Events Manager → your dataset → Overview → Purchase. Don’t use the conversions column in Ads Manager: that shows attributed conversions, which will always be lower than the purchases Meta received.
- Place a real test order (a 100% discount code works) with the Test events tab open, and check that one Purchase arrives, from the browser and from the server if you use the Conversions API.
Some gap is normal, because visitors who refuse cookies or block trackers are never fully visible. A sudden drop, or purchases arriving from the browser only, means something is broken.
1. The purchase is not tracked on the new checkout
Shopify has retired checkout.liquid and the Additional Scripts box on the order status page. Code in your theme does not run on checkout or the thank-you page any more. On the new checkout, only app pixels and custom pixels (Settings → Customer events) can see a purchase.
If your Purchase event used to come from a snippet in Additional Scripts or a theme file, it stopped when your store moved to the new checkout. The fix is to send it from the Facebook & Instagram app, from a custom pixel, or from a server-side setup.
2. The Facebook & Instagram app shares too little data
The Facebook & Instagram sales channel has three data-sharing levels. Standard only uses the browser pixel. Enhanced and Maximum also send purchases through the Conversions API from Shopify’s servers, which recovers many of the purchases a browser pixel misses. I compare the app with a custom setup in Facebook & Instagram app vs server-side GTM.
Open the app’s settings, check the data-sharing level, and make sure the app is connected to the same dataset (pixel ID) your campaigns optimize on.
3. The cookie banner never reaches the checkout
Pixels on Shopify’s checkout read consent from Shopify’s Customer Privacy API. If your cookie banner only updates its own cookie and never tells Shopify, the checkout behaves as if the visitor refused, and Purchase is never sent in regions where consent is required.
Typical symptom: purchases are fine from the US but missing from the EU. Use a banner that integrates with the Customer Privacy API, then test in a private window: accept cookies, buy, and check Test events.
4. Purchases are sent from the browser only
Safari’s tracking prevention, ad blockers and in-app browsers all reduce what a browser pixel can send. A browser-only setup will always miss part of your orders.
The fix is the Conversions API: either the app at its highest data-sharing level, a tracking app, or server-side Google Tag Manager. I compare the three options in Meta Conversions API on Shopify.
5. Browser and server events are not deduplicated
This is the opposite symptom, but it often appears together with missing purchases. When the pixel and the Conversions API both send Purchase, Meta needs the same event_name and the same event_id on both to merge them. Without a shared ID, Meta counts the order twice, and you may hide a real tracking gap behind inflated numbers.
In Events Manager, open the Purchase event and check the deduplication details. More on this in duplicate purchase events on Shopify.
6. The event is sent, but with the wrong data
Custom pixels run in a sandbox, and it is easy to send a Purchase with a missing value, a value sent as text, or a missing currency. Meta then shows warnings in Events Manager and may not use those events properly for optimization.
Check that every Purchase has a numeric value, an ISO currency code such as EUR or USD, and content_ids that match your product catalog IDs. In a custom pixel, these come from the checkout_completed event: checkout.totalPrice.amount, checkout.currencyCode and the line items.
7. Some orders never pass through the browser
Subscription renewals, draft orders, orders created by your team and some post-purchase upsells never load a thank-you page in the customer’s browser. No browser pixel can see them.
Decide which of these orders Meta should learn from. First orders usually matter; renewals often don’t. If they do, they can only be sent server-side, from Shopify webhooks.
8. Purchases go to the wrong dataset
Stores that changed agency or Business Manager often have two or three pixels. The app sends to one, an old custom pixel to another, and the campaigns optimize on a third. In Events Manager, check which datasets receive Purchase events, and which one your ad sets use.
How to test the fix
- Open Events Manager → Test events, and place a real order on your store.
- Check that exactly one Purchase arrives from the browser and one from the server, marked as deduplicated.
- Check value, currency and content IDs on the event details.
- After seven days, compare Purchase events with Shopify online store orders again.
- Look at the Event Match Quality score for Purchase. Sending hashed email and phone through the Conversions API usually improves it.
If landing page views are falling too, not only purchases, see Meta landing page view rate dropped? Causes and fixes.
Frequently asked questions
Shopify says the Meta Pixel is connected, so why are there no purchases?
The “Connected” status only means the pixel is installed. It doesn’t prove that the Purchase event reaches Meta. Check Events Manager’s Test events tab with a real order, and look at the Purchase row for browser and server events.
How big a gap between Meta and Shopify is normal?
Two numbers get mixed up. Events Manager should receive close to every order from visitors who consented. Ads Manager only counts purchases it can attribute to an ad within your attribution window (by default 7-day click and 1-day view), so it will always show fewer than Shopify. Compare Events Manager with Shopify to judge tracking, and Ads Manager with your ad goals.
Does iOS block the Meta Pixel on Shopify?
iOS and Safari limit cookies and some browsers block Meta’s requests, so the browser pixel alone misses part of your purchases. Sending purchases through the Conversions API, deduplicated with the pixel, recovers most of them for consenting visitors. See Meta Conversions API on Shopify.
How do I test the Meta Pixel on Shopify?
Use Meta’s Test events tab and the Meta Pixel Helper extension, place a real low-value order, and check that exactly one Purchase arrives with the right value, currency and event ID, marked as deduplicated if you also use the Conversions API.
Still missing purchases?
If you have checked all eight points and the gap is still there, the problem is usually a mix of two or three of them. This is exactly what my Shopify tracking packages fix: one clean purchase event, sent from the browser and the server, deduplicated, and checked order by order against Shopify. Book a free 30-minute call and we’ll look at your setup together.