Thanks to a LinkedIn post from Mr O’Sullivan, there has been a heated debate about something called a transaction ID in bid requests. I’d like to explore this topic in detail, because this is one of those scenarios that manages to make everyone look bad, which is an opportunity that a hater like myself cannot let go unattended.
The thesis behind transaction IDs is simple – in the Prebid auction, which is really the core programmatic auction, we would assign a unique “transaction” ID to each execution of the publisher ad stack. This transaction ID would be signaled out to DSPs, letting them know that regardless of how a given bid request gets to them it’s still part of a unique on-page auction. This would allow them to know that bid request A from partner X and bid request B from partner Y are actually from the same prebid auction, compare the metadata in the bid requests, ostensibly not bid into that auction more than once, ensure things are as they’re supposed to be, detect ID bridging and other tomfoolery, and all manner of good things for transparency and programmatic health.
O’Sullivan innocently asked “why wouldn’t we do this?” And personally, I think it’s a radically fair question. Purposefully obfuscating the actual impression opportunity auction from the buyers just seems like bad faith to me – it’s one of the myriad reasons that programmatic works like shit, because all of this garbage programmatic shenanigans makes it impossible to actually optimize anything and bid intelligently.
However, not so much to my surprise, the publisher community reacted to this with vitriol, or at least a few people did. The defenses were about what you’d expect, mostly flavors of “yeah so you want me to stop playing the game and make less money? You can pound sand.” Here’s a brief summary of the arguments I saw:
Obfuscating final auction allows us to use price floors to manipulate bidding more effectively
Obfuscating final auction allows us to bid jam / request duplicate more effectively and evade detection
Obfuscating final auction makes id bridging reconciliation hard, and id bridging makes us mucho dollares
Obfuscating final auction prevents people from mapping user IDs between exchanges without paying hash tollkeepers (it’s a join key, the primary threat coming from middle men like curators who could use it to back into data segments
The first three are what I normally refer to as “gaming bullshit (GB) .” And I get it. I really do. It makes more money – I mean hell, I am the bid jamming guy. I have been advocating for bid jamming since before it was cool – see my article here from september 2023 https://www.garethhatesadtech.com/p/bid-jammin .
But I’ve evolved, and while I still advocate for some GB, it’s not for the same reasons as many of you rapscallions out there who love GB.
A bad argument for GB is that “it makes me more money.” It’s bad because it’s potentially myopic – we don’t know what the knock on effects of these techniques are in terms of making programmatic work badly and nobody is doing a good job of measuring programmatic health over time as opposed to in this moment. It’s on my roadmap, okay?
However, because publishers aren’t thinking this way, it’s perfectly possible that the extra 3-5% you’re squeezing out of your programmatic auctions is making your site perform 30% worse on a ROAS basis for advertisers who actually optimize things. This is because the GB that results in 3-5% yield for publishers could quite feasibly be resulting in 20-30% higher CPMs for buyers, with the excess going to the GB middle men platforms. This generalization won’t be universal, some very talented GB people own their own pipes, but for many publishers it’s the case – the GB might be doing long term harm in the name of short term good.
However, in the interest of truth, we cannot let the buyers off unscathed. There exists a great argument for GB. And that’s that most advertisers don’t give a shit about performance.
If you’re running a DSP, and your buyers don’t give a shit about performance, that’s why you can’t buy through more direct supply paths. It’s not because “publishers and middle men aren’t doing XYZ.” If you don’t have buyers clamoring to shut off bad middle men who take high fees, you don’t need to deduplicate your auctions.
This is all to say that if your buyers actually wanted to fix things, we don’t need transaction ID to do it. Just buy through a single path. We know paths are commoditized, and we know the only “value” being added in the middle is by GB. So why keep it alive? Because unfortunately, the phone call is coming from inside the house – the primary facilitator of the shenanigans is the prioritization of middle men by your own agency clients. We don’t really need to save them from themselves. They don’t need a white knight – they just want to deliver to their list of user IDs and get back to politicking for more budgets. The tricky part here becomes when DSPs have one advertiser who cares about performance, and another who insists on their looney tunes supply path. In this scenario, when they bid against themselves, theoretically the performance advertiser might be getting punished from having additional demand in the auction from the goofball advertiser and the bidder might’ve prioritized pacing things differently – but that’s about the only use case I can think of that’s really a “rock and a hard place.”
Thus we have a situation where frankly everyone has some responsibility for a really shitty nash equilibrium. Sellers don’t want to make a change that will effectively make them less money. Buyers can’t do what needs to be done to solve this without seller action. We therefore have a Gordian knot that we need to cut.
There is but one way (well, one nice way).
Incentives.
If buyers can properly reward publishers who pass a deduplicating identifier, if they can make more money from the added transparency than they make from GB, we have an escape hatch. Do I know how this would work? No. I’m not on a product team at a DSP right now. But I think there absolutely could be a way.
Without the incentive built properly, you are effectively asking publishers to make less money for doing the right thing. We all know that sucks. That being said, there’s nothing inherently wrong with transaction IDs. I think a global join key is actually a fundamental component of a healthy and transparent marketplace. But we’re not going to get there unless the incentives are there – and while they don’t seem that complicated to me, they do seem rather difficult to align.