To increase website revenue, you need to understand a few key metrics. There is math involved, but it’s not too hard!

Every ad setup is basically the same. You will receive tags from an advertiser or ad network and set these up in your ad server (in this example, we assume DFP, but the same rules apply elsewhere). Every time an ad shows, an impression is counted in your ad server. At the same time, an impression is counted by the advertiser’s own ad server. It’s vitally important to understand that at this point, the ad might not get filled. There is a difference between Impressions and Filled Impressions. An impression is an opportunity to show an ad. A filled impression occurs when an ad is actually shown.

Every single ad will have 4 numbers attached to it:

  • Requests – this is the number of attempts counted by YOUR ad server.
  • Impressions – this is the number of attempts counted by the ADVERTISER’S ad server
  • Filled – this is the number of ads that were actually shown
  • Revenue – this is the amount of money you earned

Sometimes there are other numbers too, like “eligible requests” and “viewable impressions”. These are the subject of a future article. We’re trying to keep this as simple as possible.

You might wonder why the Requests and Impressions numbers would ever be different. Why should your ad server record a different number than the advertiser’s ad server? It turns out there are a lot of reasons this can happen, including diverse technologies, different counting methods, network latency, coding errors, and timezone differences, among many others. To keep things simply, just understand that there is a difference between Requests and Impressions.

For the remainder of this post, we will be showing you how to make these calculations in Google Sheets. The 4 metrics we just discussed: Impressions, Filled and Revenue will be collected from each advertisers reporting platform. Requests will come from your own ad server.


The first number we’re going to calculate is Fill Rate. This is simply the percentage of impressions where the advertiser has an ad for us. Stated as an equation:

Fill Rate = Filled / Impressions

Pretty simple. In our example, we see that our first advertiser, “Partner 1”, received 9,000 impressions. Of those 9,000, only 5,000 were filled. So we calculate a fill rate of 56% by applying the formula:

5,000 / 9,000 = 0.55555

Here is what it looks like using Google Sheets:

key-metrics-22 The second metric we will consider is Discrepancy. This is the difference between the number of ads your server has sent, versus the number of ads the advertiser’s server has received. Some people calculate discrepancy differently, but we prefer the following formula:

Discrepancy = 1 - (Impressions / Requests)

Discrepancy measures the loss of impressions between your ad server and the advertiser’s server. Because you will typically get paid based on the advertiser’s numbers, it’s important that your numbers match up. Don’t expect a perfect match! Discrepancy of up to 20% is considered normal, but lower is always better. Basically, if you have a discrepancy of 10%, then 10% of your impressions are wasted without being monetized at all. It’s possible to see a negative discrepancy, we’ll look at this in a different post, but as a rule, negative discrepancy indicates a configuration error or timezone problem.


The next metric is eCPM. This is how much money you earn from the advertiser for every 1000 filled impressions. The formula is easy (some people write this differently, but mathematically it’s identical):

eCPM = 1000 * (Revenue / Filled Impressions)

So for example, suppose you earned $7.50 from 5,000 Filled impressions. Your eCPM is $1.50, as seen in the calculation:

1000 * $7.50 / 5000 = $1.50

Here is an example in Google Sheets:


You can use this number to estimate growth. For example, if your eCPM is $1.50, you can manipulate the equation with algebra to estimate how much money you will earn from 20,000 impressions, in this case, $30.00. Remember when making this type of estimation that doubling your impressions won’t exactly double your revenue. It all depends on the value of the traffic.

20,000 * ($1.50 / 1000) = $30.00

Finally, we combine the notion of eCPM and Discrepancy to arrive at rCPM (There are several different nomenclatures and I’ve also seen this number called tCPM and RPM).

rCPM = 1000 * (Revenue / Requests)

Here is an example in Google Sheets:


rCPM is the number you want for optimization. It incorporates the notions of both Fill Rate and Discrepancy, giving a true value per 1,000 impressions. An example will clarify why this is so important.

Suppose you have two advertisers, Network A and Network B.

You setup both networks to receive 50% of your traffic.

Network A receives 10,000 requests, resulting in 5,000 impressions, 4,000 filled impressions and $1.00 of revenue. You calculate an eCPM of $4.00 and an rCPM of $1.00.

Network B receives 10,000 requests, resulting in 8,000 impressions, 6,000 filled impressions and $2.00 of revenue. You calculate an eCPM of $3.00 and an rCPM of $2.00.

Which is the better deal? Network B

Because there is a high discrepancy between your Requests (10,000) and Network A’s Impressions (5,000), you are basically throwing away impressions. Those 5,000 impressions are lost and you get zero dollars for them. It’s easy to miss this fact if you’re only looking at eCPM.

When you perform these calculations regularly for different ad units on your page, you will discover that often times different partners are able to monetize each ad size with different effectiveness. Using Requests, Impressions, Filled and Revenue to derive Fill Rate, Discrepancy, eCPM and rCPM will allow you to optimize your allocation of ads to make the best use of your inventory.

Drop Us a Line

We’re dedicated to working with the hungriest minds in our field. If you’re involved with digital content production or digital advertising and marketing, we’d love to hear from you. Big, small, experienced or beginner, please feel free to get in contact if you think we can be of service.

Say Hello