It's Tuesday afternoon. Your store shows 14 orders since Sunday, the best weekend of the month. Ads Manager shows 2 purchases for the same days, and the campaign that brought most of the traffic says "0". Your first thought is to switch the ads off because they "don't sell". Stop there. This is the classic case of a Meta pixel not tracking sales: the ads may be working fine while the measurement is broken, and turning off a working campaign is an expensive way to find out. This guide shows you how to confirm the problem, find where the tracking breaks, fix the usual causes and set up a routine so it doesn't surprise you again.
In short: Compare real orders with the purchases Meta reports for the same days. If the gap is big, place a test order while watching the Test events screen in Events Manager and the Meta Ads Data Advisor extension (the old Pixel Helper). Most breaks come from a site or theme update, a disconnected store integration, a consent banner, a duplicate or missing purchase event, or the wrong pixel in the ad set. Add the Conversions API so one broken piece doesn't blind you.
How the tracking chain works
To fix it you need a picture of the chain. A sale gets counted in Ads Manager only if every link holds:
- A person sees or clicks your ad.
- They land on your site, where the Meta pixel (Meta now often calls it a "dataset" in Events Manager) loads.
- They buy, and the thank-you or order confirmation page fires a Purchase event with the order value and currency.
- If you use the Conversions API, your store's server sends the same Purchase event to Meta directly, with a shared event ID so Meta counts it once.
- Meta matches the event to the person who saw the ad and credits the ad, within your attribution setting (for example, 7 days after a click or 1 day after a view).
- Your ad set is optimizing for that same Purchase event on that same pixel.
Break any link and the sale disappears from Ads Manager even though the money is in your bank.
Step 1: confirm that tracking is really broken
Ads Manager will never match your store exactly. Some buyers saw the ad on their phone and bought on a laptop; some block tracking; some bought from an email you sent. So the question isn't "do the numbers match?" but "is the gap normal or broken?"
Take the last 7 days and fill in a simple table (the numbers below are hypothetical):
| Source | Orders, last 7 days | What it tells you |
|---|---|---|
| Store admin (all orders) | 40 | Your real sales |
| Store orders with a Meta ad as the source (UTM in your analytics) | 22 | Rough idea of ad-driven sales |
| Events Manager, Purchase events received | 6 | What the pixel actually sent |
| Ads Manager, purchases attributed to ads | 3 | What Meta credits to ads |
In this example the big drop is between store orders and events received: Meta is not even getting most Purchase events. That's a tracking break, not an attribution question. If Events Manager showed 38 events received and Ads Manager showed 15, the pixel would be fine and the difference would be about attribution, which is a different (and normal) issue.

Step 2: find where it breaks (the first hour)
Work through these in order. You'll usually find the cause before the end of the list.
- Events Manager, Overview. Open Events Manager, choose your pixel and look at the Purchase event. When did it last arrive? A line that drops to zero on a specific day points to whatever changed on your site that day.
- Test events. In the same pixel, open Test events, enter your store's address and place a real test order (a cheap product, or a 100% discount code if your store allows it). Watch for PageView, AddToCart, InitiateCheckout and Purchase to appear. If Purchase never shows, the problem is on the confirmation page.
- Meta Ads Data Advisor. Install Meta's free Chrome extension Meta Ads Data Advisor (it used to be called Meta Pixel Helper). On your product, checkout and thank-you pages it shows which pixel loads, which events fire, and warnings like missing value or currency, or duplicate events.
- Diagnostics. Events Manager's Diagnostics tab lists problems Meta has noticed, such as events without a value, duplicate events or a domain that isn't verified. Read every item.
- The ad set. Open the ad set and check the conversion settings: is it the right pixel, and is the event Purchase? After rebuilding a pixel or switching platforms, ad sets can keep pointing to the old one.
The usual causes and how to fix each one
A site or theme update removed the code
Theme changes, new checkout apps and "speed" plugins are the top suspects. If the line in Events Manager dropped on the day you changed something, that's your answer. Reconnect the pixel through your platform's official integration rather than pasting code by hand, then repeat the test order.
The store integration got disconnected
Shopify, WooCommerce and most platforms connect to Meta through an app or plugin. A password change, a removed admin, an expired permission or an app update can disconnect it silently. Open the integration's settings and look for warnings or a "reconnect" button. Our guides to Meta ads for Shopify and Meta ads for WooCommerce cover the setup on each platform.
A consent banner blocks the pixel
In many countries your cookie banner must stop the pixel until the visitor agrees. That's correct and legal, but a misconfigured banner can block it even after consent, or block it on the thank-you page only. Test with consent accepted. If the pixel never loads after you accept, the banner settings are the problem.
Purchase fires twice, or never
Two pixels on the same page (one from the theme, one from the app), or a Purchase event that fires on every reload of the thank-you page, inflate your numbers. A Purchase event that sits on a page some buyers never reach (for example, they pay on an external payment page and aren't sent back) deflates them. The Data Advisor extension shows both cases.
No value or currency on the Purchase event
The event arrives but without the order value, so Meta can count purchases but not sales value, and value-based optimization doesn't work. Your integration should send value and currency with every purchase.
Browser-only tracking
Ad blockers, private browsing and browser privacy features stop some pixel events in the browser. That's why Meta recommends the Conversions API, which sends events from your store's server. Use both, with the same event ID on each Purchase so Meta counts it once. Our step-by-step guide to the Meta pixel and Conversions API setup walks through it.

What to do with your ads while tracking is broken
This is where money is won or lost.
- Don't judge the ads by Ads Manager this week. Use your store's orders and your own UTM-tagged traffic instead.
- Don't make big edits. Changing budgets and audiences while the data is wrong adds a learning phase on top of a measurement problem.
- Don't switch off a campaign that was profitable last month only because purchases dropped to zero on the same day your theme changed.
- Once fixed, wait. After the fix, give it a few days of fresh data before you judge performance again. The optimization system has also been learning from incomplete data.
Worked example
Say you sell candles at $32, keep $14 per sale before ads, and spend $40 a day. Ads Manager reports 1 purchase a day, so cost per sale looks like $40 and every sale loses $26. You're about to pause. But your store shows 4 orders a day with Meta as the source in your analytics, which would put the real cost per sale near $10, comfortably under your $14 margin. The test order shows Purchase never fires: a new checkout app replaced the thank-you page. You reconnect the integration, the test order shows Purchase with value and currency, and a week later Ads Manager reports 3 to 4 purchases a day. The campaign was fine; the tracking wasn't. (All numbers here are hypothetical.)
Prevent the next break
- Test after every site change. New theme, new checkout, new app, new consent banner: place a test order the same day.
- Watch the Purchase line weekly. A 30-second look at Events Manager on Monday catches breaks before they cost you a week.
- Use the Conversions API next to the pixel, through your platform's integration where possible.
- Keep one pixel per store and remove leftovers from old apps.
- Write down your setup: which app sends events, which pixel ID, who has access.
- Know your break-even cost per sale so you can judge ads with store data when needed. See break-even cost per sale.

How Meta Ads Copilot Max helps
Meta Ads Copilot Max is a Chrome add-on (a Tampermonkey script plus a web app at adscopilotmax.com) that reads your campaigns in Ads Manager and judges them against your own margin. It reads the purchases your Meta pixel reports, and when Ads Manager shows that purchases aren't being tracked, it raises a No purchase tracking alert so you know the numbers can't be trusted yet. It also warns you when one of Meta's tips (for example, switching to a purchase-optimized setup) needs purchase tracking and steady sales before it makes sense for you.
When tracking works, Copilot's Each sale costs more than your margin and Spending with no results alerts tell you which campaigns to fix or pause. It doesn't install or repair your pixel; it tells you clearly when the data behind your decisions is missing. Claude in Chrome is required for its Create and Fix buttons. Start your free 7-day trial.
Frequently asked questions
Why does Ads Manager show fewer purchases than my store?
Some gap is normal: people buy on another device, block tracking, or buy days after the attribution window closes, and some sales come from other channels. A small gap is attribution. A big gap where Events Manager also receives few Purchase events means the pixel or the integration is broken.
How do I test if my Meta pixel is tracking purchases?
Open Events Manager, choose your pixel, go to Test events, enter your site's address and place a real test order. You should see Purchase arrive with a value and currency. The Meta Ads Data Advisor Chrome extension shows the same thing from the browser side.
Do I need the Conversions API if I have the pixel?
It's strongly recommended. Browser events get blocked by ad blockers and privacy settings; server events from the Conversions API fill many of those gaps. Use both, with a shared event ID so each purchase is counted once.
Should I pause my ads while the pixel is broken?
Not automatically. Judge them with your store's orders and UTM-tagged traffic while you fix tracking. Pausing a campaign that is actually selling, only because Meta can't see the sales, costs you money twice.
How long after fixing the pixel do numbers recover?
New purchases show up as soon as events arrive again, usually the same day. Give the campaign several days of clean data before you judge it, since the delivery system was optimizing with incomplete information.



