Shape
What happened during each period
Chart · Ads
Ad fill rate is the share of ad requests that returned an ad. RevenueDot divides ads loaded by ads loaded plus ads that failed to load, using the events the SDK sends. A fill rate of 80% means 8 of every 10 requests got an ad. If there are no requests in a period, the rate is blank.
Formula
Fill rate = ads loaded ÷ (ads loaded + ads that failed to load) × 100
Shape
What happened during each period
API name
ad_fill_rate
Measures
Fill Rate (Percent)
Filter and segment by
App, Country, Platform, App version
Definition
RevenueDot counts two event types: rc_ads_ad_loaded for ads that loaded and rc_ads_ad_failed_to_load for ads that did not. Ad requests are the sum of the two, and fill rate is loaded divided by requests, shown as a percent with one decimal. The table also lists Ad Requests and Filled Requests, which are not plotted.
Only requests that report one of the two events count. A request that never reports back is not in the number. The chart does not split failures by error reason, even when the failed event carries an error code from the ad network. A week or a month is the ratio of that period's totals.
Your SDK ad tracking sends the events to RevenueDot's /v1/events endpoint, from an ad network adapter or by manual capture. Sandbox events are excluded. Filter or segment by app, country, platform and app version.
Find it in the dashboard under Analytics > Charts, or call GET /v2/projects/{project_id}/charts/ad_fill_rate. The response has the same shape as RevenueCat's Charts API.
Worked example
Illustrative numbers for one day.
| Item | Value |
|---|---|
| Ads loaded | 9,000 |
| Ads that failed to load | 1,000 |
| Ad requests (loaded + failed) | 10,000 |
Fill rate = 9,000 ÷ 10,000 = 90.0%.
Why it matters
A request without an ad earns nothing. A low fill rate means you have users and screens ready to show ads and no ads to put in them, which is revenue you can win back by adding a network, changing a mediation order or fixing a timeout.
Segment by country and app version to find where fill is low. A drop in one country points to demand. A drop in one app version points to a bug in your ad integration. Read it with eCPM, because fill and price together set ad revenue.
API
Same path and response shape as RevenueCat's Charts API, so existing scripts keep working.
curl "https://api.revenuedot.app/v2/projects/$PROJECT_ID/charts/ad_fill_rate?resolution=day" \
-H "Authorization: Bearer $SECRET_KEY" # sk_... with charts_metrics:charts:read Reference: Charts guide · REST API v2
FAQ
Divide the ads that loaded by all ad requests, which is ads loaded plus ads that failed to load, and show it as a percent. RevenueDot uses ad loaded and ad failed-to-load events from your SDK.
It depends on country, ad format and network, so RevenueDot does not publish a benchmark. Watch your own trend by country and app version, and look into sudden drops.
Fill rate is about requests: how many returned an ad. Impressions count ads that were displayed. A loaded ad may never be shown.
The period has no loaded or failed events, so there are no requests to divide. Check that your SDK sends both event types.
Yes. A request that returns no ad cannot earn revenue, so low fill limits revenue even when eCPM is high.
Get started
Connect your app to RevenueDot Cloud, free up to $10,000 a month in tracked revenue, and all 43 charts fill from your store history after import.
Already have an account? Sign in · Prefer your own servers? Self-host free