Measurement

Counting people, not impressions: how reach works when there is no ID

Animated: impressions stream in. Five carry an id and gather into four people, counted once each, with a measured frequency of 1.25; seven carry no id and are divided by that frequency into about six estimated people drawn with dashed outlines. A total reads reach about ten people, four measured plus about six estimated, footnoted as an estimate. Caption: count who you can, measure how often, estimate the rest, and say so. Numbers illustrative.

An impression is a thing that happened. A person is a claim. Every ad report turns the first into the second with a number called reach, and most platforms do not say how. Here is how ours does it: which impressions can be turned into people at all, how the rest are estimated, where the estimate comes from, and how the report tells you which is which.

Reach is a count of people, so it is never a sum

A person who saw your campaign on Monday, Wednesday and Friday is one person, not three. So reach for a date range cannot be the daily figures added together; it has to be counted once, over the whole range, in one pass. That sounds obvious, and we got it wrong ourselves: until 9 October 2026 the “Unique Users” card on our Reach & Frequency report summed the daily rows, so returning readers were counted once per day and the average frequency read low by the same factor. It is fixed, and we say so here because a report you cannot question is not worth much.

The same rule applies to every breakdown. A table of creatives, sites or placements gets a total that is one count over the whole table, never the rows added up. If the rows do not add up to the total, that is correct — the same person can appear in two rows.

Who can be counted at all

Only an impression that carried an identifier naming one device or person can be counted as a person: an id the exchange or our own tag sent, or a hashed advertising id from a phone that has not limited tracking. A fingerprint never counts, an opted-out device has no id, and an impression bought from a partner network is the partner's to count. Who we think you are, and when we refuse to guess explains those rules; this post picks up where they leave off, because many impressions — by design — carry no id at all.

The rest is estimated, from a frequency we measured

Impressions with no id used to be reported as delivery and left out of reach, which was honest and also useless: a campaign that reached many people on opted-out devices looked as if it had reached almost none. Since 9 October they are estimated, in four steps.

  1. Count the identified people once each, over the range and scope of the table — a campaign, a creative, a site.
  2. Measure the frequency on them: identified impressions divided by identified people. That is how often, on average, a person we could recognise actually saw the ad.
  3. Divide the unidentified impressions by that frequency. The result is how many additional people they most likely reached, if those readers saw the ad about as often as the ones we could count.
  4. Add the two, and say so. Reach is measured people plus estimated people; frequency is all impressions over that total; and the share of people who saw the ad once, twice, three times and so on keeps the proportions of the measured sample. Every figure that contains an estimate is marked.
Animated: three boxes appear in order with illustrative numbers. One, measure the frequency: 4,000 identified impressions over 3,200 identified people gives 1.25 per person. Two, estimate the rest: 10,000 unidentified impressions divided by 1.25 gives about 8,000 people, estimated. Three, add and say so: 3,200 plus 8,000 gives a reach of 11,200. A bar below: frequency on the report is all 14,000 impressions over 11,200 people, 1.25, with the same shares seen once, twice, three times as the measured sample, footnoted. Caption: the estimate assumes unidentified readers saw the ad about as often as identified ones; that is the whole assumption.

The arithmetic, with illustrative numbers. The whole method rests on one assumption, and the next section is about keeping it honest.

Where the frequency comes from

An estimate is only as good as the frequency it divides by, so the frequency has to come from a sample large enough to trust. We try four sources in order. First, the row's own identified sample — a day, a creative, a site — when it is large enough. If it is too small, the campaign's whole identified history, across all its days and not only the dates on screen. If the campaign itself is new or small, all the account's campaigns pooled, under the same minimum. And if none of those is large enough, no estimate is made: the cell shows a dash, and the impressions stay impressions.

The frequency is never derived from device data. No IP addresses, no browser strings, no fingerprints — only from people we could actually count.

Animated: four rungs light in order. One, this row's own identified sample, when it is large enough to trust. Two, the campaign across all its days, not only the dates on screen. Three, all the account's campaigns pooled, the same minimum applies. Four, none of these is large enough: a dash, not a guess; the cell shows a dash and the impressions stay impressions. Caption: never from IP addresses, browser strings or fingerprints, only from people we could actually count. Large enough is a fixed minimum, not published.

Where the frequency comes from, tried in this order. “Large enough” is a fixed minimum we do not publish.

How the report tells you which is which

  • On screen, a figure that contains an estimate carries a tooltip saying so. Our own staff see the measured and estimated parts separately and can share the split with you.
  • In files, a table that contains an estimate carries a footnote under it: Unique users include estimates where an impression could not be attributed to a person. A plain comma-separated export carries no footnote, because a line of prose breaks the tools that read those files, so ask for the spreadsheet or the PDF when you need the note.
  • A dash means nothing could be counted and nothing could be estimated. It is never zero.
  • A bound — a figure shown as “at most” — appears only in one rare case: when the range-wide count could not be run and the report fell back to adding days up. It is labelled as a bound, with the reason.
  • No identifiers are shown to clients anywhere. A report of people reached lists people as rows, with their impressions and clicks, and never the id behind the row.

Partner networks count their own people

An impression bought on a partner network — video, search or social through your own account there — is reported by that network, and so is its reach. For each day the network reports, the report shows the network's own reach and frequency for that day, as a plain number. We never estimate on top of a partner's figure, and we never add a partner's daily people into a range total, for the same reason as above: a person seen on two days is one person, and only the network can count that. Where the network provides a flight-to-date figure, that is the one to read. One campaign, one report explains how partner delivery reaches the same report.

What each number means

On the reportWhat it is
ImpressionsAds served, every one of them, with or without an id — see the standard behind every impression
Unique usersPeople counted once across the range, plus people estimated from measured frequency; marked when an estimate is included
Avg. frequencyAll impressions divided by unique users; the distribution keeps the measured sample's shares
“—”Nothing could be counted and nothing could be estimated; never a zero
“At most”A bound shown only when the range-wide count could not run; labelled with the reason
Partner reachThe network's own daily figure, never estimated, never summed across days by us

What this is, and what it is not

This is our own method, not an industry standard, and it rests on one assumption: that readers we could not identify saw the ad about as often as the ones we could. Where that is wrong — a site where opted-out readers return far more often than others, say — the estimate is wrong with it. That is why the measured and estimated parts are kept apart, why the frequency comes only from samples large enough to trust, and why the report prefers a dash to a guess. It is also why we have published no figure for how much of our reach is estimated: we measure the share of impressions that arrive with each kind of id, and we will publish it once it has settled.

The lesson that travels

Count what you can count, measure what you can measure, estimate only from what you measured, and mark every estimate where the reader will see it. A reach figure that cannot be taken apart is a reach figure that cannot be trusted.

Ask how your reach was counted

Questions we get asked

Why did my reach figure change in October 2026?

Two changes landed on 9 October. Reach over a date range is now counted once across the whole range instead of adding up daily rows, which lowers it where the same people returned on several days. And impressions that carried no identifier are now estimated into people from measured frequency instead of being left out, which raises it. Either effect can dominate, so a figure may have moved in either direction.

How do I know how much of a reach figure is estimated?

On screen, a figure that contains an estimate carries a tooltip saying so. In exported files, a table that contains an estimate carries a footnote under it. Our own staff see the measured and estimated parts separately and can share the split with you on request.

Why does a partner network's reach not add up across days?

For a partner network we show the reach the network itself reports for each day, and we never estimate on top of it. Because a person seen on two days is one person, we do not add those daily figures into a range total, and the network's own flight-to-date figure is used where one exists.

A note on numbers

Every number in the diagrams is illustrative. The minimum sample size behind “large enough” is a fixed setting we do not publish, and no figure for the share of reach that is estimated has been published yet; it will be, once measured. The behaviour described — the range-wide count, the four-step estimate, the tooltip, footnote, dash and bound — is how the reports work as of 13 October 2026 and may change. The partner-network figures are those networks' own; we do not alter them. This describes our own platform and is not advice for yours.

A
AdZoic team
Making ad buying make sense, from Dhaka.
Keep reading

Related reading

Animated: a bid request asks who is this; an opt-out gate sends opted-out readers to no id at all, and everyone else climbs four rungs — an id they sent, the advertising id hashed, a fingerprint that is never a person, or nothingData

Who we think you are, and when we refuse to guess

One id per request, its kind written down, an opt-out gate first, and a fingerprint that may never be a person. How our bidder answers the question every ad request asks — and what it refuses to do.

Oct 2026 · 6 min read
Animated: two dashboards — an ad exchange and a partner network, each with its own total and a spreadsheet between them — slide together into one report with one total, the same on every pageProduct

One campaign, one report: how AdZoic brings ad exchanges and partner networks into a single view

Two dashboards, two sets of numbers, one frustrated client. How delivery from ad exchanges and partner networks becomes one report with one total — and metrics that hold up when a client asks how they were counted.

Oct 2026 · 4 min read
Animated: billed impressions walk down five gates — served, rendered, measurable, viewable, valid — with a red slice peeling off at each gate for its reason, and the valid remainder turning tealMeasurement

Served, rendered, viewable, valid: the standard behind every impression we report

You buy ten thousand ads and the report says fewer. The five questions an impression must answer, the published standard for each, and why we keep two records of every ad.

Sep 2026 · 9 min read

← Back to all posts