Blog · Revenue
Bid request quality is a revenue line: the auction economics of broken fields
We wrote the engineering version of this story: OpenRTB version mismatches fail silently, because the protocol ignores what it does not recognize. This is the version for people who own a revenue number. The bid request is the only sales document your inventory ever gets. Every field a partner cannot parse is a claim your inventory no longer makes, and in an auction, claims you fail to make are discounts you did not agree to.
Clearing price is a function of who showed up
The economics of an auction are brutally simple: price comes from competition, and competition comes from qualified bidders. Remove one bidder from a thin auction and the clearing price drops toward the next bid down. In first-price auctions with bid shading, the effect is faster, because every buyer's algorithm is explicitly trying to pay the least it can get away with, and less competition means it can get away with more. The first-price mechanics guide covers how shading works; the summary is that your clearing price is being computed from your auction density on every single impression.
Field-level breakage attacks the density directly, and it does it silently. A DSP that cannot find a consent string does not call you. It stops bidding on that traffic. A buyer whose parser misses your supply chain does not negotiate. Its supply-path filter drops you. Each of these is a bidder subtracted from every auction on the affected traffic, and none of them generates an error.
What each broken field costs
The mapping from field to money is concrete. These are the big five, with the economic mechanism attached:
plcmtmisread or missing: your inventory changes price category. Instream video trades at roughly 10 to 30 dollars CPM on the open web while outstream clears under 10. A buyer that cannot classify your video placement, because plcmt and placement disagree or the field is at a path it does not read, prices defensively. Misclassification is not a haircut, it is a tier change: the same impression sells at the wrong table.- Consent at the wrong path: EU demand exits. A buyer that reads
user.ext.consentwhile you writeuser.consentsees EU traffic with no legal basis and, if it is well-run, declines to bid. You lose not that buyer's wins but its presence, which was propping up the clearing price of every auction it entered. schainincomplete or in the wrong home: supply-path filters remove you. Buyers running supply path optimization treat an unverifiable chain as a reason to skip the path entirely, and the polite ones tell you with nbr 16 or 17. The impolite ones just disappear from your demand.rwdddropped: the rewarded premium evaporates. Rewarded placements carry guaranteed attention and price accordingly. A parser that never sees the flag buys them as interruptive video.- Pod fields ignored: live sports prices like run-of-network. The CTV pod toolkit (
podid,rqddurs,mincpmpersec) exists to enforce duration economics on the most expensive inventory there is. When those fields do not survive the trip, duration floors are unenforced and premium pod structure is invisible to the buyer pricing it.
A worked example, in round numbers
Take a publisher clearing 100 million EU video impressions a month at a 10 dollar average CPM: one million dollars of monthly revenue. Now break one thing: a consent string written only at the 2.6 path, sent to a major buyer that still reads the 2.5 path. That buyer exits the affected auctions entirely.
Assume conservatively that it was the price-setting bidder on 20 percent of those auctions and its absence lowers the clearing price by 10 percent there, while adding nothing anywhere else. That is 100M × 20% × $10 CPM × 10% ÷ 1000 = 20,000 dollars a month, 240,000 a year, from one field at one path for one partner. Nothing in any dashboard says "consent path mismatch." The symptom is that EU CPMs softened, which has a dozen innocent explanations, and repricing arrived without a meeting.
The numbers are illustrative; the structure is not. Field breakage multiplies (affected traffic share) × (bidder's price influence) × (your volume), and at programmatic volume the product is rarely small.
The second-order cost: you get shaped out of the stream
The auction you lose today is the visible half. The invisible half is what your broken requests teach the machines that decide whether you get auctions tomorrow.
Bid request volume has grown far faster than real inventory, and DSPs defend themselves with QPS caps and traffic shaping: models that score each supply path by how often its requests turn into bids and wins, then throttle the paths that do not. Every request a partner cannot parse, every bid that dies to a mechanical loss code in the 1-to-10 range, is a training example telling that model your path is noise. The model responds the only way it can: it listens to you less. Your auctions stop being lost and start not happening, which is cheaper for everyone except you.
This is why request quality compounds. Clean requests win auctions, wins feed the shaping models, and the models allocate you more QPS, which is more auctions to win. Broken requests run the same loop in reverse, and climbing back up a shaping model's rankings takes months of clean traffic.
The third-order cost: revenue you cannot audit
The ISBA and PwC supply chain studies are the reference point here. The first one, in 2020, famously found that only 51 percent of advertiser spend reached publishers and 15 percent could not be attributed at all, the "unknown delta." The second study, published in 2023, got the delta down to 3 percent, and the stated reason was better, more matchable data across the chain: consistent IDs, reconcilable logs, fields that meant the same thing on both ends.
That is a protocol-hygiene result wearing an accounting costume. Spend becomes attributable when the records on both sides of every hop can be joined, and it stops being attributable when IDs drift, fields move homes, and two parties log different truths about the same transaction. Unauditable revenue settles toward whoever controls the reconciliation, and that is rarely the publisher. Clean protocol data is not just how you win auctions. It is how you prove, later, what you were owed.
What to put on the revenue dashboard
- Bid rate and win rate per partner, watched across deploys. A step change in one partner's participation after a release is a parser gap, not a demand fluctuation.
- nbr 2 and loss codes 1 through 10 as build failures. These are partners telling you, in machine-readable form, that your payloads are broken. They belong in engineering alerting, not in a monthly deck.
- Field-completeness cohorts. Compare CPMs on requests that carry full plcmt, schain, consent, and pod data against requests that do not. The gap is the price of your own missing fields, measured on your own traffic.
- EU CPM trend against consent-string presence and path. Softening EU prices with healthy volume is the classic consent-plumbing symptom.
- Validation as a release gate. rtblint in CI turns a moved field or a version drift into a failing pull request check, which costs minutes. The alternative is finding it in the win-rate data next quarter.
The unit economics of prevention are lopsided. A validator run costs milliseconds and catches the exact class of defect this post prices: fields that vanished, moved, or stopped meaning what your partner thinks they mean. Paste a production request into the tester and read it the way a buyer's parser does. If something is missing there, it is missing from your revenue too.
Sources
The OpenRTB specification is published by IAB Technology Laboratory under a Creative Commons Attribution 3.0 License. Field names referenced here are drawn from it; the analysis and arithmetic are our own. rtblint is independent and not affiliated with IAB Tech Lab.
- ISBA / PwC Programmatic Supply Chain Transparency Study (2020): the 51 percent and the 15 percent unknown delta
- ISBA second Programmatic Supply Chain Transparency Study (2023): the delta reduced to 3 percent with matchable data
- AdTech Explained: Traffic Shaping Explained, on QPS caps and supply-path scoring
- MGID: Instream vs Outstream Ads, the CPM tiering behind the plcmt example
- vastlint: The Revenue Math of Broken VAST, the same translation one layer down the stack