Fill rate is the share of ad requests inside your AI chat app that come back with a paid ad instead of nothing — and every unfilled request is a conversation you monetized for free. This guide walks through the exact levers that move fill rate up in 2026, from mediation setup to context matching to price floors.
- Improve fill rate for AI chat ads by mediating 3+ networks instead of running one — single-network setups leave conversations unmonetized.
- Elo's context matcher pairs ad category to chat intent before the request fires, which cuts no-fill responses without adding banner clutter.
- Loosen category eligibility rules before you touch price floors — floors kill fill rate faster than they protect revenue per unit.
- Test SDK changes in staging for at least 14 days before shipping a fill-rate fix to production.
- Adopt mediation first, tune floors second: reversing that order is the most common mistake chat app publishers make in 2026.
Why fill rate is the metric that decides your ad revenue
A chat app that sends every ad request to a single network is running a coin flip, not an ad program. If that one advertiser has no budget left, no matching category, or a bid below your floor, the request comes back empty and the conversation earns nothing. Setting up ad mediation across multiple networks is the single fastest way to raise fill rate, because a waterfall lets a second or third bidder catch what the first one missed.
Publishers running AI chat apps in 2026 face a different inventory problem than mobile app publishers did a decade ago: the ad has to fit a live conversation, not a static screen. That's why fill rate for conversational ads depends as much on matching quality as on the number of networks in the waterfall. Elo's adserver was built around that constraint — contextual matching first, mediation second, native card rendering last.
What you'll need
- An SDK already integrated into your chat app (OpenAI, Anthropic, or custom LLM backend)
- Access to your ad mediation dashboard or event logs to see current fill rate by request
- At least one active ad network account beyond your primary one
- A staging environment to test changes before pushing to production
- 14 days of clean baseline data before you start changing settings
The steps
1. Diagnose your current fill rate baseline
Pull your last 14 days of ad requests and count how many returned zero ads versus a paid one. Do this by conversation category if your dashboard supports it — fill rate on a fitness-app chatbot looks nothing like fill rate on a finance one. A flat, aggregate number hides which conversation types are actually underperforming, and you'll waste time fixing the wrong thing without this breakdown. Common mistake: comparing fill rate across weeks without accounting for weekday-versus-weekend traffic mix, which skews the number by user intent alone.
2. Add a mediation waterfall with multiple ad networks
A waterfall sends the request to a second or third network when the first one passes. Three to five networks in the waterfall is typical for recovering impressions a single network would have dropped, because different advertisers have different budgets, categories, and geo coverage active at any given moment. Configure the waterfall so the highest-paying eligible network gets first look, then cascade down — not randomly, but by expected revenue per request. Common mistake: stacking five networks with identical targeting, which adds latency without adding real fill.
3. Tighten context matching so ads fit the conversation
Matching ads to conversation context sounds like a UX feature, but it's a fill rate lever too — an ad matcher that's too narrow rejects eligible inventory before it even reaches the network. Loosen category taxonomy one level (from "running shoes" to "athletic footwear," for example) and you widen the pool of advertisers who can bid, without making the ad feel out of place. Common mistake: hand-tuning match rules per conversation type instead of letting the matcher generalize, which creates dozens of narrow buckets each with too little volume to fill reliably.
See how Elo's matcher works
Twelve lines of code connects context matching and mediation in one SDK.
4. Loosen inventory eligibility rules without breaking brand safety
Every excluded category, blocked advertiser, or frequency cap you set is inventory you've taken off the table. Audit your exclusion list and remove rules that were set defensively rather than for an actual incident — a blanket exclusion on an entire vertical because of one bad ad in 2025 is probably costing you fill rate in 2026 for no current reason. Keep hard exclusions (adult content, competitors, anything genuinely unsafe) and drop the rest. Common mistake: never revisiting exclusion lists after the first month of launch.
5. Set realistic price floors
A floor that's too high rejects every bid below it, and that's the single biggest silent killer of fill rate. Start with no floor or a near-zero floor for your first 30 days, watch the actual CPMs that clear, then set the floor at or just below your median clearing price — not at your target price. Common mistake: setting the floor based on what you want to earn instead of what the market is actually bidding.
6. Test SDK integration before shipping fixes
Before any fill-rate change goes live, test the ad SDK integration in staging against real conversation samples, not synthetic test prompts. A mismatch between how your app renders the ad card and how the SDK expects to inject it will show up as a fill-rate drop that has nothing to do with your mediation or matching settings — it's a rendering failure being misread as a demand problem. Run it for at least 14 days of staging traffic before promoting to production. Common mistake: shipping a config change and a UI change in the same release, which makes it impossible to isolate which one moved the number.
7. Monitor and iterate with revenue-per-user data
Fill rate on its own doesn't tell you if you're making money — a 95% fill rate at a $0.02 CPM loses to 70% fill at a $1.50 CPM. Measuring ad revenue per user alongside fill rate tells you whether your changes actually helped. Review both numbers weekly for the first two months after any change, then monthly once the setup stabilizes. Common mistake: optimizing fill rate in isolation and discovering three months later that RPM actually dropped.
Troubleshooting
- Fill rate is fine overall but drops on niche topics (legal, medical, personal finance): these categories have fewer eligible advertisers by default. Widen the matcher's category taxonomy for these specific topics rather than lowering the global floor.
- Ad requests time out before a bid comes back: check network response latency in your mediation logs. A network consistently responding slower than the others should move further down the waterfall, not stay first.
- Fill rate dropped right after a price floor change: this is the most common cause of a sudden drop. Roll the floor back to the last known-good value and re-test in smaller increments.
- Consent or region rules are blocking eligible users: GDPR and similar frameworks can exclude a meaningful share of EU traffic from ad requests entirely if consent isn't captured correctly — check your consent flow before assuming it's a demand problem.
- Frequency capping is too aggressive: capping ads at one per session might feel safe, but if it's set app-wide instead of per-user, it can suppress fill rate for returning users who'd otherwise see a second relevant ad.
- New ad network added but fill rate barely moved: the network may have thin coverage in your traffic's geo or vertical. Give it two weeks of real volume before judging it — some networks ramp bidding slowly.
Tools and resources
- Your SDK's event logs, filtered by request outcome (filled, no-fill, error)
- A staging environment separate from production for every fill-rate change
- Mediation dashboard reporting broken out by network, not just aggregate
- A consent management flow that logs region and opt-in status per request
- A/B testing capability so floor and matching changes can be isolated from each other
What to do next
Fill rate improves fastest when mediation, context matching, and pricing move in the right order — mediation first, matching second, floors last. Once fill rate stabilizes above your baseline, shift attention to revenue per user, since that's the number that actually pays the bills in 2026.
FAQ
How do I improve fill rate for AI chat ads?
Add a mediation waterfall of 3-5 ad networks, loosen overly narrow context matching, and set price floors based on actual clearing CPMs instead of target revenue. Single-network setups are the most common cause of low fill rate in 2026 chat apps.
What causes low fill rate in AI chat ads?
The three most common causes are running only one ad network, a price floor set above what the market actually bids, and a context matcher with categories too narrow to find eligible advertisers. Consent-blocking flows in regulated regions cause it too.
How many ad networks should I use for mediation?
Three to five networks in a waterfall typically recovers impressions a single network would drop. More than five usually adds latency without meaningfully improving fill.
Does context matching affect fill rate?
Yes — a matcher that's too strict rejects eligible inventory before it ever reaches the ad network. Widening category taxonomy by one level usually increases fill without making ads feel out of place.
What's a good fill rate benchmark for AI chat apps?
There's no universal number, since it depends on vertical and traffic mix, but a mediated waterfall of 3+ networks should outperform a single-network setup by a wide margin within the first 30 days.
Can GDPR consent rules lower fill rate?
Yes. If consent isn't captured correctly, a meaningful share of EU traffic can be excluded from ad requests entirely, which shows up as a fill rate drop that has nothing to do with demand.
How do I test ad SDK changes before they hurt fill rate?
Run the change in a staging environment against real conversation samples for at least 14 days before promoting to production, and change one variable at a time so you can isolate what moved the number.
Should I optimize for fill rate or revenue per user?
Revenue per user matters more — a 95% fill rate at a low CPM can lose to a 70% fill rate at a high CPM. Track both together, not fill rate alone.
One last thing
The fastest fill-rate win most teams skip: auditing exclusion lists set during launch and never touched again. A category blocked defensively in the first month, for a problem that never recurred, is often the single largest chunk of unsold inventory a chat app carries into its second year.



