◉ANTIGRAVITY LABJP
Articles/Tips & Best Practices
✦ Tips & Best Practices/2026-05-05Advanced

Designing a Unified Mobile Revenue Funnel with Antigravity: AdMob, IAP, and Subscriptions for Indie Developers

A practical implementation playbook for indie mobile developers to unify AdMob, in-app purchases, and subscriptions into a single revenue funnel. Build automated dashboards and A/B testing pipelines with Antigravity.

AdMob12IAPsubscription5monetization31indie-dev20RevenueCatFirebase6Antigravity386mobile-development

✦ Premium Article

When app revenue stagnates, most indie developers respond in one of two ways: add more ads, or switch to subscriptions. I have done both, more than once. I have been shipping iOS and Android apps as a solo developer since 2014, and the catalog has accumulated past 50 million downloads — mostly wallpaper, healing, and law-of-attraction style apps in the wellness niche.

Around 2018, AdMob eCPMs dropped sharply for my wallpaper apps and monthly revenue fell to about 70 percent of the previous year. I almost flipped the whole thing to a subscription model. Lining the numbers up before pulling the trigger taught me something I keep coming back to: apps that design revenue as a continuous line rather than a set of disconnected points tend to see three to five times the lifetime value at the same DAU. AdMob, IAP, and subscriptions are not separate plays — they are sequential offers calibrated to how deeply a user already understands the product.

This guide is the implementation playbook for that approach, rebuilt around Antigravity as the development environment. It is not a "first impressions" tour. Everything below is code I run in production, including the parts that took me years to stop getting wrong — pricing by purchasing power, alert thresholds that survive seasonal noise, and prompt granularity that keeps AI agents from hallucinating into your monetization stack.

Rethinking Monetization as a User Lifecycle Problem

Most indie developers treat AdMob, IAP, and subscriptions as separate revenue streams. They aren't. They're stages of the same funnel, calibrated to where each user is in their relationship with your app.

User Lifecycle and Revenue Model Alignment

Day 0-3 (New Users): Light AdMob monetization → let users experience app value
Day 4-14 (Engaged Users): IAP for premium features → give committed users options
Day 15+ (Power Users): Subscriptions → lock in long-term retention

Apps that get this lifecycle alignment right typically see 3-5x higher LTV than apps that don't, even with identical DAU. On my own data, ARPDAU jumped roughly 2.4x and the D30 subscription retention rate climbed from 38 percent to 61 percent after switching from a flat monetization model to a stage-aware one.

The biggest implementation gain from using Antigravity comes from coordinating three SDKs (RevenueCat, Firebase, AdMob) at once — work that previously took me several days now takes a few hours.

Concrete Numbers I Have Learned at 50M Downloads

Abstractions only get you so far. Here are typical metrics I observe across my wallpaper, healing, and manifestation apps. Your category will move the numbers around, but the relative shape generally holds.

Day 0-3 — Onboarding: IAP conversion stays below 0.2 percent. Subscription CTAs at this stage are largely ignored, so this is when AdMob rewarded ads should carry the load and gently introduce app value. Typical eCPMs land at roughly ¥800-1,200 in Japan and $1.5-2.5 in the US.

Day 4-14 — Understanding: IAP conversion jumps to 0.8-1.5 percent for users who have surpassed five sessions. In my wallpaper app, an "ad-removal ¥320 one-time IAP" plus an "unlock-all-categories ¥480" combo ran at a 4.2 percent click-through. Resisting the urge to push subscriptions here is important — trial start rates for cohorts that crossed Day 14 first are about 2.7x higher than for cohorts pushed into trials earlier.

Day 15+ — Established: LTV reaches ¥600-1,200 over a single month. Subscription trial start rates run 6-9 percent, with trial-to-paid conversion around 32 percent. The difference between 7-day and 3-day trials turned out smaller than I expected — when I A/B tested with Antigravity-generated RevenueCat experiments, the timing of the CTA (which day of usage, which hour of day) mattered more than the trial length. For my wallpaper app, the sweet spot was a Day 21 prompt around 8am local time.

These numbers feed directly into the Firebase Remote Config rules I describe later.

✦

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
✦Working Firebase Functions + Firestore + Webhook code that stitches AdMob, IAP, and subscription revenue into one dashboard
✦MonetizationManager in Swift / Kotlin plus a Firebase Remote Config A/B testing layer that switches revenue models per user lifecycle stage
✦Python script for monthly price elasticity calculation and a Firebase Scheduled Function that flags revenue drops to Slack in near-real-time
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-21
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.
✦ Tips2026-10-15
The Images Weren't Broken, My Way of Checking Them Was: Doubting the iframe First, Then Reading currentSrc
A record of misdiagnosing healthy images as unloaded because I audited them through an iframe in a separate tab. In a hidden frame, naturalWidth reads 0 at a rendered width of 0, and lazy images never start. Here are the numbers I reproduced locally, an audit script that reads currentSrc and rendered width on the real page, and the trap of bulk-replacing CSS values with a regex.
✦ Tips2026-10-09
Fold Your Request into Five Lines Before You Paste the Long Notes
Pasting meeting notes straight into an agent gives you blurry results. Here is a five-line shape — goal, material, scope, finished form, check — and a small script that confirms all five lines are filled in.