If you are a Google Ad Manager publisher running either AdSense or AdX and you have been paying attention, then you probably already use Dynamic Allocation to increase your earnings. If not, read “Why dynamic allocation makes DFP so good” now, then come back and read this after for the detail afterwards. If you are using dynamic allocation then you have probably at some point wondered whether you are setting your CPM rates correctly.
When CPM rates are set badly it can not only stop dynamic allocation performing well, but can cause an account to perform worse than the lowest performing network in the stack. Despite this, badly set CPM rates are one of the most common issues that we see when we audit publisher’s Google Ad Manager accounts.
Why do we need to set CPM rates?
Dynamic allocation gives AdSense (or AdX) the chance to win an impression from another source if it can beat what that source would pay. Google Ad Manager does this by checking the best price that AdSense will pay for any impression and comparing it with the CPM rate of line item that would otherwise have won. If the CPM rate is set too low you could miss out on a potentially higher bid. If it is set too high you might sell the impression for less than you were already offered.
If you had a 100% fill network that rarely dropped an impression and paid a flat rate this would be simple. You could just enter the network CPM as the CPM in Google Ad Manager and everything would work out correctly.
Bad model #1 : GAM CPM = Headline CPM
This sort of simple pricing works well if you are selling impressions on a direct deal but rarely holds up to the complexities of real-world network deals.
Accounting for fill rate
Fill rate can create the biggest discrepancy between the headline rate and actual performance. A partner offering $10 CPM but only filling 20% of impressions is nearly not worth as much as a partner offering $6 CPM and filling 50% of impressions ($2 vs $3). Official help resources from Google (such as this) suggest pricing GAM line items based on CPM multiplied by fill rate.
Bad model #2 : GAM CPM = Headline CPM * Fill Rate
This is clearly an improvement over using headline CPM alone, but still rarely paints an accurate picture.
It is usual to see a difference between how many impressions GAM gave a network and how many of the impressions the network reports that they received. These discrepancies are completely normal but do vary considerably from one network to another. This can significantly impact the rate that the publisher gets paid for their impressions.
An example: Using “Bad model #2” a site filling 30% of impressions at $15 would be trafficked at $4.50. If they were dropping 15% of impressions, they would actually yield $3.83.
The answer to this issue is to abandon the headline CPM completely and instead calculate a true CPM based on the impressions sent to the network and the revenue generated by them. To do this we look at the revenue and the impressions reported by GAM (rather than those reported by the source). If you consider that a publisher’s commodity is the impressions that they have to sell, this makes a lot of sense: You want the best price for every impression that GAM has to offer. This brings us to a much improved 3rd bad model:
Bad model #3: GAM CPM = Revenue from source / Impressions offered to source * 1000
All passbacks are not created equal
The final variable to account for is how passbacks perform for each line item. Unless the network is taking 100% of impressions, you should be passing unfilled inventory somewhere. Because each network will “cherry pick” the impressions that they want to serve, passback inventory from each is likely to differ. To get a true reflection of the value of a line item you need to also be measuring the performance of everything down-stream of the first tag.
Good model #1 : GAM CPM = (Revenue from source + revenue from inventory passed back from source) / Impressions offered to source * 1000
That last step is complicated, so let us walk through an example:
- We have a line item that is a waterfall with 3 sources: Retargeter A, Network B and Remnant network C
- We serve 1,000,000 impressions to that line item
- Retargeter A earns us $2137 (reports 950k impressions and takes 15% at $15 CPM)
- Network B earns us $3222 (reports 807k impressions and takes 60% at $7 CPM)
- Remnant C earns us $292 (reports 306k impressions and take all at $1 CPM)
- Total revenue from 1million impressions = $5,651 or $5.65 CPM
A perfect solution?
In the above example, it would be correct to traffic that line item at $5.65 if you wanted dynamic allocation to compete fairly against it. The model is good in terms of accuracy, but not perfect. Performance fluctuates and models based on historic performance are out of date as soon as they are applied. The solution is to update as frequently as you can, but that is time-consuming if you are analysing that level of detail on multiple line items.
In practice, publishers taking this approach will update the performance of the sources at the head of each chain more frequently than those at the tail. This is is a good compromise for many who don’t have either the technology or resources to update continually and still helps improve the gains from dynamic allocation.
If all of this sounds like way too much number crunching, then the other option is to get someone else to do it for you. OKO manage the ad inventory of busy publishers, helping them earn more for their impressions without the worry. Get in contact if you would like to find out more about how we can help you.
Mat has been supporting content creators on the web since 1996. As Co-founder of OKO Digital, Mat became the first person in the UK qualified to AdSense partner status and repeated this first with Google Certified Publishing Partner programme.