Send all bids to the ad server

As a publisher, you may wish to have your ad server see all header bidding bids (instead of seeing only the winning bids in each auction). Reasons you might want this behavior include:

  • You want your ad server to see all header bidding bids, so that your ad server can report on bid prices, instead of only winning prices

  • You have a contractual agreement with your header bidding partner

In order to send all bids to the ad server, the development and ad ops setup are slightly different from sending the top bid to the ad server.

Specifically:

  • Your developers will edit your JS code on the site to call the pbjs.enableSendAllBids() method. For details, see send all bids to the ad server with Prebid.js and the description in the Publisher API Reference.

  • From the ad ops side, you’ll need to set up one order per bidder, so that each order can have a set of line items using targeting keywords that include the bidder’s name. For example, if you are working with Rubicon, you would use hb_pb_rubicon in your line item’s key-value targeting, and hb_adid_rubicon in the creative.

Important: DFP has a key-value key character limit of up to 20 characters. Some of the keys without truncation will exceed 20 chars (To date only Index Exchange’s keys need attention). Prebid.js automatically truncates the key length to 20 characters. For example, hb_adid_indexExchange is truncated to hb_adid_indexExchang (the 21st character e is truncated). Note that the key is case-sensitive. To get the exact key-value keys for each bidder, find them at Bidder Params.

Default Key Scope Description Example
hb_pb_BIDDERCODE Required The price bucket. Used by the line item to target. Case sensitive and truncated to 20 chars. The BIDDERCODE is documented at Bidder Params. hb_pb_rubicon = 2.10
hb_adid_BIDDERCODE Required The ad Id. Used by the ad server creative to render ad. Case sensitive and truncated to 20 chars. The BIDDERCODE is documented at Bidder Params. hb_adid_indexExchang = 234234
hb_size_BIDDERCODE Optional This is not required for adops. Case sensitive and truncated to 20 chars. hb_size_appnexus = 300x250

This page shows how to set up your ad server so that you can send all bids and report on them. For instructions on how to set this up from the engineering side, see send all bids to the ad server with Prebid.js.

In this example we will use DFP setup to illustrate, but the steps are basically the same for any ad server.

Step 1. Add an order

In DFP, create a new order for one of the header bidding partners. Each header bidding partner should have its own DFP order. Repeat this step and the following when you are adding a new header bidding partner.

Step 2. Add a line item

In DFP, create a new order with a $0.50 line item.

Enter all of the inventory sizes that your website has.

Inventory Sizes

Because header bidding partners return prices, set the Line Item Type to Price priority to enable them to compete on price.

Price Priority


Set the Rate to $0.50 so that this line item will compete with your other demand sources at $0.50 ECPM.

Rate


Set Display Creatives to One or More since we’ll have one or more creatives attached to this line item.

Set Rotate Creatives to Evenly.

Display and Rotation

Choose the inventory that you want to run header bidding on.

This line item will target the bids in the range from $0.50 to $1.00 from the bidder you specify by targeting the keyword hb_pb_BIDDERCODE set to 0.50 in the Key-values section. For example, if this order and line item is for the bidder AppNexus, the keyword would be hb_pb_appnexus. The BIDDERCODE for other bidders can be found here.

You must enter the value to two decimal places, e.g., 1.50. If you don’t use two decimal places, header bidding will not work.

Key-values


Step 3. Add a Creative

Next, add a creative to this $0.50 line item; we will duplicate the creative later.

Choose the same advertiser we’ve assigned the line item to.

Note that this has to be a Third party creative. The “Serve in Safeframe” box has to be UNCHECKED (there are plans to make the below creative safeframe compatible).

Copy this creative code snippet and paste it into the Code snippet box.

Edit the hb_adid_BIDDERCODE to replace BIDDERCODE with the name of the bidder that will serve into this creative, e.g., hb_adid_rubicon.

<script>
var w = window;
for (i = 0; i < 10; i++) {
  w = w.parent;
  if (w.pbjs) {
    try {
      w.pbjs.renderAd(document, '%%PATTERN:hb_adid_BIDDERCODE%%');
      break;
    } catch (e) {
      continue;
    }
  }
}
</script>

New creative

Make sure the creative size is set to 1x1. This allows us to set up size override, which allows this creative to serve on all inventory sizes.

Step 4. Attach the Creative to the Line Item

Next, let’s attach the creative to the $0.50 line item you just created. Click into the Line Item, then the Creatives tab.

There will be yellow box showing each ad spot that you haven’t uploaded creatives for yet. Since you’ve already made the creatives, click the use existing creatives next to each size.

Use existing creatives list

In the pop-up dialog that appears, click Show All to remove the default size filters and see the 1x1 creatives. Include the prebid creative and click Save.

Use existing creatives dialog

Back in the line item, go into the Creatives tab again, and click into the creative you just added.

Then, in the creative’s Settings tab, override all sizes in the Size overrides field.

Save the creative and go back to the line item.


Step 5. Duplicate Creatives

DFP has a constraint that one creative can be served to at most one ad unit in a page under GPT’s single request mode.

Let’s say your page has 4 ad units. We need to have at least 4 creatives attached to the line item in case more than 2 bids are within the $0.50 range.

Therefore, we need to duplicate our Prebid creative 4 times.

Once that’s done, we have a fully functioning line item with 4 creatives attached.


Step 6. Duplicate Line Items

Now let’s duplicate our line item for bids above $0.50.

In the Prebid order page, copy the line item with shared creatives.

This way you only have 4 creatives to maintain, and any updates to those creatives are applied to all pre-bid line items.

For example, we can duplicate 3 more line items:

  • $1.00
  • $1.50
  • $2.00

Let’s go into each of them to update some settings. For each duplicated line item:

  1. Change the name to reflect the price, e.g., “Prebid_BIDDERCODE_1.00”, “Prebid_BIDDERCODE_1.50”

  2. Change the Rate to match the new price of the line item.

  3. In Key-values, make sure to target hb_pb_BIDDERCODE at the new price, e.g., $1.00. Again, be sure to use 2 decimal places.

  4. (Optional) Set the start time to Immediate so you don’t have to wait.

Repeat for your other line items until you have the pricing granularity level you want.

Step 7. Create Orders for your other bidder partners

Once you’ve created line items for BIDDERCODE targeting all the price buckets you want, start creating orders for each of your remaining bidder partners using the steps above.