Ad Impression Discrepancies: Why Your Numbers Never Match and How to Reconcile Them
Every publisher and advertiser runs into this eventually. You pull a report from one system, compare it to a report from another, and the impression counts don't agree. Sometimes the gap is a rounding error. Sometimes it's 15% and it's coming out of your revenue. Discrepancies are a normal part of programmatic advertising — no two systems count the same event at the same moment — but a large or growing gap is a signal worth chasing down. This post explains where discrepancies come from, what range is expected, and how to investigate one methodically.
What a Discrepancy Actually Is
A discrepancy is the difference between the number of impressions (or clicks, or conversions) recorded by two systems that are supposed to be counting the same thing. It's usually expressed as a percentage:
Discrepancy % = (Higher count − Lower count) ÷ Higher count × 100
If your site's ad server logs 100,000 impressions and the network reports 94,000, that's a 6% discrepancy. The higher number is almost always the system closer to the ad request, and the lower number is the system closer to the rendered ad — because things drop out along the way.
The key insight: the two systems aren't counting the same event. One is counting "I sent an ad request." The other is counting "an ad was actually delivered and loaded in the browser." Those are different events, and the distance between them is where discrepancies live.
Where the Gap Comes From
Counting Method Differences
The single biggest source. Different systems fire their counter at different points in the ad lifecycle:
- Ad request — the tag on the page asked for an ad
- Ad response — the network returned a creative
- Ad rendered — the creative loaded in the browser
- Ad viewable — the creative entered the visible area of the screen
Each stage loses volume relative to the one before it. If your ad server counts at request and the network counts at render, you'll see a permanent structural gap that no amount of debugging will close. It isn't an error — it's two different definitions. Our post on ad viewability covers how much further the numbers drop when you move to a viewable standard.
Latency and Abandonment
Users leave. If someone clicks away, hits back, or closes the tab while the ad is still loading, the request was made but the impression never rendered. Slow pages make this dramatically worse: the longer the gap between request and render, the more users disappear into it. This is one of the practical reasons page speed and ad latency affect revenue directly, not just user experience.
Ad Blockers
Blocked ad calls may still be logged by a first-party system while never reaching the network at all — or the reverse, depending on where each counter sits. As blocker usage varies heavily by geo and audience, this can make discrepancies look wildly different across segments. See Ad Blockers and Programmatic Advertising for the fuller picture.
Filtered and Invalid Traffic
Networks filter out bot traffic, data-center IPs, and other invalid activity before it reaches billing reports. Your own analytics may not filter as aggressively, so it counts impressions the network correctly refuses to pay for. This is a healthy discrepancy — it means fraud filtering is doing its job. If your gap suddenly widens on a specific traffic source, filtered traffic is one of the first things to check, and our post on traffic quality scoring explains how that assessment works.
Time Zones and Reporting Windows
An embarrassing number of "discrepancies" are just two reports covering different 24-hour periods. One system reports in UTC, another in the account's local time zone, and a day-level comparison shows a gap that vanishes when you compare full weeks. Always confirm the time zone before investigating anything else.
Tag Implementation Problems
Duplicated tags inflate one side. Tags placed inside hidden containers or below-the-fold elements that never load deflate the other. Caching can serve a page — and its ad slot — without firing a fresh request. Most implementation-related discrepancies trace back to how the code was deployed, which is why correct ad tag implementation matters so much.
Redirects and Tracking Chains
Every additional hop between the ad call and the creative is another chance to lose an impression. Long redirect chains — common when multiple intermediaries are involved — compound loss at each step. Shortening the path helps, which is part of the argument for supply path optimization.
What Range Is Normal
There's no universal number, but useful rules of thumb:
- Under 5% — normal. Don't spend time on it.
- 5–10% — worth understanding, especially if you can attribute it to a known cause like counting method or blocker rates.
- Over 10% — investigate. Something structural is usually wrong.
- Over 20% — treat as a defect. Check implementation first.
More important than the absolute number is stability. A steady 8% gap that's been 8% for months is a known quantity you can plan around. A gap that jumps from 4% to 14% overnight means something changed — a new tag deployment, a traffic source shift, a caching layer, a broken creative.
How to Investigate
- Align the windows. Same time zone, same date range, full days only. Compare a week, not an hour.
- Confirm what each side counts. Request, response, render, or viewable? Write it down. Half of all discrepancy investigations end here.
- Segment the gap. Break the comparison down by placement, geo, device, browser, and traffic source. Discrepancies are rarely uniform — the segment where the gap concentrates tells you the cause.
- Check for recent changes. New tags, site redesigns, CDN or caching changes, new traffic sources. Line up the date the gap changed with your own deployment history.
- Test the tag directly. Load the page with developer tools open and watch the network requests. Confirm the ad call fires once, resolves, and renders.
- Look at conversions separately. Click and conversion discrepancies have their own causes — usually tracking setup rather than delivery. Server-to-server postback tracking removes most of them.
Reducing Discrepancies
You can't eliminate them, but you can shrink them. Serve ads asynchronously so they don't block the page. Cut unnecessary redirect hops. Keep creative file sizes small. Fix layout issues that cause slots to load without ever being seen. Use one consistent system as your source of truth for billing decisions, and treat the others as diagnostic tools rather than competing ledgers.
That last point matters most. Pick the system you'll be paid on — or that you'll pay from — and reconcile everything else against it. Chasing perfect agreement between systems that measure different events is time you could spend on optimization that actually moves revenue.
Conclusion
Discrepancies aren't a sign that something is broken. They're the natural result of multiple systems measuring an event at different points in a chain that spans networks, browsers, and users who don't always wait for the page to finish loading. Understand what each system counts, watch for changes rather than absolute values, and segment your data when a gap grows. That approach turns a confusing number into a useful diagnostic.
At Squren, our reporting gives advertisers and publishers detailed, granular data — broken down by placement, geo, device, and source — so discrepancies are traceable instead of mysterious. Sign up at Squren.com as an advertiser or publisher, and if the numbers ever stop lining up, our 24/7 support team will help you find out exactly why.