What Is Ad Fill Rate and How Do Publishers Improve It?
Ad fill rate is the percentage of ad requests that return a paid creative, calculated by dividing filled impressions by total ad requests. A 90% fill rate means 10% of your ad slots go empty on every page load, earning nothing. This article covers the formula, the causes of unfilled inventory, how price floors create the most common trade-off, and how header bidding and passback configurations push fill toward 98%+ within your publisher ad monetization strategy.
How Do You Calculate Ad Fill Rate?
Fill rate = (Filled Impressions / Total Ad Requests) x 100. If your ad server fires 200,000 ad requests in a month and 180,000 return a paid creative, your fill rate is 90%.
The revenue impact of fill rate is direct and multiplicable. Here's the math:
- Scenario A (95% fill): 200,000 requests x 0.95 fill = 190,000 impressions. At $5 eCPM: 190 x $5 = $950
- Scenario B (70% fill): 200,000 requests x 0.70 fill = 140,000 impressions. At $5 eCPM: 140 x $5 = $700
Same traffic. Same eCPM. $250/month difference. That's $3,000 per year from a 25-point fill rate gap. On higher-traffic sites, the gap scales linearly. A site doing 2 million monthly requests loses $2,500/month at 70% vs 95% fill.
Fill rate and RPM are connected but distinct. A high-fill, low-eCPM setup can outperform a low-fill, high-eCPM setup on total revenue. Run both scenarios through the CPM calculator to compare.
What Causes Low Ad Fill Rates?
Four root causes account for the majority of unfilled inventory. Diagnosing which one affects your site determines the fix.
Aggressive Price Floors
Setting floor CPMs too high rejects bids that would have paid you something. A $3 floor on inventory where average clearing prices run $2.50 kills 30 to 50% of bids. The surviving bids pay more per impression, but the total revenue drops because you're serving fewer impressions. More on this trade-off below.
Low-Demand Geographies
Traffic from Tier 3 countries (parts of South Asia, Africa, Southeast Asia) generates far fewer bids than US or UK traffic. Advertiser demand is concentrated in high-GDP regions. A site with 40% Tier 3 traffic will always run lower fill rates than a site with predominantly US traffic unless you add demand sources that serve those geos.
Timeout and Latency Issues
If your header bidding wrapper times out at 1,000ms and a slow SSP takes 1,200ms to respond, that SSP's bids never arrive. The ad request goes unfilled or falls to a lower-priority demand source. In Google Ad Manager, check the "Unfilled Impressions" report dimension to quantify how many requests return empty.
Missing or Broken Demand Sources
An expired SSP integration, a misconfigured ads.txt entry, or a revoked Prebid.js adapter drops an entire demand source from your auction. Fill rate declines gradually, and the cause is invisible unless you audit demand partner delivery weekly.
How Do Price Floors Affect Fill Rate and Net Revenue?
Price floors and fill rate move in opposite directions. Raising floors increases per-impression revenue but decreases the number of filled impressions. The question is where the optimal point sits for your traffic.
| Floor CPM | Est. Fill Rate | Avg Clearing eCPM | Revenue per 100K req |
|---|---|---|---|
| $0 (no floor) | 97% | $2.80 | $271.60 |
| $2.00 | 88% | $3.50 | $308.00 |
| $4.00 (Optimal) | 65% | $5.20 | $338.00 |
| $6.00 | 40% | $7.10 | $284.00 |
| $8.00 | 22% | $9.50 | $209.00 |
The optimal floor is rarely the highest or lowest option. In this example, a $4 floor maximizes total revenue despite a 65% fill rate. The $0 floor fills nearly everything but leaves $66 on the table per 100K requests. The $8 floor captures premium bids only but collapses total revenue by 38%.
Static floors miss this optimization entirely. Dynamic floor tools (Google Ad Manager rules, Assertive Yield, PubStack) adjust floors by hour, geo, device, and format based on historical clearing data. Dynamic floors consistently outperform static floors by 10 to 20% on net yield because they find the optimal point for each auction context rather than applying one number globally.
How Does Header Bidding Improve Fill Rates?
Header bidding sends each ad request to multiple SSPs simultaneously rather than calling them one at a time in a waterfall sequence. More simultaneous bidders means a higher probability that at least one returns a paid creative.
Traditional Waterfall
Header Bidding
In a waterfall, if SSP1 doesn't fill, the request passes to SSP2. If SSP2 doesn't fill, it passes to SSP3. Each step adds latency. By the time the request reaches SSP4 or SSP5, the timeout may have expired.
Header bidding (via Prebid.js or Amazon Publisher Services) eliminates the sequential penalty. All partners bid within the same timeout window. Fill rates typically jump 10 to 25 percentage points after implementing header bidding, from mid-70s to mid-90s.
For publishers on AdSense, header bidding isn't available. AdSense runs its own single-source auction. The fill rate improvement from header bidding is one of the primary reasons managed networks like Mediavine and Raptive outperform AdSense on total RPM, as covered in our network comparison.
How Do Passback Ads Recover Unfilled Inventory?
A passback tag catches ad requests that your primary demand sources don't fill. When your main auction returns no bid, instead of serving a blank space, the ad server redirects the request to a secondary demand source.
In Google Ad Manager, you configure passbacks by creating a "house" or "network" line item set to the lowest priority. Assign an AdSense or third-party tag as the creative. When no Prebid.js bidder or AdX bid wins, GAM falls through to this passback line item.
AdSense is the most common passback partner because it fills nearly everything. AdSense fill rates run 95 to 99% for US traffic. The CPMs are lower than your primary demand ($1 to $3 passback eCPM vs $4 to $8 primary), but filling at $1.50 is better than filling at $0.
The mistake publishers make: treating passback revenue as disposable. On a site with 5% unfilled inventory and 500,000 monthly impressions, that's 25,000 impressions. At $1.50 passback eCPM, that's $37.50/month, or $450/year. Not transformative, but free money from a 10-minute GAM configuration.
Check your current fill rate and eCPM against CPM benchmarks by format and geo to identify whether the gap is demand-side or configuration-side.
Frequently Asked Questions About Ad Fill Rate
What is a good ad fill rate for website publishers?
A healthy ad fill rate typically ranges between 80% and 98% for Tier-1 GEO traffic on established header bidding wrappers. Rates below 70% indicate aggressive floor prices or insufficient buyer demand.
How do price floors affect ad fill rate and publisher revenue?
Setting excessively high floor CPMs artificially inflates single-unit eCPM while rejecting valid lower bids. This drops fill rates and reduces net page RPM earnings across total site traffic.
Why is my Google AdSense or GAM fill rate dropping?
Ad fill rate drops occur due to restrictive pricing rules, shifts in geographic traffic origin, ad server integration errors, creative size mismatches, or demand partner bid timeouts.
What are passback ads and how do they recover unfilled inventory?
Passback tags act as secondary ad requests that trigger when a primary demand partner fails to fill an ad impression, handing the impression down to a remnant buyer to prevent zero-revenue calls.
How does header bidding improve fill rates vs traditional waterfalls?
Header bidding queries multiple Supply-Side Platforms (SSPs) simultaneously in a single unified auction, exponentially increasing bid density and impression fill rates compared to sequential waterfall calls.