What are Ad Holes, and What Errors Cause Them?

(Image credit: Wurl)

Part 1 of 2

The monetization of ad-supported, linear over-the-top (OTT) video suffers from multiple issues: domains of expertise are distributed (try catching an ad insertion and demand person in the same room); acronyms seem designed to confuse (why do some people call it AVOD?); and it uses new, complex, sometimes-wobbly technology. We’ll clear all of that up in this article. 

Not really. You really thought that was possible? Pshaw. But we’ll clarify a small portion related to ways that monetization in server-side ad insertion (SSAI) OTT video delivery can fail. An architecture for that ecosystem is shown below.

(Image credit: Wurl)

Publishers monetize their content by creating ad breaks in their linear streams into which ads are spliced. In typical OTT delivery, these ads—targeted or not—are fetched in close-to-real-time from an ad server and spliced by an SSAI system into each user’s linear video stream. Ad calls are made when ad breaks occur in the playout stream. The returned ads typically require transcoding into the delivery streaming format before they can be spliced for delivery in the stream. 

A publisher with a 15% ad load—that is, nine minutes per hour—might imagine that they can fill each hour of viewing with 36 15-second ads, resulting in, as an example, $0.36 of revenue per hour viewed, assuming a $10 CPM (cost per thousand impressions). Unfortunately, that rate of insertion doesn’t ever really occur, because a significant portion of the nine minutes will be filled with ad holes—spots where no ad was inserted for a variety of reasons—which will be covered in this article.

Ad holes are a rarity in broadcast video, where ad placement is carefully pre-planned and is rarely programmatic. In OTT, ad placement is most often not pre-planned; it is often programmatic, and demand is not yet as high. Ad holes are everywhere. 

What causes an otherwise perfectly good ad slot to become an ad hole? There are, broadly speaking, plain errors, systematic issues and misunderstandings. Understanding the root causes of ad holes can help publishers improve their monetization, at the very least by understanding which ecosystem partner to hold accountable for less than optimal yield.


Even with relatively comprehensive specifications (e.g. IAB’s VAST), straightforward but hard to find errors are common. The most direct error is a “non-conformant VAST response.” Even some major programmatic DSPs—the systems where most ads originate—suffer from this issue occasionally. Non-conformant VAST leads to a parsing error, which isn’t always flagged by the VAST parser on the SSAI system. A more subtle variant of this is an incompatibility between the VAST response and the VAST parser.

Issues encountered in the wild include:

  • Expectation on the VAST payload formatting. These include issues such as white space in CDATA blocks or ordering of XML elements in the VAST response. The VAST specification allows variability, but the overwhelming majority of VAST responses, as an example, position XML elements in the same relative order. Some (major brand) systems make assumptions about this order and will break when elements are not in the expected order. 

Example of a real-world, broken VAST response with an erroneous, repeated opening header. (Image credit: Wurl)
  • Expectation on non-empty VAST XML elements. Data, such as the Ad System ID, are expected by some components as ways to categorize VAST responses. If they are omitted, the response may be completely rejected.  
  • Inconsistent data. For example, some ad insertion systems balk when the VAST-signaled creative duration is different from the actual creative duration. Is this an error or a feature? It’s not clear: Should ads that are longer than specified be inserted or rejected? One can make an argument for either approach.  
  • Beacon length issues. Inserted ads are measured by beacons—URLs that signal to the ecosystem participants that an ad was viewed. In some situations, these beacons may exceed the URL limit of 4,096 characters and are rejected. These aren’t ad holes; they just look like ad holes, since they do not register as having received an impression, and hence are not monetizing. 
  • Weirdly long HTTP headers. Some responses carry very long strings of data that break some servers.    

The above all result in ad holes: ad responses that do not lead to a monetizable impression. 

How are these issues mitigated? Bad or incompatible VAST generated by a DSP is difficult to track. The most common approach to uncovering these issues is to note certain ads that never lead to impressions. This requires per-ad-creative monitoring, which is difficult to automate. Fixing these issues is also difficult, since normally there aren’t direct relationships between DSPs and SSAI vendors, not to mention publishers.

Problems, like long headers, that manifest pair-wise between ecosystem partners—for example a DSP and an SSAI system—are almost impossible to fix without a central entity that can manage all the partners in the ecosystem, each of which is convinced the problem is elsewhere.

The good news is that these types of errors are becoming less frequent over time as the ecosystems mature, including the introduction of central mediating entities. 

However, some issues aren’t errors, they’re incompatibilities between distinct systems, e.g. the demand ad server and the SSAI system. These issues are a bit arcane but worth understanding, so stay tuned for Part 2, which will dig deeper into the systemic issues that cause ad holes and misunderstandings that lead to unfilled inventory.  

Yuval Fisher is senior vice president, technology for Wurl.