ANTIGRAVITY LABJP
Articles/App Development
App Development/2026-05-06Advanced

How I Tripled Wallpaper App Revenue Using Antigravity — AdMob Optimization to ASO (2026)

A case study on using Antigravity to overhaul a wallpaper app — improving AdMob revenue, App Store ratings, and organic downloads. Only the changes that actually moved the numbers, with real results.

antigravity435wallpaper-app2admob17asomonetization31app-store5indie-dev19iap2

Wallpaper apps have always been a reliable category for indie developers. Users interact with their home screen daily, which creates organic retention. Once someone finds a wallpaper they love, they tend to keep the app around.

I've been building and maintaining wallpaper apps since 2014. Most of that time involved manual coding and a lot of trial and error. Starting in late 2025, I began using Antigravity more seriously for app iteration — and the same apps, with the same user bases, started performing differently. This is the record of going from baseline revenue to roughly 3x in about six months.

Starting Point: Three Problems That Had Been Sitting Too Long

The target app was an iOS wallpaper app with a monthly active user base in the tens of thousands. Primary revenue came from AdMob banner ads.

Three things were broken:

1. AdMob eCPM was stagnant. A single banner at the bottom of the screen. No interstitial, no rewarded ads.

2. App Store rating was 3.8. Most low-rating reviews said the same thing: users couldn't figure out how to set a wallpaper. A UX problem with a code fix — but it had sat unaddressed.

3. ASO was essentially untouched. Screenshots and store copy hadn't been updated in over a year.

These weren't mysteries. I knew exactly what was wrong. What was missing was bandwidth to actually do them. Antigravity changed that equation.

Step 1: Rewired AdMob Implementation

First target: ad placement. I loaded the existing implementation into Antigravity via AGENTS.md and asked for an improvement proposal.

# AGENTS.md ad improvement spec
## Current state
- Banner ad: bottom of screen (GADBannerView)
- Revenue: [baseline] eCPM $0.85

## Goals
- Interstitial ad on transition from wallpaper preview → settings screen
- Rewarded ad: user can temporarily unlock one premium wallpaper
- Upgrade banner to adaptive banner format

## Constraints
- Frequency cap: minimum 3 minutes between interstitials
- Must comply with iOS 16 privacy manifest

The rewarded ad logic Antigravity proposed was the most useful part:

class WallpaperViewController: UIViewController {
    
    private var rewardedAd: GADRewardedAd?
    private let rewardedAdUnitID = "YOUR_REWARDED_AD_UNIT_ID"
    
    func showPremiumWallpaperWithReward(wallpaper: Wallpaper) {
        guard let rewardedAd = rewardedAd else {
            showPremiumLockView(wallpaper: wallpaper)
            return
        }
        
        rewardedAd.present(fromRootViewController: self) { [weak self] in
            // Grant reward: unlock one premium wallpaper for this session
            self?.unlockPremiumWallpaperTemporarily(wallpaper: wallpaper)
        }
    }
    
    private func unlockPremiumWallpaperTemporarily(wallpaper: Wallpaper) {
        var unlockedItems = UserDefaults.standard.array(forKey: "sessionUnlocked") as? [String] ?? []
        unlockedItems.append(wallpaper.id)
        UserDefaults.standard.set(unlockedItems, forKey: "sessionUnlocked")
        showWallpaperDetail(wallpaper: wallpaper)
    }
}

The UX outcome: instead of a forced ad, the user makes an active choice to watch an ad in exchange for trial access to a premium wallpaper. Engagement goes up, complaints go down.

Results after 3 months:

  • AdMob eCPM: $0.85 → $2.10 (+147%)
  • Total ad revenue: ~2.1x

Rewarded ad unit rates are significantly higher than banner. Shifting a portion of impressions there moved total revenue meaningfully.

Step 2: Fixed the UX Problem Hurting Reviews

"Can't figure out how to set the wallpaper" shouldn't appear in reviews — but it did, repeatedly. I asked Antigravity to implement a first-launch walkthrough covering the wallpaper-setting flow on iOS.

The proposed sequence:

  1. Long-press on a wallpaper → show coachmark for "Set as Wallpaper"
  2. Before the Photos save dialog appears → show a brief explanation
  3. After saving → show step-by-step instructions for setting as home screen

Implementation time with Antigravity: approximately 2 hours. Without it, I'd estimate a full day of work.

Results after 2 months:

  • App Store rating: 3.8 → 4.4
  • "Can't set wallpaper" reviews: effectively zero

Higher rating directly improved App Store algorithm placement, which fed into organic download growth.

Step 3: ASO — Store Copy and Screenshots

App Store text and screenshots were both overdue. For store copy, I asked Antigravity to generate optimized Japanese and English descriptions incorporating target keywords naturally. For screenshots, I generated multiple headline variants and tested them through App Store Connect's product page optimization feature.

Results after 3 months:

  • Organic downloads: 1.8x
  • Ranking keywords: 3 → 12

The app started appearing for category searches (wallpaper, home screen customization, aesthetic wallpapers) it hadn't previously ranked for.

Step 4: IAP Redesign

The original in-app purchase was a single "premium pack" at ¥120 / $0.99. After discussing the design with Antigravity — asking it to compare subscription vs. one-time purchase performance for wallpaper apps specifically — I restructured it:

PlanPriceContent
Free¥0Free wallpapers + ads
Individual pack¥250Theme pack (15–20 wallpapers), lifetime
Premium monthly¥480/moAll wallpapers + no ads + weekly additions
Premium annual¥2,980/yrSame (¥248/mo equivalent)

Implementation used StoreKit 2. Antigravity generated both the client-side purchase flow and server-side receipt validation code.

Results after 2 months:

  • Subscription revenue: 68% of total IAP
  • Average individual pack purchases: 1.8 packs per purchasing user

Six-Month Summary

InitiativeContribution to revenue growth
AdMob optimization+110%
Rating improvement → ASO halo effect+40% (indirect)
ASO (download increase)+45%
IAP redesign+80%

These don't add up linearly — the effects compound and interact. The ~3x total is a lived result across all initiatives running together.

What Antigravity Actually Changed

The biggest shift wasn't speed, though speed improved. It was that the backlog of "important but effort-intensive" work finally got done.

AdMob restructuring, a first-launch tutorial, ASO optimization — I'd known these needed attention for months. The reason they sat untouched was that each one represented a non-trivial implementation block during time I didn't have.

With Antigravity, the workflow became: define the goal in AGENTS.md, review and adjust what it generates, ship. That's a meaningful difference in how much you can execute as a solo developer. The wallpaper app was already viable. These changes made it genuinely good — and profitable enough to justify the time investment in maintaining it.

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 →

If you found this article helpful, a small tip ($1.50) would mean a lot to us. Your support helps keep this site ad-free and covers server and hosting costs.

Related Articles

App Dev2026-06-30
The App Open Ad Antigravity Wrote for Me Fires Every Time I Return From My Own Paywall or Rewarded Video
Ask Antigravity to add an App Open ad and it shows one the instant you return from your own rewarded video or the Google Play purchase sheet — which also brushes against AdMob policy. Here is a foreground arbiter that records why the app came back, with working Kotlin and a verification matrix.
App Dev2026-06-25
An Agent Granted 'Watch an Ad to Unlock a Wallpaper' Entirely Client-Side — Re-Verifying Reward Grants with AdMob SSV
I asked an Antigravity agent to wire up 'watch a rewarded ad to unlock a wallpaper,' and it returned an implementation that wrote the unlock flag client-side only. Here is why that is not enough, how I re-verified the reward grant with AdMob server-side verification (SSV), and how I stopped double grants too.
App Dev2026-06-19
I Started the Ad SDK Before Asking for ATT — the Init-Order Bug That Quietly Lowered First-Session eCPM
When I rolled AdMob mediation out to four iOS apps, only the very first session showed weaker ad revenue. The cause was the order between the ATT prompt and MobileAds initialization. Here is why the order matters, plus how I had Antigravity audit the init sequence across all four apps.
📚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
See all →