Every unfilled ad impression is money left on the table. If your ad slots are showing blank spaces, collapsed divs, or house ads instead of paid advertisements, your fill rate is costing you revenue. A site with 100,000 monthly impressions and a 70% fill rate is wasting 30,000 impressions every month. At even a modest $2.00 eCPM, that is $60/month in lost revenue from one issue alone.
Fill rate problems have two categories of causes: technical issues that prevent ads from being requested or rendered, and demand issues that mean no advertiser is willing to bid on your inventory. This guide covers both, with specific diagnostic steps and fixes for each.
What Is Fill Rate and How Is It Calculated?
Fill rate is the percentage of ad requests that result in a paid ad being served.
Fill Rate Formula
Fill Rate = (Filled Impressions / Total Ad Requests) x 100
Example: 85,000 filled impressions / 100,000 ad requests = 85% fill rate
A "filled impression" means a demand partner won the auction and their creative rendered in the ad slot. An "unfilled impression" (also called a passback or default) means no demand partner bid above the minimum threshold, or no bid was received at all.
For a deeper explanation of this metric, see our complete guide to ad fill rate.
Technical Causes of Low Fill Rate
1. Missing or Incorrect ads.txt
This is the single most common cause of low fill rate, and it is completely preventable. Your ads.txt file declares which companies are authorized to sell your inventory. If a demand partner is not listed in your ads.txt, most DSPs (demand-side platforms) will block their bids. The demand partner can technically serve ads, but advertisers will not buy through them because the supply chain is unverified.
How to diagnose: Visit yourdomain.com/ads.txt and verify that every demand partner in your ad stack has correct entries. Cross-reference with the ads.txt entries provided by your monetization platform.
How to fix: Upload a complete, accurate ads.txt file. If you use a managed platform like WeForAds, the platform provides a ready-to-upload file with all required entries.
Impact: Fixing ads.txt issues can increase fill rate by 10-40% immediately, depending on how many demand partners were affected.
2. Consent Management Issues (GDPR/CCPA)
If your site receives traffic from the EU, UK, or California, you need a Consent Management Platform (CMP) that signals user consent to demand partners. Without proper consent signals, GDPR-compliant demand partners (which includes most major SSPs) cannot bid on impressions from those regions.
How to diagnose: Check if your fill rate is significantly lower for European traffic compared to US traffic. If European fill rate is 30-50% lower, consent is likely the issue. Also check your browser console for TCF (Transparency and Consent Framework) errors.
How to fix: Implement a certified CMP (Google-certified CMPs include Cookiebot, OneTrust, Quantcast Choice, and others). Ensure the CMP loads before your ad code and properly passes consent signals through the IAB TCF v2.2 framework.
Impact: Proper consent implementation can increase European fill rate from 40-60% to 85-95%.
3. Ad Blocker Impact
Ad blockers prevent ad code from executing, which means those users generate zero ad impressions. Depending on your audience, 15-40% of your traffic may be using ad blockers. This is not technically a "fill rate" issue (blocked users never generate ad requests), but it affects your effective monetization rate.
How to diagnose: Compare your analytics pageviews to your ad server's total impressions per page. If your analytics shows 100,000 pageviews but your ad server shows only 70,000 ad requests for a single-slot page, approximately 30% of users are blocking ads.
How to fix: Consider an acceptable ads program (some ad blockers allow non-intrusive formats), implement an ad-block detection message (not wall), or use server-side ad insertion for critical placements. Note that aggressive anti-ad-block tactics can increase bounce rate.
4. JavaScript Errors Preventing Ad Loading
A JavaScript error anywhere on your page can prevent ad code from executing. This is especially common when ad scripts conflict with other JavaScript on the page (analytics, chat widgets, social media embeds).
How to diagnose: Open your browser developer tools (F12) and check the Console tab. Look for JavaScript errors, particularly any that reference your ad code, Prebid, GPT (Google Publisher Tag), or specific demand partner adapters.
How to fix: Ensure ad code loads asynchronously (async attribute on script tags) so it does not block or get blocked by other scripts. Isolate ad-related JavaScript errors and fix the underlying conflicts.
5. Slow Page Load and Bid Timeouts
Header bidding operates within a timeout window, typically 1-3 seconds. If your page loads slowly and the header bidding auction starts late, demand partners may not have time to respond before the timeout expires. Timed-out partners cannot bid, which reduces competition and fill rate.
How to diagnose: Check your header bidding timeout rates. In Prebid.js, enable analytics to see which bidders are timing out and how often. If more than 10% of bid requests are timing out, your timeout window may be too short or your page is too slow.
How to fix: Optimize page load speed (reduce render-blocking resources, compress images, use a CDN). Increase your header bidding timeout to 2-3 seconds if it is currently below 1.5 seconds. Implement lazy loading for below-fold ad slots so their auctions start when the user scrolls near them rather than at page load. See our guide on reducing ad latency for detailed optimization steps.
Demand-Side Causes of Low Fill Rate
6. Too Few Demand Partners
If you rely on a single demand source (like AdSense alone), your fill rate is capped by that one partner's demand for your specific inventory. Google cannot fill 100% of impressions for every publisher because not every impression has a matching advertiser willing to pay above the minimum threshold.
How to diagnose: Check how many active demand partners are bidding on your inventory. If you are using only AdSense or only one SSP, this is your primary issue.
How to fix: Implement header bidding with 5-10 demand partners. More bidders means more chances to fill every impression. Each additional quality demand partner typically increases fill rate by 3-8%. With 8-10 partners, most publishers achieve 95%+ fill rate because the probability that at least one partner will bid on any given impression is very high.
7. Floor Prices Too High
Floor prices (minimum CPM thresholds) tell your ad server to reject bids below a certain level. If your floors are set too aggressively, you reject bids that would have generated revenue, and the impression goes unfilled.
How to diagnose: Compare your fill rate at current floor prices versus a test period with no floors. If fill rate jumps by more than 15 percentage points with floors removed, your floors are too high.
How to fix: Implement dynamic floor pricing that adjusts based on inventory characteristics (geo, device, time of day, ad size). Start with floors at 40-50% of your average eCPM and adjust based on fill rate data. The optimal floor maximizes total revenue (eCPM x fill rate), not just eCPM.
Floor Price Impact Example
Scenario A: $3.00 floor, $4.50 eCPM, 75% fill rate = $3.375 effective revenue per 1,000 requests
Scenario B: $1.50 floor, $3.20 eCPM, 95% fill rate = $3.040 effective revenue per 1,000 requests
Scenario C: $2.00 floor (dynamic), $3.80 eCPM, 92% fill rate = $3.496 effective revenue per 1,000 requests
The dynamic floor in Scenario C produces the highest total revenue by balancing eCPM and fill rate.
8. Low-Value Inventory with No Backfill
Some impressions simply do not attract premium bids. Traffic from Tier 3 countries, late-night impressions, or impressions on low-engagement pages may not clear even modest floor prices. Without a backfill strategy, these impressions go completely unfilled.
How to fix: Configure a backfill network (such as AdSense) to catch impressions that do not clear your floor prices. The backfill network serves as a safety net: you get some revenue from low-value impressions rather than zero. With proper backfill, your effective fill rate should approach 95-98%.
9. Brand Safety Blocks
Advertisers and DSPs use brand safety tools that block ads from appearing on certain types of content. If your site covers sensitive topics (politics, controversial news, gambling, adult-adjacent content), advertiser-side blocks can reduce the number of bidders eligible to compete for your inventory.
How to diagnose: Check if fill rate varies significantly across different content categories on your site. If your general content pages have 95% fill but your controversial or sensitive pages have 60%, brand safety blocks are likely the cause.
How to fix: You cannot control advertiser-side blocking, but you can mitigate its impact by working with demand partners who specialize in or are tolerant of your content category. You can also ensure your site is categorized correctly in industry databases (like DoubleVerify and IAS) so that overly broad blocking does not affect pages that are actually brand-safe.
10. Seasonal Demand Dips
Advertiser spending is not constant throughout the year. Q1 sees 20-30% lower spending than Q4. Even within months, spending drops on weekends and overnight. These cyclical patterns reduce available demand and can lower fill rates temporarily.
How to diagnose: Compare your fill rate month-over-month and year-over-year. If it drops in January and recovers by April, seasonality is a major factor.
How to fix: Lower floor prices during known low-demand periods to maintain fill rate. Ensure you have diverse demand partners (different partners have different seasonal spending patterns). Use backfill aggressively during Q1 to maintain overall fill rate.
The Fill Rate Optimization Checklist
Work through this list in order. Each step builds on the previous one.
- Step 1: Verify your ads.txt is complete and accurate for all active demand partners
- Step 2: Implement or verify consent management for GDPR/CCPA regions
- Step 3: Check browser console for JavaScript errors affecting ad code
- Step 4: Ensure header bidding timeout is 2-3 seconds and monitor timeout rates
- Step 5: Add demand partners until you have 5-10 competing bidders
- Step 6: Review and adjust floor prices (lower if fill rate is below 85%)
- Step 7: Configure backfill for impressions that do not clear floor prices
- Step 8: Implement lazy loading for below-fold ads to improve render timing
How WeForAds Achieves 95%+ Fill Rate
WeForAds addresses every fill rate issue listed above through its managed platform:
- Complete ads.txt management: Auto-generated file with all demand partner entries, updated whenever the partner mix changes
- 10+ integrated demand partners: Including Google Ad Exchange, Amazon TAM, Index Exchange, OpenX, PubMatic, Sovrn, and more, all competing in a unified auction
- Dynamic floor pricing: Floors adjust in real time based on geo, device, time of day, and historical bid data to balance eCPM and fill rate
- Automatic backfill: Unfilled impressions are caught by backup demand, ensuring near-100% effective fill
- Consent management integration: Compatible with all major CMPs to ensure GDPR-region traffic is fully monetized
- Optimized timeout settings: Bid timeouts calibrated to each partner's response characteristics to minimize timeout waste
The result is that most publishers on WeForAds see fill rates of 95-98% from day one, with eCPMs that reflect genuine market competition rather than single-source pricing.
Frequently Asked Questions
What is a good ad fill rate for publishers?
A good fill rate is 90% or higher. Top-performing setups achieve 95-98%. Below 85% indicates fixable issues. Below 70% means significant problems that are costing substantial revenue. Every unfilled impression represents lost income, so the goal is to monetize as close to 100% of eligible impressions as possible.
Why are my ads showing blank spaces instead of ads?
Blank ad spaces result from unfilled impressions. Common causes include incorrect or missing ads.txt entries, floor prices set too high, ad blockers, consent management issues for GDPR regions, JavaScript errors, or insufficient demand partners. Start by checking your browser console for errors and verifying your ads.txt file.
How does ads.txt affect fill rate?
ads.txt directly affects fill rate because most DSPs verify it before bidding. If a demand partner is missing from your ads.txt, their bids get blocked even though they can technically serve ads. Missing entries for active partners can reduce effective fill rate by 10-50%. See our complete ads.txt guide for setup instructions.
Can floor prices cause low fill rate?
Yes. Floors set too high reject bids that would have filled your slots. If most bids clear at $1.00-$1.50 but your floor is $2.00, those impressions go unfilled. Use dynamic floor pricing that adjusts by geo, device, and time of day. Start at 50% of average eCPM and adjust based on fill rate data.
How can I increase my ad fill rate quickly?
The fastest fixes are: update your ads.txt with all demand partner entries, lower floor prices temporarily, add more demand sources via header bidding, fix consent management for EU traffic, and add a backfill network. A managed platform like WeForAds handles all of these automatically and typically achieves 95%+ fill rate from day one.
Tired of Empty Ad Slots?
WeForAds achieves 95%+ fill rate with 10+ demand partners, dynamic floor pricing, and automatic backfill. One tag, no unfilled impressions.
Get Started Free
By