WhatsApp

Request eCPM against impression eCPM: the number that hides the problem

Request eCPM against impression eCPM: the number that hides the problem

Short answer: impression eCPM is revenue divided by ads that rendered. Request eCPM is revenue divided by ads that were requested, including the ones that came back empty. The gap between them is your unfilled inventory, and most revenue problems live there.

We buy traffic into pages we own and earn on Google Ad Exchange. Our morning table puts the cost of a click next to what that click earned, by country. The only earnings number that can honestly sit in that table is request eCPM. Here is why.

The two definitions, precisely

Impression eCPM = revenue ÷ impressions × 1,000. An impression is an ad that was served. If a request went out and nothing came back, it is not an impression, so it is not in this number at all.

Request eCPM = revenue ÷ ad requests × 1,000. A request is every time a slot asked for an ad, filled or not. Everything you paid to generate — every pageview, every slot — is in the denominator.

The two numbers are the same only when fill is 100%. Nobody’s fill is 100%.

How the happier number lies

Suppose a consent platform on a site stops passing a valid consent string for visitors in Germany. Google restricts ad serving to those users. Requests from Germany start coming back empty. Here is what the two numbers do:

  • Impression eCPM for Germany barely moves, or goes up, because the impressions that still render are the ones from users who consented, who are often the more valuable ones.
  • Request eCPM for Germany falls sharply, because the denominator still counts every German pageview and the numerator has lost most of them.
  • Revenue falls. The owner looking at impression eCPM sees a healthy rate and a mysterious revenue drop. The owner looking at request eCPM sees exactly where it went.

The same pattern appears when a demand partner pauses, when a floor price is set above what a country’s buyers will pay, when an ads.txt line goes missing, or when a new ad unit is placed where the browser never scrolls. In every case impression eCPM looks fine and request eCPM tells the truth.

Why this matters more when you buy traffic

If you pay for the visit, you need to know what the visit earned — not what the subset of the visit that happened to render an ad earned. Cost per click is a cost per request, in effect. Put impression eCPM next to it and you will think a country is profitable when it is not. Put request eCPM next to it and the margin is real. We have had tier-two countries that looked excellent on impression eCPM and were quietly losing money on every click until the request number was added to the table.

What to do with it

  1. Add it to every report. Ad Manager exposes total ad requests and revenue; the division is trivial. Report it by country and by ad unit.
  2. Watch the gap, not just the number. Request eCPM divided by impression eCPM is roughly your fill rate. When that ratio moves, something broke — usually consent, a partner, a floor or a placement.
  3. Make budget decisions on it. If you buy traffic, the row that decides whether to spend more in a country is cost per click against request-based revenue per click. Nothing else.
  4. Do not chase it blindly either. You can raise request eCPM by removing ad units that rarely fill, which is often right, or by lowering floors to zero, which is often wrong. The number is a diagnostic, not a target.

Which is “better”, a high impression eCPM or a high request eCPM?

Request eCPM, because it already includes fill. A high impression eCPM with low fill is a site serving a few expensive ads and many empty slots.

Where do I find ad requests in Google Ad Manager?

In reporting, as “Total ad requests” (or the Ad Exchange equivalent), alongside impressions and revenue. Add country as a dimension.

Does this apply to apps?

Yes, and more so. Rewarded and interstitial requests that go unfilled are both lost revenue and, if the app waits on them, lost users.

Our reporting for publishers is built around this number. Here is how we set it up.