◉ANTIGRAVITY LABJP
Articles/Agents & Manager
◈ Agents & Manager/2026-05-27Intermediate

Running 50+ AdMob Mediation Groups Alone: Four Tasks I Handed to an Agent, Four Decisions I Kept

Two wallpaper apps on iOS and Android put me past 50 AdMob mediation groups. Here are the four tasks I handed to an agent, the four decisions I kept, and the sample-size hole I later found in the evaluation code I had published.

agents144admob17mediation7automation95indie-dev20ai-tools16

✦ Premium Article

Across my two wallpaper apps on iOS and Android, I now run more than 50 AdMob mediation groups. BW iOS has 28, BW Android 14, UKI iOS 16, UKI Android 6. One mediation per app multiplied into this many after App Tracking Transparency (ATT) ON/OFF splits and regional splits piled on.

The time I spent each morning opening AdMob reports and nudging floor values by hand kept creeping up. One morning my coffee went cold while I scrolled the same screen, and it struck me that the problem was not the volume of work — it was that I had never written down the procedure. So over the following month I drew a line between what an agent can run and what I refuse to delegate.

If you are an indie dev with 10+ mediation groups, the tweaks are eating non-trivial time, and you'd like to put an agent in the loop without losing revenue, this is written for you.

Why the group count grew this far

Before the agent discussion, a quick map of how I ended up at 50+. Modern AdMob mediation practice splits groups along three axes: ATT ON/OFF × top countries × format (INT/BNR/RWD/RWI/AOA). For BW iOS interstitials, the split looks like:

  • BW-INT-iOS-JP-ATT-ON / OFF
  • BW-INT-iOS-TW-ATT-ON / OFF
  • BW-INT-iOS-US-ATT-ON / OFF
  • BW-INT-iOS-IT-ATT-ON / OFF
  • BW-INT-iOS-DE-ATT-ON / OFF
  • BW-INT-iOS-HK-ATT-ON / OFF
  • BW-INT-iOS-ROW-ATT-ON / OFF

7 regions × 2 ATT values = 14 groups for one format on one platform. Add BNR / RWD / RWI / AOA and you cross 30 per platform, 60+ across both OS. Realized eCPM ranges from $1 to $34 across groups, each with its own optimal floor.

A "floor" here is the minimum eCPM across the full bidding + waterfall stack. Raise the floor and unit price climbs but match rate falls. Lower it and the inverse. My rule of thumb: floor = realized eCPM × 50–60%; revisit when the floor-to-eCPM ratio crosses 65%.

Tasks I now hand off — the four I let an agent run

After a month of experiments, the four tasks I trust an agent with are these.

The first is match-rate monitoring. The agent opens the AdMob report at a 30-day window and aggregates ad requests, impressions, match rate, and estimated revenue per group. I issue this style of instruction:

On the AdMob report:
1. Window: last 30 days
2. Dimensions: app + mediation group
3. Metrics: ad requests, impressions, match rate, estimated revenue
4. Filter: groups with matchrate < 80% only
5. Output: group name / current floor / realized eCPM /
   floor-to-eCPM ratio / ad request count / recommended action

The agent pulls the data via API or CSV export and returns a table. I read the table and decide "keep JP, adjust ROW." Aggregation dropped from 30 minutes to 3 minutes.

The second is floor-to-eCPM ratio checks. Trivial math, but the place where humans make small errors at scale:

def evaluate_floor(group_name, current_floor, ecpm_30d, matchrate):
    """Score the relationship between floor and realized eCPM."""
    ratio = current_floor / ecpm_30d
    if matchrate < 0.80:
        if ratio > 0.65:
            return f"{group_name}: ratio={ratio:.2%} — candidate to lower (matchrate {matchrate:.0%})"
        return f"{group_name}: ratio={ratio:.2%} — likely demand shortage (floor not the cause)"
    if ratio > 0.65:
        return f"{group_name}: ratio={ratio:.2%} — ratio high but matchrate OK, hold"
    return f"{group_name}: healthy"
 
# Expected output:
# BW-INT-AND-JP: ratio high but matchrate OK, hold
# BW-INT-AND-DE: ratio=88.96% — candidate to lower (matchrate 56%)

There are two holes in this function that I only found later. I fix both in a section further down, so read on with this version as it stands.

The third is operations-log updates. Every floor change gets appended to admob-mediation-unified.md with date, group ID, before → after, and reason. I describe the change out loud; the agent files the entry. The asset is being able to ask future-me, "why did I lower the JP floor from $15 to $12 on 2026-05-17?" and getting an answer in seconds.

The fourth is applying the "half rule" for AppLovin MAX. When AppLovin MAX joins a waterfall already running Unity Ads, I set AppLovin's manual eCPM to half of Unity's. Unity at $8.50 → AppLovin $4.25; Unity at $5.00 → $2.50. Computing 20 groups by hand will produce at least one error.

Read the Unity floor column below. Compute the AppLovinMax waterfall
floor at half. Output a paste-ready number-only list for AdMob's edit
screen. For BNR groups, ignore the Unity value and output a fixed $0.15.
 
| Group ID | Unity floor (waterfall) |
| BW-INT-AND-JP (8292611016) | $8.50 |
| BW-INT-AND-KO (5982272500) | $5.00 |
| ... |

The output goes directly into AdMob's edit screen. Ten groups in under a minute, and the error rate of manual arithmetic disappears.

✦

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
✦You can add a hold rule to your own evaluation code so small-region groups are not changed on noisy numbers
✦You can write the rollback condition into your ledger first, so a seasonal swing is not mistaken for your own win
✦You can sort your own mediation chores into what an agent may run and what you must keep, before trying to shrink the monthly review
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 $15 for lifetime access
View Membership →

Related Articles

◈ Agents & Manager2026-05-12
What I Delegated to an AI Agent — And What I Should Have Kept
Delegating production work to an Antigravity agent taught me where the line sits between what an agent should own and what I have to decide myself. Here's the framework — and the gate script — I now use before handing off any task.
◈ Agents & Manager2026-04-20
Building a Business Automation Agent with Antigravity × Google Workspace API — Gmail, Drive, Sheets and Docs in Production
Learn how to build AI agents that automate Gmail responses, generate documents from Drive templates, and create intelligent Sheets reports using Antigravity, Google Workspace APIs, and Gemini.
◈ Agents & Manager2026-09-09
When an Antigravity Scheduled Task Never Runs: Check sidecar.json, Then enabled, Then the Logs
A checking order for Antigravity 2.0 Scheduled Tasks that quietly do nothing: where sidecar.json lives, how the directory name becomes the ID, the enabled flag in config.json, and the logs under sidecar_data.
📚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