Skip to content
Menu
Reference

How to Calculate Ad Revenue: Formulas and Examples

The formulas behind app and website ad income, with worked examples for a game and a blog, country blending, seasonality and a copyable spreadsheet.

10 min read · Updated

Ad revenue is impressions divided by 1,000, multiplied by eCPM. Everything else in this guide is a way to find better numbers for those two inputs. If your app shows 600,000 ads a month at an eCPM of $4.00, you earn 600,000 / 1,000 x 4.00 = $2,400. If your site serves 50,000 pageviews at a page RPM of $5.00, you earn 50,000 / 1,000 x 5.00 = $250.

The hard part is not the multiplication. It is knowing how many impressions you will really show, and which eCPM or RPM applies to your audience, since the same ad slot can pay ten times more in one country than another. A forecast built on a single global average will be wrong by a wide margin, and usually on the optimistic side.

Below you will find the formulas for apps and websites, how to turn users or pageviews into impressions, how to blend countries properly, how to adjust for seasons, and a spreadsheet layout you can copy. The money figures come from our modelled benchmark estimates, which you can read about on the methodology page. The worked cases are examples built on stated assumptions, not predictions.

The formulas, in one place

These are the definitions the networks themselves use. Google's AdMob reports glossary puts eCPM as estimated earnings divided by impressions, times 1,000. AdSense defines RPM the same way but with page views as the divisor, in its RPM help article.

NameFormulaUse it for
eCPMearnings / impressions x 1,000Pricing per ad shown
Page RPMearnings / pageviews x 1,000Websites, per page loaded
Session RPMearnings / sessions x 1,000Websites that quote income per visit
ARPDAUearnings / daily active usersApps, per user per day
Fill ratematched requests / requestsHow much of your demand is used
Show rateimpressions / matched requestsHow many matched ads were displayed

The AdMob glossary defines match rate as matched requests divided by requests, and show rate as impressions divided by matched requests. The fill rate guide goes into why those two drift apart, and the eCPM explainer covers the price side. If a term in your dashboard is unfamiliar, the glossary from A to Z probably has it.

Two warnings about the inputs. First, dashboard earnings are estimates until the network finalises them; AdMob's own glossary calls them "an estimate that is subject to change". Second, the figures in your report are what you earn, not what advertisers paid, so you should not subtract the network's share again. AdSense explains its split on the revenue share page: publishers receive 80% of the revenue after the advertiser platform's fee, which works out to about 68% when advertisers buy through Google Ads.

Forecasting an app, step by step

Start from daily active users (DAU). Every other number follows.

Step 1: impressions per DAU, per format. Open your own data if you have it. If you do not, make a plan: say each user sees 1 rewarded video, 3 interstitials and 6 banner impressions a day. A banner refreshes, so one session can produce several. Be honest here. Overestimating ad views per user is the commonest mistake, because it feels like a setting you control, and in practice user behaviour limits it.

Step 2: eCPM per format and country. Our AdMob estimates for an Android audience, per 1,000 impressions, are:

FormatTier 1Tier 2Tier 3
Rewarded$12.00$5.00$1.40
Interstitial$8.00$3.20$0.90
Banner$0.90$0.40$0.10

Tier 1 means the US, UK, Canada and Australia. Tier 2 is Western Europe and developed Asia-Pacific such as Japan and South Korea. Tier 3 is everywhere else. For iOS, multiply by 1.3. For categories, apply the multiplier: puzzle 1.0, casual 0.95, mid-core 1.35, hypercasual 0.8, finance 1.6. Our mobile eCPM benchmarks guide explains the ranges.

Step 3: ARPDAU for each tier. Multiply impressions by eCPM, divide by 1,000, and add the formats together.

  • Tier 1: (1 x 12.00 + 3 x 8.00 + 6 x 0.90) / 1,000 = $0.0414
  • Tier 2: (1 x 5.00 + 3 x 3.20 + 6 x 0.40) / 1,000 = $0.0170
  • Tier 3: (1 x 1.40 + 3 x 0.90 + 6 x 0.10) / 1,000 = $0.0047

Step 4: weight by where your users are. Suppose 20,000 DAU split 40% Tier 1, 20% Tier 2 and 40% Tier 3. That is 8,000, 4,000 and 8,000 users.

TierDAUARPDAUDaily revenue
Tier 18,000$0.0414$331.20
Tier 24,000$0.0170$68.00
Tier 38,000$0.0047$37.60
Total20,000$0.0218$436.80

Over 30 days that is $13,104. Notice that the Tier 1 users, 40% of the audience, produce about 76% of the money. Had you used the Tier 1 ARPDAU for everybody, you would have forecast $24,840, an overstatement of nearly 90%.

The AdMob revenue calculator runs this same sum with your own mix, and the 10,000 daily users page shows a precomputed case.

From requests to impressions

When you plan the number of ad requests, remember that not every request becomes an impression. Impressions equal requests x fill rate x show rate. Our tables give AdMob a blended fill of 88%. Assume a 90% show rate, which is a hypothetical figure for illustration, and your 3 interstitials a day need 3 / (0.88 x 0.90) = about 3.8 requests per user.

This matters for the load on your code and for reading your reports. If requests are far above the planned number, you may be asking too often, and your fill and show rates will look worse than they should. Reading the AdMob report shows where each figure sits.

Forecasting a website

Websites deal in pageviews or sessions, not users. Start with monthly pageviews, then multiply by RPM.

Our reference RPMs, per 1,000 pageviews for a page with 4 ads and about 60% viewability, are as follows for AdSense: $7.00 in Tier 1, $3.00 in Tier 2 and $0.80 in Tier 3. Niches adjust these. Technology is 1.15, finance and business 1.9, gaming 0.7. The website RPM by niche guide has the full table.

An example. A technology blog gets 50,000 pageviews a month, 60% from Tier 1, 20% from Tier 2 and 20% from Tier 3.

  • Blended RPM: 0.60 x 7.00 + 0.20 x 3.00 + 0.20 x 0.80 = $4.96
  • Technology niche: 4.96 x 1.15 = $5.70
  • Revenue: 50,000 / 1,000 x 5.70 = about $285 a month

Use the AdSense revenue calculator if you want to try your own mix, or the 50,000 pageviews page for a ready-made version.

Pageviews versus sessions

Some networks and dashboards quote RPM per session. Mediavine, for example, explains its RPM as earnings divided by traffic times 1,000, using session data from Google Analytics. A session in GA4 is a period of activity that ends after 30 minutes of inactivity by default, as Google's definition puts it.

The conversion between the two is simple: session RPM = page RPM x pages per session. If our blog averages 1.4 pages per session, the 50,000 pageviews are about 35,700 sessions, and the $5.70 page RPM is a session RPM of about $7.99. The earnings are identical. Only the denominator changed.

That means you cannot compare a page RPM from one source with a session RPM from another. Check which one a number refers to before you use it, especially when you read case studies posted by other bloggers.

Blending countries correctly

The most common spreadsheet error is averaging averages. If you have three tiers with RPMs of 7.00, 3.00 and 0.80, the simple mean is 3.60. With a 60/20/20 traffic split the right answer is 4.96. With a 10/30/60 split it is 0.10 x 7.00 + 0.30 x 3.00 + 0.60 x 0.80 = $2.08. Weights come from traffic or users, always.

Get the split from your analytics, not from a guess. In Google Analytics 4, the country report shows users and sessions by country. In your ad dashboard, break earnings down by country as well; the AdMob reports allow this. Once you have both, you can calculate each country's real RPM and replace our benchmark with your own.

For a single country, our country estimate pages show how that market compares with others.

Seasonality and the year ahead

Advertisers spend more in some months than others, so a number measured in October is not a good guide for January. Our seasonality index runs, from January to December: 0.78, 0.85, 0.95, 0.93, 0.97, 0.96, 0.92, 0.95, 1.00, 1.08, 1.25 and 1.36.

NicheJanFebMarAprMayJunJulAugSepOctNovDec
Technology0.800.860.950.930.950.930.900.971.021.081.321.29
Finance & Business1.051.001.021.000.950.920.880.900.971.031.121.16
Health & Wellness1.181.000.970.940.970.930.880.900.981.021.101.13
Food & Recipes0.820.840.900.950.940.900.860.880.971.101.381.46
Travel0.921.001.101.081.121.101.020.950.940.950.920.90
Gaming0.800.820.900.880.900.940.950.961.001.081.351.42
Lifestyle0.800.880.960.950.980.950.900.930.981.061.271.34
News & Entertainment0.900.920.980.970.980.960.940.951.001.061.151.19
Education0.950.961.000.980.920.820.801.081.181.081.101.13
General0.780.850.950.930.970.960.920.951.001.081.251.36

The twelve values add up to exactly 12.0, so the index averages 1.00. That makes the arithmetic convenient: divide a month's revenue by its index to find your "average month", then multiply by any other month's index.

Say the app above earned $13,104 in October, when the index is 1.08. The average month is 13,104 / 1.08 = $12,133. Forecasts for other months, assuming the audience stays the same:

  • January: 12,133 x 0.78 = about $9,464
  • November: 12,133 x 1.25 = about $15,167
  • December: 12,133 x 1.36 = about $16,501
  • Full year: 12,133 x 12 = about $145,600

This only models ad prices, not traffic. Apps and sites often see their own audience cycles on top. The guide on January revenue drops explains the dip, and preparing for the Q4 peak covers the other end.

A spreadsheet layout you can copy

Build it in three blocks. Put assumptions at the top and never type a number into a formula.

A1  Daily active users            B1  20000
A2  Share Tier 1                  B2  0.40
A3  Share Tier 2                  B3  0.20
A4  Share Tier 3                  B4  0.40
A5  Rewarded per DAU              B5  1
A6  Interstitial per DAU          B6  3
A7  Banner per DAU                B7  6

A9  eCPM         Tier1  Tier2  Tier3
A10 Rewarded     12.00  5.00   1.40
A11 Interstitial 8.00   3.20   0.90
A12 Banner       0.90   0.40   0.10

A14 ARPDAU Tier 1   B14  =(B5*B10+B6*B11+B7*B12)/1000
A15 ARPDAU Tier 2   B15  =(B5*C10+B6*C11+B7*C12)/1000
A16 ARPDAU Tier 3   B16  =(B5*D10+B6*D11+B7*D12)/1000
A17 Blended ARPDAU  B17  =B2*B14+B3*B15+B4*B16
A18 Daily revenue   B18  =B1*B17
A19 30-day revenue  B19  =B18*30

Add a platform multiplier cell (1.0 for Android, 1.3 for iOS) and a category multiplier cell, and multiply B17 by both. Add a month column that multiplies B19 by the seasonality index. For a website, the same shape works with pageviews in B1, RPM per tier in place of ARPDAU, and no format rows.

Checks before you trust the answer

A forecast with no checks is a guess in tidy columns. Run these.

Work backwards. Take your total and divide it by DAU or pageviews. Does the ARPDAU or RPM sit in a believable range? A casual game with a $0.20 ARPDAU from ads alone would be far above our Tier 1 blend and deserves suspicion. A blog RPM of $50 on general-interest content deserves the same.

Compare with your own reports. Once you have a month of real data, replace the benchmarks with your actual eCPM per format and country. Your numbers will usually differ from ours, and that is the point of the exercise.

Check ad views per user against your actual session length. Eight ad impressions per DAU is plausible for a casual game with ten minutes of play. It is not plausible for a utility opened once a week.

Allow for deductions. Invalid traffic can be removed from earnings after the fact, which is covered in the guide to invalid traffic. Exchange rates change what lands in your bank. Websites also lose impressions to ad blockers, and the ad network's pageview count can fall short of your analytics count for that reason. Leave a margin of 10% to 20% in a conservative forecast, and treat that as a rule of thumb, not a measured figure.

Watch the learning period. New apps and new sites tend to earn less in their first weeks, because buyers have no history on them. Forecast from the date you have stable data.

Common questions

What is the difference between eCPM and RPM?

eCPM divides earnings by ad impressions. RPM divides by pageviews (or sessions). A page with four ads has four impressions per pageview, so its RPM is roughly four times each slot's eCPM when all slots fill.

How many impressions will my users generate?

It depends on your design more than on the network. Count it from your own events: ad shown callbacks per user per day. If you have no data, start with a modest plan and adjust after the first two weeks.

Should I include the revenue share in my forecast?

No, if your inputs come from a dashboard. Reported earnings already reflect what you receive. If you are using an advertiser-side price, such as a CPM from a rate card, then the publisher's share matters and you should reduce the figure accordingly.

How accurate can a forecast be?

Within a band, not a point. Our benchmarks are estimates, and real eCPM can sit well above or below them. Run a low case, a base case and a high case, and plan spending around the low one.

What to do next

Open your latest report and write down four numbers: impressions, earnings, DAU or pageviews, and the share of traffic from each country. Put them into the spreadsheet above, replacing our benchmarks with your own eCPM per format where you have it. Compare the result with last month's actual earnings. If they differ by more than about 15%, find the input that is off, usually ad views per user or the country split, before you forecast anything further.

Then try the AdMob revenue calculator or the AdSense revenue calculator with the corrected numbers, and compare the answer with your sheet.