GPT Pre-Auction Module

Overview

This module enables targeting and tracking at the ad server adunit level.

Enabled by default if compiled into your package, this module will add the Prebid Ad Slot and matching GAM ad unit name to each ad unit’s first-party data before bid requests are sent to the adapters.

  • Prebid.js Adapters - will be able to utilize these values as:
    • AdUnit.fpd.context.adServer.name=”gam”
    • AdUnit.fpd.context.adServer.adSlot=”/1111/home”
    • AdUnit.fpd.context.pbAdSlot=”/1111/home-left”
  • Prebid Server Adapters - will see the OpenRTB as:
    • imp[].ext.context.data.adserver.name
    • imp[].ext.context.data.adserver.adslot
    • imp[].ext.context.data.pbadslot

Configuration

Unlike many other modules, the GPT Pre-Auction Module is on by default if it’s compiled into the Prebid.js package.

Optional initialization parameters:

  • enabled (on by default)
  • customGptSlotMatching function
  • customPbAdSlot function
pbjs.setConfig({
    gptPreAuction: {
	enabled: true, // enabled by default
	customPbAdSlot: function(adUnitCode, adServerAdSlot) {
		...
		return "customPbAdSlot";
	},
	customGptSlotMatching: function(gptSlotObj) {
		...
		return true; // or false
	}
    }
});

How It Works

When this module is on, it uses the BEFORE_REQUEST_BIDS event to insert functionality that:

  • loops through each adunit in the auction
  • maps the adunit to the GPT slot using the same algorithm as setTargetingForGPTAsync including customGptSlotMatching

If GPT slot matching succeeds:

  • it sets fpd.context.adserver.name to ‘gam’
  • it copies the resulting GPT slot name to fpd.context.adserver.adSlot

The customPbAdSlot function is called if it was specified, writing the results to fpd.context.pbAdSlot. If there’s no customPbAdSlot, a default algorithm is used to determine fpd.context.pbAdSlot:

  • first use the AdUnit’s context.pbAdSlot if defined
  • else, see if the AdUnit.code corresponds to a div and if so, try to retrieve a data element from the div called data-adslotid.
  • else if the GPT slot matching succeeded, use the GPT slot name
  • else, just use the AdUnit.code, assuming that that’s the ad unit slot

Further Reading