RORK LABJP
RORKMAX — Rork Max generates pure Swift instead of React Native, enabling true native apps across iPhone, iPad, Watch, TV, Vision Pro, and iMessageAPPLE — Rork's 2026 direction has a clear theme of native empowerment across the Apple ecosystemEXPO — Standard builds run on React Native and Expo, so you're left with a real project structure and code you can keep working onFUNDING — Rork recently raised $15M and now sees over 743,000 monthly visits with 85% growthPRICING — Rork is free to start, with paid plans from $25/month and Rork Max at $200/monthCROSS — Rork builds iOS, Android, and web from a single prompt, finished off with a bit of follow-up tweakingRORKMAX — Rork Max generates pure Swift instead of React Native, enabling true native apps across iPhone, iPad, Watch, TV, Vision Pro, and iMessageAPPLE — Rork's 2026 direction has a clear theme of native empowerment across the Apple ecosystemEXPO — Standard builds run on React Native and Expo, so you're left with a real project structure and code you can keep working onFUNDING — Rork recently raised $15M and now sees over 743,000 monthly visits with 85% growthPRICING — Rork is free to start, with paid plans from $25/month and Rork Max at $200/monthCROSS — Rork builds iOS, Android, and web from a single prompt, finished off with a bit of follow-up tweaking
Articles/Business
Business/2026-05-14Intermediate

AdMob Mediation Dropped My eCPM by 30% After I Set It Up — What Went Wrong and How I Fixed It

My eCPM dropped 30% the morning after enabling AdMob mediation. Drawing from 12 years of indie app development and over 50 million downloads, here are the three pitfalls I found in Rork apps and how I recovered.

AdMob69mediation2Rork504monetization47indie development30

The morning after setting up AdMob mediation, I opened the dashboard and froze.

My eCPM had dropped 30%. I had set up mediation specifically because "competing ad networks drive prices up" — yet somehow the result was the opposite. I've been building apps independently since 2014, with over 50 million total downloads across my portfolio, and very few monetization experiments have made me feel as much like I'd made a mistake.

Reaching peak monthly AdMob revenue above ¥1.5 million (roughly $10,000) took years of iteration, so I understand the mechanics well. But mediation failures right after setup? That turns out to be remarkably common — and Rork apps have a few specific pitfalls that make them especially prone to it.

What Was Actually Happening

Mediation works by letting multiple ad networks (AppLovin, Unity Ads, Meta Audience Network, etc.) compete for each impression, theoretically pushing eCPM higher. When it works, it works well. The key phrase is "when it works."

Looking back, my eCPM drop had a clear cause: the waterfall configuration was wrong. In situations where AdMob should have been called first, lower-CPM networks were responding first instead.

When you implement ads in a Rork app, the AI-generated code handles the basic AdMob setup reliably. Mediation adapter configuration, though, requires a lot of work in the AdMob console outside of the code — and that's where things tend to go sideways.

Three Pitfalls Specific to Rork Apps

Pitfall 1: Leaving Waterfall eCPM Floors at Default Values

When you configure mediation in the AdMob console, did you leave each network's eCPM floor at the default value?

Google's recommended Bidding (real-time bidding) approach handles optimization automatically, but some networks still only support waterfall mediation. For those, you need to manually set eCPM floors within 10–15% of your actual display rates.

My mistake was leaving the default $0.50 floor in place. My actual eCPM was running between $1.80 and $2.20, so low-quality $0.50-floor ads were flooding my impressions. After adjusting the floor to $1.50, eCPM recovered within three days.

Pitfall 2: ATT and Ad ID Disconnect on iOS

When I added ATT (App Tracking Transparency) to an existing Rork project after the fact, the mediation adapters ended up in a state where they couldn't receive the advertising identifier.

The initialization order matters. If you initialize mediation adapters before the user has responded to the ATT prompt, iOS 14+ will run them without an advertising ID — meaning untargeted ads run for those users indefinitely.

import { requestTrackingPermission } from 'react-native-tracking-transparency';
import MobileAds from 'react-native-google-mobile-ads';
 
// ✅ Correct order: ATT permission first, then SDK initialization
const initializeAdsAfterATT = async () => {
  // Handle ATT on iOS only
  if (Platform.OS === 'ios') {
    const status = await requestTrackingPermission();
    console.log('ATT status:', status);
  }
 
  // Initialize AdMob SDK after ATT is resolved
  await MobileAds().initialize();
 
  // Mediation adapters initialize automatically at this point
};

When writing Rork prompts, specifying "initialize the AdMob SDK after requesting ATT permission" gets the AI to generate code in the correct order. That said, when adding ATT to an existing project, don't just paste the generated code — verify the initialization timing manually.

Pitfall 3: Not Separating Adapter Configuration by Platform

Rork generates code for iOS and Android simultaneously, but AdMob mediation adapters require separate package IDs per OS. If you don't specify iOS and Android configurations separately in your app.json plugin settings, one platform's adapters won't be recognized and ads simply won't show.

// app.json plugin configuration example (iOS/Android separated)
{
  "plugins": [
    [
      "react-native-google-mobile-ads",
      {
        "androidAppId": "ca-app-pub-XXXXXXXXXXXXXXXX~XXXXXXXXXX",
        "iosAppId": "ca-app-pub-XXXXXXXXXXXXXXXX~XXXXXXXXXX",
        "userTrackingUsageDescription": "This identifier will be used to deliver personalized ads to you.",
        "skAdNetworkItems": [
          { "SKAdNetworkIdentifier": "cstr6suwn9.skadnetwork" },
          { "SKAdNetworkIdentifier": "4fzdc2evr5.skadnetwork" }
        ]
      }
    ]
  ]
}

The SKAdNetworkItems list changes with every network version update. Building a habit of reviewing it monthly prevents the kind of silent iOS ad impression drops that are easy to miss until you check the data.

What Recovery Looked Like

Two weeks after fixing the configuration, eCPM returned to its pre-mediation baseline — and then climbed about 8% above it. Mediation finally started doing what it was supposed to do.

Working with mediation as an indie developer taught me that the initial setup quality has a disproportionate effect on long-term revenue. One thing I appreciate about building with Rork is that faster app development frees up time for exactly this kind of detailed configuration work outside the code. The tool changes where you spend your attention.

For foundational AdMob implementation in Rork, see the Rork AdMob Monetization Guide. For maximizing ATT approval rates — which directly affects mediation performance — see Maximizing ATT Opt-In Rate for AdMob.

The first concrete action you can take today: open your AdMob console and check whether your waterfall eCPM floors reflect your actual recent eCPM. If you have 7 days of data, set floors within 10% of your average — that single change recovered most of my losses.

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 →

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

Business2026-05-12
I Built a Wallpaper App with Rork — An Honest Review from a Developer with 50M App Downloads
After running wallpaper and healing apps with 50M+ downloads since 2014, I prototype-tested Rork on the same genre. Here's my honest take on where it shines, where it struggles, and what it means for solo developers.
Business2026-06-22
A Wallpaper App's Real Work Starts After Launch — Content, Retention, and Revenue Notes from Running One on Rork
A wallpaper app is decided less by its launch and more by how you tend it afterward. Building on a Rork implementation, here are field notes on scheduled publishing that keeps content fresh, onboarding that survives the first week, and a revenue setup whose per-download return doesn't thin out over time.
Business2026-05-23
Minimal Customer Support Architecture for Solo Rork Devs — Running Inquiries for Multiple Apps Alone
The minimum-viable customer support stack I run as a solo developer maintaining a dozen apps with 50M cumulative downloads — in-app form with auto-attached diagnostics, Gmail filtering, reply templates, and the escalation rules that keep me under thirty minutes a day.
📚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 →