The Prebid Universal Creative (PUC) is a collection of rendering routines that can pull a particular ad ID from Prebid’s cache and do the right thing to display it. The scripts are generally entered into the ad server for when a Prebid ad has won the auction. There are a number of use cases:
Use Case | PUC file | Alternate Approach |
---|---|---|
web banner: iframe | banner.js (or creative.js) | Dynamic creatives, Banner and Outstream Video iframes |
web banner: safeframe | banner.js (or creative.js) | Dynamic creatives, Banner Safeframes |
web outstream video: iframe | video.js (or creative.js) | Dynamic creatives, Banner and Outstream Video iframes |
web outstream video: safeframe | n/a | Outstream renderers each choose where to render differently, but none writes to the safeframe. |
AMP banner: always safeframe | amp.js (or creative.js) | n/a |
native: iframe | native.js (or native-render.js) | Dynamic creatives |
native: safeframe | native.js (or native-render.js) | Dynamic creatives |
Note that as of PUC v1.15, the recommended way of loading the creative
in the ad server involves using the hb_format
ad server key-value. Before 1.15, the ad server needed to load creative.js which covered banner and outstream video, or native-render.js for native. 1.15 simplifies this
by allowing the ad server creative to load banner.js, video.js, or native.js, which can be done programmatically using ad server macros. e.g.
<script src="https://cdn.jsdelivr.net/npm/prebid-universal-creative@latest/dist/%%PATTERN:hb_format%%.js"></script>
This loads the PUC from the Prebid-maintained location. Your managed service provider may have a different location.
${AUCTION_PRICE}
macro in the creative body.Some publishers prefer to not load the extra creative.js code at render time due to a tiny but measurable impact on measurement discrepancies.
While Prebid recommends the use of creative.js because we regularly add features and fix bugs, publishers may choose to hardcode the functionality into their ad server creatives.
If you only need to display creatives rendered by Prebid.js (as opposed platforms like AMP or mobile SDKs), you can avoid loading the PUC script - and the performance cost that entails - but still keep some of its advantages, such as regular updates, by using Prebid.js dynamic creatives.
If you only ever need to display non-safeframed banner and outstream-video creatives, there are several ways to replace the jsdelivr
call in your ad server creative:
https://cdn.jsdelivr.net/npm/prebid-universal-creative@latest/dist/creative.js
into each creative.renderAd
function:<script> var w = window; for (i = 0; i < 10; i++) { w = w.parent; if (w.pbjs) { try { w.pbjs.renderAd(document, '%%PATTERN:hb_adid%%'); break; } catch (e) { continue; } } } </script>
If safeframe support is required, some options are:
https://cdn.jsdelivr.net/npm/prebid-universal-creative@latest/dist/creative.js
into each ad server creative.