Header Bidding
The 1000ms Question: Building a Header Bidding Latency Budget That Actually Holds
Bidder density lifts revenue until latency starts eating it back. Here's the framework we use to set — and enforce — auction timing budgets across client and server.
Every publisher eventually faces the same trade: add another bidder and win more auctions, or protect page speed and keep readers happy. The mistake is treating this as a philosophical choice rather than an engineering problem with a measurable answer.
We start every header bidding engagement by defining a total auction budget — typically 800–1200ms from page interaction to ad server request — and then allocating it explicitly: wrapper initialization, consent resolution, bid requests, timeout, and the GAM call itself. Once every millisecond has an owner, waste becomes visible.
The highest-leverage moves are rarely dramatic. Moving slow-but-valuable bidders server-side, lazy-initiating auctions below the fold, and cutting adapters with sub-5% win rates routinely recovers 200–400ms without touching revenue. From there, timeout tuning becomes a yield instrument: we've seen identical bidder sets swing 12% in revenue purely on timeout configuration.
The discipline that makes it stick is governance. Latency budgets decay as teams add partners and scripts, so we review the allocation monthly against real-user monitoring data — the same way a CFO reviews spend against budget. Revenue and speed stop being enemies the moment both have numbers attached.