1. Is the Purchase event firing at all?
Open Meta Events Manager, pick your pixel and use Test Events. Place a real test order and watch whether a Purchase event comes in. You can also use the Meta Pixel Helper browser extension on your thank-you page.
No event at all points to an installation problem: the pixel isn't on the order confirmation page, the wrong pixel id is used, or a script error stops it. On Shopify, check Settings, then Customer events, and the Facebook & Instagram app. On WooCommerce, check your plugins and theme.
Shopify only: three settings that quietly stop purchases
Most Shopify threads about missing purchases end at one of these. They're quick to check before you dig deeper.
- Data sharing level in the Facebook & Instagram app. Go to Sales channels, Facebook & Instagram, Settings, Data sharing settings. Shopify's help center (checked October 2026) lists Standard (browser pixel only), Enhanced and Maximum (pixel plus the Conversions API). On Standard, every purchase depends on the browser.
- A custom pixel that isn't connected. If you added the Meta code yourself under Settings, Customer events, the Status column must say Connected. Saved but disconnected pixels don't run. The code also needs your real pixel id, not the placeholder from a template, and has to subscribe to the checkout_completed event.
- Customer privacy settings. A custom pixel with permission set to Required only runs after the buyer gives consent. If you use a third-party cookie banner, it has to pass that consent to Shopify; Shopify notes that otherwise the pixel might not fire even after the buyer accepts.
2. Is it firing twice, or from the wrong pixel?
Stores that have been through a few apps often have the pixel loaded two or three times. That can show up as doubled purchases, or as purchases landing on an old pixel that isn't connected to your ad account. Make a list of every place your pixel id appears and keep one browser source.
3. Are you comparing the same thing?
Ads Manager isn't meant to match your store's order count. It only counts purchases it can link to an ad within your attribution window (by default, 7 days after a click or 1 day after a view), and it reports them on the day of the ad interaction, not always the day of the order. Time zones of the ad account and the store can differ too.
Before you decide the pixel is broken, compare a full week, the same time zone and only orders that plausibly came from Meta.
4. Is consent stopping it?
If your cookie banner blocks marketing cookies until the buyer accepts, the pixel won't fire for buyers who decline or ignore it. That's correct behaviour, not a bug, but it explains part of the gap. Check how many visitors accept, and that accepting really does switch the pixel on.
5. Does the buyer reach the thank-you page?
A browser pixel can only report a purchase if the confirmation page loads in the same browser. Buyers who pay through a redirect (PayPal, bank apps, iDEAL) and don't return, who close the tab right after paying, or who started in Instagram's in-app browser and finished in Safari, are often lost here. Ad blockers and Safari's cookie limits add to it.
No setting fixes this side of the problem. The pixel lives in the browser, and the browser isn't always there.
6. Send purchases from your orders as well
The structural fix is the Meta Conversions API: send each paid order from a server, built from your store's order data, with the same event id as the browser pixel so Meta counts it once. Include the saved ad click (fbc), the browser id (fbp) and hashed email and phone, so Meta can link the sale to the right person and ad.
Settl does this for you on Shopify and WooCommerce, and for TikTok, Google, Snapchat, Pinterest, X, Microsoft Ads and Reddit at the same time. The click is saved when the visitor lands and kept for 90 days, so a buyer who comes back next week still counts for the ad that brought them.
7. Check deduplication and match quality
Once server events are running, go back to Events Manager and open the Purchase event. You should see both browser and server listed as sources, and Meta should report that the events are being deduplicated. If purchases suddenly double, the event ids from the two sources don't match, or a second tool is sending server events too.
On the same screen, Meta shows Event Match Quality for the Purchase event. It reflects how much customer information comes with each event. Hashed email, phone, the click id and the browser id all raise it. A low score usually means the server events are arriving without enough of those details, so Meta can't link the sale to an ad even though it received it.
Check this again a week later. Match quality settles once enough purchases have come in, and it's the clearest sign that your Facebook pixel and server events are now working together.
The opposite problem: Meta shows purchases your store doesn't have
Sometimes it goes the other way, and Ads Manager reports sales that never happened in your store. That's almost always a counting problem, not extra sales.
- The same pixel id is installed on another store, a landing page builder or an old funnel, and its purchases land in your ad account.
- Test orders, cancelled orders or refunds were reported when they were placed. Meta doesn't remove a purchase because the order was cancelled later.
- Custom code sends Purchase again when the buyer reloads or revisits the order status page, without a fixed event id per order.
- Two tools send server events for the same order with different event ids, so Meta can't merge them.