◉RORK LABJP
●GPT-6.1 SOL — Added to Rork's model menu (09-29) with Low, Medium and High effort; included on Pro and Max●SONNET 5.5 — Claude Sonnet 5.5 is selectable: strong at UI design and faster than Sonnet 5 (09-28)●SDK 58 — Beta since 09/15 with no stable date yet; running projects in Expo Go has required login since 09/03●WIDGET — A write-up traces an iOS widget that renders black only in production builds●OBSERVE — EAS Observe now records native crashes too (SDK 57.0.21 or later, 10/07)●NEW — My App Open Ad Only Showed When the App…●GPT-6.1 SOL — Added to Rork's model menu (09-29) with Low, Medium and High effort; included on Pro and Max●SONNET 5.5 — Claude Sonnet 5.5 is selectable: strong at UI design and faster than Sonnet 5 (09-28)●SDK 58 — Beta since 09/15 with no stable date yet; running projects in Expo Go has required login since 09/03●WIDGET — A write-up traces an iOS widget that renders black only in production builds●OBSERVE — EAS Observe now records native crashes too (SDK 57.0.21 or later, 10/07)●NEW — My App Open Ad Only Showed When the App…
Articles/Business
⟐ Business/2026-05-30Intermediate

Taking Inventory of Your AdMob Ad Units — All the Way to App Open Cooldown Design

When rewarded and interstitial units pile up and you can no longer tell which one fires on which screen, here is the inventory process I use, plus the design for adding a cooldown to an App Open ad that otherwise shows on every launch.

AdMob73Monetization39App OpenInterstitialApp Operations7

✦ Premium Article

You stop knowing which unit fires where

Run a wallpaper app with 50 million cumulative downloads long enough and the ad units quietly multiply. It started with a single interstitial; then I added a second for A/B testing, dropped in a rewarded unit, tried an App Open ad, and so on. One day I realized I could no longer instantly answer "which screen does this unit ID show on?" For something tied directly to revenue, that vagueness is a risky place to operate from.

So before adding anything new, I decided to take a proper inventory. What I did is not flashy, but I think it helps other solo developers whose ad setup has grown the same way, so I am leaving the steps here.

Start by listing every unit with grep

AdMob ad unit IDs are embedded as strings in code, so the definitions are easy to find. On Android, one line is enough.

grep -rn "ca-app-pub" app/src/main/java app/src/main/res

This surfaces the files where I define the constants (in my case Globals.java and AdManager.java) along with anything left over in layout XML. Reading the output, I use the last few digits of each unit ID as a key and map out where each one is defined and where it is called from.

The biggest win from this pass was finding the remains of an old banner unit still sitting in XML. Nothing in code referenced it anymore, yet the layout kept the AdView definition alive. You never notice these "ghost units" without an inventory.

✦

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
✦A concrete process for matching ad unit definitions to call sites using nothing but grep
✦How I add a four-hour cooldown and a first-launch skip to an App Open ad
✦The judgment I use so frequency capping and review prompts do not collide
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

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.

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

Related Articles

⟐ Business2026-10-16
AdMob Balance Below the Payment Threshold for Months: Three Screens to Check Before You Worry
If AdMob earnings stay under the payment threshold (8,000 yen for yen accounts), the balance rolls over rather than disappearing. Here is what actually deserves a check: address verification, payment holds, and account deactivation, based on the Help pages.
⟐ Business2026-04-26
Taking a Rork Max Native App Up the App Store Charts — The Order I Build Ads, StoreKit 2, and Subscriptions
The order I follow to grow a Rork Max SwiftUI app into one that stays near the top of its App Store category: a single AdGate that decides when ads may show, StoreKit 2 Transaction.updates monitoring, and where I draw the lines on ASO and retention — with working code.
⟐ Business2026-04-04
Rork App Revenue Design: Where Ads and Subscriptions Eat Each Other
How to layer AdMob, subscriptions, and one-time purchases in a Rork app without letting them cannibalize each other. Covers value-density placement, entitlement-first RevenueCat architecture, server-side receipt verification, and behavior-triggered paywalls.