Counting What Counts: CPM vs. Revenue

By Christopher Reid |
December 15, 2016


It’s common for publishers to use CPM to compare the performance of ad partners. However, CPM doesn’t take into account a variety of factors, and can leave publishers confused when the CPMs on partner dashboards don’t translate to revenue. In order for publishers to truly understand how partners are performing, they need to look at eCPM and revenue, not just CPM.

A quick refresher: what is CPM and why is it important?

Cost Per Mille (CPM) is the amount advertisers are willing to pay for one thousand impressions on a given website. For example, a $2.00 CPM means that 1000 impressions at that rate will yield payment of $2.00. CPM will vary widely between sites and partners, and there are many factors that play a role in determining CPM, like content, advertiser, geography, audience demographics, and intent.

Publishers have been conditioned to think that high CPMs are better, but this isn’t necessarily the case. Just because a publisher is seeing higher CPMs doesn’t mean that this will translate to more revenue.

How does CPM differ from revenue?

If CPM is not the best way to determine the revenue potential of a website, then what is? Well, why don’t we try measuring revenue itself?

In a perfect world, a publisher could do a simple calculation to figure out how much revenue a site is yielding:

(Total # of impressions) * (CPM / 1000) = Revenue

If a publisher does this quick math and sees that the numbers don’t match up to the payment they receive from a demand partner, then clearly the CPM is not representative of the site’s real-world revenue potential.
The problem with CPM is that it doesn’t account for factors like fill rate and loss, which significantly impact a site’s actual revenue.

How focusing on the wrong metric can cost you revenue

When publishers focus on CPM instead of revenue, they can find themselves taking actions to increase CPM that actually keep dollars out of their pockets.

One of the most common ways that publishers try to increase CPM is by setting hard price floors for their site. Setting a floor is simply telling the ad server that impressions can only be filled if a minimum CPM threshold is met.
What this does is raise the CPM. If only ads with CPMs above a certain threshold are served, then the CPM reported on the publisher dashboard will be an average of all CPMs above that floor. But what this also does is ensure that every paid ad impression valued less than the floor is not monetized — and those lost impressions, and subsequently lost revenue, may not be considered.

So there you have one obvious problem with focusing on the wrong metric: in order to increase CPM, any impression valued less than the floor is not monetized, and becomes a wasted revenue opportunity.
Here’s an example: Say you have five buckets of impressions each worth different CPM amounts: $0.25, $0.50, $1.00, $1.50, and $2.00. The revenue, if each bucket held 1000 impressions, would be: $0.25 + $0.50 + $1.00 + $1.50 + $2.00 = $5.25 at an average CPM of $1.05.

Now consider the same five buckets, but this time we will use a price floor of $1.10. When we set the price floor, any impression worth less than the floor does not serve an ad and the revenue from each of them is not collected. So our new revenue, using the CPM values, is $0.25 + $0.50 + $1.11 + $1.50 + $2.00 = $4.61 at an average CPM of $1.54 (so, one might think “Wow CPMs are up 46%!”).

Screen Shot 2016-12-13 at 1.24.22 PM.png

So what happened? While in some cases the price floor can elevate a bid, as is seen for bucket C above, it does eliminate several of the CPM buckets altogether. So, while CPM increased by 46% when we used the price floor, the revenue decreased by 12%. The CPM increases because the low-CPM impressions are no longer pulling down the average. The revenue decreases because the low-CPM impressions are not being monetized and that value unrealized.

Getting the math right

Publishers often calculate CPM using the following formula:

CPM = (Revenue / 1000 Filled Impressions)

The problem with this formula is that it doesn’t take into account fill rate or loss.

Fill rate represents the percentage of ad requests that are actually filled with an ad — it helps you understand how many ad requests you make $0.00 on. So if 1000 impressions are requested and 853 ads are served to those impressions, then the fill rate would be 85.3%.

Publishers may inadvertently do things that decrease fill rate. For example, like we discussed above, when a hard price floor is set, any ads below that floor don’t serve, effectively reducing the fill rate for the site (see chart below for one of our properties).


A common way to increase fill rate and reduce loss is by using header bidders. Header bidding works by holding an auction at the page level for each impression. The auction offers the page impression to various bidders, and the impression is awarded to the highest bidder. Depending on the number of bidders involved, the auction can also substantially increase the fill rate over that seen when using price floors — basically, the chances that one of the various bidders will want to bid on the impression and fill it increases as the number of bidders increases. Also, because the impression isn’t being passed from partner to partner through a waterfall, the potential for loss decreases due to faster timing.

If publishers want to measure the true revenue potential of their sites, they need to calculate effective CPM (eCPM), which includes lost and unfilled impressions. To calculate eCPM:

eCPM = (Revenue / 1000 Requested Impressions)

If we revisit our example data from above:

Screen Shot 2016-12-13 at 1.24.56 PM.png

We can see that the eCPM for our “$1.10 Price Floor” data has dropped significantly while its revenue has stayed the same. In fact, the “$1.10 Price Floor” CPM is now lower than the “No Price Floor” CPM.

Getting everyone on the same page

So, how do you explain this to someone hooked on the old CPM metrics? “Oh hey, you know that industry standard that everyone uses for ads on the internet? Yeah, its no good. Use this special version of it instead” doesn’t really go over too well. So tell them to run a test, 50:50. If that isn’t possible, run some other ratio. Even 99:1 works if there is enough traffic.

Once the test has run its course, they can look at the data. Use the same calculations for eCPM, revenue, and fill rate. Make the data comparable, normalize it so that the numbers from 1% can be compared side-by-side with the 99%.

For example:
1% share revenue: $200. Normalized to 100%: $200/(1%) = $20,000
99% share revenue: $18,500. Normalized to 100%: $18,500/(99%) = $18,686


In this case then, whichever method was used on the 1% share would generate more revenue for the site if given 100% of the traffic.

All of these calculations are for the purpose of getting the most correct view of how a monetization strategy performs. Every impression is accounted for, all revenue is tracked, and eCPMs accurately reflect the inventory. Armed with all of this information, a publisher is then much better equipped to gauge performance over time, and gauge the performance of the partners they use to run their business.

If one of your advertising partners consistently gets the highest CPMs, but its fill rate is low, then the revenue it’s delivering is much lower than the CPMs would indicate.

Calculating eCPM to measure revenue will show you exactly how much money your partners are bringing to the table, and allow you to better optimize revenue in the future.

Find out what should be measured on your site

Our team of experts is ready to help you calculate what is important.

(Also, we explore all corners of the ad tech industry, everything from Google's position in the market, to how AdX rules affect CTR, and if above the fold ad placement really matters.)

Let Us Help You

Add your comments