Why Your Facebook Ads Numbers Don't Match Your Real Sales

Meta says 40 purchases, your dashboard says 61. Here are the six real causes, how to tell which one you have, and which of them are actually worth fixing.

Eptekhar Hasan5 min read

Every advertiser hits this. Meta Ads Manager reports one number, your own sales dashboard reports another, and they are not close. Then you have to decide whether to trust the platform you are giving money to.

The gap is normal. The size and direction of the gap tells you which problem you have, and the causes are not equally serious. Some are measurement artefacts you should ignore. One of them is costing you money every day.

Work through them in order.

1. Attribution windows (usually the biggest chunk)

Meta's default is a 7-day click, 1-day view window. That means Meta counts a purchase if the person clicked your ad any time in the last week, or merely saw it in the last day.

Your own dashboard almost certainly uses last-click, or last non-direct click, over a different period.

These are not the same question. Meta is answering "did my ad contribute", your dashboard is answering "what was the final touch". A gap here is not an error, it is two different definitions.

How to tell if this is your cause: in Ads Manager, change the attribution setting to 1-day click only and compare again. If the gap shrinks a lot, this is most of your answer.

Should you fix it? No. There is nothing broken. Just stop expecting the two numbers to agree, and pick one as your source of truth for decisions. Most people should use their own dashboard for revenue reality and Meta's numbers for relative comparison between ad sets.

2. Time zones and reporting dates

Meta reports in your ad account's time zone. Your store reports in its own. If they differ, every day is shifted, and a day-by-day comparison will never line up even when the totals are fine.

Worse, Meta attributes a conversion to the day of the ad click, not the day of the purchase. Someone clicks Monday and buys Thursday, and Meta puts that sale on Monday while your dashboard puts it on Thursday.

How to tell: compare a full month rather than a day. If the monthly totals are close but the daily lines never match, this is it.

Should you fix it? Align the time zones if you can, then compare over longer windows. Do not try to reconcile individual days.

3. Deduplication failures (worth fixing)

If you run both the browser Pixel and the Conversions API, and they are not correctly deduplicated, the same purchase gets counted twice.

Deduplication depends on both sources sending a matching event_id for the same event. When that is missing or mismatched, Meta cannot tell that they are the same purchase.

How to tell: Meta's number is higher than yours, often close to double. Then go to Events Manager, open your Purchase event, and look at the deduplication information. Meta shows you how many events are being deduplicated and flags problems directly.

Should you fix it? Yes, urgently. Inflated conversion counts make your cost per acquisition look better than it is, and you will scale spend on a number that is not real. This is the failure mode that costs you the most money while feeling like good news.

4. Blocked and dropped events (worth fixing)

A browser Pixel is JavaScript running on the visitor's device. It can be stopped by ad blockers, by Safari and Firefox tracking prevention, by iOS privacy settings, and by a consent banner.

When it is stopped, the sale still happens. Meta just never hears about it.

How to tell: Meta's number is lower than yours. Check Events Manager for your event match quality score and your event volume. If browser events are well below your real order count, this is your cause.

Should you fix it? Yes. This is the one that quietly wastes budget. Meta's delivery algorithm optimises on the conversions it can see, so if it is blind to a third of your sales it is optimising on a biased sample. You are not just under-reporting, you are training the system on partial data.

The fix is server-side tracking: sending the same events from a server rather than the browser, where ad blockers and browser restrictions do not apply. Done properly, with deduplication against the Pixel, you recover a large share of the missing events.

There is a free self-check for this, do I need server-side tracking, which walks through the numbers in your own account. If it says you are fine, you are fine, do not spend the money.

If your cookie banner is working correctly and a visitor declines, you should not be sending their data. That is not a bug, it is the point.

But if you have not implemented Consent Mode v2 properly, you may be losing more than you have to. There is a large difference between sending a correctly-signalled "denied", which still allows modelling, and sending nothing at all, which allows nothing.

How to tell: your gap is concentrated in EEA and UK traffic. Segment by country and look.

Should you fix it? Yes, and it is a compliance issue as well as a measurement one.

6. Genuinely different events

The boring cause, and it is more common than people expect.

Your Purchase event fires on the thank-you page. Your dashboard counts orders. Those differ whenever:

  • Someone refreshes the confirmation page, firing twice
  • An order is placed by phone or in person, never touching the page
  • An order is refunded or cancelled, still counted by the Pixel
  • Someone closes the tab before the page finishes loading
  • Test orders exist in one system and not the other

How to tell: pull one specific day, list the order IDs from your dashboard, and compare against events in Events Manager. Tedious, but it ends the argument.

Should you fix it? Fix the double-firing and the test data. Accept the rest.

The order to work through it

  1. Check the direction of the gap. Meta higher than reality points at deduplication or double firing. Meta lower points at blocking, consent, or attribution windows.
  2. Compare a month, not a day. Removes time zone and lag noise immediately.
  3. Set attribution to 1-day click and compare again. Tells you how much of the gap is definitional.
  4. Open Events Manager. Look at event match quality, event volume, and the deduplication status. Meta will tell you about most technical problems directly if you look.
  5. Segment by country. Isolates consent effects.
  6. Only then conclude that something is broken.

What a normal gap looks like

Some difference is permanent and healthy. Two systems with different definitions will never agree exactly, and chasing an exact match is a waste of your life.

What should worry you is not a gap, it is a gap that is large, one-directional, and getting worse over time. That pattern is a real technical failure rather than a definitional difference, and it will keep costing you until it is found.

The practical rule: pick one system as the source of truth for money decisions, use the other for relative comparison, and investigate when the relationship between them changes rather than when the numbers differ.

Keep reading

All guides