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 inbid.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 inbid.adomain, or both. - Google does not call
nurlorlurl; it supportsburl. The${AUCTION_PRICE}macro expands to an encrypted per-impression price in micros, not a CPM. - A DSA declaration in
bid.ext.dsamust includepaid, even when payer and advertiser are the same. Values ofbehalforpaidlonger 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_admust name an SDK listed inapp.ext.installed_sdkand supplyadomain, 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_scopeto 1 (none), Google filters bids that carry frequency caps. - Google ignores an event notification token in
bid.ext.event_notification_token.payloadlonger 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
| Path | Meaning |
|---|---|
imp.ext.billing_id | Billing IDs eligible for the impression, as 64-bit decimal strings. |
bid.ext.billing_id | The billing ID the bid is attributed to. |
imp.ext.publisher_settings_list_id | Publisher settings lists that apply to the page. |
imp.ext.allowed_vendor_type | Creative vendor types the publisher allows. |
imp.ext.dfp_ad_unit_code | The publisher's Google Ad Manager ad unit code. |
deal.ext.deal_type | The type of the deal. |
bid.ext.exchange_deal_type | The deal type the bid is made under. |
bid.ext.impression_tracking_url | URLs Google calls when the ad renders. |
bid.ext.clickurl | Landing page URLs of the creative. |
bid.ext.sdk_rendered_ad | A creative rendered by a buyer SDK installed in the app. |
app.ext.installed_sdk | Buyer SDKs installed in the app that can render SDK ads. |
ext.fcap_scope | Which frequency caps the request can honor; 1 means none. |
user.ext.consented_providers_settings | Ad technology providers the user consented to under Google's Additional Consent. |
regs.ext.dsa | Digital Services Act requirements for the request. |
What the validator checks for this profile
openrtb.profile.google.billing_id_not_offeredThe selected Google billing ID is not offered by the referenced impression. With a sole ID and no active child seats Google may ignore this field; account configuration is unavailable.openrtb.profile.google.billing_id_requiredA Google bid must select ext.billing_id when its impression offers multiple billing IDs.openrtb.profile.google.collapsible_size_exceededThe expanded Google collapsible-ad the field exceeds the impression's the field.openrtb.profile.google.deal_billing_id_not_offeredThe Google deal's non-empty billing_id list does not offer the selected billing ID.openrtb.profile.google.deal_media_not_offeredThe bid's mtype is excluded by the Google deal's creative_constraints.mtypes.openrtb.profile.google.dsa_paid_requiredGoogle's DSA declaration requires paid, including when the payer and advertiser are the same.openrtb.profile.google.event_token_ignoredGoogle ignores event notification token payloads longer than 128 UTF-8 bytes.openrtb.profile.google.frequency_caps_unsupportedGoogle's request explicitly declares fcap_scope=NONE (1), so frequency-capped bids are filtered.openrtb.profile.google.landing_page_requiredAuthorized Buyers bids must declare a click URL in ext.clickurl, an advertiser domain in adomain, or both.openrtb.profile.google.oneof_conflictGoogle's protobuf oneof permits at most one of these fields.openrtb.profile.google.sdk_declared_creative_requiredThe SDK declared ad must specify one supported creative content field.openrtb.profile.google.sdk_field_requiredGoogle's selected buyer SDK ad contract requires this bid field, even when the general protocol marks it optional.openrtb.profile.google.sdk_not_offeredGoogle SDK-rendered ads require an installed_sdk submessage in the corresponding app request.openrtb.profile.google.sdk_renderer_conflictGoogle filters bids that select a buyer SDK creative and a separate ordinary or AMP creative.
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
- Adform OpenRTB handler
- AppLovin ALX DSP response
- BidSwitch buyer 5.7
- Digital Turbine Exchange
- Display & Video 360
- Equativ bidder contract
- Index Exchange DSP
- InMobi DSP
- Magnite DV+ xAPI
- Microsoft Monetize bidder
- MobileFuse in-app bidding
- MobileFuse SDK bidding
- Sovrn request
- Unity Exchange
- Vungle Exchange
- Yandex SDK bidding