This page has answers to some frequently asked questions about Prebid Server. If you don’t find what you’re looking for here, there are other ways to get help.
Nope. The only approval process is a code review. There are separate instructions for:
As for membership in Prebid.org, that’s entirely optional – we’d be happy to have you join and participate in the various committees, but it’s not necessary for contributing code as a community member.
?pbjs_debug=true
to the page URL.ext.prebid.debug: true
in the stored request, or add debug=1
to the query string of Prebid Server’s AMP endpoint.ext.prebid.debug: true
to the JSON.The OpenRTB test:1
flag will also turn on debugging, and for true test requests, is the most appropriate thing to do, depending on your scenario. SSPs may not respond or log test
requests.
The original version of Prebid Server was the Go-Lang version. Rubicon Project ported it to Java because they had more Java talent than Go.
Both versions are live in production, and they are kept identical in external APIs and reasonably close in functionality. See the Prebid Server feature list for the list of differences.
For demand partners, we recommend building new bid adapters in Go - the team will port it to Java for you within a couple of months.
For those looking to host a Prebid Server:
Just schedule a post-bid creative in the ad server.
pbjs.setConfig({
s2sConfig: {
// ...
},
app: {
bundle: "com.test.app"
},
device: {
ifa: "6D92078A-8246-4BA4-AE5B-76104861E7DC"
}
});
For Prebid SDK there’s no concept of cookies, so no syncing takes place in that scenario. ID in mobile is based on IDFA.
For Prebid.js and AMP, see Prebid Server User ID sync
See the Prebid Server Privacy Feature Page
For Prebid.js-initated server requests, we’ve found that cookie match rates are about what can be expected given the constraints:
bidders
array and possibly additional bidders. Publishers can change the number of syncs by specifying userSyncLimit
on the s2sConfig.AMP is a different story. There are several things you should check:
load-cookie.html
or load-cookie-with-consent.html
.load-cookie.html
, but there are many adapters on the server side, and a limited number of them will be synced at once. Consider setting max_sync_count
higher to get all bidders synced faster,gdprApplies
field. Prebid Server will determine for itself whether it can sync cookies, but it will not tell bidders whether the request is in GDPR-scope, so each bidder will have to determine scope for itself.Banner
If a bidder adapter supplies ‘nurl’ in the bidResponse object, there are two paths:
Video
If a bidder adapter supplies ‘nurl’ in the bidResponse object instead of ‘adm’, this URL will be treated as the location of the VAST XML.
For OpenRTB responses, Prebid Server is always in “send all bids” mode – it will return the top bid on each requested imp from each bidder.
It will return ad server targeting in seatbid.bid.ext.prebid.targeting depending on the input scenario:
The AMP endpoint is somewhat different because it doesn’t receive the openrtb - just the targeting. PBS basically resolves the OpenRTB, and then merges all the seatbid.bid.ext.prebid.targeting sections.
Prebid Server doesn’t decide the overall winner… that’s the job of the ad server. However, there are two decisions it does make that influence which bids are submitted to the ad server.
Decision 1: best bid from each bidder on each impression
Prebid Server returns one bid from each bidder for each impression object. If there are multiple bids from a given bidder for a given imp[], here how it chooses:
Note: if the request allows multibid, then several bid responses from the same bidder may be returned to the client.
Decision 2: which bidder for each imp[] object gets the hb_pb, hb_size, and hb_bidder targeting values
This is only done when ext.prebid.targeting is specified. This is most important for AMP, but other clients (e.g. app) may rely on Prebid Server choosing the “winner” header bid. That decision is made with the same process as the first decision:
Yes. See the PBS Hosting page to get started.
You don’t need to be a Prebid.org member, but joining would help in case you need extra support with any technical hurdles.
The best way would be to join Prebid.org and participate in the Prebid Server PMC.
Another way is to register for our host company mailing list.
Prebid Server is not a full-fledged SSP. Any DSP bid adapters should keep this in mind when it comes to assuming SSP functionality like resolving OpenRTB macros. We debated building this functionality into PBS, but realized it would take precious milliseconds away from the overall header bidding auction to scan kilobytes of bidder creatives for the 9 different OpenRTB macros. Since so few bidders require this functionality, it makes sense to have those adapters do it themselves.
If an adapter doesn’t resolve its own macros, AUCTION_PRICE will eventually get resolved by the Prebid Universal Creative, but by then the bid price will be in the ad server currency and quantized by the price granularity. This will likely cause reporting discrepancies.
Yes. This is handled by the PBS host company in their datacenter config. Bidders that want to make use of region-specific endpoints will need to work with each PBS host company:
We recognize that it’s inconvenient for bidders to be required to have this conversation with each host company, but there’s really not a better way in an open source project. Any number of companies may choose to host PBS and we cannot constrain them into a defined set of regions.
You may not use an endpoint domain as a bidder parameter. Prebid Server is not an open proxy. If absolutely necessary, you may specify a portion of the domain as a parameter to support geo regions or account specific servers. However, this is discouraged and may degrade the performance of your adapter since the server needs to maintain more outgoing connections. Host companies may choose to disable your adapter if it uses a dynamically configured domain.
e.g. this config is not allowed because the entire domain name is a variable:
endpoint: "https://{host}/path"
but this would be ok:
endpoint: "https://{host}.example.com/path"
Why yes, glad you noticed. The original 2017 OpenRTB extension where bidders
and parameters were placed was imp[].ext.BIDDER. Since 2020, the recommended location
is imp[].ext.prebid.bidder.BIDDER. This change was driven by the existence of
other fields in imp[].ext that aren’t bidders, like skadn
, data
, etc.
Bidders are copied from imp[].ext to imp[].ext.prebid.bidder, and they will be copied for years to come, but we would ask that new implementations of stored requests utilize the new location.
PBS-Go does not currently support integration with a geo-lookup service.
PBS-Java supports MaxMind and Netacuity. It performs the geo-lookup on every request unless:
gdpr.consent-string-means-in-scope
is true and provided user.consent
string is validregs.gdpr
is specified in the requestdevice.geo.country
is specified in the requestdevice.ip
No, Prebid Server is intended to run behind a load balancer or proxy, so it does not currently support defining a security certificate.
If you have a company name change and need to add a new bidder code for the updated branding, here’s the recommended approach:
In the long run, if you’d prefer to change the filenames too, that’s ok - but our rule is that the old name needs to be available until the next major release to give time for publishers to transition. In that case:
Sure. The main endpoint you’re going to utilize is the auction endpoint. Basically, it’s just OpenRTB 2.6, but with quite a few Prebid-specific extensions. See the auction request example.
Publishers should be careful to list all their bidding partners in their ads.txt file. Bidders without an entry in ads.txt may be
perceived by DSPs as unauthorized sources of your inventory. The domain for any ads.txt inventory partners, if one exists, should be specified with a setConfig({ortb2.site.inventorypartnerdomain})
call. For details of the specification of ads.txt entries, see ads.txt v1.1
That depends on how Prebid Server is set up. In general, no, PBS does not add an entry to the schain
. But a PBS managed service could be configured to add to the schain.
The supply chain is meant to track financial arrangements, and PBS is basically a simple proxy server that does not insert itself into the money flow by default. Most PBS managed services require the publisher to have a direct financial relationship with each bidder, but there may be managed services that handle the money.
Generally, people and companies will work on features and bug fixes that directly affect them. The process is:
If you’re looking to help but don’t have a specific item in mind, there are two approaches:
assignee
. A prioritized set of issues is available on our project board.