Skip to main content

Bidder Health

A single misbehaving bidder can quietly cost you revenue: it might rarely respond, respond too slowly and time out, win little, or win at low prices while crowding out better demand. This runbook finds the culprit and tells you what to do about it. It's a good weekly habit, not just an incident tool.

The Demand tab of Dashboard → Monetization labels each bidder a Demand Seat — your account's configuration for one bidder. "Seat," "bidder," and "partner" all refer to the same thing here.


The four failure signatures

An unhealthy bidder shows up as one of these. Each has a different fix, so name the signature first:

SignatureThe bidder…Metric to watch
Silentrarely returns a bidResponse Rate low
Slowresponds after the auction has closedTimeout Rate high / P90 Response Time near the timeout
Losingbids but rarely winsWin Rate low
Cheapwins but at low priceseCPM low relative to peers

Step 1: Pull per-seat performance

Go to Dashboard → Monetization and open the Demand tab. The key charts:

ChartReads out
Demand Trend by SeatRevenue, impressions, and eCPM per bidder over time
Auction CompetitionHow many bidders respond per auction, and how often
P90 Response Time by Demand SeatHow slow each bidder's responses are (the 90th percentile)
Responses per AuctionBid density — how contested your auctions are

Set the date range to the window you're diagnosing. If you're chasing a drop, widen it enough to see the before-and-after.


Step 2: Rank the seats and find the outlier

Health is relative — there's no universal "good" win rate. Judge each seat two ways:

  1. Against its peers this period — a seat far below the others on Win Rate or eCPM, or far above on Timeout Rate, is your outlier.
  2. Against its own baseline — a seat that was fine last month and is now degraded points at a recent, fixable change rather than a bidder that simply doesn't value your inventory.

The metrics on the Demand tab, per seat:

MetricWhat "bad" looks like
Response Rate (%)Well below peers → silent bidder (credentials, tag IDs, or it doesn't want your inventory)
Timeout Rate (%) / P90 Response TimeTimeouts high, or P90 near/over your Auction Timeout → slow bidder losing bids it actually made
Win Rate (%)Bids often, wins rarely → priced out (floors) or outbid
eCPMWins but low value → cheap demand possibly displacing better bidders

If a metric looks anomalous, decide whether it's new (a step change dated to a release or a bidder-side incident) or chronic (this bidder has always been like this). New and chronic call for different responses — fix vs. accept-or-drop.


Step 3: Check the seat's configuration

Once you've named the signature, open the seat on Demand → Prebid → click the bidder card. Match the signature to the likely cause:

SignatureCheck on the seat
SilentEnabled on the Seat tab? Tag IDs assigned for the slots you expect bids on (Tag IDs tab)? Account / site / zone IDs correct? Was the enabling release actually shipped?
SlowNothing on the seat itself — timeout is global or per-slot, not per-bidder (Timeout settings). A consistently slow bidder forces a choice: raise the timeout (helps this bidder, costs page speed) or drop it.
LosingYour floors may be pricing it out — check slot and global floors (Floors). Or it's genuinely outbid, which is fine.
CheapConsider a per-seat floor so it only wins when it clears a worthwhile price (Floors covers the Demand-Seat floor lever).
There is no per-bidder timeout

The wrapper Auction Timeout applies to the whole auction (globally, or overridden per slot). You can't give one slow bidder more time without giving it to all of them on that slot. See Timeout settings.


Step 4: Confirm in the browser

Before changing anything, verify what the bidder is actually doing on a live page. On any page with the wrapper installed, open DevTools → Console:

pbjs.getBidResponses() // bid responses this page, keyed by ad unit
pbjs.getAllWinningBids() // bids that actually rendered

A bidder absent from getBidResponses() isn't returning bids at all — a silent signature, so re-check credentials and tag IDs. A bidder that appears in responses but never in winning bids is losing — a floor or competition issue, not a config one. Append ?pbjs_debug=true to the URL for the wrapper's AAM-prefixed logs.


Step 5: Rate and act

Close with a verdict per seat and a matching action:

VerdictMeaningAction
HealthyResponds, competitive win rate and eCPMLeave it
DegradedOne metric off, recently changedFix the cause (tag IDs, credentials, floor); re-check next period
CriticalSilent, or timing out constantly, or winning cheaply at scaleFix if config-caused; otherwise disable it and lean on the rest of your demand, or replace it

Ship any config change as a release, then re-pull the Demand tab after it's had time to accumulate data. For a risky change, roll it out to a slice of traffic first with an experiment.


Let the AI Assistant run it

The Assistant has a bidder-health flow built in — "Which bidder is hurting me?", "Is Rubicon's win rate down this week?", "Rank my bidders by eCPM and flag any outliers." It compares each seat against its baseline and peers and flags the anomalies with the evidence. See the AI Assistant guide.