-
Notifications
You must be signed in to change notification settings - Fork 237
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Additional options for PA Deal Support #873
Comments
Hi Roni, We have received a significant amount of feedback that Deals are an important use case for the industry today. According to IAB TL: Deals, also referred to as Private Marketplace (PMP) offer curated or exclusive access, or preferred pricing for buyers on a subset of inventory. Also, referred to as “programmatic deals,” agreements for PMPs can be organized between publishers or SSPs and DSPs, agencies or advertisers. A notable, related use case is Publisher Audience Extension (issue #144). In this use case, sellers curate audience information for buyers, in some cases using Deals to package that information across sites. This latter area is currently under exploration by Chrome, but not addressed within this design. We understand there are several components to Deals. Two of the most essential are the concept of a seat ID and deal ID. They are defined as:
Based on the feedback so far, we have identified some requirements:
Our proposed solution is to make some modifications to an existing field, buyerAndSellerReportingId, to accommodate the use case:
The end to end flow may look like the following:
There are a few design plans to highlight:
We welcome feedback on this proposal! |
Thanks @leeronisrael for the detailed proposal. I'll highlight a few challenges:
This requires a given IG to include all the seats and all the dealIDs -- and implies that the buyer is necessarily aware of these when creating or update the IG. The seat is associated with the advertiser and campaign, outside of the bidding process -- and generally doesn't vary per seller -- so that seems feasible; furthermore, since this bid is associated with a single seat on a given buyer, the k-anon shouldn't be impacted. However, on the deals side, this seems problematic -- this would require somehow bringing awareness of the dealIDs to the IG creation/update process -- rather this merely being an attribute of the bidding logic JS/WASM and TBS fetched from the buyer's KV.
How would a seller know what this would represent, consistently, across buyers, in order to make sense of this value? I would prefer that we didn't combine seat and dealID into a single attribute. Furthermore, from a k-anon perspective, this would explode the cardinality -- every dealID x every seat -- which would greatly diminish the ability of these deal bids to render and win impressions. Furthermore, as highlighted in #792, there are other reasons why seller need to know the seat for a given
Can you elaborate further? (4) below suggests the seller should be forwarding the list, but this point seems to suggest a role for the buyer? Conceptually, the buyer might not even know in advance what dealIDs are relevant outside of the on-device auction. Of course, the buyers are welcome to pass any signals they want in
The sequential auction setup results in
Unlike seat, there's no a priori relationship between a
Would the seller be aware of this decision when the bid is received in |
It's been a month -- has there been progress outside of this issue on including |
In case of multi bid, multiple values should be selected from buyerAndSellerReportingId.
adMetadata can be one option, but requires sync with ssp to understand the exact fields.
This likely needs to be an array to adapt multibid's use case, which serves like an allowlist. A deal id can be reported only if it shows up in this array. |
sequenceDiagram
participant Buyer
participant Seller
Note over Buyer,Seller: Before the auction
Buyer->>+Seller: Pre-register seat & deal IDs in buyerAndSellerReportingId
Note over Buyer,Seller: At contextual auction time
Seller->>Buyer: Send deal IDs in contextual bid request
Buyer->>Seller: Identify deal IDs in perBuyerSignal of bid response
Note over Buyer,Seller: At PA auction time
Seller->>Seller: Forward list of deal IDs via perBuyerSignals
Buyer->>Buyer: Decide to bid on deal ID and specify ad and deal ID
Buyer->>Seller: Optionally indicate buyerAndSellerReportingId requirement in reporting
Buyer->>Seller: Selected deal ID accessible to scoreAd
Seller->>Buyer: Pick winning bid or reject bid
Note over Buyer,Seller: At PA reporting time
Seller->>Buyer: If k-anon threshold met, report deal ID in reportResult and reportWin
|
"buyerAndSellerReportingId" is a generic name , if we want to use this field only for deal-id then we can rename this field or create a new field with appropriate name and dedicated purpose. Otherwise it will be difficult to know at execution time whether this field is used for deal or some other purpose. "The deal ID may originate with either the buyer or seller." As per the nature of the deals, PA core logic can make it mandatory for buyers to pass seatId to make the deal work. |
At a high level, Magnite is aligned with Google on this proposal for the basic deal use case (based on contextual targeting) but there a few caveats to this approach:
|
Thanks @rsachdev9191 ! See our responses in-line below:
Yes, we acknowledge that use case is a priority, but it is out of scope for this solution.
The ability for generateBid to return multiple bids has landed in Chrome 125 at 1% of traffic.
We are aware that some buyers may have concurring use cases that require buyerAndSellerReportingId and buyerReportingId. Currently, the default behavior is that the former will overwrite the latter. We propose to make it possible to report on both fields, subject to a joint k-anon check. In other words, buyerAndSellerReportingId + buyerReportingId + renderURL will need to be jointly k-anonymous in order for all values to be reported on.
We have received some directional feedback that k-anon will not have a material negative impact on the proposed solution's ability to support the use case. We welcome additional analysis from other DSPs on this.
We do expect this will increase the size of IGs in the browser. There is an overall size limit for all IGs. There is potential future opportunity to optimize IG size, but we do not see it as a blocker for this solution.
We agree with this concern, but it is not specific to the Deals use case. That is, latency concerns may exist with multiple bids regardless of whether or not we move forward with this solution. Therefore, we do not intend to block this solution on this potential issue. Some in the industry have expressed another concern we’d like to highlight:
We believe the best solution is for the industry to align on a standardized string format that can be represented in the buyerAndSellerReportingId array, and supports the various use cases. For example, this may look something like, “{d:123,s:456,o:789}”, where “d” represents deal IDs, “s” represents seat IDs and “o” represents some other ID. |
@leeronisrael Would it be possible to also have sellerReportingId that fits the seller's use case. Take deals as an example, seat id is something that seller wants to know but not buyer. By moving seat id to sellerReportingId can help decrease the IG size for buyers. The k-anon requirement would be buyerAndSellerReportingId + buyerReportingId + sellerReportingId + renderURL |
question: is there any reason why this proposal can't include the introduction of new fields? Can you elaborate on why it's preferable and/or advantageous to re-purpose |
In general, it's better for the browser to offer a pipe with the required privacy characteristics, and let the API user put what they want to put into the pipe. If we offer a pipe that is specific to one use case, then each time you figure out a new use case, you need to come back and ask the browser to build a new pipe for it. I guess I would ask the opposite question: Why would you rather wait for us to add a field with a new name and new complexity, rather than reuse something we added a year ago? We could indeed add new fields if there were a functional reason to do so. Or we could change the name of an existing field if a different name turns out to be better — that's not discussing functionality, it's discussing spelling :-). |
Well, there are a myriad of other changes required here -- it's not simply a matter of 'adopting' an existing field and using it for contextual deal targeting -- so if we're changing other things, that affords us the opportunity to revisit.
Aligned that if we have a general-purpose 'pipe', API users can make the most of it, the naming/spelling indeed at that point is secondary. |
Since Leeron published the proposal listed above in his March 13th comment, we’ve explored a lot of alternatives, spoke to a lot of interested parties, and received a lot of feedback. We’ve decided this proposal satisfies most of the need for supporting deals in Protected Audience so we’ve decided to move forward with implementing it. Noting that the proposal reuses the previously defined Tweak 1: allow use of The goal of this tweak is to allow someone adopting Tweak 2: add a The goal of this tweak is to allow someone adopting To avoid a combinatorial explosion on the number of k-anonymity checks the browser must perform, when As Leeron’s proposal indicates, the buyer optionally indicates at |
I'm trying to better understand the implications of the above two statements. First question: will the Second question: if
There have been a number of tweaks / changes along the way -- is there a document with the complete revised proposal that we can review to confirm that it does indeed support deals before we proceed? |
Yes,
If the same seat ID is always presented for bids on an ad, the seat ID could be stored in the
This is up to how auction participants want to use the fields. Could a seat ID be ignored by the seller if a deal ID is not present in the bid?
As proposed, a seller cannot determine if it’s omitted or dropped. If a buyer marks the
There is not yet a document that combines Leeron’s proposal and my two tweaks. |
Great -- sellers will definitely need access to these identifiers both during scoring and reporting.
My question relates more to the k-anon implications, and what fields are supressed -- if the buyer marks
Which suggests that using this new field might complicate using
Same line of reasoning as the previous comment -- yes, auction participants can decide how to use these fields, but only if they're always visible to said participants, which based on my reading of the tweaks, might not always be the case. There are other reasons to have the seatID always visible, even outside deals, which is why I'm trying to ascertain if this field can have broader utility.
This goes back to the question about where the seatID is signalled -- so, in this case, if we had a dealID absent a seatID, we wouldn't be able to properly handle this deal bid. |
The challenging part here is the supression of the dealID from reportResult after it's been scored as a deal bid, due to k-anon -- and that's the difficultly -- can we discuss this further? |
Does this new field only take effect when all three are not jointly k-anonymous? If |
I figured some examples would help illustrate the proposal. Today’s behavior:
Only one of With Leeron’s March 13th issue #873 proposal:
When With Leeron’s March 13th issue #873 proposal and Paul’s two tweaks:
When Examples:In these examples, ‘s’ prefix might be used to connote seat ID, ‘d’ prefix might connote deal ID. If the same seat ID is always presented for bids on an ad:
If different seat IDs are presented for bids on an ad:
|
This was discussed in the 6/26/2024 WICG call and it sounded like the field Leeron described as "a new, optional field in the output of generateBid that buyers can use to require the buyerAndSellerReportingId to appear in the relevant reporting functions", let's call it |
Yes, independent of
Yes, this matches today's behavior of reporting IDs. Do you foresee a problem with this behavior? @zhuoli-fledge, would you mind adding your name to your GitHub profile? |
Is this now covered by #1237 ? |
Yes. |
@dmdabbs, you asked for a Chromium bug to track implementation status: https://crbug.com/356654297 |
This field is gated by a feature flag (kFledgeAuctionDealSupport). This is part one of multiple CLs in order to get deal id support in auctions. More context on the deals can be found at WICG/turtledove#873. Bug: 356654297 Change-Id: I777bf29cbb6c379959e8d3787becce1fce2aeeef Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5753049 Reviewed-by: Ken Buchanan <[email protected]> Reviewed-by: Koji Ishii <[email protected]> Reviewed-by: Orr Bernstein <[email protected]> Commit-Queue: Youssef Bourouphael <[email protected]> Cr-Commit-Position: refs/heads/main@{#1336731}
This new behavior is only happening when selectable_buyer_and_seller_reporting_ids is present, which is gated by a feature flag (kFledgeAuctionDealSupport). This is one of many changes working towards allow for auction deal support. More context on the deals can be found at WICG/turtledove#873. Bug: 334053709 Change-Id: Ied652229cd18c2fc2bcd03faa2a1f88b902c814f Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5773232 Reviewed-by: Orr Bernstein <[email protected]> Commit-Queue: Youssef Bourouphael <[email protected]> Reviewed-by: Maks Orlovich <[email protected]> Cr-Commit-Position: refs/heads/main@{#1339643}
Today, a bid is allowed to win an auction only if it's k-anonymous. There's a separate "k-anonymity for reporting" that includes the renderURL and all of the reporting IDs conveyed to the reporting function as part of the k-anon key. If a winning bid is not k-anonymous for reporting, the reporting IDs are all omitted in the call to the reporting functions. With the change to reporting IDs to support deals, described in WICG/turtledove#873, a new reporting ID is added, selectedBuyerAndSellerReportingId, which adds new k-anon for reporting keys, multiple of which may need to be fetched for each ad as the selectedBuyerAndSellerReportingId may be any one of the selectableBuyerAndSellerReportingIds expressed in the InterestGroup ad. Change-Id: Ife157dfa59e4e6a8fa6421ee87a5238d57110e11 Bug: 334053709 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5782241 Reviewed-by: Daniel Cheng <[email protected]> Reviewed-by: Maks Orlovich <[email protected]> Commit-Queue: Orr Bernstein <[email protected]> Cr-Commit-Position: refs/heads/main@{#1341902}
This reverts commit 4bfa1a2. Reason for revert: Causing crash on Linux ChromiumOS MSan bots: https://ci.chromium.org/ui/labs/p/chromium/inv/build-8739104148140144497/test/ninja%3A%2F%2Fcontent%2Ftest%3Acontent_unittests%2FSellerWorkletTest.ScoreAd/variant/fc06801f1fa91dab?resultIndex=0 Original change's description: > Add new fields to scoreAd and bids. > > This change also adds new fields to a bid, which would allow buyers > participating in deals to return new fields within the output of > generateBid(): > - selectedBuyerAndSellerReportingIdRequired > - selectedBuyerAndSellerReportingId > > This in turn allows for these two fields to be passed to scoreAd, > and also the new behavior will allow the buyerAndSellerReportingId to > be passed along with them if they are present. > > More context on the deals can be found at > WICG/turtledove#873. > > > Bug: 334053709 > Change-Id: If67f0dcaac96865ea96c9e99f72f0f1bbbee4889 > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5777935 > Reviewed-by: Ken Buchanan <[email protected]> > Reviewed-by: Maks Orlovich <[email protected]> > Commit-Queue: Youssef Bourouphael <[email protected]> > Reviewed-by: Orr Bernstein <[email protected]> > Cr-Commit-Position: refs/heads/main@{#1343704} Bug: 334053709 Change-Id: Ib1578b22f82dbc4e82c8074a3eec80fd9deef299 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5796248 Bot-Commit: Rubber Stamper <[email protected]> Auto-Submit: Adam Rice <[email protected]> Owners-Override: Adam Rice <[email protected]> Commit-Queue: Adam Rice <[email protected]> Cr-Commit-Position: refs/heads/main@{#1344006}
This is a TEST ONLY fix. This fixed an uninitialized value error found by MSAN bots, within the seller worklet unit tests. The implementation was not an issue but instead there was a bool that was meant to be an optional in the test, which the latest patch solves. This change does not affect any of the production code submitted in the original CL. This reverts commit 5377aa4. Reason for revert: Resolved an uninitialized value error. Original change's description: > Revert "Add new fields to scoreAd and bids." > > This reverts commit 4bfa1a2. > > Reason for revert: Causing crash on Linux ChromiumOS MSan bots: https://ci.chromium.org/ui/labs/p/chromium/inv/build-8739104148140144497/test/ninja%3A%2F%2Fcontent%2Ftest%3Acontent_unittests%2FSellerWorkletTest.ScoreAd/variant/fc06801f1fa91dab?resultIndex=0 > > Original change's description: > > Add new fields to scoreAd and bids. > > > > This change also adds new fields to a bid, which would allow buyers > > participating in deals to return new fields within the output of > > generateBid(): > > - selectedBuyerAndSellerReportingIdRequired > > - selectedBuyerAndSellerReportingId > > > > This in turn allows for these two fields to be passed to scoreAd, > > and also the new behavior will allow the buyerAndSellerReportingId to > > be passed along with them if they are present. > > > > More context on the deals can be found at > > WICG/turtledove#873. > > > > > > Bug: 334053709 > > Change-Id: If67f0dcaac96865ea96c9e99f72f0f1bbbee4889 > > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5777935 > > Reviewed-by: Ken Buchanan <[email protected]> > > Reviewed-by: Maks Orlovich <[email protected]> > > Commit-Queue: Youssef Bourouphael <[email protected]> > > Reviewed-by: Orr Bernstein <[email protected]> > > Cr-Commit-Position: refs/heads/main@{#1343704} > > Bug: 334053709 > Change-Id: Ib1578b22f82dbc4e82c8074a3eec80fd9deef299 > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5796248 > Bot-Commit: Rubber Stamper <[email protected]> > Auto-Submit: Adam Rice <[email protected]> > Owners-Override: Adam Rice <[email protected]> > Commit-Queue: Adam Rice <[email protected]> > Cr-Commit-Position: refs/heads/main@{#1344006} Bug: 334053709 Change-Id: I99582655c81e9c73926b0f6205d879507518a487 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5799986 Commit-Queue: Youssef Bourouphael <[email protected]> Reviewed-by: Maks Orlovich <[email protected]> Reviewed-by: Ken Buchanan <[email protected]> Reviewed-by: Orr Bernstein <[email protected]> Cr-Commit-Position: refs/heads/main@{#1344736}
As some of you have noticed from Paul Jensen's recently landed explainer PR at #1237, we've proposed a couple of small ergonomic simplifications to the names of the reporting fields used to support deals in Protected Audience auctions. Paul has updated the explainer PR with all of the changes reflected below, and added tables, examples. and clarifying language to better explain how this new feature will work. The proposed change:In the original deals proposal, we planned to modify the InterestGroup ads structure by changing the
Why we made this change:These changes were motivated by a few factors. Most notably:
Additional details:
One other significant change is that we're now implying We are working on a developer guide that summarizes all the previous changes to the plan and will help you understand the full proposal; we will share this to this channel when it is ready. |
Deals support is now available for testing on 50% of Chrome Canary/Dev channel traffic. Support can be feature detected using this logic. It can also be manually enabled using the |
Hello folks, we've published some guides to help you better understand reporting IDs and deals: |
Deals support is now available for testing on 50% of Chrome Beta channel traffic. Support can be feature detected using this logic. It can also be manually enabled using the --enable-features=FledgeAuctionDealSupport command line flag. |
Just to confirm -- given (3) above, does this imply that the bid is not k-anon with |
From the published spec selectedBuyerAndSellerReportingId: (optional) A string from the interest group's ad's selectableBuyerAndSellerReportingIds array; if it's not in the array, the bid is ignored. If present, this is reported to reportWin() and reportResult() along with buyerAndSellerReportingId and buyerReportingId; the resulting bid may only win the auction if the selected value is jointly k-anonymous along with buyerAndSellerReportingId, buyerReportingId, the interest group owner, bidding script URL, and render URL. If present, it indicates the reporting of this bid would not operate correctly were the selectedBuyerAndSellerReportingId not presented to reportWin() and reportResult(). So I think the answer is no. |
Yes, that's right. If |
Deals support is now available for testing on 1% of Chrome Stable channel traffic. Support can be feature detected using this logic. It can also be manually enabled using the |
Deals (private marketplace) have been the focus of a number of issues -- #716, #682 #686 -- and I'd like to suggest some options for consideration.
buyerAndSellerReportingId
andbuyerReportingId
are interest group attributes -- however, there's no a priori correlation between adealID
and a particularrenderURL
(aka creative) -- that is, in principle, a givendealID
could accompany any creative for a given buyer. Furthermore, new deals can be created after a browser joins an IG, and having to update each IG with each potentialdealID
seems cumbersome.Furthermore, as noted elsewhere, both
scoreAd()
andreportResult()
need to receive thedealID
(not to mentionreportWin()
) -- this signal must exfiltrate the device -- as it's fundamental both to revenue share calculations as well as reporting attribution.The list of dealIDs for any given slot is also highly dynamic -- and each DSP will receive a different subset of those dealIDs for any given slot. Assuming we're talking about contextual-based deal activation (not publisher audience extension, which has been discussed elsewhere), in principle, an SSP would be able to return
perBuyerSignals
with a per-DSP list of potential dealIDs. Making this available to on-device bidding could follow existing API surfaces -- the challenge is how to get it 'back out' in a privacy-centric fashion.Perhaps there's an opportunity to consider the notion of dealIDs handled like interest groups -- i.e. a "deal group" -- where the browser maintains such a list for k-anon purposes -- tied to a seller origin. Once thusly registered with the browser (i.e. via a
joinDealGroup()
call), the seller can return a list of dealIDs via the contextual response, linked to their buyer origins. In this model, existing IGs could be upgraded to include 'deal intent' -- a boolean indicating if a given IG ever intends to bid with a dealID -- and thus the brower would be able to deal with k-anon determination well before auction time, and for an defined set of (IG, renderURL, dealID) tuples. Once k-anon has been satisifed, exposing this to PAAPI functions shouldn't be a privacy concern anymore.There's another potential alternative -- leveraging https://github.com/WICG/turtledove/blob/main/FLEDGE.md#6-additional-bids (#319) in order to be able to derive the creativeURL for a dealID via the contextual response. In this model, there would be some OpenRTB-powered mechanism to signal that dealID response would only be used for a PA auction (like in the additional bids workflow); but this, too, would allow for the dealID to be made visible to the PAAPI functions.
The text was updated successfully, but these errors were encountered: