입찰자는 단일 입찰 응답으로 여러 구매자의 인벤토리를 구매할 수 있습니다. 예를 들어 수요측 플랫폼 (DSP)은 입찰 애플리케이션을 사용하여 구매자인 여러 마케팅 담당자 또는 대행사의 인벤토리를 구매할 수 있습니다. 이 가이드에서는 여러 구매자를 대신하여 전송된 단일 요청을 처리하도록 입찰자를 코딩하는 방법을 설명합니다.
배경
경우에 따라 광고 네트워크 또는 대행사 트레이딩 데스크에서 하나 이상의 DSP와 협력할 수 있습니다. DSP를 통해 작업하는 구매자는 다음 두 가지 옵션을 사용할 수 있습니다.
DSP는 구매자가 아닌 마케팅 담당자 또는 대행사의 인벤토리를 구매합니다. 이 경우 DSP는 입찰 요청 1개를 수신하고 입찰 1개로 응답합니다. Google에서 DSP에 직접 비용을 청구합니다.
DSP는 구매자인 마케팅 담당자 또는 대행사의 인벤토리를 구매합니다. DSP는 요건을 충족하는 구매자와 연결된 여러 결제 ID를 포함하는 입찰 요청을 1회 수신하며, 대신 입찰할 각 구매자에 대해 고유한 입찰가를 설정할 수 있습니다. 이 모델에서는 Google이 DSP가 아닌 구매자에게 요금을 청구합니다. 이 가이드의 나머지 부분에서는 이 시나리오에 중점을 둡니다.
설정 및 사전 타겟팅
Google은 구매자와 연결된 하나 이상의 결제 ID와 노출을 타겟팅한 사전 타겟팅 구성을 포함하는 입찰 요청을 전송합니다.
BidRequest.imp.ext.billing_id 필드에서 확인할 수 있습니다.
여러 구매자의 결제 ID가 포함된 BidRequest에 응답할 때는 Google에서 입찰에 연결할 계정을 알 수 있도록 BidResponse.seatbid.bid.ext.billing_id가 필요합니다. 필드를 설정하지 않는 응답은 필터링됩니다. 결제 ID가 하나만 포함된 BidRequest의 경우 이 필드는 선택사항으로 유지됩니다.
사전 타겟팅 예시
입찰자가 청구 ID가 123인 구매자와 청구 ID가 124인 구매자를 대신하여 입찰합니다. 입찰자는 영어를 타겟팅하기 위해 결제 ID 213으로 하나의 사전 타겟팅 구성을 구성하고, 개인용 컴퓨터를 타겟팅하기 위해 결제 ID 231로 다른 구성을 구성합니다. 다음은 다양한 유형의 노출에 대한 입찰 요청에 표시되는 결제 ID를 설명합니다.
노출 설명
입찰 요청의 결제 ID
개인용 컴퓨터에서 일본어 콘텐츠를 시청합니다.
123, 124, 231
휴대전화의 영어 콘텐츠
123, 124, 213
개인용 컴퓨터에서 영어로 된 콘텐츠
123, 124, 213, 231
BidRequests 예시
다음은 BidRequest의 예입니다. 이 요청은 여러 계정에 적용되므로 요청에 결제 ID가 여러 개 있습니다.
id:"n9YFp0D9qE02Q5A49bo68a"imp{id:"1"banner{w:320h:50pos:ABOVE_THE_FOLDapi:MRAID_1api:MRAID_2format{w:320h:50}}displaymanager:"GoogleMobileAds-iOS"displaymanagerver:"11.2.0"tagid:"2913643481"bidfloor:0.04bidfloorcur:"USD"secure:trueexp:3600clickbrowser:truemetric{type:"click_through_rate"value:0.0003642654628492892vendor:"EXCHANGE"}metric{type:"viewability"value:0.98vendor:"EXCHANGE"}[com.google.doubleclick.imp]{billing_id:41048190734billing_id:87998475627publisher_settings_list_id:5889715199959683550publisher_settings_list_id:3379823455061055318allowed_vendor_type:566allowed_vendor_type:113ampad:AMP_AD_NOT_ALLOWEDskadn{sourceapp:"com.google.testapp"skadnetids:"6ZVs3vs4"versions:"2.0"versions:"2.1"fidelities:VIEW_THROUGH_ADSfidelities:STOREKIT_RENDERED_ADS}creative_enforcement_settings{policy_enforcement:POLICY_ENFORCEMENT_NETWORK_AND_PLATFORM_POLICYpublisher_blocks_enforcement:PUBLISHER_BLOCKS_ENFORCEMENT_APPLIES}auction_environment:SERVER_SIDE_AUCTIONae:SERVER_SIDE_AUCTION}}app{name:"Test App"bundle:"com.google.testapp"publisher{id:"pub-6227762759521589"[com.google.doubleclick.publisher]{country:"US"}}content{url:"https://www.google.com"livestream:falselanguage:"en"}storeurl:"https://www.google.com"[com.google.doubleclick.app]{inventorypartnerdomain:"OMITTED"}}device{ua:"Mozilla/5.0 (iPhone; CPU iPhone OS 17_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148"ip:"192.168.1.0"geo{lat:0.0lon:0.0country:"USA"region:"TX"metro:"623"city:"Lewisville"type:IPutcoffset:-300accuracy:6225}make:"Apple"model:"iPhone13,2"os:"iOS"osv:"17.4.1"connectiontype:WIFIdevicetype:HIGHEND_PHONElmt:truehwv:"iPhone13,2"w:390h:844pxratio:3.0sua{browsers{brand:"Mozilla"version:"5"version:"0"}browsers{brand:"AppleWebKit"version:"605"version:"1"}platform{brand:"iPhone"version:"17"version:"4"}mobile:truebitness:"64"model:"iPhone"source:USER_AGENT_STRING}[com.google.doubleclick.device]{atts:2}}at:FIRST_PRICEtmax:1000cur:"USD"bcat:"IAB18-5"bcat:"IAB23-4"bapp:"359917414"bapp:"1446254576"source{schain{complete:truenodes{asi:"testssp.com"sid:"pub-1111111111111111"hp:true}ver:"1.0"}[com.google.doubleclick.source]{omidpn:"Google"omidpv:"afma-sdk-i-v11.2.0"schain{complete:1nodes{asi:"testssp.com"sid:"pub-1111111111111111"hp:1}ver:"1.0"}}}[com.google.doubleclick.bid_request]{google_query_id:"ANy-z17251-40u3eXfXPL5j3MDPa7n6Ree92uf7354o71FP67Rk5i3G30Ez7p39Ze1722D8H"fcap_scope:FREQUENCY_CAPPING_SCOPE_APPprivacy_treatments{allow_user_data_collection:true}}
[null,null,["최종 업데이트: 2025-08-16(UTC)"],[[["\u003cp\u003eBidders can purchase ad inventory for multiple buyers using a single bid response, streamlining the buying process for demand-side platforms (DSPs).\u003c/p\u003e\n"],["\u003cp\u003eWhen bidding for multiple buyers, the bid response must specify the billing ID (\u003ccode\u003eBidResponse.seatbid.bid.ext.billing_id\u003c/code\u003e) to ensure proper billing allocation.\u003c/p\u003e\n"],["\u003cp\u003eBid requests will include billing IDs for all eligible buyers and any applicable pretargeting configurations, allowing bidders to tailor their bids accordingly.\u003c/p\u003e\n"],["\u003cp\u003eGoogle provides detailed examples of bid requests in OpenRTB Protobuf, OpenRTB JSON, and Google's own format, demonstrating how multiple billing IDs are incorporated.\u003c/p\u003e\n"]]],["A demand-side platform (DSP) can bid on behalf of multiple buyers in a single bid request. These requests include multiple billing IDs, and pretargeting configurations. When responding, the `BidResponse` must specify the `billing_id` to indicate which buyer the bid is for, or it will be filtered. Pretargeting determines which bid requests a bidder receives. Bid requests contain multiple billing IDs, allowing the bidder to bid for various accounts.\n"],null,["# Bid on Behalf of Multiple Accounts\n\nA bidder can purchase inventory for multiple buyers in a single bid\nresponse. For example, a demand-side platform (DSP) might use its bidding\napplication to purchase inventory for several marketers or agencies who are\nbuyers. This guide explains how to code your bidder to process a single request\nsent on behalf of multiple buyers.\n\nBackground\n----------\n\nIn some scenarios, an ad network or agency trading desk may choose to work\nwith one or more DSPs. There are two options available for buyers who work\nthrough a DSP:\n\n- **The DSP purchases inventory for marketers or agencies that are\n *not* buyers**. In this case, the DSP receives one bid request and responds with one bid. Google bills the DSP directly.\n- **The DSP purchases inventory for marketers or agencies that are\n buyers**. The DSP receives one bid request including multiple billing IDs associated with eligible buyers, and can place distinct bids for each buyer they intend to bid on behalf of. In this model, Google bills the buyer, not the DSP. The rest of this guide focuses on this scenario.\n\nSetup and pretargeting\n----------------------\n\nGoogle will send a bid request containing one or more billing IDs associated\nwith buyers and pretargeting configurations that targeted the impression.\nThese can be found with the `BidRequest.imp.ext.billing_id`\nfield.\n\nWhen responding to a `BidRequest` that contains billing IDs from\nmultiple buyers, `BidResponse.seatbid.bid.ext.billing_id` is\nrequired so that Google knows which account to associate with the bid. Any\nresponse that does not set the field is filtered. The field remains optional\nfor any `BidRequest` that only includes a single billing ID.\n\n### Pretargeting example\n\nA bidder bids on behalf of two buyers, one having a billing ID of 123, and\nthe other with billing ID 124. The bidder configures one pretargeting\nconfiguration with billing ID 213 to target the English language, and another\nwith billing ID 231 to target personal computers. The following describes the\nbilling IDs that appear in bid requests for different kinds of impressions.\n\n| Impression description | Billing IDs in bid request |\n|---------------------------------------------------|----------------------------|\n| Japanese language content on a personal computer. | 123, 124, 231 |\n| English language content on a mobile phone. | 123, 124, 213 |\n| English language content on a personal computer. | 123, 124, 213, 231 |\n\n| **Important:** If these were your only active pretargeting configurations, you wouldn't receive bid requests for impressions that didn't originate from a personal computer and include non-English content.\n\nExample BidRequests\n-------------------\n\nBelow are examples of a `BidRequest`. You'll note that there are multiple billing IDs\nin these requests because the requests are applicable to multiple accounts. \n\n### OpenRTB Protobuf\n\n[sample]() \n\n```carbon\nid: \"n9YFp0D9qE02Q5A49bo68a\"\nimp {\n id: \"1\"\n banner {\n w: 320\n h: 50\n pos: ABOVE_THE_FOLD\n api: MRAID_1\n api: MRAID_2\n format {\n w: 320\n h: 50\n }\n }\n displaymanager: \"GoogleMobileAds-iOS\"\n displaymanagerver: \"11.2.0\"\n tagid: \"2913643481\"\n bidfloor: 0.04\n bidfloorcur: \"USD\"\n secure: true\n exp: 3600\n clickbrowser: true\n metric {\n type: \"click_through_rate\"\n value: 0.0003642654628492892\n vendor: \"EXCHANGE\"\n }\n metric {\n type: \"viewability\"\n value: 0.98\n vendor: \"EXCHANGE\"\n }\n [com.google.doubleclick.imp] {\n billing_id: 41048190734\n billing_id: 87998475627\n publisher_settings_list_id: 5889715199959683550\n publisher_settings_list_id: 3379823455061055318\n allowed_vendor_type: 566\n allowed_vendor_type: 113\n ampad: AMP_AD_NOT_ALLOWED\n skadn {\n sourceapp: \"com.google.testapp\"\n skadnetids: \"6ZVs3vs4\"\n versions: \"2.0\"\n versions: \"2.1\"\n fidelities: VIEW_THROUGH_ADS\n fidelities: STOREKIT_RENDERED_ADS\n }\n creative_enforcement_settings {\n policy_enforcement: POLICY_ENFORCEMENT_NETWORK_AND_PLATFORM_POLICY\n publisher_blocks_enforcement: PUBLISHER_BLOCKS_ENFORCEMENT_APPLIES\n }\n auction_environment: SERVER_SIDE_AUCTION\n ae: SERVER_SIDE_AUCTION\n }\n}\napp {\n name: \"Test App\"\n bundle: \"com.google.testapp\"\n publisher {\n id: \"pub-6227762759521589\"\n [com.google.doubleclick.publisher] {\n country: \"US\"\n }\n }\n content {\n url: \"https://www.google.com\"\n livestream: false\n language: \"en\"\n }\n storeurl: \"https://www.google.com\"\n [com.google.doubleclick.app] {\n inventorypartnerdomain: \"OMITTED\"\n }\n}\ndevice {\n ua: \"Mozilla/5.0 (iPhone; CPU iPhone OS 17_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148\"\n ip: \"192.168.1.0\"\n geo {\n lat: 0.0\n lon: 0.0\n country: \"USA\"\n region: \"TX\"\n metro: \"623\"\n city: \"Lewisville\"\n type: IP\n utcoffset: -300\n accuracy: 6225\n }\n make: \"Apple\"\n model: \"iPhone13,2\"\n os: \"iOS\"\n osv: \"17.4.1\"\n connectiontype: WIFI\n devicetype: HIGHEND_PHONE\n lmt: true\n hwv: \"iPhone13,2\"\n w: 390\n h: 844\n pxratio: 3.0\n sua {\n browsers {\n brand: \"Mozilla\"\n version: \"5\"\n version: \"0\"\n }\n browsers {\n brand: \"AppleWebKit\"\n version: \"605\"\n version: \"1\"\n }\n platform {\n brand: \"iPhone\"\n version: \"17\"\n version: \"4\"\n }\n mobile: true\n bitness: \"64\"\n model: \"iPhone\"\n source: USER_AGENT_STRING\n }\n [com.google.doubleclick.device] {\n atts: 2\n }\n}\nat: FIRST_PRICE\ntmax: 1000\ncur: \"USD\"\nbcat: \"IAB18-5\"\nbcat: \"IAB23-4\"\nbapp: \"359917414\"\nbapp: \"1446254576\"\nsource {\n schain {\n complete: true\n nodes {\n asi: \"testssp.com\"\n sid: \"pub-1111111111111111\"\n hp: true\n }\n ver: \"1.0\"\n }\n [com.google.doubleclick.source] {\n omidpn: \"Google\"\n omidpv: \"afma-sdk-i-v11.2.0\"\n schain {\n complete: 1\n nodes {\n asi: \"testssp.com\"\n sid: \"pub-1111111111111111\"\n hp: 1\n }\n ver: \"1.0\"\n }\n }\n}\n[com.google.doubleclick.bid_request] {\n google_query_id: \"ANy-z17251-40u3eXfXPL5j3MDPa7n6Ree92uf7354o71FP67Rk5i3G30Ez7p39Ze1722D8H\"\n fcap_scope: FREQUENCY_CAPPING_SCOPE_APP\n privacy_treatments {\n allow_user_data_collection: true\n }\n}\n```"]]