You buy ten thousand ads. The report says fewer. Which number is right? Both, usually — they are counting different things. Every figure on an advertising report rests on two foundations: a standard for what counts, and a record of what actually happened. This post explains the standard the industry uses, the five questions an impression has to answer before it counts, and why we keep two separate records of every ad we serve — our ad server's own, and one from the verification tracker we run on our own campaigns.
An impression is a claim
When our ad server wins an auction and sends an ad to a page, it counts one impression. That is a claim: “we sent the ad.” Between that claim and a person actually seeing the ad, several things can go wrong. The seller may have no record of serving it. The ad may never draw on the page. The page may be built so that nothing can measure it. It may draw, but sit below the fold. Or the “person” may be a program.
Each of those is a different problem with a different owner, and a report that lumps them together as “discrepancy” tells you nothing you can act on. So the question is not “how many impressions?” but “how many cleared every gate — and for the ones that didn't, which gate, and why?”
The five questions
Start with the number the buyer was billed for. Every one of those impressions walks through the same five questions in the same order and stops at the first one it fails:
- Did the seller record it? The buy side says it won and paid. Does the sell side agree that it served the ad? If not, the impression stops here — no seller record.
- Did the ad render? A script that travels with the ad reports back when the ad actually draws on the page. If it never reports, the ad may never have appeared — tag never fired.
- Could it be measured? Some placements are built so that a script inside the ad cannot see where it sits on the screen. Those are honestly undetermined, not quietly counted either way.
- Was it viewable? Did it meet the industry standard for being on screen — enough of the ad, for long enough? If not — below threshold.
- Was it a person? An ad seen by a program is not an ad seen. Anything caught by invalid-traffic checks stops here. What remains is valid: the thing you were actually buying.
The rule that makes this useful is simple: every billed impression gets exactly one row, at the deepest gate it reached, with the single reason it went no further. Add the rows back up and you are at the billed total again. If they don't add up, the report is wrong, not the world.
The viewability standard, in plain English
The fourth question has a published answer. The Media Rating Council (MRC), the body that sets and audits measurement standards for the advertising industry, defines a viewable impression for display ads like this:
| Ad format | How much of the ad on screen | For how long |
|---|---|---|
| Display | At least half of its pixels | One continuous second |
| Video | At least half of its pixels | Two continuous seconds of play |
| Very large display (about a full-width banner or bigger) | At least 30% of its pixels | One continuous second |
MRC Viewable Ad Impression Measurement Guidelines, version 2.0 (August 2015), and the Mobile Viewable Ad Impression Measurement Guidelines (June 2016). The two seconds for video need not be the first two.
A few details in the standard matter more than the headline numbers:
- The pixel test comes first, then the clock starts. Time spent with less than half the ad on screen does not count towards the second.
- It has to be an in-focus tab, on the visible part of the browser. An ad on a background tab is not viewable. Pages a browser has pre-loaded but not shown do not count until they are shown.
- The measurement has to be frequent. The standard requires the ad's position to be checked at least ten times a second for display, five for video — a single snapshot is not a measurement.
- Once per impression. If a person scrolls away and back, the ad does not become viewable twice.
- Mobile follows the same thresholds, measured in the device's own screen units, and ads inside apps need a measurement kit built into the app; a script alone cannot see them. Impressions in a scrolling feed that stay on screen for more than half a second but less than a full one are given their own name, sub-second, and are explicitly not viewable.
- Every viewable impression has to have been a rendered one first. Viewable can never exceed rendered, and an impression known to be fraudulent can never be viewable.
MRC publishes these guidelines, and separately accredits measurement services that pass its audit. Those are different things. This post explains the published standard; it does not claim MRC accreditation for our ad server, for the tracker we use, or for anything else it mentions.
“Undetermined” is a real answer
The standard is unusually firm on one point: a viewability report must present three buckets, not one — viewable, non-viewable, and undetermined, where the measurer could not tell. Then it defines two rates from them:
- The measured rate: what share of rendered impressions the measurer could actually decide, one way or the other.
- The viewable rate: of those it could decide, what share was viewable.
So “60% viewable” is only meaningful next to its measured rate. Sixty per cent of everything is a different claim from sixty per cent of the half that could be measured. The standard also says a measurer should not treat undetermined as non-viewable, and should not fill the gap with estimates unless it says so and reports them separately. That is why, on our reports, an unmeasured impression is reported as unmeasured — a modelled number looks exactly like a real one the moment it lands in a spreadsheet.
Was it a person?
The fifth question is invalid traffic, and MRC's standards for it split it into two kinds. General invalid traffic is caught with lists and simple checks: traffic from known data centres, declared bots and crawlers, requests from things that are not browsers, pages a browser pre-fetched but never showed, and ads delivered into placements too small to see. Sophisticated invalid traffic needs analysis rather than a list: automated browsing, hijacked devices, ads hidden behind or stacked on top of each other, and apps or sites pretending to be something they are not.
The standard requires known general invalid traffic to be removed from billed counts, and sophisticated invalid traffic to be reported separately once found. It also introduces an honest number called the decision rate: for how many impressions did the measurer have enough signal to decide at all? Where the signal is missing, the impression is reported as unknown, not assumed valid. And it asks measurers to protect their detection methods from being reverse-engineered — which is why this post, like the rest of our site, describes what invalid traffic is and never how we detect it.
Two records, one answer
Our ad server keeps the first record. It logs what it served, and, where the page allows a measurement script to run, whether the ad reached the standard's threshold. It decides that from the evidence the page reports — how much of the ad was on screen, for how long — never from a verdict the page claims for itself. It also supports the IAB Tech Lab's Open Measurement SDK, the industry's shared way of letting a measurement script travel with an ad into apps and video players.
The second record comes from Pixtru, the verification tracker we run on our own campaigns. Its script sits on the ad and keeps its own count of what rendered and how long it stayed on screen, then walks every billed impression through the five questions above and gives it one row and one reason. Its published method is the source for the way this post describes those gates.
Two records of the same impression will disagree. That is not a flaw; the disagreement is the product. When the ad server says “served” and the tracker says “never rendered”, that is a placement to look at. When both say “rendered” but the tracker says “could not measure”, that is a page built in a way that hides ads from measurement. Each combination points at a different owner, and a report that names the gate is a report you can act on.
What we ask of a tracker
A verification number is worth exactly as much as the method behind it, so before trusting a tracker's report we hold it to a short standard of our own. Every item below is something the standard bodies also require or recommend; the tracker we use publishes how it meets each one.
- The same script for everyone. One file, identical for every partner. If a partner needs a special build, the design has failed — and so has comparability.
- Reports that cannot be forged. MRC requires measurers to protect their measurement code and its reports from tampering. A tracker's report of an impression should be signed so that a fake one is rejected before it reaches the database.
- Evidence, not verdicts. Store how long the ad was actually on screen, not a yes or no. When a threshold changes, that is a re-query over data you already hold, not a re-tag and a lost month.
- No cookies, no cross-site identifiers. The tracker measures an ad. It does not follow a person.
- No estimates. An unmeasured impression is reported as unmeasured.
- One reason per impression, and totals that reconcile. Never two reasons, never none, and the rows always add back up to the billed count.
- Exact and approximate never mixed. A match made on a shared impression ID is reported as one thing; a match guessed from time, campaign and creative is reported as another, and never folded into the exact total.
- Every number says how fresh it is. A figure that might still move and a figure that is settled must never look identical.
- Corrections are replays, not edits. Re-running yesterday should produce the same table, not double the rows.
How to read a verification report
Whoever you buy from, and whichever tracker they use, these questions get you to the real number:
- Ask for the three buckets — viewable, non-viewable, undetermined — not a single rate.
- Ask which rate you are looking at. Viewable as a share of measured, or as a share of everything? They can differ by a lot.
- Ask what the measured rate is. A high viewable rate on a low measured rate is a small sample wearing a big number.
- Ask whether undetermined was estimated. If it was, ask for it separately.
- Ask whether invalid traffic was removed before or after the viewability numbers, and whether the decision rate is reported.
- Keep desktop, mobile web and in-app apart. The standard says they should be reported separately, because they are measured differently.
- Sort sites by wasted spend, not by volume. The placement that costs you most is rarely the one with the most impressions.
- Never compare two vendors' rates without the same denominator. Most “our tracker says something different” arguments are two rates with two denominators.
A number without its denominator is a story, not a measurement. “Viewable” only means something once you know what was measured, what could not be, and what was removed as invalid — and a report that gives each impression one gate and one reason is the only kind you can do anything with.
For what the other numbers on a report mean, see the metrics that actually matter. For how fraud and unsafe placements are filtered before you pay, see brand safety 101.
The thresholds in this post are the published industry standard, quoted from MRC's guideline documents linked below; they are not our own settings. MRC and IAB Tech Lab are named only as the publishers of those standards, and no accreditation, certification or endorsement by either is claimed for anything mentioned here. The description of the verification tracker we use comes from its public documentation. The cover illustration's proportions are illustrative and do not depict any campaign. We do not publish our own viewability or invalid-traffic figures, our detection methods, or any client, partner or advertiser data. This describes our own approach and is not advice for yours.
Sources
- MRC Viewable Ad Impression Measurement Guidelines, v2.0 (August 2015) — thresholds, the three buckets, measured and viewable rates.
- MRC Mobile Viewable Ad Impression Measurement Guidelines (June 2016) — mobile web and in-app, sub-second impressions.
- MRC Invalid Traffic Detection and Filtration Standards Addendum (June 2020) — general and sophisticated invalid traffic, the decision rate.
- MRC 2024 IVT Interim Updates — privacy limits on signals, unknown reported as unknown.
- IAB Tech Lab: Open Measurement SDK.
- Pixtru: the method and the tag — the tracker's published method and what its script sends.