No More Ad Holes Blog 6: Zombies! (Really!)

Yuval Fisher - March 18th 2022

If you step out of your house and run into a hoard of zombies, you’re having a bad day. The same can happen in CTV monetization, where zombies can generate what look like day-ruining hoards of ad holes. This blog is about those zombies – and this story is based on true events.

(Before we start, recall our use of “use rate” to measure the proportion of returned ads that are converted into impressions. The use rate is a good measurement of how well the ad insertion delivery chain works, in contrast with the “ad fill” rate, the proportion of available ad space for which ads are returned by demand sources. This measures how well demand sources are working. The product of the two is the “render rate”, which measures the effectiveness of monetization overall: how much of the available break duration is filled by ads that have impressions. This is covered in the first blog in this series.)

Our opening scene starts with frolicking teenagers (probably at the local swimming spot where monsters and axe murderers hang out), reviewing statistics related to render rates for their Connected TV service. Ominous music tells us the render rate is awful. Only half of the available inventory (that is, total ad break time) is converting to impressions. Queue the Psycho-style terror music. No one yet knows that the problem is zombies. 

Someone has to look into the horrific render rate, and in this case, our protagonist (soon to be zombie slayer) is Chris, the head of Wurl’s solution architecture group. Chris’ phone rings during breakfast.

“Hello, is this Chris” a panicked voice asks. 

“Yes,” responds Chris.

“I’m a frolicking teenager with an avid interest in CTV render rates, and something is very wrong with service X,” continues the panicked voice.

Chris enthusiastically answers, “I see. I think I can help!” 

Chris checked the following:

  • What are the inventory numbers? They are solid. Lots of users are connecting to Service X, and when they hit ad breaks, they make requests for ads that include the break duration. The aggregated break duration for all users is the total inventory. 
  • What’s the fill rate? It’s solid. Returned ads generally filled available breaks. 
  • What’s the use rate? Not good. Terrible. Those ads were not converting to impressions. There are ad holes here all the way down to the turtles! Could Wurl’s infrastructure be throwing away perfectly good ads? Say it isn’t so! It isn’t so. 
  • Are there channels delivered to service X and also to another service? Yes, and they have wildly different use rates! This suggests that the issue isn’t source-stream related. 
  • What about comparative CDN data? Here something starts to look amiss. The amount of viewing time on the service isn’t in line with the total inventory. How can this be? 
  • Looking more carefully, Chris compares ad requests to CDN usage. There appear to be lots of users who make ad requests from IP addresses that have very little or no CDN usage at all. They are watching CTV to get ads but not watching TV!

Queue music: dun dun dun! 

At this point, we need to take a break and review how ad insertion works. Here’s a picture:

Short video fragments are distributed to CTV clients from a CDN, which is fed by a playout source and Ad server. The CTV client knows which fragments to request and their playback order by looking at a manifest, which is just a list of URLs referencing the video fragments. The manifest is updated periodically so that new fragments from live streams can be made known to the client. When an ad break happens, ad manifests (in purple) are spliced into the stream manifests, and the client sees ads. The ad manifests are returned in response to a request for ads made by the ad splicer. This is where inventory – the total available break time – is measured. 

Lastly, when ad fragments are delivered, an impression is recorded for the ad. 

But consider what would happen in the following scenario:

The client has become a zombie. The zombie behaves like this: It continues to make manifest requests, and at ad breaks, the ad splicer asks for ads and receives them, accruing inventory and giving a good fill rate. But the zombie isn’t actually alive – it doesn’t show any video; it makes no fragment requests, and hence it doesn’t trigger any impressions. 

Zombie processes never create impressions on inventory they create! The demand side thinks there are ad holes everywhere, but they’re fake, zombie-induced ad holes. 

This is what Chris uncovered. On sharing with Service X, they investigated and found the issue and fixed it. Render rates shot up. Use rates shot up. Everyone frolicked. 

Paraphrased, here is what they said: “A new, active-standby mode in some TVs turned off the display and audio, but the software continued to run in the background.” They also adopted the (apt) “zombie” term.

Is there a lesson here? Yes, several. First, don’t frolic at the local lake. Second, not everyone’s a zombie slayer. Chris isn’t sitting around every street corner waiting to kill zombies, so Wurl and Wurl’s partners are lucky to have him. And having a content and monetization team that understands the complete workflow is mandatory to fixing (what looks like) monetization issues. If you’re monetizing with Wurl, we got your back. 

Share this Article