Every account audit I run starts the same way: the publisher pulls up their dashboard, points at a fill rate of 98%, and asks why revenue still feels flat. Fill rate almost never explains a revenue problem, and treating it as the headline metric is how publishers end up chasing the wrong lever for months. There are at least eight numbers stacked between "someone loaded your page" and "money landed in your account," and half of them get defined slightly differently depending on whether Google, an SSP, or your own ad server is doing the reporting. This is the reference I wish every new client had on day one.
Fill Rate: The Metric That Tells You The Least About Money
Fill rate is the percentage of ad requests that come back with a served creative. If your page fires 100 requests and 92 return an ad, you're at 92% fill. That's it. It says nothing about what those 92 ads paid, whether anyone saw them, or whether the 8 that didn't fill would have earned you $0.02 or $9.00 apiece. I've watched publishers spend weeks adding backup networks purely to push fill from 89% to 97%, then wonder why RPM didn't move.
Here's a worked example I use in almost every consult. Site A runs a single high-CPM demand source at $9.00 CPM but only fills 55% of requests, because that demand is picky about the inventory it buys. Site B stacks four backfill networks and fills 96% of requests at a blended $2.10 CPM. Site A's RPM is roughly $4.95; Site B's is about $2.02. Site B looks healthier on paper — the fill rate number is nearly perfect — and it's earning less than half as much per thousand pageviews.
This is exactly the trap I'd push back on if you asked me about it directly: chasing 100% fill is, in most cases, a waste of engineering time. Low-value backfill exists to catch impressions that would otherwise go completely unmonetized, and it should be priced and treated that way, not celebrated as a KPI improvement. The moment you start optimizing for fill rate as its own goal, you're incentivizing your stack to accept cheap junk demand just to close the gap.
- Adding low-floor backfill networks that accept almost any bid
- Lowering price floors in Google Ad Manager to close unfilled inventory
- Serving house ads or PSAs to count as "filled" impressions
- Stacking waterfall steps so something eventually catches every request
- Counting refreshed or re-requested impressions as new fill opportunities
CPM Isn't One Number — Raw CPM vs Effective CPM
CPM is what an advertiser, or the demand chain buying your inventory, pays per 1,000 served impressions. But the CPM you see quoted by a network's sales rep, the CPM shown in a line item, and the eCPM (effective CPM) shown in your reporting dashboard are frequently three different figures, and mixing them up leads to bad renegotiations. A demand partner quoting you a "$12 CPM deal" is usually describing what advertisers pay them, not what lands in your account after their take rate.
Effective CPM, or eCPM, normalizes any pricing model — CPC, CPA, flat-rate, CPM — down to a per-thousand-impression equivalent so you can compare unlike deals on the same scale. If a CPC campaign on your site generates $180 from 60,000 impressions, its eCPM is $3.00, even though no one ever quoted you a CPM figure for that campaign. This matters more than most publishers realize once you're running a header bidding setup with a mix of CPM, CPC, and hybrid deals sitting in the same auction — comparing raw quoted rates instead of eCPM will make you rank demand sources incorrectly.
If you want the fuller breakdown of how CPM, CPC, and CPA deals actually get priced, and where publishers leave money on the table negotiating them, I go deep on that in this comparison of publisher pricing models. For this glossary, the takeaway is narrower: never compare a quoted CPM from one source against an eCPM from another without converting both to the same basis first.
There's also a discrepancy problem baked into CPM reporting that most publishers never learn about until it costs them. The advertiser's ad server and your ad server each count impressions independently, and they rarely agree exactly — a 3-7% variance between the two is considered normal in the industry, and it's usually resolved in the buyer's favor, not yours. If your reported impressions and a demand partner's billed impressions differ by more than roughly 10%, that's worth escalating, because it usually means a tag firing issue or a bot-filtering mismatch, not just routine discrepancy noise.
RPM: What Your Traffic Is Actually Worth
RPM (revenue per mille, i.e., per 1,000) is your actual earnings per 1,000 pageviews, sessions, or impressions, depending on which RPM variant you're looking at, after fill rate, viewability, ad density, and every demand source are already baked in. It's the only number on this list that answers the question a publisher actually cares about: what is my traffic worth? I've written a full breakdown of the levers that move this number in my dedicated guide to increasing RPM, so I won't repeat that ground here — I just want to place it correctly against the other metrics.
The distinction that trips people up is page RPM versus ad request RPM versus impression RPM. Page RPM divides revenue by total pageviews, including pages where no ad loaded at all. Ad request RPM divides by the number of ad calls fired. If your page makes 6 ad requests per pageview, your ad request RPM will look roughly one-sixth the size of your page RPM for the exact same revenue, and I've seen publishers panic over a "dropping RPM" that was really just a reporting basis mismatch after they added an extra ad unit.
A quick worked comparison: a site earning $850 a day from 200,000 pageviews and 950,000 ad requests has a page RPM of $4.25 and an ad request RPM of $0.89. Both numbers are correct. Neither is wrong. They're just answering different questions, and your own dashboard, your network's dashboard, and Google's AdSense reporting may default to different bases without saying so explicitly in the label.
Blended RPM across an entire site can also hide a lot of variance you should be looking at separately. I regularly see accounts where the homepage runs a $6.50 RPM, category pages sit around $3.80, and archive content from three years ago drags along at $1.20 — and the sitewide blended number of $4.10 tells you nothing about which of those three you should be fixing first. Break RPM out by template or content age before you decide where to spend your next round of optimization effort, because the sitewide average almost always masks the page type that's actually underperforming.
Viewability Rate And The Cost Of Chasing Fill Over Viewability
Viewability rate is the percentage of served impressions that were actually seen — under the IAB/MRC standard, at least 50% of pixels in view for a minimum of one continuous second for display, two seconds for video. An ad can be served, counted in your fill rate, and billed at full CPM, yet load below the fold on a page nobody scrolls past. That impression is "filled" and worthless in the same breath.
This is where fill rate optimization actively backfires. Say you add a sticky footer unit and an extra in-content placement purely to push fill rate from 91% to 97%. If those placements sit in low-visibility zones — deep in comment sections, below a long footer — you might see viewability drop from 68% to 54% sitewide. Demand partners increasingly price and even filter bids based on historical viewability by placement, so that "improvement" can quietly shrink your effective CPM by 10-15% even as your fill rate chart looks better than ever.
I go into the mechanics of how viewability actually gets measured, and what moves it — lazy loading, above-the-fold placement, refresh timing — in a separate piece on why viewability matters. The short version for this glossary: any time someone hands you a fill rate number without a viewability number next to it, ask for the second one before you draw any conclusion.
Viewability also increasingly gates access to demand, not just price. Programmatic guaranteed deals and private marketplace agreements frequently carry a minimum viewability floor in the 65-70% range written directly into the contract, and placements that can't clear it simply won't qualify for that demand tier regardless of how much traffic they carry. I've had publishers assume a placement was being ignored by premium buyers for content reasons, when the real issue was a viewability floor sitting at 58% on a unit buried three screens down.
CTR, Sell-Through Rate, And Ad Density — The Metrics Nobody Explains Properly
Click-through rate (CTR) is clicks divided by impressions, and for programmatic display it's mostly a red herring for revenue purposes — typical display CTR sits between 0.05% and 0.3%, and CPM-priced demand pays you the same whether someone clicks or not. CTR matters far more for CPC-priced deals, native or content-recommendation widgets (where CTR routinely runs 0.3-1.2%), and for diagnosing accidental clicks caused by ads sitting too close to navigation elements, which is a policy risk with AdSense, not just a revenue one.
Sell-through rate is the percentage of your total available inventory that gets sold, through direct deals, PMPs, or guaranteed programmatic, versus falling through to open-auction remnant demand. A publisher selling 30% of inventory direct at a $15 CPM and letting the remaining 70% go to open auction at a $2.50 blended CPM ends up with a blended eCPM around $6.25. Push direct sell-through to 50% at the same rates and blended eCPM climbs to about $8.75, without a single change to open-auction demand quality. Sell-through is the lever agencies and ad ops teams obsess over that individual publishers mostly ignore, because it requires actual sales relationships, not just a tag change.
Ad density is ads per page or ads per viewport, and it's the metric most likely to quietly cannibalize itself. In accounts I've audited, going from 3 to 5 ad units on a long-form article page typically lifts RPM 10-14%. Going from 5 to 7 units often adds only 2-4% more RPM while viewability sitewide drops 6-9 points and bounce rate ticks up. Past a certain density, you're not creating new revenue, you're redistributing the same demand pool across more slots and degrading the reading experience for a marginal gain.
- CTR: clicks divided by impressions — mostly diagnostic, not a revenue driver for CPM demand
- Sell-through rate: sold impressions divided by available impressions — the direct-sales lever
- Ad density: ad units per viewport or page — has a clear point of diminishing returns
- Win rate: bids won divided by bids submitted in header bidding auctions
- Bid density: number of competing bids per ad request — a proxy for demand health
Which Metric Belongs In Which Report
Part of the confusion is structural: your own operational dashboard, your demand partner's report, and what a business owner wants to see are three different audiences with three different jobs, and using the same metric for all three usually means someone's making a decision with the wrong number in front of them. I've sat in plenty of meetings where a sales rep's fill rate slide and a finance person's revenue chart told two contradictory stories, and both were technically accurate — they just weren't measuring the same thing at all.
For your own day-to-day optimization work, the numbers that matter are page RPM by section or template, viewability by placement, and win rate by demand source in your header bidding setup — these tell you where to intervene next. A demand partner's report to you will lean on fill rate, impressions won, and CPM, because those describe their side of the transaction, not your bottom line; don't mistake a strong partner report for a strong revenue outcome without checking your own eCPM against it. Owner or leadership-level reporting should collapse almost everything down to total revenue, blended RPM trend month over month, and year-over-year eCPM — anything more granular than that is noise at that altitude.
If you're running primarily through AdSense rather than a full header bidding stack, the same hierarchy applies but the levers differ slightly — ad balance settings, auto ads density, and channel-level reporting replace some of the header bidding metrics. I cover how to apply this exact metric stack inside an AdSense account in my full AdSense optimization guide, including which reports inside the AdSense UI correspond to which of the definitions above.
- Your dashboard: page RPM by template, viewability by placement, win rate by source
- Demand partner reports: fill rate, impressions won, quoted CPM — their side, not yours
- Owner/leadership reporting: total revenue, blended RPM trend, year-over-year eCPM
- Sales team reporting: sell-through rate and direct-deal CPM versus programmatic blend
- Technical/ad ops reporting: latency, timeout rates, and bid density per auction
Where The Math Breaks Comparing Across Ad Servers And Networks
The single most common mistake I see in publisher spreadsheets is pulling fill rate, viewability, or CPM from two different platforms and treating them as apples-to-apples. They almost never are. Google Ad Manager typically calculates fill rate against ad requests that reach the ad server after any client-side filtering; a network SSP might calculate it against raw bid requests before filtering, producing a structurally lower number for identical traffic. I've had publishers conclude Network B was underperforming Network A by 15 points of fill rate when the actual served-impression volume was nearly identical — the denominators just weren't measuring the same thing.
Viewability has the same problem, compounded by vendor. Google Active View, IAS, and MOAT/Oracle can each report a different viewability percentage for the exact same set of impressions, because their measurement methodologies, sampling, and treatment of ambiguous cases (slow-loading iframes, ads scrolled past quickly) all differ. A 6-8 point spread between two vendors measuring the same inventory in the same week is normal, not a sign either one is broken.
Revenue reporting has a subtler version of this problem: gross versus net. A network might report the CPM an advertiser paid (gross), while your payout reflects that number minus their revenue share (net). A publisher comparing a $4.00 "reported CPM" from Network A against a $3.20 net eCPM from Network B and concluding Network A is better is comparing gross to net — the actual take-home might favor Network B once both are normalized to what you're actually paid.
- Comparing fill rate across platforms with different request-counting methodologies
- Comparing viewability from different measurement vendors without noting the source
- Comparing a network's gross reported CPM to another's net payout eCPM
- Ignoring currency and time-zone cutoffs when reconciling two dashboards for "the same day"
- Averaging RPM across pages with wildly different ad request counts instead of weighting by pageviews
A Working Cheat Sheet For Your Own Account
When I hand a new client their first monthly report, I anchor everything to three numbers in this order of importance: total revenue, page RPM trend, and viewability by top-10 template. Fill rate and raw CPM go in an appendix, not the summary, because they're diagnostic inputs, not outcomes. If RPM drops and fill rate is stable, look at viewability and demand mix first. If RPM drops and fill rate also drops, check for a tag implementation issue or a lost demand source before touching anything else.
The formulas worth keeping on a sticky note: Fill Rate equals Served Ads divided by Ad Requests. CPM equals (Revenue divided by Impressions) times 1,000, from the advertiser's side. RPM equals (Revenue divided by Pageviews or Sessions) times 1,000, from your side. eCPM equals (Revenue divided by Impressions) times 1,000, normalized across pricing models. Viewability equals Viewable Impressions divided by Measured Impressions. None of these are complicated in isolation; the complexity comes entirely from mismatched denominators between platforms, which is why the previous section matters more than memorizing the formulas themselves.
None of this replaces testing on your own inventory. Every benchmark in this glossary is a typical range I see across mid-size content sites, not a guarantee for your niche, geography, or traffic source. A finance blog with US desktop traffic and a gaming site with mobile APAC traffic will land on very different absolute numbers even with identical ad density and viewability, so use these figures to sanity-check your reports, not to set a target you assume you should be hitting.
The habit that actually pays off is a monthly ten-minute ritual: pull revenue, page RPM, and viewability side by side, note the direction of each versus the prior month, and only dig into fill rate or CPM if RPM moved in a direction viewability alone doesn't explain. Most of the panicked account reviews I get pulled into could have been caught two weeks earlier by someone glancing at three numbers instead of eight, in the right order, on a fixed schedule instead of only when revenue already feels off.
Stop leading with fill rate in your own reporting — move it to an appendix and put RPM, viewability, and revenue trend front and center. Next time you pull a report from two different networks, check whether their fill rate, viewability vendor, and gross-versus-net basis actually match before comparing the numbers.
Frequently Asked Questions
Written by Ismael Inacio
Founder, Ismael Ads
15+ years helping publishers across LATAM, North America and Europe grow ad revenue through Google AdSense, Ad Manager, AdX and header bidding. Every article here comes from work inside real publisher accounts, not secondhand research.