ANTIGRAVITY LABJP
Articles/Integrations
Integrations/2026-05-30Advanced

Diagnosing AdMob Mediation Fill Rate with an Antigravity Agent — A Memo on the Revenue I Lost Chasing eCPM Alone

When AdMob mediation revenue stalls, the cause is usually fill rate, not eCPM. This memo walks through a diagnostic pipeline that lets an Antigravity agent read your BigQuery export and Firebase metrics to isolate per-network fill rate drops automatically, with real numbers from indie development.

AdMob12mediation6fill-rateeCPMAntigravity338monetization31

Premium Article

On the AdMob dashboard, eCPM is up month over month, yet month-end revenue is somehow down. I have been shipping apps as an indie developer since 2014, and across the wallpaper apps that make up most of my roughly 50 million cumulative downloads, this "the numbers look good but I'm not earning" trap has caught me more than once. The culprit was almost never eCPM. It was the much quieter fill rate.

eCPM tells you the unit price of an ad that was shown. It says nothing about whether an ad was shown at all. When you run mediation across several networks, one network's fill rate can drift downward in silence: requests keep going out, but more and more of them come back empty. Stare at the eCPM graph alone and this hole stays invisible.

So I built a setup where an Antigravity agent reads my AdMob metrics every morning and isolates fill rate anomalies network by network. Here is the design and implementation of that diagnostic pipeline, including the places I tripped over.

Fill rate and eCPM tell different stories

Let me first untangle two metrics that are easy to conflate. In AdMob mediation, a single ad slot runs through this flow: the app requests an ad (request), mediation polls each network in order, one of them returns an ad (match), and it is actually shown on screen (impression).

Fill rate (match rate) is match ÷ request — the share of requests that came back with an ad. eCPM is revenue per 1,000 impressions, so its denominator is impressions. That is the crux: eCPM never counts the requests that failed to fill.

Consider a concrete case. A network can have a high eCPM of ¥800, but if its fill rate has slipped to 40%, the real revenue per 1,000 requests works out to only about ¥320. Meanwhile a network at ¥500 eCPM with 90% fill rate earns roughly ¥450 per 1,000 requests. If you set your waterfall priority by eCPM ranking alone, you place the former above the latter and leak revenue. That is exactly the mistake I made first.

This is why the diagnostic agent needs to surface an effective rate that multiplies eCPM by fill rate, broken down by network, hour, and country. Tracking that by hand on the AdMob dashboard every day is not realistic. That is where the agent earns its place.

What to feed the diagnostic agent — designing the data sources

The first decision is the data source. You could scrape the AdMob dashboard, but for stability I combine AdMob's BigQuery export (the mediation schema) with Firebase Analytics metrics.

My guiding principle is simple: pull the raw numbers from a structured source, and let the agent handle only the prose interpretation. If you make the agent read HTML and pick out numbers, you invite digit errors and missing values. Fetch the figures with deterministic code, and delegate only "how should I read this number" to the agent. That is the conclusion I reached in practice.

Specifically I bind three things. From the AdMob BigQuery table, daily per-network request / match / impression / estimated_earnings. From Firebase, per-app DAU and ad impression event counts. And my own waterfall configuration (which networks are ordered in what sequence), held in YAML as material for the agent's judgment.

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
For a wallpaper app where eCPM is high but revenue won't grow, learn to have an Antigravity agent isolate per-network fill rate drops and pinpoint the cause in about fifteen minutes
Take home a working Python implementation that binds AdMob's BigQuery export and Firebase metrics into a single agent tool and reads impression / request / match rate every morning
Learn exactly where to draw the line between what the agent decides and what you decide, from a revenue mistake I actually made in production
Secure payment via Stripe · Cancel anytime

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Antigravity Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • Copy-paste ready implementation code
  • New advanced guides published daily
  • $5/mo or $10 for lifetime access
View Membership →

Related Articles

Integrations2026-06-09
Rebuilding Wallpaper Image Delivery Around Resolution Buckets — Letting an Antigravity Agent Own Conversion and Validation
Every new device resolution quietly makes a wallpaper app heavier. I stopped shipping one master image to every device and rebuilt delivery around resolution buckets, WebP/AVIF, and an edge redirect — then handed conversion and validation to an Antigravity agent. Real code and thresholds included.
Integrations2026-05-24
Six Weeks of Letting an Antigravity Background Agent Watch the Drift Between AdMob and Remote Config
A six-week field report on handing weekly AdMob and Firebase Remote Config diffs to an Antigravity Background Agent, with the drift cases it actually caught and the operational boundaries I ended up drawing.
Integrations2026-05-23
Apple Search Ads × Antigravity Agent: Autonomous Keyword Bid Tuning Notes from an Indie iOS Studio
How I delegated Apple Search Ads keyword bidding to Antigravity sub-agents for a 50M-download wallpaper app portfolio. JWT auth, ROAS / CPI bid policy, and a Crashlytics-driven safety net.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links
See all →