Skip to content

Releases: prebid/Prebid.js

Prebid 0.8.1 Release

22 Apr 22:10
Compare
Choose a tag to compare

This patch release contains some important updates.

Also as additional adapters are added it is not recommended to build and run Prebid.js with all available adapters. Therefore we are moving the latest CDN hosted version to a ./not-for-prod/.prebid.js path.

Production implementations should build from source with only required adapters or customize the Prebid.js build easily using the Download page: http://prebid.org/download.html

New Features

  • New API method pbjs.enableSendAllBids() set Prebid to send targeting keys for all bidders to ad server
  • Add bidFloor parameter for AOL adapter #324 contributed by @kizzard

New API method pbjs.enableSendAllBids()

pbjs.enableSendAllBids() can be called from the implementation page which will set Prebid to include targeting information for each bidder returned in a call to requestBids() when making an ad server request. This call needs to be made before the call to pbjs.setTargetingForGPTAsync().

Targeting key/pairs would then look like this:

{
  "hb_bidder": "appnexus",
  "hb_adid": "191f4aca0c0be8",
  "hb_pb": "10.00",
  "hb_size": "300x250",
  "hb_bidder_springserve": "springserve",
  "hb_adid_springserve": "129a7ed7a6fb40e",
  "hb_pb_springserve": "10.00",
  "hb_size_springserve": "300x250",
  "hb_bidder_triplelift": "triplelift",
  "hb_adid_triplelift": "1663076dadb443d",
  "hb_pb_triplelift": "10.00",
  "hb_size_triplelift": "0x0",
  "hb_bidder_appnexus": "appnexus",
  "hb_adid_appnexus": "191f4aca0c0be8",
  "hb_pb_appnexus": "10.00",
  "hb_size_appnexus": "300x250",
  "hb_bidder_pagescience": "pagescience",
  "hb_adid_pagescience": "2024c6abebaa183",
  "hb_pb_pagescience": "10.00",
  "hb_size_pagescience": "300x250",
}

any custom targeting will continue to take precedence over defaults.

Add bidfloor parameter for AOL adapter

The AOL adapter now accepts a bidfloor param as:

{
  bidder: 'aol',
  params: {
    network: '1234',
    placement: 45656,
    bidFloor : '10' // String - optional bid floor amount in dollars
  }
}

Bug fixes in this release

Prebid 0.8.0 Release

16 Apr 02:08
Compare
Choose a tag to compare

This version of Prebid.js brought to you by over 20 members of the developer community. Thank you for supporting open source software.

You can improve performance by loading the Prebid and GPT libraries in parallel. See the example pages for changes to be made to the page to achieve this. (ht to @BartVB for the suggestion).

New Features

  • Prebid.org download page Easily customize Prebid.js build http://prebid.org/download.html
  • New adapter for Sonobi (contributed by @astudnicky, closes #90)
  • New adapter for Brightcom (contributed by @matan-ybrant)
  • New adapter for Adequant (contributed by @relegit)
  • New API for pbjs.setPriceGranularity() adjust price bucket granularity in one line
  • Alias adapters with config setting Specificy aliases in package.json "adapters"
  • Metadata added "REPO_AND_VERSION" available in constants.json to get repo owner, library and version info (contributed by @cliffliang)
  • Analytics Customization Support for Google Analytics named trackers (contributed by @bborn, closes #291)
  • Always send default keys Always use default bid key/value pairs in addition to any customizations (#295)
  • Performance Improvements load prebid and gpt in parallel (suggested by @BartVB, closes #276)
  • Code quality & style reports in terminal (run gulp quality checks before opening PRs)
  • New consolidated library for AOL (contributed by @sneako)
  • Multiple size slot support in IndexExchange adapter (contributed by @indexexchange)

New adapter for Sonobi - how to add:

var adUnits = [{
  code: '/9968336/header-bid-tag-0',
  sizes: [[300, 250], [300, 600]],
  bids: [{
    bidder: 'sonobi',                 //  New format
    params: {
      dom_id: 'PER SLOT',      //  <String> dom Id
      ad_unit:'PER SLOT'        //  <String> ad unit code
    }
  },
  {
    bidder: 'sonobi',                     //  Old account format
    params: {
      dom_id: 'PER SLOT',          //  <String> dom Id
      placement_id:'PER SLOT'  //  <String> placement Id
    }
  }]
}];

New adapter for Brightcom - how to add

var adUnits = [
  {
    code: '/9968336/header-bid-tag-0',
    sizes: [[300, 250], [300, 600]],
    bids: [
      {
        bidder: 'brightcom',
        params: {
          tagId: 12345 // Tag ID supplied by Brightcom - brightcom.com
        }
      }
    ]
  }
];

New adapter for Adequant - how to add:

var adUnits = [{
  code: '/9968336/header-bid-tag-0',
  sizes: [[300, 250], [300, 600]],
  bids: [{
    bidder: 'adequant',
    params: {
      publisher_id: '1234567',  // REQUIRED int or str publisher ID. To get one, register at https://control.adequant.com
      bidfloor: 0.01            // OPTIONAL float bid floor in $ CPM
    }
  }
  ]}
}];

New API for pbjs.setPriceGranularity()

pbjs.setPriceGranularity is a Prebid API method to configure which price bucket is used for "hb_pb". The accepted values are, "low", "medium", "high" and "auto", with "medium" being the default. Also introduces the "auto" price bucket which applies a sliding scale to determine granularity as:

cpm granularity
cpm < 5 .05 increments
cpm > 5 and < 10 .10 increments
cpm > 10 and < 20 .50 increments
cpm > 20 pb capped at 20

Alias adapters with config setting

Adapter aliases can be specified in the "adapters" section of ./package.json. You can pass an object in the adapters array as shown:

"adapters": [
    "triplelift",
    "rubicon",
    { "appnexus": {"alias": "brealtime"} }
  ]

This syntax could also be used to pass additional build-level config to a given adapter, though alias is the only such property read in the adapter loader at the moment.

New Metadata for Github account and version

A new metadata string can be found in constants.json for "REPO_AND_VERSION" which provides the Github account name that the code was downloaded from (e.g. "prebid") the library ("prebid") and version ("0.8.0"). This can be useful for included in bid requests or for analytics. The returned value is e.g. "prebid_prebid_0.8.0".

Analytics Customization

Google Analytics named trackers are now supported. A custom tracker name (or multiple tracker names) can be registerd with GA on your page like so:

ga('create', 'UA-xxxxxxxx-x', 'auto', 'customTrackerName');

And used with prebid by passing that tracker name in the pbjs.enableAnalytics options:

pbjs.enableAnalytics({
 provider: 'ga',
 options: {
  global: 'ga', // <string> name of GA global. Default is 'ga'
  trackerName: 'customTrackerName',
  enableDistribution: false, // <bool> enable/disable distribution. Recommend disable to save bandwidth/calls
 }
});

Always send default keys

Bidders will always get key value pairs that are set in the default (i.e. hb_pb, hb_bidder, hb_adid, hb_size) even if using alwaysUseBid=true. If you choose to use the same key as the default keys, the standard value will be overwritten with the custom value.


Bug fixes in this release

Prebid 0.7.0 Release

14 Mar 20:47
Compare
Choose a tag to compare

New Features in this release

  • New public API for bidWon Event can be listened to when bids are registered
  • New adapter for NginAd (contributed by @nginadfoundation)
  • [Beta] Updated adapter for AppNexus Adapter uses new SDK for loading ads and groups requests.
  • New adapter for TripleLift Adapter added (contributed by @mattjone )
  • Dynamic adapter selection Updated build process to specify which adapters to include in the final build. Choose adapters in package.json
  • Rubicon legacy adapter removed All implementers should be using the updated adapter rubicon.js.
  • HTTPS support for all adapters all adapters now support HTTPS.

New public API for bidWon event

//register event
pbjs.onEvent('bidWon', function(data){
    console.log('winner!');
    console.log(data); //bid info
});
//turn off event
pbjs.offEvent('bidWon');

New adapter for NginAd - how to add

var adUnits = [{
        code: '/9968336/header-bid-tag-0',
        sizes: [[300, 250], [300, 600]],
        bids: [{
            bidder: 'nginad',
            params: {
                pzoneid: '7', // <String> PublisherAdZoneID
                nginadDomain: "server.nginad.com" // the domain where you installed NginAd
            }
        }]
}];

[Beta] Updated adapter for AppNexus:

How to use the new adapter:

  1. Update package.json with the name of appnexusAst for AppNexus adapter.
  2. Generate the build using gulp build
  3. Use the output at build/dist/prebid.js
var adUnits = [{
        code: '/9968336/header-bid-tag-0',
        sizes: [[300, 250], [300, 600]],
        bids: [{
            bidder: 'appnexus',
            params: {
                placementId: '2251610',     //placementId || invCode && member required
                invCode : '1234ABC',        //Inventory Code - has to be used in combination with member
                member : '12345',           //member ID - has to be used in combination with invCode
                keywords : {foo : 'bar' }   //Query string segment params. These are GLOBAL Params not tag level. 
            }
        }]
}];

New adapter for TripleLift - how to add:

var adUnits = [{
        code: '/9968336/header-bid-tag-0',
        sizes: [[300, 250], [300, 600]],
        bids: [{
            bidder: 'triplelift',
                params: { 
                    inventoryCode: 'headerbidding_placement' }
                }
        }]
}];

Dynamic adapter selection

Inside package.json you can specify which adapters to be included in the build to optimize file size of prebid.js

Pacakge.json:

  "adapters": [
    "adform",
    "aol",
    "appnexus",
    "indexExchange",
    "openx",
    "pubmatic",
    "pulsepoint",
    "rubicon",
    "rubiconLegacy",
    "sovrn",
    "springserve",
    "yieldbot",
    "nginad",
    "triplelift"
  ],
  1. Update pacakge.json with the desired adapters
  2. Run gulp build or gulp serve to generate a new build
  3. Get the build from build/dist/prebid.js

Bug fixes in this release

  • Misc bug fixes for AOL (0783419)
  • Fix for PubMatic not always firing tracking impressions & IE support (24fe2b0), (#249)
  • Other misc bug fixes (see the full commit log here: 0.6.0...master)

Prebid version 0.6.0 release

11 Feb 19:15
Compare
Choose a tag to compare

New Features in this release

  • [Breaking change] Rubicon adapter update Updated to utilize the Fastlane SDK (contributed by @pdezwart & help from @bretg)
  • BRealTime Adapter Adapter included natively with Prebid.js
  • Springserve Adapter Adapter added (contributed by @JohnBuonomo)
  • Adform Adapter Adapter added (contributed by @braizhas)
  • Dev Updates Updated build to included Webpack, Karma, and Istanbul for code coverage

[Breaking change] Rubicon adapter update

Rubicon adapter parameters have been updated to reflect the Fastlane SDK. See below as an example. Also see the table below for matching with the old adapter.

var adUnits = [{
        code: '/9968336/header-bid-tag-0',
        sizes: [[300, 250], [300, 600]],
        bids: [{
            accountId: "123",   //Required - String id
            siteId: "456",      //Required - String id
            zoneId: "789",      //Required - String id
            sizes: [15]         //optional - array[number] of size key
        }]
}];
Original Parameter Updated Parameter Scope Description Example
rp_account accountId required The publisher account ID “4934”
rp_site siteId required The site ID “13945”
rp_zonesize zoneId required The zone ID "23948"
rp_zonesize sizes optional Array of RubiconProject size IDs [15]

How to add bidder BRealTime:

var adUnits = [{
        code: '/9968336/header-bid-tag-0',
        sizes: [[300, 250], [300, 600]],
        bids: [{
            bidder: 'brealtime',
            params: {
                placementId: '2251610'
            }
        }]
}];

How to add bidder Adform:

var adUnits = [{
        code: '/9968336/header-bid-tag-0',
        sizes: [[300, 250], [300, 600]],
        bids: [{
         bidder: 'adform',
           params: {
             adxDomain: 'adx.adform.net', //optional
             mid: 74042
           }
        }]
}];

How to add bidder Springserve:

var adUnits = [{
        code: '/9968336/header-bid-tag-0',
        sizes: [[300, 250], [300, 600]],
        bids: [{
                bidder: 'springserve',
                params: {
                    impId: 1234,            //Required - number
                    supplyPartnerId: 1,     //Required - number
                }
        }]
}];

Dev Update

rm -rf ./node_modules && npm cache clean && npm install
With this commit we have changed the build system to use Webpack, Karma and Istanbul. This change was made to support improved unit test coverage and reporting. Reinstalling Prebid.js is necessary as many node modules changed, and you are likely to experience errors otherwise. After pulling down latest master please rm -rf ./node_modules && npm cache clean && npm install.

Build path change

The ./dist and ./dev directories have been moved to a ./build directory -- please update your own dev and example paths to prebid.js accordingly. You will also find code coverage reports in the ./build/coverage directory.

Criteo Removed

Criteo has requested to temporarily remove the adaptor for further improvements.


Bug fixes in this release

  • Fixed issue with timing of bids with Sovrn adapter (contributed by @ojotoxy) (#183)
  • Fixed bug when pixel url is undefined in adloader.js (contributed by @ericperez) (#172)
  • Bug fixed for OpenX not recording impressions correctly (contributed by @BartVB) (#191)
  • Other misc bug fixes (see the full commit log here: 0.5.0...master)

Prebid 0.5.0 released!

11 Jan 16:58
Compare
Choose a tag to compare

New Features in this release

How to add bidder Pulsepoint:

var adUnits = [{
        code: '/9968336/header-bid-tag-0',
        sizes: [[300, 250], [300, 600]],
        bids: [{
            bidder: 'pulsepoint',
                params: {
                    cf: '300X250',  //String adSize identifier 
                    cp: 123345,     //Number Publisher Id
                    ct: 123456      //Number  Ad Tag Id
                }
        }]
}];

How to add bidder AOL:

var adUnits = [{
        code: '/9968336/header-bid-tag-0',
        sizes: [[300, 250], [300, 600]],
        bids: [{
            bidder: 'aol',
            params: {
                placement: 'TO ADD', //String placement
                network: 'TO ADD'    //String network,
                //optional params
                sizeId : 123,       //Number
                alias : 'TO ADD,    //String
                size : [300,250]    //Array[Number]
            }
        }]
}];

How to add bidder IndexExchange:

var adUnits = [{
        code: '/9968336/header-bid-tag-0',
        sizes: [[300, 250], [300, 600]],
        bids: [{
                bidder: 'indexExchange',
                params: {
                    id: 'TO ADD',  //String - id of placement required
                    siteID: TO ADD,  //Number - site id required
                    timeout: 1000, //Number Optional
                    tier2SiteID: 'TO ADD', //String Optional
                    tier3SiteID: 'TO ADD' //String Optional
                }
        }]
}];

Send custom query params in AppNexus Adapter:

bidder: 'appnexus',
    params: {
       placementId: '2251610',
       queryParam : 'value',  // <--- new unmatched params will automatically get sent in the query like "&queryParam=value&anotherQuery=value2"
       anotherQuery : 'value2'
    }

Real time Bid adjustment feature

    pbjs.bidderSettings = {
        aol: {
            bidCpmAdjustment : function(bidCpm){  // <-- new field - adjust the bid in real time before the auction takes place
                return bidCpm * .9;
            }
        }
    };

[beta] Alias Bidder

/**
 * Aliased bidders will use the existing adapter and require the same params as the existing adapter. 
 * The only change is the bidderCode is updated. Currently this feature is considered beta and only AppNexus adapter supports aliasing. 
 * @param  {String} bidderCode Existing bidderCode that should be aliased
 * @param  {String} alias      The aliased bidderCode
 */
pbjs.aliasBidder('appnexus', 'brealtime')

Inherit adServerTargeting setting from standard setting (#148)

pbjs.bidderSettings = {
    aol: {
        bidCpmAdjustment : function(bidCpm){
            return bidCpm * .9;
        }
        //AOL bidder will inherit from "standard" adserverTargeting keys below
    }
    standard: {
        adserverTargeting: [{
            key: "hb_bidder",
            val: function(bidResponse) {
                return bidResponse.bidderCode;
            }
        }, {
            key: "hb_adid",
            val: function(bidResponse) {
                return bidResponse.adId;
            }
        }, {
            key: "hb_pb",
            val: function(bidResponse) {
                return bidResponse.pbMg;
            }
        }]
    }
};

Bug fixes in this release

  • Fixed issue with timing of callback hanlder (e3bc5a7)
  • Fixed issue with Sovrn adapter sizzes (bd9b655)
  • Fixed issue with YieldBot adapter slot name cases sensitivity (f695c72)
  • Other misc bug fixes

Prebid 0.4.1 released

16 Nov 21:41
Compare
Choose a tag to compare

New Features in this release

  • Sovrn Adapter added (contributed by @pwfsd with support from Sovrn team)
  • [BETA] Analytics data collection and GA adapter added for quick integration

Breaking Change in this release

  • Casale renamed to IndexExchange

How to add bidder Sovrn:

var adUnits = [{
        code: '/9968336/header-bid-tag-0',
        sizes: [[300, 250], [300, 600]],
        bids: [{
            bidder: 'sovrn',
            params: {
                tagid: '123'
            }
        }]
}];

Analytics integration with GA

If your site uses analytics.js collection, a simple toggle will automatically send crucial data points to your account.

Enable GA collection:

ga('create', 'XXXXXX', 'auto');
//Send data from prebid.js automatically 
pbjs.que.push(function() {
    pbjs.enableAnalytics({
        provider: 'ga',
        options: {
            global: 'ga', // <string> name of GA global. Default is 'ga'
            enableDistribution: false, // <bool> enable/disable distribution data (see prebid.org for more information). If you're working with more than 3 bidders, we recommend this flag set to false for the following reason (in notes).
        }
    });
});

Note: GA throttles the max number of requests that can be sent with analytics.js to 20 initial + 2/second. If you're using more than 5 bidders, the GA throttling may prevent some data from being sent. We're implementing a data reporting queue in the next few releases to address this issue. See this link for details on GA's throttling.

Breaking Change: Deprecated bidder name Casale - now called IndexExchange

The bidderCode casale has been updated to indexExchange. Please update your configuration appropriately if using this bidder. Also of note is that IndexExchange will be upgraded to v9 of the their API in the next prebid.js release.

Before

var adUnits = [{
        code: '/9968336/header-bid-tag-0',
        sizes: [[300, 250], [300, 600]],
        bids: [{
            bidder: 'casale',
             params: {
                    slotId: 'TO ADD',    // <String>
                    casaleUrl: 'TO ADD'  //  <String>
                }
        }]
}];

After

var adUnits = [{
        code: 'div-id-header-bid-tag-0',
        sizes: [[300, 250], [300, 600]],
        bids: [{
             bidder: 'indexExchange',
             params: {
                    slotId: 'TO ADD',   // <String>
                    indexUrl: 'TO ADD'  //  <String>
                }
        }]
}];

Bug fixes in this release

  • Fixed issue with YieldBot adapter not sending back bad bids
  • Fixed issue with bidsBackHandler execution timing (#98)
  • Fixed issue with clearing DFP slot targeting (#104)
  • Fixed issue with RefreshBids with adUnitCodes not working correctly (#101)
  • Fixed issue with alwaysUseBid=true not working correctly
  • Other misc bug fixes

Prebid 0.4.0 released!

23 Oct 15:06
Compare
Choose a tag to compare
Pre-release

New 0.4.0 release with some minor configuration adjustments and functionality.

Recommended configuration change for use with DFP

Recommend to use div_id for the adUnit.code instead of the adUnitPath that was previously recommended. See this link for details.

Before

var adUnits = [{
        code: '/9968336/header-bid-tag-0',
        sizes: [[300, 250], [300, 600]],
        bids: [{
            bidder: 'appnexus',
            params: { placementId: 'TO ADD' }
        }]
}];

After

var adUnits = [{
        code: 'div-id-header-bid-tag-0',
        sizes: [[300, 250], [300, 600]],
        bids: [{
            bidder: 'appnexus',
            params: { placementId: 'TO ADD' }
        }]
}];

Adding a custom adapter

 pbjs.que.push(function(){
        var customAdapter = function customAdapter() {
            return {
                callBids: function(params) {
                    pbjs.loadScript('//path.to.custom.demand.js', function() {
                        var bid = pbjs.createBid(1);
                        //set bid options
                        //bid.cpm = ...
                        //add bid to responses
                        pbjs.addBidResponse(adunitCode, bid);
                    });
                }
            };
        };
        //register your custom adapter
        pbjs.registerBidAdapter(customAdapter, 'customAdapter');

        //other configs
        ...
        pbjs.requestBids();

    });

Enhancements in this release

  • Added dynamic adapter support. Adapters can be added in configuration now (API is public)
  • Yieldbot sponsored adapter committed
  • DFP targeting can now use Div Ids as well as slot ids (issue #69)
  • alwaysUseBid configuration param available for sending custom key targeting
  • Updated integration example page
  • Some basic unit tests added

Bug fixes in this release

  • Fix issue with price buckets
  • Fix issue with Criteo adapter
  • Fix issue with bidsBackHandler not getting bidResponses
  • Other misc bug fixes

Prebid release 0.3.2 - new adapters and bug fixes

15 Sep 19:16
Compare
Choose a tag to compare

Bug fixes and enhancements in this release

  • Add adapters
    • Yieldbot
    • Casale
  • Updated integration example page
  • Add event timings
  • Bower package management
  • Misc bug fixes

Major API Updates for Refreshing Ad Units

24 Aug 23:32
Compare
Choose a tag to compare

In the new API, we've made the below changes to better support the refresh functionality. Note that this new API has introduced a few breaking changes:

Breaking Changes

Change 1: A command queue

Now all pbjs commands should be wrapped by pbjs.que.push. This ensures pbjs commands are in scope and are executed in the right order. Example:

pbjs.que.push(function() {
   pbjs.setTargetingForGPTAsync();
});
Change 2: Add ad units

Instead of directly pushing objects into the pbjs.adUnits array (as in the previous versions), the new API requires the function pbjs.addAdUnits(adUnits). Example:

var adUnits = [{
        code: '/9968336/header-bid-tag-0',
        sizes: [[300, 250], [300, 600]],
        bids: [{
            bidder: 'appnexus',
            params: { placementId: 'TO ADD' }
        }]
}];
pbjs.addAdUnits(adUnits);
Change 3: Request bids

Previously, prebid.js automatically sends out bid requests as soon as the library loads. This isn't needed for many sites. The new API requires the page to explicit call pbjs.requestBids to send out bid requests. Example:

pbjs.requestBids({
    bidsBackHandler: function(bidResponses) { }
});
Change 4: Bids back callback

The callback when requested bids are returned are now in pbjs.requestBids (as in the above example). No more pbjs.registerBidCallbackHandler()

Deprecated Functions

1. Function getAdserverTargetingParamsForAdUnit(adUnitCode)

It's now split into getAdserverTargeting() and getAdserverTargetingForAdUnitCode([adunitCode])
Find out docs here

2. Function requestBidsForAdUnit(adUnitCode)

It's now requestBids()

3. Function registerBidCallbackHandler()

It's now a callback within the requestBids()

New Features

1. Request selected array of bids
pbjs.requestBids({
    adUnitCodes: ['/99336/slot-0'],
    bidsBackHandler: function() {
        pbjs.setTargetingForGPTAsync(['/99336/slot-0']);
        googletag.pubads().refresh([slotObj]); 
    }
});

See docs for pbjs.requestBids()
http://prebid.org/publisher-api.html#function-reference

2. New callback functionality (more events will be added)

A new callback when all bids are back for individual ad units:

pbjs.addCallback('adUnitBidsBack', function(adUnitCode){
       console.log('ad unit bids back for : ' + adUnitCode);
});

Version 0.2.1 - Many bug fixes

13 Aug 02:10
Compare
Choose a tag to compare
Pre-release

Bug story fixes:

  • pbjs.getBidResponses returns String not Object
  • OpenX - jstag always loads
  • hasOwn not defined problem
  • Updated the price map: pbLg, pbMg
  • The below Rubicon creative doesn't serve.
  • Remove empty bids in targeting params
  • Refresh API call for Prebid.js
  • Prebid.js Loops
  • Implement per ad unit: pbjs.requestBidsForAdUnit( code )