Every ad request that returns empty is money left on the table. If your site sends 100,000 ad requests per day and only 80,000 come back with a paid creative, you are losing 20% of your potential ad revenue. That gap between requests sent and ads served is your fill rate, and it is one of the most directly actionable metrics a publisher can optimize.
This guide explains what fill rate is, what constitutes a good benchmark, why your fill rate might be low, and seven concrete strategies to improve it without sacrificing CPMs.
What Is Ad Fill Rate?
Ad fill rate is the percentage of ad requests that result in a paid ad being served. When your page loads, each ad slot sends a request to your ad server (Google Ad Manager, AdSense, or a header bidding wrapper). If a demand source returns a creative and it renders on the page, that request is "filled." If no demand source bids, or the winning bid is below your floor price, the request goes unfilled.
The formula is straightforward:
Fill Rate Formula
Fill Rate = (Filled Impressions / Total Ad Requests) x 100
Example: 92,000 filled impressions from 100,000 ad requests = 92% fill rate.
In Google Ad Manager, "filled impressions" corresponds to the "Ad server impressions" metric, while "total ad requests" maps to "Total ad requests" (or "Total code served count" depending on your reporting setup). The difference between these two numbers represents unfilled requests where either no demand existed or the winning bid did not meet your pricing rules.
It is important to distinguish fill rate from related metrics. Impression rate sometimes refers to the percentage of ad requests that result in a viewable impression (combining fill rate and viewability). Match rate in some platforms refers to the percentage of requests where at least one bid was received, regardless of whether the bid met the floor. Fill rate specifically measures requests that resulted in a paid ad rendering on the page.
Why Fill Rate Matters for Revenue
Fill rate has a direct, multiplicative impact on your total ad revenue. The standard revenue equation for display advertising is:
Revenue = Ad Requests x Fill Rate x CPM / 1000
If you have 1 million ad requests per day at a $2.00 average CPM, the difference between 85% and 95% fill rate is significant:
- At 85% fill rate: 1,000,000 x 0.85 x $2.00 / 1000 = $1,700/day
- At 95% fill rate: 1,000,000 x 0.95 x $2.00 / 1000 = $1,900/day
That 10 percentage-point improvement adds $200 per day, or roughly $6,000 per month, with no additional traffic required. You are monetizing the same pageviews more completely.
Fill rate also affects your relationship with advertisers. Demand partners evaluate your inventory partly based on win rate and fill rate. If your site consistently returns unfilled requests, some SSPs and DSPs may deprioritize your inventory in their auction logic, creating a negative feedback loop: low fill leads to less demand interest, which leads to even lower fill.
What Is a Good Fill Rate?
Benchmarks vary significantly based on your monetization stack, traffic geography, and content vertical. Here are realistic ranges:
- Single ad network (AdSense only): 85-95%. AdSense has broad demand but cannot fill every impression, especially for non-English or tier-3 traffic.
- Google Ad Manager with AdSense backfill: 90-97%. GAM's line item priority system combined with AdSense as a fallback covers most gaps.
- Header bidding with 3+ demand partners: 95-99%. Multiple SSPs competing in a unified auction dramatically reduces unfilled requests.
- Header bidding + GAM + backfill chain: 97-99.5%. This is the gold standard setup where header bidding handles primary demand, GAM manages direct deals and remnant, and a backfill network catches anything that falls through.
If your fill rate is below 80% with any of these setups, something is misconfigured. Common culprits include incorrect ad unit sizes, broken ad tags, overly aggressive floor prices, or significant bot traffic that demand partners refuse to bid on.
Fill Rate by Geography
Traffic geography has an outsized effect on fill rate. Advertisers concentrate budgets on high-value markets, leaving less demand for other regions:
- Tier 1 (US, UK, Canada, Australia, Western Europe): Fill rates of 95-99% are standard because advertiser demand vastly exceeds publisher supply in these markets.
- Tier 2 (Eastern Europe, Brazil, India, Mexico, Southeast Asia): Fill rates of 85-95%. Demand exists but is thinner, especially for niche verticals.
- Tier 3 (Sub-Saharan Africa, parts of South Asia, Central Asia): Fill rates of 60-85%. Limited advertiser budgets targeting these geos mean many requests go unfilled unless you have backfill configured.
If your audience is global, your overall fill rate is a weighted average of these geo segments. A site with 40% tier-1 traffic and 60% tier-3 traffic will naturally have a lower aggregate fill rate than a site with predominantly US visitors.
Common Causes of Low Fill Rate
Before jumping to solutions, diagnose the root cause. Low fill rate almost always traces back to one or more of these five issues:
1. Insufficient Demand Sources
If you are running a single ad network, you are limited to that network's demand pool. When that network has no advertiser willing to bid on a specific impression (based on the user's location, device, content category, or time of day), the request goes unfilled. Adding demand sources is the single most effective way to improve fill rate because each additional source provides independent demand that can fill gaps left by others.
2. Geographic Mismatch
Your demand partners may not have advertisers targeting your audience's geography. A US-focused SSP will have limited demand for traffic from Vietnam or Nigeria. If your traffic skews toward markets where your demand partners have thin coverage, you will see low fill rates for those segments even if your tier-1 fill rate is excellent.
3. Ad Blockers
Ad blockers prevent ad requests from reaching your ad server entirely, or they block the response from rendering. In reporting, this often manifests as a discrepancy between pageviews and ad requests (fewer requests than expected) rather than low fill rate per se. However, some ad blocker configurations allow the request but block the render, which can appear as unfilled impressions in certain reporting setups. Global ad blocker usage rates range from 25-40% on desktop and 10-15% on mobile, with higher rates in tech-savvy audiences.
4. Floor Prices Set Too High
Price floors tell your ad server to reject any bid below a specified CPM. If your floor is $1.50 and the highest bid for an impression is $1.20, the request goes unfilled even though a willing buyer existed. Floors are valuable for maintaining inventory value, but overly aggressive floors sacrifice fill rate. The trade-off is deliberate: you accept fewer fills in exchange for higher average CPMs on the fills you do get. The question is whether the math works in your favor.
Consider this: a $1.50 floor with 80% fill rate yields $1.50 x 0.80 = $1.20 effective RPM per request. If removing the floor drops your average CPM to $1.00 but raises fill rate to 98%, you get $1.00 x 0.98 = $0.98 effective RPM per request. In this scenario, the floor is worth keeping. But if the floor only improves CPM marginally while tanking fill rate, it is costing you money.
5. Invalid Traffic (IVT)
Ad networks and DSPs use sophisticated IVT detection systems. If a significant portion of your traffic is flagged as bot traffic, data center traffic, or otherwise invalid, demand partners will refuse to bid on those impressions. This shows up as low fill rate, particularly from specific referral sources or user agents. Google Ad Manager's "Unfilled impressions" report broken down by traffic source can help identify if certain sources have dramatically lower fill rates than others.
7 Strategies to Improve Ad Fill Rate
Each of these strategies addresses one or more of the root causes above. Implement them in order of expected impact for your situation.
1. Add More Demand Sources
This is the highest-impact change for most publishers. If you are running only AdSense or a single SSP, adding header bidding with multiple demand partners can push fill rate from 85% to 97%+ while also increasing CPMs through competition.
A practical header bidding setup for mid-size publishers includes 3-5 SSPs: a mix of large platforms (Google AdX, Index Exchange, OpenX) and specialists that perform well in your vertical or geography. Each SSP brings independent demand, so even if one SSP has no bid for a specific impression, another likely will.
The key is not to add demand sources indiscriminately. Each additional bidder adds latency to your ad auction. Beyond 6-8 bidders, the marginal fill rate improvement is typically less than 1%, while the added latency can hurt user experience and Core Web Vitals scores. Start with 3-4, measure the incremental fill, and add more only if the data justifies it.
2. Lower or Dynamic Floor Prices
Rather than removing floors entirely, implement dynamic floor pricing that adjusts based on context. Set higher floors for high-value segments (US desktop traffic in a finance vertical) and lower floors for segments where demand is thinner (mobile traffic from tier-3 countries).
Google Ad Manager supports Unified Pricing Rules (UPRs) that let you set different floors by geography, device, ad unit, and other dimensions. A common approach:
- US/UK desktop: $1.00-$2.00 floor (demand is deep enough to sustain this)
- US/UK mobile: $0.50-$1.00 floor
- Tier-2 geos: $0.20-$0.50 floor
- Tier-3 geos: $0.05-$0.10 floor, or no floor at all
This approach maximizes CPMs where demand supports it while maintaining high fill rates in thinner markets. Review and adjust floors monthly based on actual bid data.
3. Configure Backfill Properly
Backfill is the safety net that catches impressions no premium demand source wants. In Google Ad Manager, this typically means setting AdSense or Ad Exchange as a fallback when no line item or header bidding partner fills the request.
A proper backfill chain looks like this:
- Direct-sold campaigns (guaranteed line items) get first priority
- Header bidding competes in a unified auction for remaining inventory
- GAM remnant line items from Ad Exchange fill what header bidding misses
- AdSense backfill catches the final gaps
- House ads or passback tags serve as the absolute last resort
Without this chain, impressions that header bidding cannot fill simply go empty. With it, nearly every request has a fallback buyer, even if the CPM on backfill is lower.
4. Optimize Ad Sizes
Not all ad sizes attract equal demand. The IAB standard sizes have the deepest advertiser creative pools:
- 300x250 (medium rectangle): The most widely supported size across all devices. Nearly every advertiser has creatives in this format.
- 728x90 (leaderboard): Standard desktop banner with strong demand.
- 320x50 and 320x100: Mobile banner standards with high fill rates.
- 300x600 (half page): Growing in popularity, strong desktop CPMs.
- 336x280 (large rectangle): Good alternative to 300x250 with slightly higher CPMs in some markets.
If you are using non-standard sizes (like 468x60, 120x600, or custom dimensions), you are limiting the pool of creatives that can fill those slots. Switch to standard sizes or, better yet, configure your ad slots to accept multiple sizes. In Google Ad Manager, you can define a multi-size ad unit that accepts 300x250, 336x280, and 300x600, letting the auction choose whichever size has the highest bid.
5. Add Geo-Specific Demand Partners
If your traffic includes significant segments from specific regions, add demand partners that specialize in those regions. Global SSPs often have thin demand in markets outside North America and Western Europe. Regional networks fill that gap:
- India/South Asia: InMobi, Vserv, and local exchanges have deeper advertiser pools for these markets than global SSPs.
- Southeast Asia: Coda Payments, Innity, and regional programmatic platforms.
- Latin America: Mercado Ads, Aleph, and regional DSPs with local advertiser budgets.
- Middle East/North Africa: Choueiri Group, Jeeng, and region-focused exchanges.
Even one regional partner can improve fill rate by 5-15% for traffic from that geography, because they have access to local advertiser budgets that global platforms do not.
6. Reduce Ad Latency
Every millisecond of latency in your ad stack increases the chance of an unfilled impression. If your header bidding wrapper takes 3 seconds to collect bids, but the user navigates away after 2 seconds, those bids never arrive and the impressions go unfilled. Latency-related fill loss is invisible in standard reporting because the ad request was sent but the response arrived too late.
To reduce latency:
- Set strict timeouts: Configure your header bidding wrapper to timeout at 1,500-2,000ms. Bidders that consistently exceed the timeout should be removed or given shorter individual timeouts.
- Use server-side bidding: Server-to-server (S2S) header bidding moves the auction from the user's browser to your server, reducing client-side latency. The trade-off is lower cookie match rates, but for fill rate, S2S is faster.
- Lazy load below-fold ads: Do not request ads for below-the-fold slots until the user scrolls near them. This reduces initial page load ad requests and ensures that when the request fires, the user is still on the page to see the result.
- Minimize wrapper bloat: Each bidder adapter in Prebid.js adds to the JavaScript bundle size. Only include adapters for bidders you are actually using.
7. Use Passback Tags
A passback tag is a fallback ad tag that fires when your primary demand source returns no fill. Instead of showing a blank space, the ad slot calls a secondary ad network. If that network also returns no fill, it can pass back to a third network, creating a daisy chain of demand sources.
Passback chains are older technology, largely superseded by header bidding (which runs all demand sources simultaneously rather than sequentially). However, passback tags still have value as a last-resort backfill after header bidding and GAM have both failed to fill. A common setup is to configure a passback tag in GAM that calls a remnant network like Criteo, MGID, or a programmatic pop-under network as the absolute final fallback.
The downsides of passback chains are added latency (each passback adds a sequential network call) and complexity (debugging fill issues through a chain of 3-4 networks is difficult). Use passback tags sparingly, and only for the final fallback position.
Fill Rate vs. Viewability: The Trade-Off
Fill rate and viewability are both critical revenue metrics, but they can work against each other if you optimize for one without considering the other.
Fill rate measures what percentage of ad requests returned a paid ad. Viewability measures what percentage of served ads were actually seen by users (at least 50% of pixels visible for at least 1 second, per IAB standards).
Here is where the tension arises: you can achieve near-100% fill rate by lowering floors to zero and accepting every bid, including low-quality remnant demand. But those low-paying fills often come from advertisers who care less about viewability, and they may serve in ad slots that users rarely see (below-the-fold placements on long pages, for example). Your fill rate goes up, but your viewability goes down, which can reduce CPMs across your entire inventory as viewability-conscious buyers avoid your site.
The better approach is to optimize for effective revenue per ad request, which accounts for both fill rate and CPM quality:
Effective Revenue Per Request
Revenue Per Request = Fill Rate x Average CPM / 1000
This single metric captures the combined impact of fill rate and CPM quality. Increase either one (without decreasing the other) and total revenue goes up.
In practice, this means maintaining reasonable floor prices that filter out the lowest-quality demand while still allowing enough fills to keep your inventory competitive. A fill rate of 93% at a $2.50 CPM generates more revenue than a fill rate of 99% at a $1.80 CPM (the first scenario yields $2.33 per thousand requests vs. $1.78).
Viewability also feeds back into fill rate over time. Sites with high viewability scores attract more demand partners and higher bids, which increases fill rate naturally. Sites with poor viewability get deprioritized in programmatic auctions, which lowers fill rate. The two metrics are connected in a long-term feedback loop.
Monitoring Fill Rate in Practice
Set up fill rate monitoring that surfaces problems before they cost you significant revenue:
- Daily fill rate by ad unit: A sudden drop in fill rate for a specific ad unit usually means a broken tag, a removed line item, or a demand partner issue. Catch it within 24 hours.
- Fill rate by geography: Segment your fill rate report by country. If a specific geo drops, it may indicate a demand partner pulling out of that market or a new ad blocker gaining popularity in that region.
- Fill rate by device: Mobile and desktop fill rates often diverge. If mobile fill rate drops while desktop stays stable, check your mobile ad sizes and mobile-specific demand partners.
- Unfilled impression reasons: Google Ad Manager provides unfilled impression reasons (no eligible line items, below floor price, no matching creatives). These reasons tell you exactly which fix to apply.
Set up automated alerts for fill rate drops exceeding 5 percentage points day-over-day. A sudden drop from 95% to 88% fill rate on a site with 500,000 daily ad requests means roughly 35,000 unfilled impressions that were previously filled, potentially costing $50-$100 per day depending on your CPMs.
Frequently Asked Questions
What is a good ad fill rate?
It depends on your setup. Single ad network publishers should target 85-95%. Publishers running header bidding with multiple demand sources should target 95-99%. Fill rates below 80% with any setup indicate a misconfiguration worth investigating, such as excessive floor prices, broken ad tags, or limited demand for your traffic geography.
What causes a low ad fill rate?
The most common causes are floor prices set too high, limited demand for your traffic geography (especially tier-3 countries), ad blocker usage, relying on a single demand source, requesting non-standard ad sizes, invalid traffic flagged by ad networks, and slow page load times that cause ad requests to time out.
How do I calculate ad fill rate?
Fill Rate = (Filled Impressions / Total Ad Requests) x 100. If your ad server sends 100,000 requests and 92,000 return a paid creative, your fill rate is 92%. In Google Ad Manager, use the "Ad server impressions" and "Total ad requests" metrics in the reporting interface.
Is 100% fill rate always desirable?
Not necessarily. A 100% fill rate with very low CPMs may mean you are accepting low-quality ads that depress your inventory value. Sometimes a 90-95% fill rate with higher average CPMs generates more total revenue than filling every single request at rock-bottom prices. Optimize for revenue per ad request, not fill rate in isolation.
What is the difference between fill rate and viewability?
Fill rate measures whether an ad was served in response to a request. Viewability measures whether a served ad was actually seen by the user (50% of pixels visible for 1 second per IAB standards). You can have 100% fill rate but low viewability if ads are placed where users rarely scroll. Both metrics matter, but they measure different stages of the ad delivery chain.
Stop Leaving Revenue on the Table
WeForAds connects your inventory to multiple demand sources with automatic backfill, dynamic floor optimization, and real-time fill rate monitoring. More demand, fewer empty slots.
Get Started Free
By