We were having a meeting the other day, and it dawned on us that we had some confusion between us on which entities are being called in the different requests on TURTLEDOVE. We'd appreciate some clarification. With the two different interpretations we have, we see different challenges.
Entities
The TURTLEDOVE doc refers to some entities as "ad networks," for example first-ad-network.com
and second-ad-network.com
. It's a little confusing what exactly these refer to. I see the breakdown as:
- Advertiser: An entity that wishes to advertise its offerings.
- Publisher: An entity that wishes to sell inventory for ads.
- DSP: An entity that represents multiple advertisers. It submits bids to SSPs on the behalf of its advertisers.
- SSP: An entity that represents multiple publishers. It receives bids from DSPs and runs auctions, selling its publishers' inventory.
Some entities may be a mix of these responsibilities, but for sake of argument, let's consider them separately.
On an advertiser's page, a DSP has a pixel that would add the browser to a set of interest groups. In this scenario, first-ad-network.com
would be a DSP server. The interest group request needs to make a request to first-ad-network.com
, and so the interest group response (containing partial bid data) would be derived from the DSP's servers as well.
Subsequently, there's the contextual request. According to the TURTLEDOVE docs:
An interest-group request: An additional ad request, of a new and different type, is constructed by the browser and sent to the same publisher ad network.
This implies that the interest group request and contextual request call out to the same entity, first-ad-network.com
, already defined to be a DSP. (In addition, in #20 I see in the discussion, "I was imagining that each piece of in-browser JS would receive signals from one ad network — the same ad network that wrote the JS in the first place.") However, also as described in #20:
Here's what happens at the time of a page visit, calling out the things that I glossed over in the explainer:
-
Person navigates to publisher page
-
Publisher's ad network has a script on the page which issues the contextual/1p ad request to their ad server, like today. This includes all the normal information about what page the ad would appear on.
-
Server-side, some exchange sends RTB call-outs to various DSPs, including contextual and 1p signals. In today's world, the responses are bids that go into an auction.
In a TURTLEDOVE world: The DSP's response could include more stuff — some signals encoding that DSP's opinion about the topic of the publisher page.
This seems to indicate that the contextual request goes to an SSP instead of a DSP.
DSP/DSP Challenge
Assuming that both requests go to the same DSP, this seems like SSPs have no fundamental role in a TURTLEDOVE world, and would instead have to pivot to being solely DSPs. It would be incumbent on DSPs to have their domains included on an as many publisher ad-network lists as possible. This seems relatively low friction to just have a publisher add a domain to a text file, so I can't really see how exchanges provide any significant value in this scenario.
Reading:
In the latter case, a URL like https://first-ad-network.com/.well-known/ad-partners.txt can list the domain names of other ad networks that first-ad-network buys space from, and a public key that the browser can use to encrypt the interest group information while it is passing through other ad networks. (Probably this should be a part of the IAB ads.txt spec, instead of a new .well-known file; it's similar to their "authorized sellers" — and they can come up with a better name than "ad-partners" for the relationship.)
Does this mean that the DSP dsp.com
would be able to write interest groups under SSP's name ssp.com
? Even so, it still feels like a strong incentive for the DSP to create relationships with publishers directly.
If it's supposed to function like this, there's another issue. The DSP dsp.com
writes into the browser, under the SSP ssp.com
domain interest_group=www.wereallylikeshoes.com_athletic-shoes
. But then later, the browser calls:
GET https://ssp.com/.well-known/fetch-ads?interest_group=www.wereallylikeshoes.com_athletic-shoes
However, dsp.com
is the entity in generating the response. Are we expecting ssp.com
to forward this request to dsp.com
? Why? That seems like additional unnecessary traffic.
DSP/SSP Challenge
The issue here has to do with the contextual response. Given that the bidding.js function has signature function(adSignals, contextualSignals)
, it's unclear what the SSP would actually include in the contextualSignals
object and how it gets passed around:
-
Assuming that the SSP has coordinated a bunch of responses from DSPs, does the contextualSignals
object contain data from all DSPs or some "winner(s)" that the SSP predetermines? If it contains all data, then this would seem to imply that every DSPs bidding.js would include contextual signals from all DSPs integrated with the SSP. If it only contains a subset, then not all DSP bidding.js functions can effectively execute; this is problematic because no interest group data was available during the SSP's selection, and valuable opportunities (for the DSP, SSP, advertiser, and publisher) are missed.
-
If the contextualSignals
object contains information that is solely derived by the SSP (without DSP input, that is), this would seem to hamper a DSP's ability to control its own bids on contextual opportunities, or really, even have control over its own bids when interest groups are involved. From a DSP's perspective, it's desirable to apply ML techniques to both the contextual and interest group requests, and have the browser combine them consistently.
The documentation seems ambiguous to us. Which of these scenarios is intended, or is it neither?