RORK LABJP
PRICING — Standard Rork's tiers are now clear: Junior at $25 a month for 100 credits, Middle at $50 for 250, and Senior at $100 for 500CREDITS — Billing is per message. One prompt to the AI costs one credit, whether you are asking it to build an entire screen or just to change a button colorPRACTICE — Which means credits drain fastest when you iterate in small nudges. Bundle the requirements, then handle the fine details in your own editor. That split moves the real cost more than anythingSTACK — Standard Rork generates React Native through Expo and reaches both iOS and Android. Rork Max is a separate product that writes native Swift insteadMAX — Max starts at $200 a month. It compiles on a cloud Mac fleet, streams a live simulator to your browser, and publishes to the App Store in two clicks, with no Xcode requiredFOUNDATION — In the model layer beneath it, Gemini 3.8 Flash went generally available on September 2 and reached GitHub Copilot on September 3. Its introductory pricing expires December 31PRICING — Standard Rork's tiers are now clear: Junior at $25 a month for 100 credits, Middle at $50 for 250, and Senior at $100 for 500CREDITS — Billing is per message. One prompt to the AI costs one credit, whether you are asking it to build an entire screen or just to change a button colorPRACTICE — Which means credits drain fastest when you iterate in small nudges. Bundle the requirements, then handle the fine details in your own editor. That split moves the real cost more than anythingSTACK — Standard Rork generates React Native through Expo and reaches both iOS and Android. Rork Max is a separate product that writes native Swift insteadMAX — Max starts at $200 a month. It compiles on a cloud Mac fleet, streams a live simulator to your browser, and publishes to the App Store in two clicks, with no Xcode requiredFOUNDATION — In the model layer beneath it, Gemini 3.8 Flash went generally available on September 2 and reached GitHub Copilot on September 3. Its introductory pricing expires December 31
Articles/Business
Business/2026-09-06Advanced

Your Blended eCPM Dropped and Revenue Went Up: Splitting the Change Into Country Mix and Rate

Blended eCPM is a weighted average, not a price. Here is how I split a month-over-month change into a country-mix effect and a rate effect that reconcile exactly to the total, plus what to check before you cut a low-eCPM country.

AdMob71eCPM5Revenue AnalysisIndie Development26Rork554

Premium Article

One morning I opened the dashboard and the number at the top was lower than the month before. Blended eCPM had fallen by about a quarter.

I went straight to the country report and sorted by unit price, ascending. I was looking for countries to cut. Two candidates showed up within a couple of minutes.

Then I noticed that the estimated payout further down the same screen was higher than the previous month.

The average was down and the money was up. One of the two had to be wrong, so I spent two days pulling the report apart. What was wrong turned out to be the way I was reading it.

Blended eCPM is a weighted average, not a price

The blended eCPM in the AdMob console is revenue divided by impressions, times 1,000. Written out, it is each country's eCPM weighted by that country's share of impressions.

Which means it moves for two entirely separate reasons.

  1. Unit prices themselves changed (rate effect)
  2. Impression shares shifted between countries (mix effect)

The awkward part is that the second one alone can move the average a long way. If impressions grow in a low-price country, blended eCPM falls even when not a single country's price has changed. And because impressions grew, revenue rises.

I was sorting as if I were looking at the first case. What had actually happened was the second. Running a few apps in parallel as an indie developer, I hit this mix-up roughly once a season, because the countries where organic installs grow fastest tend to be the low-price ones.

A unit price is a number for comparing, not a number for deciding what to switch off. Open a country report without that line drawn and you walk straight toward the decision that shrinks revenue.

Splitting the change with no residual

There are several ways to do factor decomposition. For something I run every month, my requirement is that the two effects add up to the total change exactly. A decomposition that leaves a residual stops being trusted by the second month.

The simplest form that satisfies this uses symmetric averages. With r as a country's eCPM, w as its impression share, 0 for the prior period and 1 for the current one:

EffectFormulaHow to read it
RateΣ (r1 − r0) × (w0 + w1) / 2How far the average would have moved on price changes alone, had the mix held still
MixΣ (w1 − w0) × (r0 + r1) / 2How far the average would have moved on share changes alone, had prices held still

Add the two and you get the change in blended eCPM exactly. The interaction term is split evenly between the two sides rather than being shoved into one of them.

The one case you have to decide on is a country that exists in only one of the periods. A newly served country has no prior price. Treating its price as unchanged and pushing its entire contribution into the mix side is what matches reality: the average moved because impressions appeared there, not because a price changed.

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
You will be able to tell whether a move in blended eCPM came from your country mix or from actual unit prices, using nothing but the country report you already have
Before you cut traffic from a low-eCPM country, you will be able to check in a few minutes whether that country is merely dragging the average down or genuinely carrying revenue
You will have a 60-line script that decomposes a country CSV into mix and rate contributions and reconciles exactly to the total change, ready to drop into your monthly routine
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 $15 for lifetime access
View Membership →

Related Articles

Business2026-05-21
Putting AdMob Bidding into Production for a Rork App — Five Networks Bidding in Parallel, eCPM Trends, and Daily Operations
I moved the AdMob mediation layer of my Rork-generated apps from waterfall to bidding, with five ad networks bidding in parallel. Here are my real-world numbers after three weeks of production, the SDK pitfalls, and how I delegate daily monitoring to Claude in Chrome.
Business2026-07-05
When Your AdMob Earnings Suddenly Get Deducted: Preventing Invalid Traffic as a Solo Developer
Invalid traffic deductions in AdMob are unsettling because the cause is rarely obvious. From the perspective of running several apps solo, here is a minimal setup that prevents the most common accidents, plus how to respond when a deduction actually happens.
Business2026-06-28
Don't Pay Out a Rewarded Ad on the Client's Word Alone — SSV Verification for a Rork (Expo) App on a Worker
Trusting the client-side 'reward earned' callback alone invites double-grants and spoofing. Here is how to wire AdMob server-side verification (SSV) into a Rork-generated Expo app, verify the signed callback on a Cloudflare Worker, and make payouts idempotent with transaction_id.
📚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 →