◉ANTIGRAVITY LABJP
Articles/App Development
▣ App Development/2026-05-21Advanced

Tuning AdMob Placements at Runtime with Firebase Remote Config and an Antigravity Agent

A practical look at how I combine Firebase Remote Config with an Antigravity Agent to nudge AdMob placements while the app is live, drawn from years of running wallpaper apps as an indie developer.

Antigravity386Firebase6AdMob12Remote ConfigIndie Dev5Monetization7

✦ Premium Article

Every time I nudged an ad setting, I spent the following week bracing for the numbers. On the wallpaper apps I have run the longest, that round trip was quietly eating more of my time than the actual building. Inch the App Open, interstitial, and rewarded frequencies in the AdMob dashboard. Check Day 1 retention in the Firebase Console. Check eCPM. Check IAP conversion. Some months I spent more hours watching those dials than writing features.

For the past few months I have been pulling that work apart and reassembling it as a small, safe nightly tuning loop built around Antigravity's Agent and Firebase Remote Config. The parts that work give me real confidence, and the boundaries where I have decided not to let the Agent in have become much clearer. Below is the setup itself, the auto-revert that keeps a bad call from sitting live for 40 hours, and six months of measured results — from apps that already earn real money, not a greenfield project.

The catalyst: a 2% Day 1 dip I could not explain

The trigger was last fall's release. I changed App Open frequency from "once per session" to "suppress on Day 0, unlimited from Day 1 onward." Within a week, Day 1 retention in Firebase Analytics dropped from 33% to 31%. On an app where daily launches add up the way these do, two points matter.

MetricBefore (7-day avg)After (7-day avg)Delta
Day 0 → Day 1 retention33.4%31.2%-2.2pt
Interstitial eCPM$4.12$4.05-1.7%
App Open eCPM$2.85$3.91+37.2%
Daily ad revenue$1,820$1,910+4.9%

Short-term revenue went up. The catch was that the retention dip ate into LTV, and three months later the ad revenue had reversed and was sliding. I had bundled three other changes into that release, so I could not tell which knob had moved the needle. I ended up rolling the whole app back to the previous version and rolling back the ad units in the AdMob dashboard by hand. The three days I spent waiting on App Store and Google Play review cost an estimated $5,000 in lost ad revenue.

Sitting on that loss as a single-person operation, the lesson burned in: monetization decisions need to live on a different cadence than your app binary. The moment you couple them to a release, your rollback latency is bounded by store review. That is when I started taking Firebase Remote Config seriously.

Why Remote Config alone was not enough

Remote Config itself slotted in quickly. I moved the variables I wanted to nudge — ad unit IDs, frequency caps, the Day 0 suppression flag, the rewarded multiplier — into Remote Config, and the app reads them at launch via fetchAndActivate() and passes them into the AdMob wrapper. Tweaks no longer needed a release, and rollback was just "set it back to the previous value."

What Remote Config did not solve was the harder problem: deciding which value to move next. That part stayed manual. Each morning looked like:

  • Look at eCPM trends in the AdMob dashboard
  • Look at Day 1 retention in Firebase Console
  • Check Google Play Console and App Store Connect for crashes and reviews
  • Synthesize all of the above into a judgment like "today let's pull App Open frequency from 1.0 to 0.7"
  • Update Remote Config

Thirty to forty-five minutes of that, every morning, quietly eats the rest of my indie dev day. Across multiple apps in parallel, weekends started to feel like an extension of ad monitoring. The question of this piece is whether Antigravity's Agent can be inserted into that loop.

✦

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
✦Splitting Remote Config keys into tunable. and fixed. so the Agent's reach is narrowed mechanically
✦A concrete nightly tuning loop, plus the auto-revert that stops a bad call sitting live for 40 hours
✦How to choose the share of users your Agent is allowed to touch without breaking eCPM or Day 1 retention
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

▣ App Dev2026-05-03
Launching an Indie SaaS on Antigravity — A 2026 Monetization Roadmap
A practical 2026 roadmap for monetizing an indie SaaS built with Google Antigravity's agentic IDE — covering use-case selection, agent-aware unit economics, pricing for multi-step tasks, and the retention work specific to agent-driven products.
▣ App Dev2026-05-10
Three Decisions I Kept for Myself When Antigravity Maintained My Older Apps
How far could Antigravity maintain my long-running wallpaper and wellness apps? A field log of crash fixes and a staged rollout, with the lines I drew between delegated and retained work, and how I write context notes.
▣ App Dev2026-10-15
I Swapped an Immutable Asset at the Same URL, and Only the Browser Kept the Old Copy
Overwrite a long-cached JS file at the same URL and neither a CDN purge nor a refresh will make the browser fetch it again. Four delivery styles — same URL, no-cache, query string, content-hash filename — compared in Chromium, plus a complete build-step script that adds the hash.