Outstream and instream video work in very different ways. The most important thing to understand when using OpenWrap and Prebid.js, is that bidders see the inventory as a video ad unit, but the ad server sees the inventory as a display unit. Because the ad server sees the ad unit as display, multi-format ad units that bid both display and video are possible. If a video bid wins, the wrapper injects a video player (the “renderer”), then passes the video creative to the renderer.
Since the ad unit looks like a display ad unit to the ad server and a video ad unit to the SSP, the impression counting methods are different. The ad server counts display ad impressions as billable when a tracker, inserted at the top of the winning ad HTML, reports that the ad has rendered. The creative notifies the wrapper it won, at which point the wrapper records the impressions, inserts the outstream player on the page, then instructs the player to play the winning ad.
SSP impression trackers fire from an impression event inside a VAST ad. For the SSP impression tracker to fire, the outstream player must fully load, process the creative. and begin ad playback. If the player fails to load or a VAST processing error occurs, the SSP’s impression tracker will not fire. Because VAST ads support “wrappers” (completely unrelated to header bidding wrappers such as OpenWrap or Prebid.js), there are several places where the ad can error out. VAST wrappers point to other VAST documents, so it’s not uncommon to have two or three layers of wrappers; if any of those VAST documents fail to load, the ad errors out. If the creative format for the ad is VPAID, then there are other opportunities for potential errors.
Since the SSP does not count the ad until much later in the load process, the SSP monetized impression count and revenue are typically considerably lower than the counts from the header bidding wrapper or the ad server for outstream ads.
The discrepancy between the SSP and the header bidding wrapper can be approximated by:
(probability outstream player fails to load) + (probability of a VAST/VPAID error)
Steps in the outstream flow
- Ad server requests bids from the header bidding wrapper.
- Header bidding wrapper sends video bid requests to each SSP.
- Wrapper conducts an auction to determine the winning bid.
- Wrapper sends bids to the ad server using targeting keys.
- Ad server matches targeting keys for the bids to header bidding line items.
- Matched line item wins and ad server returns the creative for that line item.
- Wrapper places Ad Server Impression Trackers and Line-Item Creative on the web page (ad server counts the impression at this step).
- Line-item creative notifies the wrapper that its bid won at the ad server (header bidding wrapper counts the impression at this step).
- Wrapper inserts outstream player on the page.
- Wrapper points player to the VAST ad and starts playback process.
- Outstream player processes the VAST, unwraps it, finds the actual video creative, then starts playback and fires the SSP impression tracker (SSP counts the impression at this step).
Unfortunately, video error rates run much higher than ad formats. When not using VPAID, error rates range from 10-to-25%; they can hit 30%, 40%, or even higher with VPAID creatives. Coupled with loading the outstream player, 40-to-60% discrepancies between SSP and wrapper numbers, or SSP and ad server numbers, are common.
Comparison to instream
These discrepancy numbers look high compared to instream because with instream video ads, all three layers (ad server, header bidding wrapper, and SSP), count using VAST impression events. Errors track separately and do not show up as a discrepancy between any of the three numbers.
At first glance, the opportunity cost of instream video errors looks lower because none of the layers of the system are reporting the revenue you would have gotten if the creative had rendered. This is illusory since outstream errors are just as costly as instream errors; often more so because instream CPMs are typically higher.
Outstream also has an additional drawback of non-rendering and therefore non-monetizing impressions, because the outstream player doesn't load until the ad wins. For instream, the player arrives with the initial page load, so if the player fails to load for any reason, the impression never exists.
Why outstream functions this way
The primary reason that header bidding outstream uses this hybrid approach where impressions look like display impressions to the ad server, but then look like video impressions to the SSP, is to support multi-format ad units. It’s not feasible to convert an impression that the ad server recognizes as video to a display impression. But we can convert an impression that the ad server recognizes as display, to video using a header bidding wrapper that inserts the outstream video player when a video bid wins.
The secondary reason for outstream functionality is that if the header bidding wrapper were to treat outstream as a video unit all the way to the ad server, setup would be more complex. To support that would require a separate set of video line items.
Fortunately, there are some strategies to minimize the impact of discrepancies. From a publisher’s point of the view, the best bid to select is the one with the highest expected value. The expected value is:
(CPM) * (probability ad becomes billable)
Strategy 1: learn from history
Adjust bids per SSP and per format, based on historic discrepancies. This strategy produces the ideal outcome for publishers, but requires a lot of heavy lifting to gather discrepancy data, then adding in adjustment factors. For example: if SSP A has a 20% revenue discrepancy between their numbers and the ad server's numbers, then reduce bids for that SSP by 20%.
Strategy 2: have a fall-back
Use separate ad units for outstream. With a single format unit, there's no opportunity from a competing display bid if the outstream unit fails to render. In this case, the outstream unit would be an additional ad unit on the page.
Strategy 3: get paid for the risk
Set a higher floor at the SSP for video bids going into the outstream. On average, this compensates for the additional risk of the outstream ad not rendering and being unbillable. This strategy is simpler and easier to implement, but does not produce the ideal result that strategy 1 does.