Floors modelled from bid-level data by placement, geo, device and consent state, rolled out against a holdout, and declined below two million auctions.
About this service
Floors move net revenue by single digits, and about a third of the floor programmes we are asked to inherit have cost the publisher money. The mechanism is not subtle. In a first-price auction the buyer is already shading, and a floor is a second filter applied to the same money. Above roughly the 60th percentile of your historical winning-bid distribution for a given segment, the impressions a floor removes are worth more than the uplift it produces on the ones that survive.
The model:
We work from bid-level data, never aggregate reporting. Prebid bid response and bid won events go to a store you own, usually BigQuery, and the Google side comes from Ad Manager Data Transfer files. From that we fit a revenue curve per segment, and the segments are placement, geography, device, browser and consent state. Consent state is the dimension most floor programmes never add and the one that matters most in Europe and Turkey: a reader with no TCF consent produces a different demand curve entirely, and applying the consented floor to that reader removes the few buyers who would still have paid something.
Two auctions, one mistake:
The Price Floors Module governs header bidding through a floors.json fetched at page load, with its own delay budget and model weights. Unified Pricing Rules govern Google demand and Open Bidding inside Ad Manager. These are separate auctions, and setting both to the same number does not give you one floor, it gives you two filters that interact. The common failure is a pricing rule sitting above the Prebid floor, which quietly stops Google demand competing on impressions where it would have been the highest bidder, and the reporting presents that as a fill problem for somebody else to investigate.
How we roll it out:
A floor change goes to one arm and is held out from the other, split by hashed reader so a person stays in one arm across sessions. Six weeks minimum. We read net revenue per thousand sessions rather than eCPM, because eCPM rises whenever you discard impressions, which is exactly why floor projects look successful in week two and stop looking successful in month four. The holdout stays in place after handover at a small share of traffic, so whoever touches floors next has a baseline they did not have to build.
When we tell you not to do this:
Below roughly two million monthly auctions in a segment, a floor change cannot be separated from noise inside any reasonable window, and a model fitted on that data is decoration with a chart attached. We will say so and decline rather than deliver a number you would then act on.
Crypto inventory needs a different answer from beauty. A cosmetics page has forty bidders competing and a smooth demand curve for a floor to bite into. A crypto page has eight, several of them category-specific networks, and the curve is spiky enough that one floor step can remove the only buyer present at that moment. On crypto placements we usually recommend floors on the top unit and on consented desktop traffic only, and nothing else, which is a much smaller piece of work than the one you probably came here expecting to buy.
What is excluded:
We take no revenue share, on this or on anything. We do not resell a dynamic floor product and we will not integrate one on your behalf while describing it as our model. Direct-sold rate cards belong to your sales team and we stay out of them, though we will show you where programmatic is clearing above the rate card, which is an uncomfortable conversation and usually the most valuable page in the report.
This is the wrong engagement if floors are being asked to compensate for a demand problem. With four bidders and no direct demand, the answer is more contracts, and no model substitutes for them.