◉GEMINI LABJP
●ARGON — gemini-4-argon is generally available as of 10/13, aimed at complex coding, agents, math and science●DEEP RES — deep-research-pro-preview-12-2025 shuts down 10/23, 6 days left. Move to deep-research-preview-04-2026●NANO — gemini-nano-banana-2.1 is GA (10/06). gemini-3.1-flash-image is deprecated with no shutdown date yet●MCP — One write-up cut an 85,000-token tool result to 310 tokens by wrapping it in an ADK FunctionTool●FLASH — gemini-3.7-flash and 3.5-flash now route automatically to newer Flash models (10/08)●NEW — Stop Re-Reading Every Crash Report: Gre…●ARGON — gemini-4-argon is generally available as of 10/13, aimed at complex coding, agents, math and science●DEEP RES — deep-research-pro-preview-12-2025 shuts down 10/23, 6 days left. Move to deep-research-preview-04-2026●NANO — gemini-nano-banana-2.1 is GA (10/06). gemini-3.1-flash-image is deprecated with no shutdown date yet●MCP — One write-up cut an 85,000-token tool result to 310 tokens by wrapping it in an ADK FunctionTool●FLASH — gemini-3.7-flash and 3.5-flash now route automatically to newer Flash models (10/08)●NEW — Stop Re-Reading Every Crash Report: Gre…
Articles/API / SDK
◈ API / SDK/2026-05-20Advanced

Surfacing AdMob Floor Price Candidates from Weekly Reports with Gemini 2.5 Pro — A Six-App Indie Operations Note

A practical pipeline for moving AdMob floor price tuning from gut feel to data, using Gemini 2.5 Pro to read weekly CSV exports. Notes from operating six wallpaper apps in parallel, with Function Calling to produce structured candidate values.

Gemini 2.5 Pro17AdMob9MediationFloor PriceIndie Developer13CSV AnalysisFunction Calling17

✦ Premium Article

The first thing that surprised me about AdMob floor prices was how long it takes to know whether an adjustment was a good one. A week is the minimum honest window, and even that often gets contaminated by seasonality or weekday effects. Move floors too aggressively and you mistake noise for signal. Leave them alone and you let bidders win cheaply on impressions that should have been priced higher. Running six apps in parallel as an indie developer, I watched AdMob mediation get quietly more involved over time. Manually pawing through weekly CSV exports stopped scaling, so I shifted the floor-price reading work over to Gemini 2.5 Pro — not to have the model decide, but to have it lay out the same decision material in the same shape every week.

These notes describe the implementation I actually use to feed AdMob CSV exports into Gemini 2.5 Pro and get structured floor price candidates back. Because the ad network's eCPM numbers are inherently a black box, the goal is not to ask AI to produce the optimal value. The goal is much smaller: produce the same comparison table every week in the same shape, so a human can read it quickly and decide.

Why "gut feel" on floors loses precision over time

An AdMob floor price tells each ad unit (or each bidding participant) "skip bids below this number." Setting it does not produce instantly observable change. You need enough auction volume to accumulate before fill rate and eCPM both start moving. From the wallpaper apps I operate (DAU in the low thousands to low tens of thousands), the rules of thumb I have built up empirically look like this.

  • Raising a floor by 30% on rewarded units typically drops fill rate by 5 to 10 percentage points and lifts eCPM by tens of percent. The variance by unit and by country is wide
  • Set the floor too low (or leave it unset) and some bidding networks come in extremely cheap, dragging median eCPM down
  • Within one app, Open Ads, Interstitial, and Rewarded each have a different sensitivity. Open Ads has thinner demand, so raising the floor too far breaks fill quickly

Keeping all that in your head while you reconcile six apps multiplied by three or four units multiplied by five to ten major countries every week is, in practice, impossible. Color-coding a spreadsheet only takes you so far before something slips. A human still has to decide what to observe; Gemini can do the observing.

What weekly viewing looks like across six apps

Every Monday morning I download fourteen days of metrics from the AdMob console in two slices. One slice is at ad unit granularity, the other at country granularity. That produces six apps times two slices, or twelve CSV files, which I park in a dated folder like ~/admob-weekly/2026-05-20/. Before any of it touches Gemini, I open one or two CSVs by eye to make sure no unfamiliar column has appeared in the export.

Past floor changes live separately in floor-history.csv, which I edit by hand. The columns are simply date, app_id, ad_unit, country, old_floor, new_floor, reason. This file is the anchor that lets me tell Gemini "only treat last week's changes as a possible explanatory factor." The idea is to feed the model context I have committed to, rather than letting it invent reasons.

~/admob-weekly/
├── 2026-05-20/
│   ├── kabegami_lite_iOS_ad_unit.csv
│   ├── kabegami_lite_iOS_country.csv
│   ├── kabegami_lite_Android_ad_unit.csv
│   ├── kabegami_lite_Android_country.csv
│   ├── ...(remaining four apps x two OSes x two slices)
│   └── floor-history.csv
└── 2026-05-13/
    └── ...
✦

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
✦Concrete implementation that extracts eCPM dips from AdMob weekly CSVs with Gemini 2.5 Pro and emits structured floor price candidates
✦Real-world numbers for eCPM, fill rate, and ARPDAU from operating six wallpaper apps in parallel, with a candid view of what changed and what didn't
✦Function Calling pattern that returns 'next floor to try' and 'units to hold' as JSON, ready to feed into a Slack approval flow before AdMob console edits
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

Gemini 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

◈ API / SDK2026-05-26
Running Gemini 3 Pro and Flash in Parallel on AdMob Monthly Reports — Notes from Ten Mornings
Implementation notes from sending the same AdMob monthly report to Gemini 3 Pro and Gemini 3 Flash in parallel for ten days. Cost, latency, and summary quality compared from an indie developer's perspective.
◈ API / SDK2026-04-26
Production-Ready Function Calling with Gemini 2.5 Pro API — Realistic Patterns for Failures, Timeouts, and Hallucinations
Gemini 2.5 Pro's Function Calling is powerful, but it tends to land in 'works, but does odd things sometimes' territory in production. Here are the design patterns I arrived at running search, reservation, and notification agents.
⬡ Advanced2026-05-28
Three Weeks of Running Gemini 3 Pro and 2.5 Pro Side by Side on Wallpaper Category Classification — An Implementation Memo
Notes from running Gemini 3 Pro and 2.5 Pro in parallel for three weeks on the image classification pipeline of my iOS and Android wallpaper apps — cost, accuracy, and latency observations from an indie developer.