Skip to content
All resources
Meta Ads Reporting Attribution Ads Manager Agency Workflow

Why Ads Manager Numbers Differ From Your Report

The DashOps Team October 15, 2026 8 min read

You pull the spend figure for Northwind Solar from Ads Manager on Monday morning, paste it into the client report, and send it. On Wednesday the client replies asking why your report says one lead count and the screenshot their in-house person took says another. Or you build the same report twice, a week apart, and the older date range has quietly changed underneath you. Nothing is broken. Meta Ads Manager is not lying and neither is your report. The two documents were built under different assumptions, and once you know which assumptions differ, the gap stops being alarming and becomes something you can explain in one sentence.

Here is what actually causes it, in roughly the order it bites people.

The attribution window is the single biggest culprit

Meta credits a conversion to an ad based on a window: how long after someone clicked or viewed the ad the conversion still counts. Ads Manager applies a default window to whatever you are looking at, and that default has changed over the years. If your report was built against a different window, or against a saved view where someone set the window once and forgot, the conversion columns will not match. Spend usually will, because spend does not depend on attribution at all.

This is why you can have a report where impressions, clicks, reach and spend line up perfectly and only the results column is off. That pattern is diagnostic. When only conversion-shaped metrics disagree, look at the window before you look at anything else.

There is a second layer to this. Meta reports conversions against the day the ad was clicked or viewed, not the day the conversion happened. A purchase today can be attributed backwards to an impression from earlier in the window. So the numbers for a date range you already reported on can keep moving after you reported them. If you want the full mechanics of this, we go through the attribution windows in detail here, and what to do when attribution behaviour changes underneath an existing report is its own problem worth reading separately.

Time zones move the boundary of a day

Every Meta ad account has its own time zone, set when the account was created and effectively frozen after that. Ads Manager reports the day boundary in the ad account’s time zone. Your reporting tool, your spreadsheet, your server, and you may each be sitting somewhere else.

If the ad account for Contoso Studios is set to one time zone and you are pulling a “yesterday” figure from a machine in another, you are not looking at the same day, even though both views are labelled yesterday. The mismatch is small on a monthly total and glaring on a daily one. It is also the reason a “today” figure can look empty first thing in the morning: your morning has started, the ad account’s day has not.

Watch for this specifically when:

  • You manage accounts for clients in different countries.
  • You report daily or hourly rather than weekly.
  • You are comparing a screenshot the client took at their desk against a report you generated at yours.
  • Someone tells you the numbers are right during the day and wrong overnight.

The same word means different things

Meta has more than one metric that a reasonable person would call a lead, a purchase, or a conversion, and they are not interchangeable.

A lead from an Instant Form and a lead recorded by the pixel on a website form are separate action types. If your report totals one and Ads Manager is showing the other, or showing both combined while you show one, the numbers diverge without either being wrong. The same applies to purchases: a pixel purchase, an offline conversion and a conversions API event can all be present, and how they get counted or deduplicated is a real decision, not a rounding error.

Then there are the derived metrics. Cost per result depends entirely on what Meta has decided the result is for that campaign, which is set by the campaign objective. A traffic campaign and a lead campaign both show a cost per result column, and those two columns are measuring different things. Averaging them into a single account-level number produces something meaningless. If your report separates web leads from form leads and Ads Manager’s default view does not, expect the totals to disagree and be able to say why.

The date range is not what you think it is

Three separate things go wrong here and they look identical from the outside.

Preset ranges are relative. “Last 7 days” generated on a Monday and “last 7 days” generated on a Tuesday cover different weeks. If your report says “last 7 days” in the title rather than the actual dates, nobody can reproduce it later, including you. Always print the literal start and end dates on the report.

Whether today is included varies. Some views include the current partial day, some stop at yesterday. A partial day drags every average down.

And recent data is not final. Meta restates recent figures as delivery is validated and invalid traffic is filtered out. A number you pull an hour after the day ends and the same number pulled a week later can genuinely differ, and the later one is the better one. This is normal platform behaviour, not a sync failure.

You are looking at different levels or different filters

This one is the most common and the least interesting, which is exactly why it survives so long undetected.

Ads Manager remembers your filters. If someone left a status filter on, or was viewing a single campaign, or had a specific ad account selected in the account switcher, the totals on screen are a subset. A report built at the account level against that screenshot will always be higher and the reason is not visible in either document.

Level matters too. Campaign totals, ad set totals and ad totals do not always sum cleanly, because some metrics are deduplicated at the level they are reported. Reach is the clearest case: the same person reached by three ads in one campaign is one reach at campaign level and three at ad level. Adding up ad-level reach to get a campaign figure overstates it. Impressions add up. Reach does not. Frequency, which is derived from both, cannot be summed at all.

How to close the gap when a client asks

When a client questions a number, do not start by defending the report. Start by making the two views identical, one variable at a time:

  • Set both to the same explicit start and end dates, typed in, not a preset.
  • Confirm which ad account and which currency each view is showing.
  • Clear every filter in Ads Manager, including status and the campaign selection.
  • Check the attribution setting on both sides.
  • Check the ad account’s time zone against wherever your report is generated.
  • Compare spend first. If spend matches and conversions do not, it is attribution or metric definition, not the data pipeline.

Usually one of those six is the culprit, and the gap closes as soon as you correct for it. If spend itself is off by more than a rounding amount on a settled date range, then something structural is wrong and it is worth investigating properly.

Making this stop happening

The durable fix is to stop hand-assembling the comparison. A report that pins its own date range, names the ad account it covers, states the currency and goes out on a schedule removes almost every variable above, because the client is never comparing your report against a filtered screenshot in the first place. They are comparing this week’s report against last week’s, built the same way both times.

In DashOps a report is built for one ad account over an explicit date range, and scheduled client reports and email digests go out per ad account rather than as one merged figure. That is the point: a client’s number is traceable to one account, one window, one range, and you can answer the question without opening Ads Manager at all.

The same goes for the screenshot problem itself. If the client has their own read-only view of the ad accounts assigned to them, or a share link to a dashboard snapshot, then they are looking at the same numbers you are rather than at whatever Ads Manager last remembered about their filters. Read-only client access and share links both exist in DashOps for exactly that reason. If you are still exporting by hand, our notes on getting data out of Ads Manager cover what the export does and does not include, and automating the weekly report is where most of the time saving lives.

What to do next

Pick your most-questioned client account. Open your last report next to Ads Manager and run the six checks above in order. Write down which one caused the gap. It is almost always the same cause for the same account every time, because it comes from a setting rather than from chance, and once you have named it you can put the explanation in a footer on the report and never have the conversation again.

Then decide what your report standard is: which attribution setting, which lead definition, whether today is included, and whether spend or results leads the summary. Apply it to every client. A number that is consistently defined beats a number that is occasionally more flattering. If you are rethinking the whole reporting setup rather than patching one report, our guide to running Meta Ads reporting outside Ads Manager is the wider picture this post sits inside.

Frequently asked questions

Why does Ads Manager show different conversion numbers than my report when spend matches exactly?
That pattern points at attribution, not at your data pipeline. Spend does not depend on attribution, so it matches under any setting. Conversions do, because Meta credits a conversion based on how long after the click or view it happened, and attributes it back to the click date rather than the conversion date. If the two views use different attribution settings, the conversion columns diverge while everything above them agrees. Check attribution on both sides first.
My daily numbers are right sometimes and wrong at other times of day. What causes that?
Almost always the ad account time zone. Every Meta ad account has a time zone fixed at creation, and Ads Manager draws the day boundary in that time zone. If your report is generated somewhere else, your day and the ad account's day begin at different moments, so a daily figure disagrees for part of each day and agrees for the rest. It shows up early in the morning, when your day has started and the ad account's has not. Monthly totals hide it. Daily reporting exposes it.
Should I use campaign level or ad level numbers when the two do not add up?
Use the level you are actually reporting on, and know which metrics can be summed. Impressions add up from ad to ad set to campaign. Reach does not, because one person seen by three ads in a campaign counts once at campaign level and three times at ad level. Frequency is derived from both, so it cannot be summed either. If your report adds ad-level reach into a campaign figure it overstates it, and Ads Manager looks wrong when the calculation is.
A number I already reported changed a week later. Is something broken?
No, this is expected. Meta restates recent figures as delivery is validated and invalid traffic is filtered, and attribution keeps assigning conversions backwards to click dates inside the window. A figure pulled shortly after a day ends and the same figure pulled later can genuinely differ, and the later one is more accurate. So avoid reporting very recent days as if they are final, and print the literal date range and the generation date on every report.
How do I stop clients questioning the numbers in the first place?
Remove the variables they can see. Print literal start and end dates rather than a preset name, name the ad account, state the currency, and keep the attribution setting and lead definition identical from one report to the next. Then send on a schedule, so the client compares this week's report against last week's rather than against a filtered screenshot. A consistently defined number is more defensible than an occasionally more flattering one.

See it in your own dashboard

DashOps brings Meta Ads reporting, campaign management, and white-label client portals into one place. Pick the plan that fits how you run ads.

Keep reading

Get in touch

Tell us about your setup or ask a question and we usually get back to you within one business day. Running more than 20 ad accounts? We will tailor a custom plan for you.

DashOps
Product updates

Get more from every Meta Ad

New features, product news, and practical Meta Ads tips, straight to your inbox.

Subscribe to product updates

Join our newsletter for new features, tips, and the occasional Meta Ads playbook. We may also send you an invite to our community. No spam, unsubscribe anytime.

We use your email to send these updates, and we may also use it to send you an invite to our community. When you subscribe, we also report the sign-up to Meta, and to Google if your browser has a Google Analytics cookie, as our Privacy Policy explains.