Google Authorized Buyers

Google Authorized Buyers is the program through which third-party bidders buy on Google's ad exchange, still widely called AdX. Google publishes an OpenRTB interface for it in JSON and protocol buffers, with Google's own extensions defined in the com.google.doubleclick protocol namespace. The same guide also covers Open Bidding.

Direction and version

Google's exchange sends bid requests to the buyer's bidder endpoint, and the bidder returns an OpenRTB bid response to Google.

OpenRTB 2.6 fields in Google's OpenRTB JSON, which follows its proto2 protocol: flags are 0 or 1 integers, enums are integers, 64-bit integers such as billing IDs are decimal strings, and Native payloads are JSON strings in imp.native.request and bid.adm.

The RTBlint profile google-ab checks requests and responses against the published contract.

Rules beyond the OpenRTB spec

  • Every impression carries imp.ext.billing_id, the billing IDs a winning bid may be charged to. When an impression offers more than one ID, the bid must pick one of them in bid.ext.billing_id.
  • Google's protocol adds auction type 3, fixed price, which the specification does not define. On a deal it means the deal floor is the agreed price.
  • Each bid must declare its landing page through bid.ext.clickurl, an advertiser domain in bid.adomain, or both.
  • Google does not call nurl or lurl; it supports burl. The ${AUCTION_PRICE} macro expands to an encrypted per-impression price in micros, not a CPM.
  • A DSA declaration in bid.ext.dsa must include paid, even when payer and advertiser are the same. Values of behalf or paid longer than 100 characters are rejected.
  • Fields that Google's protobuf defines as a oneof group are mutually exclusive inside one extension.
  • A bid rendered by a buyer SDK through bid.ext.sdk_rendered_ad must name an SDK listed in app.ext.installed_sdk and supply adomain, a billing ID, crid, w, h, and a declared ad. Google filters a bid that pairs an SDK creative with a separate ordinary or AMP creative.
  • When the request sets ext.fcap_scope to 1 (none), Google filters bids that carry frequency caps.
  • Google ignores an event notification token in bid.ext.event_notification_token.payload longer than 128 bytes.
  • Google sends loss reason 501 for a bid that lost in the mediation waterfall. Creative status codes arrive in ${CREATIVE_STATUS_CODE}, a separate macro from ${AUCTION_LOSS}.

Documented extensions

PathMeaning
imp.ext.billing_idBilling IDs eligible for the impression, as 64-bit decimal strings.
bid.ext.billing_idThe billing ID the bid is attributed to.
imp.ext.publisher_settings_list_idPublisher settings lists that apply to the page.
imp.ext.allowed_vendor_typeCreative vendor types the publisher allows.
imp.ext.dfp_ad_unit_codeThe publisher's Google Ad Manager ad unit code.
deal.ext.deal_typeThe type of the deal.
bid.ext.exchange_deal_typeThe deal type the bid is made under.
bid.ext.impression_tracking_urlURLs Google calls when the ad renders.
bid.ext.clickurlLanding page URLs of the creative.
bid.ext.sdk_rendered_adA creative rendered by a buyer SDK installed in the app.
app.ext.installed_sdkBuyer SDKs installed in the app that can render SDK ads.
ext.fcap_scopeWhich frequency caps the request can honor; 1 means none.
user.ext.consented_providers_settingsAd technology providers the user consented to under Google's Additional Consent.
regs.ext.dsaDigital Services Act requirements for the request.

What the validator checks for this profile

Loss and status codes

Validate against this contract

Open the tester with the Google Authorized Buyers profile, or run:

rtblint validate --profile google-ab request.json

Similar integrations