Buyer SDK ads use creatives rendered by your own SDK.
Mobile app inventory from publishers who integrate your bidding adapter into their app can accept bids with the buyer SDK rendered ad format. How they render is based on your SDK implementation and the SDKRenderedAd you submit in the bid response.
You can place a bid including either a buyer SDK rendered ad or any other ad format supported by the Google Mobile Ads SDK, but any bids containing both are filtered.
Requirements
Buyer SDK ads are available to approved buyers. This format requires extra effort from you and the publisher. Contact your Technical Account Manager to configure your account for buyer SDK ads. Then, you can implement a Bidding adapter that enables your SDK to communicate with the Google Mobile Ads SDK. The publisher needs to integrate your SDK and adapter into their mobile apps.
We recommend you submit creatives for review before including them in a bid response. Contact your Technical Account Manager if you don't know the creative type at bid time.
If a bid request supports this ad format, you can specify an ad that renders
with your SDK by setting the sdk_rendered_ad
field in the bid
response.
Bid request
Bid requests for mobile app inventory include details about the SDKs and adapters in the publisher's app that you can use for rendering in the following fields:
- SDK ID
You can use the bid request to find the
id
that you must provide in the bid response for a buyer SDK rendered ad.See the following fields:
- Authorized Buyers:
BidRequest.mobile.installed_sdk
- OpenRTB:
BidRequest.app.ext.installed_sdk
- Authorized Buyers:
You can learn more about the
InstalledSdk
message in the Google and OpenRTB protocol guides.- Ad Unit Mapping
You can use the bid request to read ad unit mappings that match the bid slot.
See the following fields:
- Authorized Buyers:
BidRequest.AdSlot.ad_unit_mapping
- OpenRTB:
BidRequest.imp.ext.ad_unit_mapping
- Authorized Buyers:
You can learn more about the
AdUnitMapping
object in the Google and OpenRTB protocol guides.- Secure Signals
You should read the Extended Id object which is the standard extension that is used for passing secure signals chosen by the publisher.
See the following fields:
- Authorized Buyers:
BidRequest.AdSlot.SecureSignal.data
- OpenRTB:
BidRequest.user.ext.eids.uids.id
- Authorized Buyers:
You can learn more about the
Extended Id
object in the Google and OpenRTB protocol guides.- Test Requests
You can read the Test Request field to understand if the bid request is a test.
See the following fields:
- Authorized Buyers:
BidRequest.is_test
- OpenRTB:
BidRequest.test
- Authorized Buyers:
You can learn more about the
Test
field in the Google and OpenRTB protocol guides.
Sample bid request
id: "<bid_request_id>"
imp {
id: "1"
banner {
w: 320
h: 50
...
}
...
adx_ext {
...
ad_unit_mapping {
keyvals {
key: "key_1"
value: "value_1"
}
keyvals {
key: "key_2"
value: "value_2"
}
...
format: FORMAT_BANNER
}
}
}
app {
...
adx_ext {
installed_sdk {
id: "com.google.ads.mediation.partner.PartnerMediationAdapter"
sdk_version {
major: 1
minor: 2
micro: 30
}
adapter_version {
major: 1
minor: 2
micro: 3000
}
}
installed_sdk {
...
}
...
}
}
device {
...
}
user {
...
}
adx_ext {
eids {
source: "com.google.ads.mediation.partner.PartnerMediationAdapter"
uids {
id: "<partner_signal_string>"
}
}
}
}
at: 1
tmax: 1000
cur: "USD"
test: 1
...
adx_ext {
google_query_id: "<query_string>"
...
}
Bid response
- Seat Bid
The following fields are required in the
BidResponse.seatbid.bid
object:- Authorized Buyers:
BidResponse.Ad.click_through_url
BidResponse.Ad.AdSlot.billing_id
BidResponse.Ad.buyer_creative_id
BidResponse.Ad.width
BidResponse.Ad.height
- OpenRTB:
BidResponse.seatbid.bid.adomain
BidResponse.seatbid.bid.cid
BidResponse.seatbid.bid.crid
BidResponse.seatbid.bid.w
BidResponse.seatbid.bid.h
You can learn more about the
SeatBid
message in the Google and OpenRTB protocol guides.
Your bid response must include an SdkRenderedAd
with the following:
- SDK ID
Use the
id
field to provide the ID for the SDK to render the ad.You can find the ID in the bid request with the following fields:
- Authorized Buyers:
BidRequest.mobile.installed_sdk
- OpenRTB:
BidRequest.app.ext.installed_sdk
- Authorized Buyers:
You can learn more about the
InstalledSdk
message in the Google and OpenRTB protocol guides.- Declared ad
Use a
declared_ad
field to provide a creative that meets the bid request'sCreativeEnforcementSettings
requirements and is representative of the ad's rendering data. For non-native ad formats, only one ofhtml_snippet
,video_url
, orvideo_vast_xml
should be presented. For native ad format, onlynative_response
should be presented.- Authorized Buyers:
BidResponse.ad.sdk_rendered_ad.declared_ad
- OpenRTB:
BidResponse.seatbid.bid.ext.sdk_rendered_ad.declared_ad
If you don't populate
declared_ad
, we're unable to review the creative and all bids with the creative are filtered from the auction.- Authorized Buyers:
- Rendering data
Use the
rendering_data
field to provide the data for the buyer SDK to use to render your ad.- Authorized Buyers:
BidResponse.ad.sdk_rendered_ad.rendering_data
- OpenRTB:
BidResponse.seatbid.bid.ext.sdk_rendered_ad.rendering_data
- Authorized Buyers:
Here's a sample SdkRenderedAd
object:
{
"id": "1234567",
"rendering_data": "\xd58\xbex\xd9\x1f6\xa1\xc6\xb92\x7f\xce\xec\xbcL.\xe6\xee=\xcc\xde\xde\xb9!\xdf\xad\xe5\xb3\xfe\xb0\x13\x1aGf\xc4\xc1\xba\xfe\xf3\x8d$\xaf|\x86\xb6\x82\x8a\x16\xc5\x91I6d\xe1\x99\xfb\xac,\xd4\x89\xd\xf9",
"declared_ad": {
"html_snippet": "<iframe marginwidth=0 marginheight=0 height=600 frameborder=0 width=160 scrolling=no src=\"https://example.com/ads?id=123456&curl=%%CLICK_URL_ESC%%&wprice=%%WINNING_PRICE_ESC%%\"></iframe>",
}
}
We recommend using the Real-Time Bidding API to submit creatives for review before you include them in a bid response.
See the
Google and
OpenRTB protocol guides
for more details on the SdkRenderedAd
fields.
Sample bid response
Here are sample bid responses for each ad format:
Banner
id: "<bid_request_id>"
seatbid {
bid {
id: "<bidder_generated_response_id>"
impid: "1"
price: 99
adomain: "https://play.google.com/store/apps/details?id=com.test.app"
cid: "<billing_id>"
crid: "<creative_id>"
w: 320
h: 50
burl: "https://abc.com/billing?td=fn&win_price=${AUCTION_PRICE}"
adx_ext {
sdk_rendered_ad {
id: "com.google.ads.mediation.partner.PartnerMediationAdapter"
rendering_data: "<rendering_data_string>"
declared_ad {
click_through_url: "https://play.google.com/store/apps/details?id=com.test.app"
html_snippet: "<!doctype html> <html> ... </html>"
}
}
event_notification_token {
payload: "<payload_string>"
}
billing_id: 141763360450
}
}
}
bidid: "<bidder_generated_response_id>"
cur: "USD"
Interstitial
id: "<bid_request_id>"
seatbid {
bid {
id: "<bidder_generated_response_id>"
impid: "1"
price: 400
adomain: "https://play.google.com/store/apps/details?id=com.test.app"
cid: "<billing_id>"
crid: "<creative_id>"
w: 412
h: 775
adx_ext {
sdk_rendered_ad {
id: "com.google.ads.mediation.partner.PartnerMediationAdapter"
rendering_data: "<rendering_data_string>"
declared_ad {
click_through_url: "https://play.google.com/store/apps/details?id=com.test.app"
video_vast_xml: "<VAST version=\"2.0\"><Ad>...</Ad></VAST>"
}
}
event_notification_token {
payload: "<payload_string>"
}
}
}
}
bidid: "<bidder_generated_response_id>"
cur: "USD"
Rewarded video
id: "<bid_request_id>"
seatbid {
bid {
id: "<bidder_generated_response_id>"
impid: "1"
price: 400
adomain: "https://play.google.com/store/apps/details?id=com.test.app"
cid: "<billing_id>"
crid: "<creative_id>"
w: 412
h: 775
adx_ext {
sdk_rendered_ad {
id: "com.google.ads.mediation.partner.PartnerMediationAdapter"
rendering_data: "<rendering_data_string>"
declared_ad {
click_through_url: "https://play.google.com/store/apps/details?id=com.test.app"
video_vast_xml: "<VAST version=\"2.0\"><Ad>...</Ad></VAST>"
}
}
event_notification_token {
payload: "<payload_string>"
}
}
}
}
bidid: "<bidder_generated_response_id>"
cur: "USD"
Native
id: "<bid_request_id>"
seatbid {
bid {
id: "<bidder_generated_response_id>"
impid: "1"
price: 400
adomain: "https://play.google.com/store/apps/details?id=com.test.app"
cid: "<billing_id>"
crid: "<creative_id>"
w: 1200
h: 627
adx_ext {
sdk_rendered_ad {
id: "com.google.ads.mediation.partner.PartnerMediationAdapter"
rendering_data: "<rendering_data_string>"
declared_ad {
click_through_url: "https://play.google.com/store/apps/details?id=com.test.app"
native_response {
...
assets {
id: 1
title {
text: ""
}
}
assets {
id: 2
data {
value: "<some_string>"
}
}
assets {
id: 3
data {
value: "View now"
}
}
assets {
id: 4
img {
url: "<valid_image_url>"
w: 1200
h: 627
type: 3
}
}
assets {
id: 5
img {
url: "<valid_image_url>"
w: 100
h: 100
type: 1
}
}
assets {
id: 6
data {
value: ""
}
}
assets {
id: 7
data {
value: "<some_string>"
}
}
link {
url: "<destination_link>"
}
}
}
}
event_notification_token {
payload: "<payload_string>"
}
}
}
}
bidid: "<bidder_generated_response_id>"
cur: "USD"
Creative review
Creatives are reviewed before they can serve to ensure they meet our policies and publisher settings.
Here are two ways you can submit creatives for review:
- Real-Time Bidding API (recommended)
You can use the
buyers.creatives.create
method of the Real-Time Bidding API to submit creatives for review.The API requires only one submission per creative and lets you check the status of your creative's review.
- Bid response
You can submit new creatives directly in the bid response.
You must use the
declared_ad
field of theSdkRenderedAd
object to submit a bid response with a buyer SDK creative for review.Creatives submitted in the bid response are only reviewed after many bids. All bids placed before the review is complete are filtered from the auction. You can use the Real-Time Bidding interface or Real-Time Bidding API to check the status of a creative after the review starts.
See the creatives guide for more details.