We’re excited to announce the release of Prebid 5.0!
This milestone is all about improving information in the bid stream. We’ve recently incorporated the work of the taxonomy working group and their collaboration with IAB Tech Lab’s seller defined audiences project and re-specified how first party data will be passed in the bid stream. In addition, first party data validation and enrichment modules have been released. Both of these developments will go a long way towards making Prebid bids richer and passing data easier to implement. Publishers will be able to set their first party data once and have that picked up by multiple partners who may put it right in the open stream or create deal id’s for buyers based on these data. It will be easier than ever for a publisher to unify a deal over multiple partners. On the theme of publishers doing something once and all bidders having that information available, we’ve enforced bidders being required to honor OpenRTB video parameters defined on an ad unit. This was recommended in the past but is now absolutely required. We expect this makes video integrations more fair to each bidder, as they will have access to the same descriptive parameters. Also, video bid streams will have richer data, with more defined optional and recommended OpenRTB parameters. Finally, this will minimize the Prebid Video integration effort publishers now do for each bidder.
Another rules enforcement is that bid adapters must bid. Prebid released the Real Time Data module in the Fall of 2020. Before that, Prebid had a couple bid adapters providing fake bids as a stopgap, and those created unique integration and interoperability issues. Those bidders have now been re-tooled to use this module. One really exciting improvement to Prebid recently has been the contribution of the Floors Module. This module has spawned a couple new community members who have become floors providers. Also, it has made the community aware of a need for standardizing how this value is passed, both to Prebid Server and bid adapters. That standardization was announced as recommended in Prebid 4.0 and to be required in Prebid 5.0. With that day now here, publishers can expect any bidder accepting a floor to read it from the floors module if they are using it. This will really improve things for bidders, who do not need to go tell all their publishers to change the integration if they want to begin to support floors, and for publishers, who can unify the floor across all adapters in a single step. With all this information being added to the bid request, we do have one more announcement about the bid response. Bidders must now include support for the OpenRTB field adomain. Some bidders have not yet enabled this support on their endpoint, but each adapter has been verified to handle it in their js when that work is completed. Advertiser domain is incredibly important for every publisher, who may wish to pass it to their ad server via the hb_adomain key to enforce blocks and floors, track down bad ads, or make reports for their sales team. SSPs have long expected this information from DSPs; in Prebid 5.0, publishers can now expect this from SSPs.
We’re also closely tracking the demand chain object standard, and look forward to future enrichments in buy side transparency. A few other minor changes have happened. Some standard keys have been moved to optional to reduce excessive ad server targeting. A configuration field has been deprecated. Behavior of Prebid Server has changed when passing a debug flag. A few adapters have been consolidated, including Sharedid/Pubcommonid, Adform/Adform OpenRTB, and Zemanta/Outbrain. If you’re building with one of those modules check to make sure it is the right one. We’re really excited about this release of Prebid and we hope you agree with us about the direction of the project, with consistently improving bid request and bid response standardization and enrichment. Look for future announcements along this theme, or join us on Github and be a part of the conversation.
Here are the changes in Prebid.js 5.0 that publishers need to be aware of:
1. Not all bidders have been ported into 5.0 due to rules enforcement — this includes compliance with advertiserDomains, video params, and price floors. Details can be found in the following issues:
- Support video params at the adunit level
- Adapters must support advertiserDomains
- Bid adapters that support floors must support the floors module
This means that when moving to 5.0, publishers should ensure that all of their current bidders are supported. Otherwise, we do not recommend migrating, and we recommend that publishers should reach out to their bidders to bring the relevant adapters into compliance.
One way to find out which bidders are supported in 5.0 is to check the Prebid.js Download page.
2. Two bid adapters that weren’t actually bidders have been moved to be real time data modules. If you want to use IAS or Optimera, please refer to them as “RtdProviders” rather than “BidAdapters”:
gulp build --modules=iasRtdProvider,optimeraRtdProvider
3. PubcommonID and SharedID have merged in 5.0 and are now called “Shared ID”. Publishers that formerly built their Prebid.js package with pubCommonIdSystem will need to instead build with sharedIdSystem.
gulp build --modules=sharedIdSystem
There is, however, in-page backwards compatibility via an alias; a page that enables PubcommonID will now actually enable SharedID without changes. Publishers should be aware of the decisions they’re making when it comes to the namespace of the cookies that are stored as a result of the implementation of the UserID module. Publishers can control the name of the cookie leveraged by the module, and may or may not choose to change the cookie name. If you leave the PubCommon in-page configuration in place, the Shared ID module will utilize the cookie defined for PubCommon, which is fine. Also note that SharedID no longer attempts to do syncing across the 3rd party sharedid.org cookie. Please note that either approach will result in an extended IDs array where source=’pubcid.org’. The source of ‘sharedid.org’ has been deprecated.
Note that you should avoid enabling both pubCommonId and SharedID in the in-page configuration.
4. Prebid.js 5.0 changes the default keys sent to the ad server. If publishers are currently leveraging the hb_cache_id or hb_source in any capacity they should be sure to add these keys back into their configurations using setConfig in the page when upgrading to 5.0. While it’s recommended that publishers take this opportunity to review which targeting variables they need, you can get all available banner targeting variables by adding this command to the page:
config.setConfig({ targetingControls: { allowTargetingKeys: [\'BIDDER\', \'AD_ID\', \'PRICE_BUCKET\', \'SIZE\', \'DEAL\', \'SOURCE\', \'FORMAT\', \'UUID\', \'CACHE_ID\', \'CACHE_HOST\', \'ADOMAIN\'] } });
5. A new convention has been adopted for defining the ad unit position on the page, aligning with OpenRTB. Publishers should update adunit definitions to add the ‘pos’ attribute to banner and video mediatypes instead of passing the value on a bidder-specific parameter. At some point in the future, bidder-specific page-position will be removed.
pbjs.addAdUnits({ code: \"code\", mediaTypes: { banner: { pos: 1, // pass page pos here with OpenRTB values sizes: [[300, 250]] } }, bids: [{ ... // ... not here }] });
The OpenRTB page position values are: 0=unknown, 1=above-the-fold, 3=below-the-fold, 4=header, 5=footer, 6=sidebar, 7=full-screen
6. All bid adapters that support video parameters now support them in the mediatypes section of the adunit.
pbjs.addAdUnits({ code: \"code\", mediaTypes: { video: { // place video params here context: \"inline\", playerSize: [[300, 250]], mimes: [\"video/mp4\"], protocols: [2,3,5,6], api: [2], startdelay: 0, placement: 1, pos: 1, maxduration: 30, minduration: 6, playbackmethod: [2], skip: 0, skipafter: 6, minbitrate: 300, maxbitrate: 9600 } }, bids: [{ ... // ... not here }] });
7. We’ve deprecated the ‘publisherDomain’ setting. It can still be used in 5.x, but may be removed in 6.0.
Deprecated:
pbjs.setConfig({ publisherDomain: \"https://www.example.com\" }); // deprecated
Preferred:
pbjs.setConfig({ pageUrl: \"https://www.example.com/path/index.html\" }); // preferred
8. For other items, we recommend reviewing the pull requests in the detailed release notes.