Bidstream Lab
1.12K subscribers
2 photos
2 links
Deep dives into programmatic and DSP mechanics: auction dynamics, bid-shading, supply paths and what really moves your win rate.
Download Telegram
From the network

Want more on Affiliate network reviews? @VerdictDesk covers it daily and goes deeper than most. Solid follow.
The deal ID priority myth

Many buyers assume a Deal ID (a negotiated agreement encoded as a string passed in the bid request) guarantees priority access to inventory. For most deal types it does not. Understanding the taxonomy prevents expensive misunderstandings.

1. Preferred deals and private auctions are still auctions. Your deal often unlocks a price floor and audience, but you compete — sometimes against the open market, sometimes against other deal holders.
2. Programmatic Guaranteed is the only common structure that actually reserves volume at a fixed price; it bypasses the auction for the committed impressions.
3. Whether a non-guaranteed deal outranks open-market bids depends entirely on the publisher's ad server prioritization, not on the deal existing.

So a private marketplace deal at a $5 floor can lose to an open-exchange bid of $6 unless the publisher configured the line item to win on tie or near-tie. The deal gave you access and a floor; it did not give you the impression.

Why it matters: when a 'premium PMP deal' underdelivers, the cause is usually that it was never guaranteed and you were outbid or deprioritized in the publisher's ad server. Confirm the deal type and the publisher's prioritization before you blame your DSP.
The hidden economics of the header bidding timeout

Header bidding lets a publisher solicit bids from many demand sources in the browser before calling the ad server, so exchanges compete simultaneously instead of in a waterfall. The single most consequential setting is the timeout — how long the page waits for bids.

1. A short timeout (say 500ms) protects page speed but cuts off slower bidders, including some that would have bid highest. The publisher trades yield for latency.
2. A long timeout (1500ms+) captures more bids and lifts revenue per impression, but worsens Core Web Vitals and can reduce sessions, shrinking total impressions.
3. The optimum is not a number — it is the point where marginal revenue from one more bidder equals the marginal revenue lost to slower pages.

For buyers, the timeout is a silent filter on which auctions you even reach. If your DSP's bidder consistently responds in 600ms and a publisher runs a 500ms timeout, you are structurally excluded from that supply regardless of how much you would have paid.

Why it matters: when you can't win a known publisher at any price, measure your bidder's response latency against their timeout before assuming it's a deal or targeting issue. Latency is a competitive variable, not just an engineering one.
Reading sellers.json as a graph, not a list

sellers.json (a public file where an exchange declares every seller account and whether it's a publisher or an intermediary) and the supply chain object in the bid request together let you reconstruct the full path of an impression. The skill is reading them as a connected graph.

1. Each hop in the supply chain object names a selling entity and its seller ID in that exchange's sellers.json.
2. Walk the chain: publisher to SSP to reseller to your DSP. Each node should be declared, and each declared 'PUBLISHER' node should appear only where a publisher legitimately sits.
3. A reseller declared as PUBLISHER, or a chain that names a domain whose ads.txt never authorized that seller, is a break in the graph — a sign of misrepresented or laundered inventory.

The graph view catches things a flat path list hides: the same impression sold through two chains that converge on an undeclared intermediary, or a 'direct' relationship that ads.txt contradicts.

Why it matters: validating supply chain objects against sellers.json and ads.txt is the cheapest fraud filter you have, and it runs on data already in your log-level feed. Inventory whose graph doesn't close is inventory you should stop buying before you optimize anything else.
Stop optimizing to average CPM; model the clearing price distribution

Average CPM is a single number standing in for a distribution, and that abstraction hides the levers that actually move your win rate. The richer object is the clearing-price distribution: for a given segment, the full curve of what it took to win.

1. Pull every auction you bid on for one segment and record the minimum winning price where known (from win notices and loss reasons in log-level data).
2. Plot the distribution. You will usually see it is right-skewed — most impressions clear cheaply, a long tail clears expensive.
3. Your win rate is just the fraction of that curve sitting below your bid. Raising your bid sweeps you further up the curve, but with diminishing returns once you've cleared the dense low part.

This reframes bidding from 'pick a CPM' to 'pick a percentile.' Bidding to the 60th percentile of the clearing distribution might win 60% of available impressions; chasing the 90th costs far more per incremental win because the tail is expensive and sparse.

Why it matters: the distribution tells you where the cheap, winnable volume sits and where you're about to overpay for scarcity. Two segments with identical average CPMs can have completely different efficient bid points once you look at the shape.
Loss reason codes are the most underused field in the bidstream

When you lose an auction, many exchanges return a loss reason code: a small integer telling you why you lost. Most teams discard it. It is arguably the highest-signal field in log-level data.

1. Codes broadly split into 'lost on price' (you bid, someone bid more) and 'lost for non-price reasons' (creative rejected, below floor, bidder timeout, blocklisted advertiser, currency mismatch).
2. Aggregate the codes for a campaign that's underdelivering. If 70% of losses are non-price, raising bids does nothing — you are being filtered for a creative or eligibility reason.
3. 'Below floor' as a dominant code means the publisher's floor exceeds your bid; that's a targeting or PMP-negotiation problem, not a bidding problem.

The trap is that win-rate dashboards lump all losses together, so a campaign losing on creative policy looks identical to one losing on price. The reason codes are the only thing that separates them cleanly.

Why it matters: before you change a bid, pull the loss reason distribution. A surprising share of 'we can't win this inventory' problems are creative rejections or floor mismatches that no amount of money fixes. The field is already in your feed — wire it into your reporting.
Soft floors, hard floors, and why first-price killed the trick

A price floor is the minimum a publisher will accept. There were historically two kinds, and the distinction used to be exploitable.

1. A hard floor rejects any bid below it. Simple.
2. A soft floor (under second-price rules) was a threshold below which you paid your own bid, and above which you paid second price. Clever buyers bid just over the soft floor to win cheaply.
3. With the move to first-price, the soft-floor game collapsed: you now pay your bid regardless, so there's no second-price discount to engineer toward.

What remains is a strategic interaction between your shading engine and the publisher's floor. If the publisher sets a dynamic floor that learns from your bids, and your shading learns from clearing prices, you have two adaptive systems pushing against each other. Floors can ratchet up to capture the surplus your shading was trying to keep.

Why it matters: dynamic floors are why a publisher's effective CPM can rise even as the open market softens — the floor is harvesting the gap shading leaves. When a specific publisher's clearing price climbs against the market trend, suspect a learning floor and test how your DSP responds to floor signals in the bid request.
Duplicate bid requests: the same impression asks you twice

In a header-bidding world, one ad slot can generate multiple bid requests that reach your DSP through different exchanges. You are being asked to bid on the same physical impression more than once, and how your DSP handles it changes your economics.

1. Identify duplication by hashing stable fields — user ID, slot/placement ID, timestamp window, page URL — across exchanges in your log-level data.
2. If your DSP bids independently on each copy, you can win the same impression's auction on two paths and effectively bid against yourself, or you win one and waste compute on the rest.
3. Worse, duplication inflates your apparent available supply and corrupts reach and frequency math, because two requests look like two opportunities when they're one.

The mitigation is request deduplication before bidding and choosing the single best path per impression — which is SPO operating at the request level, not just the seller level.

Why it matters: if your DSP doesn't dedupe, your supply path optimization is incomplete and your frequency capping is leaking, because the unit of analysis (a unique impression opportunity) is being double-counted upstream. Measure your duplication rate per publisher; double-digit percentages are common and quietly distort everything downstream.
Win notices bias your training data, and the bias is systematic

A win notice is the callback an exchange fires to tell you that you won and at what price. DSPs learn clearing prices largely from these notices. The problem is that win notices are a biased sample of all auctions, and the bias is predictable.

1. You only get a clean price signal on auctions you win. Auctions you lose return, at best, a loss code — rarely the actual clearing price.
2. This is censored data: the expensive auctions you lost are systematically missing from your observed price distribution.
3. A model trained naively on wins alone will underestimate true clearing prices, because it never sees the high-priced auctions it couldn't afford.

This is the same censoring problem that haunts bid shading, viewed from the data-science side. The fix is survival-analysis-style methods that account for the missing losses, or deliberate high exploration bids to occasionally observe the expensive tail.

Why it matters: any pricing model that learns only from won impressions will drift optimistic and gradually price you out of competitive inventory without anyone noticing. When evaluating a DSP's bidding intelligence, ask specifically how it corrects for censored losses — it's the difference between a model that holds calibration and one that slowly hallucinates a cheaper market than exists.
Take-rate stacking: where your CPM actually goes

The price you pay and the revenue the publisher receives are separated by a stack of take rates — the cut each intermediary keeps. Supply path optimization is, concretely, take-rate reduction. To optimize it you have to be able to see it.

1. Each hop (SSP, reseller, sometimes a second SSP) takes a percentage. These compound: a 15% SSP cut on top of a 10% reseller cut leaves the publisher roughly 76% of your spend, not 75%.
2. Some intermediaries take a fixed margin; others take a dynamic, undisclosed margin that varies by auction. The undisclosed ones are where money disappears.
3. You can estimate take rate per path by comparing your spend on a publisher through path A versus path B for matched inventory — the path that delivers the same audience for less is the lower-take path.

Log-level data from both sides (your spend, the publisher's payout, where you can get it) lets you measure the stack directly. Without it you are inferring.

Why it matters: SPO's real prize is not 'fewer paths' for tidiness — it's routing spend through the lowest-take path that preserves the publisher relationship, often recovering 10–20% of media cost. You can't manage a take rate you've never measured, so make path-level effective cost a standing report.
Neighbor spotlight: @SmartlinkOps. They go deep on Smartlinks — the kind of channel you actually keep notifications on for.