●TOOLING — Rork's developer repos keep moving: rork-xcode was updated on July 16, rork-device on July 15, and rork-plist on July 13●OPUS46 — Claude Opus 4.6 is live in Rork, and Rork Max is built to assemble apps on top of Claude Code●SIM — A cloud iOS simulator runs in the browser, with one click to install on a device and two clicks to publish to the App Store●MAX — Rork Max emits pure Swift rather than React Native, reaching iPhone, iPad, Apple Watch, Apple TV, Vision Pro, and even iMessage●NATIVE — That opens up HealthKit, ARKit and LiDAR, NFC, Dynamic Island, Live Activities, 3D through Metal, and on-device inference with Core ML●SEED — Rork raised a $15M seed led by Left Lane Capital, with Peak XV and a16z Speedrun joining the round●TOOLING — Rork's developer repos keep moving: rork-xcode was updated on July 16, rork-device on July 15, and rork-plist on July 13●OPUS46 — Claude Opus 4.6 is live in Rork, and Rork Max is built to assemble apps on top of Claude Code●SIM — A cloud iOS simulator runs in the browser, with one click to install on a device and two clicks to publish to the App Store●MAX — Rork Max emits pure Swift rather than React Native, reaching iPhone, iPad, Apple Watch, Apple TV, Vision Pro, and even iMessage●NATIVE — That opens up HealthKit, ARKit and LiDAR, NFC, Dynamic Island, Live Activities, 3D through Metal, and on-device inference with Core ML●SEED — Rork raised a $15M seed led by Left Lane Capital, with Peak XV and a16z Speedrun joining the round
I Turned Off My AdMob Floors and Revenue Collapsed — The Mediation Rules That Actually Worked Solo
A record of tuning AdMob mediation eCPM floors to real-world rates on an indie wallpaper app, and handling the end of Unity Ads waterfall support. Why you must not turn INT floors off, the 80% match-rate boundary, and a twice-monthly review routine.
When you run wallpaper apps solo, ad revenue is never something you set once and forget. Leave it alone, and one day's casual settings change can quietly eat into your earnings. Last month that was exactly me: my estimated interstitial revenue visibly dropped, and it took several days to track down the cause. The culprit was a single change I had added thinking it would help. This article is about the judgment rules around "how to touch mediation floors" that solidified during that recovery.
To put the conclusion first: the rule that helped most was a single line — "never turn floors off." At a glance, removing the floor (the minimum eCPM) seems like it would let inventory sell more easily and increase revenue. In reality, the opposite happened.
The time I turned floors off and revenue collapsed
As preparation for adding a new ad network to mediation, I once temporarily removed all eCPM floors from my AdMob interstitial groups. I thought "floors might block bids from the new network," but that was wrong.
Turning floors off removes the minimum-eCPM brake across all of mediation, including bidding. As a result, inventory started clearing even on cheap bids; impressions rose, but the price per impression collapsed, and estimated revenue actually went down. A floor is not "a wall that blocks new networks" — it is "a floor that asserts a minimum price against every network." Once I realized this, I restored floors based on real-world rates and revenue returned to its previous level.
The official docs say "you can set a floor," but they do not say "what happens if you turn the INT floor off." This was a pitfall I only understood by stepping into it.
Set the floor at 50-60% of real eCPM
So what value do you set? The rule of thumb that solidified while running 42 groups is: INT floor = trailing-30-day real eCPM x 50-60%.
For example, in a region where real eCPM is around $16, I put the floor near $8.5. In a region at $10, around $5-$6. If the ratio of floor to real eCPM climbs above 65%, the floor may be too high and squeezing match rate, so I review it. Conversely, if it drops below 40%, I judge that I can push a little harder with little lost fill.
The quick-reference table I keep on hand looks roughly like this. Real eCPM varies a lot by region, so the point is to think in ratios rather than fixed dollar amounts.
Region real eCPM (trailing 30 days)
INT floor target (50-60%)
Operating note
~$16 (high-rate regions)
~$8.5
Above a 65% ratio it tends to squeeze match rate
~$10 (mid-rate regions)
$5-$6
Baseline. Fine-tune within +/-30%
~$4 (low-rate regions)
~$2
If the ratio dips below 40%, you can push a bit
Banners generally ($0.10-$0.30)
OFF
A floor here drops fill rate
What matters here is not applying the same logic to banners. Banner real eCPM is low, $0.10-$0.30, and setting a floor drops fill rate badly. I keep banner floors off across all groups and leave them to Google's automatic optimization. Changing policy per format turned out to be the realistic answer in production.
✦
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
✦Turning INT floors off removes the minimum eCPM across all of bidding and collapses revenue — I share the judgment mistake I actually made and how I recovered
✦Take away the concrete thresholds that solidified over running 42 groups: floor = 50-60% of real eCPM, 80% match rate as the investigation boundary, and changes capped at +/-30%
✦See how I handled Unity Ads waterfall support ending on January 31, 2026, and how I run a twice-monthly floor review in about 15 minutes
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.
For the daily health check, I watch match rate as one indicator. In my operation, any group whose match rate falls below 80% becomes an investigation target.
If the floor is causing the low match rate, lower the floor
If the floor is off and match rate is still low, that is not a floor problem but a demand shortage (a region or format problem)
Being able to make this split avoids the reflexive "just lower the floor" response. For a group at 94% match rate with a high floor ratio, I sometimes deliberately hold. Groups with fewer than 20 impressions a month have thin data, so it is also important to skip them rather than be jerked around by the numbers.
Cap each change at +/-30%
When I move a floor, I keep each change within +/-30% of real eCPM. Doubling or halving in one step disrupts mediation's learning and makes it impossible to evaluate whether the change was good.
# Floor adjustment decision flow (pseudocode)ratio = floor / ecpm_30d # floor ratioif match_rate < 0.80: if floor_is_on and ratio > 0.60: floor = ecpm_30d * 0.55 # too high -> 55% of real else: investigate("demand") # suspect demand shortageelif ratio < 0.40: floor = min(floor * 1.30, ecpm_30d * 0.55) # raise, capped at +30%else: hold() # ratio 50-60% -> HOLD
Just running this loop — "look at the ratio, stay within +/-30%, converge toward 50-60%" — quietly keeps floors from drifting. Operations that avoid chaos beat flashy optimization.
Handle the end of Unity Ads waterfall
The big one entering 2026 was that Unity Ads waterfall support in AdMob mediation ended on January 31, 2026. This pushes a move to bidding; the waterfall slots structurally stop serving.
In my case, I was slow to notice and kept Unity Ads waterfall rows across all 20 Android groups. I only realized something was wrong when about 85,000 requests over seven days returned almost zero fill, then investigated and learned support had ended. As a fix, I stopped the waterfall rows in every group and switched to monitoring Unity Ads on bidding only.
The lesson: mediation is not "set it once and you are done"; you have to keep tracking changes to each network's delivery model. Zero delivery means zero revenue, yet it is hard to notice when you only look at dashboard totals. You need a habit of regularly viewing fill by network and by format. The details are in the official AdMob Unity Ads mediation integration docs.
Reduce it to a twice-monthly, 15-minute review
Finally, I turn these judgment rules into a recurring task. Twice a month, I review floors with this procedure — about a minute per group, roughly 15 minutes total.
Open "ad activity (mediation)" in AdMob reports over the trailing 30 days
Set dimensions to app + mediation group, with impressions, match rate, and estimated revenue as metrics
Extract groups below 80% match rate
Check each group's floor ratio (floor / real eCPM)
If the ratio is over 60% with falling match rate, adjust the floor toward 55% of real, within +/-30%
Just running these five steps keeps the floors of 42 groups from diverging from reality. Rather than launching one flashy optimization, never skipping the plain monthly inspection keeps indie ad revenue far more stable. Some months I resist the urge to touch the floors at all and just read the ratios, and that restraint is often what works best.
At the start of next month, try simply extracting only the groups below 80% match rate. That alone makes it clear where you need to act right now.
Share
Thank You for Reading
Rork 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.