How the bid number is built

Every figure below was measured, not asserted, and this page says which ones we have graded and which ones are still our judgement. If a number here looks wrong, it is a bug in the pipeline or a gap in the data, and either way it is checkable. That is the trade this whole design is making.

The whole product answers one question. What is the smallest bid that would have beaten the winner on about 60% of the claims in your league that looked like the competition we expect for this player? Everything below is how we get there.

The four steps

How one dollar figure gets made.
1. We work out who is worth a decision

Not the whole free-agent pool, which is hundreds of players nobody is thinking about. The 36 who matter this week: 10 RB, 10 WR, 5 TE, 5 QB, 3 DEF, 3 K, ordered by how many leagues across Sleeper are adding them right now.

2. We work out how contested he will be

This is what makes two running backs cost different amounts. A player half the country is adding will draw bidders in your league too. A player nobody is adding is yours for a dollar. We sort your league's past claims into quiet ones, contested ones and outright wars, then put each player in the group his demand points at. Where those lines fall is not a setting we picked. It is how often your league has actually had each kind.

3. We look up what claims like that really cost

Your own claims come first, always. Too thin at that exact position? We widen one step at a time before ever using strangers' leagues. A rougher answer from your league beats a precise one from theirs, and the card says which one you are reading.

4. We give you three figures, not one

P60, P75 and P90: the cheapest bid that would have won about 60%, 75% and 90% of the time. Read P60 if you only read one. The higher rungs are priced off your league's whole history rather than the quiet claims, because their job is covering the case where we were wrong about how quiet he would be.

Two prices, and why we show both

A FAAB auction has a winner and a runner-up, and they answer different questions.

FigureWhat it meansWhat we do with it
The bid we recommend What it would take to beat the manager who won This is the recommendation. You are an extra bidder, so everyone who bid still bids, and you have to beat the winner
The clearing price One dollar more than the best losing bid Shown as context. It is what the auction actually required, and it is always cheaper

Keeping these apart matters more than it sounds. Pricing off winning bids alone overpays by $4.75 to $16.26 per league on average, because a winning bid is a record of somebody's overpayment. We have also caught ourselves confusing the two: in September 2026 a scoring tool graded the recommendation against the cheaper figure and reported that the model was overbidding by 20 points. It was not. The grader was wrong, and the fix is in the build log.

How we grade ourselves

Two ways, and neither is a demo.

Held out

measured

The model is fit on some seasons and graded on a season it was never shown.

P60 target
63%
actually won
Mean miss
3.2 pts
across all rungs

Scored on 2,892 claims across 419 leagues, against beating the winner. A rung that says about 60% and delivers 63% is doing its job. We say "about" on purpose: out of sample these land between 53% and 63% depending on how much history a league has, and claiming a flat 60% would be the tidier lie.

Live, every week

published

The held-out test is the honest version of a backtest. It is still a backtest.

So every bid the board shows you is written to a log before you act on it. Each Wednesday we score last week's recommendations against what actually cleared, and publish the result in the market report, including the weeks we got it wrong. A number that can only be graded after the fact by the people who wrote it is not a number anyone should act on.

This week's scorecard →

We are in the first season of scoring ourselves live, and the live numbers and the held-out numbers do not yet agree on every cut of the data. We are working on why, in the open, and the weekly report is where that shows up first.

How we grade, and every change to it

The rules behind the letters in each weekly report.

Each weekly report grades our bids against what really happened. Each of our three bids makes a promise: P60 should win 60% of the players somebody else also bids on, P75 75%, P90 90%. A letter says how far we missed, in points: A under 5, B under 10, C under 15, D under 25, F at 25 or more. When we change a rule, it goes here, with the date and what it did to our own grade.

October 23, 2026 (Week 7)

A $0 bid no longer counts as competition. We grade our bids on the players another team also wanted. Until now a $0 bid counted as wanting him. But $1 beats $0, so those claims were free wins for our bids and said nothing about our price. Now a claim counts only when the winner paid at least $1 and another team bid at least $1. Our bids were already priced on that rule; now the grade is too.

One rule for every week. Weeks 2 to 4 were graded under our first rule. Every week is now graded under today's rule, and every page says it was re-graded and what it first said. The "old rule" line on Weeks 5 to 7 is gone. Each page also says which of our bids it grades, because that changed: our first bid model in Week 2, the league price ladder in Week 3, and the player-specific bid from Week 4 on.

What this did to our record. Week 2 had no grade on its page; it now has an F (25.1 points missed). Week 3 stays a D (16.3) and gains a key-player grade, C. Week 4 stays a B (6.8) and gains a key-player grade, D. Weeks 5 and 6 stay B. The rule cut both ways: it raised our miss in Weeks 2, 3 and 5 and lowered it in Weeks 4 and 6. It also helped Week 7, our first report under it: the old rule would have made that week a B (5.5 points missed); the new one makes it an A (3.0). In every week our cheapest bids are our weakest: when P60 said under 8% of budget, it won between 8% and 52% of the time, short of its 60% promise.

October 7, 2026 (Week 5)

Winning a little more than we promise now counts as on target. Winning 60% to 65% on P60 now scores as no miss. Below 60%, every point is a miss. Above 65%, only the points past 65% count. Before, 63% was 3 points missed, the same as 57%. We changed it because we would rather you overpay a little than lose the player. P75 works the same way at 75% to 80%, and P90 at 90% to 95%.

A second letter, for the key players. The overall letter grades every contested claim, so thousands of cheap claims can hide a big miss on the few players everybody wanted. The new letter grades our P60 on those players, one at a time. Each report says how it picked them.

What this did to our record. Week 4 was published as a B (7.8 points missed) under the old rule. The same bids would have scored 4.4 under the new overall rule, an A. Week 4 stays a B. For Weeks 5 to 8, each report also prints what the old rule would have said. (Replaced on October 23: every week now uses one rule, above.)

What we tested and threw away

Four ideas that sounded right and did not survive being checked.

They are here because a tool that only tells you what worked is asking you to trust it on faith, and because each one is something this product could plausibly have shipped and does not.

How good the player is rejected

The most natural assumption in fantasy football: better player, bigger bidding war. Across 39,515 claims, projected value predicted how many teams would bid at a correlation of +0.008. Split into five groups by value, they drew 1.37, 1.39, 1.37, 1.39 and 1.48 bidders. Flat. Expensive claims get bought on news instead, before the player has produced anything.

Roster need in the price rejected

We thought a manager with a hole at running back pays more for one. He does not. He bids more often, by 1.3 to 1.9 times, which is real, but on the same player he bids about the same and the claim draws no extra bidders. Five ways of defining need, gaps from +0.006 to -0.038. Need stays off the price. It still shows on rival cards, because who is short is worth seeing even when it does not move money.

Roster need for predicting who bids rejected twice

Knowing who has a hole should tell us who will bid. Held out against the managers who actually bid in 2025: habit alone got the real top bidder in its top three 35.1% of the time, adding need got 33.1%, random gets 23.6%. We ran it again in a different form in case the maths was the problem, and the best it managed was a tie. Two points is inside the noise at that sample, so we will not claim need made it worse. But the pass mark was written down first, and it did not beat what we had.

Scraping more public leagues rejected

We assumed the model was starved of leagues, so we measured what more would buy before collecting any. Going from 10 to 20 leagues bought 0.009 accuracy. 20 to 40 bought 0.009. 40 to 80 bought 0.001. The curve was flat and we were already past the bend. What actually limits a public league is that we cannot tell its managers apart, worth 0.022, about twenty times more. So we spent the effort on reading your league instead.

The rules we hold ourselves to

Your league first, always

A figure computed from strangers' leagues when your own could have answered is a bug, not a simplification. The public data exists to fill holes and to check ourselves against. It is never the default, and every card says which one it is showing you.

Sample sizes on the surface

Every figure carries how many claims it rests on. When a league is too thin at a position to support a rung, we suppress the rung and say why rather than printing a confident number built on four bids.

We never hold your password

Sleeper is read through its public API. ESPN has no such option for private leagues, so your own browser reads your league and sends us the result. We do not store an ESPN credential and we are not going to start.

Nobody's league shows up in a public report

The weekly market report only prints a player's price when at least five leagues bid on him, so no row can describe one league's business. It carries no league name, no league ID and no member name. That floor is written into our privacy policy, so moving it means changing the policy.

The honest limit on demand

Our read on how contested a player will be leans on Sleeper's public trending-adds list: adds across every Sleeper league in the last 24 hours. Two things it is not. Not pending claims, because those adds already went through and no platform publishes a pending feed. And most adds anywhere are not money claims at all: in our own leagues, 2,869 of 3,774 completed Sleeper adds were free pickups. How that count maps onto bidding in your league is a judgement call, and this is us saying so.

Built for redraft

The pricing adapts to your league's own history, which carries a long way in any format. But we cannot reliably read dynasty and keeper settings off every platform, so we do not claim to handle them.

Want to see it on your own league? It takes a league ID and about ten minutes. Start here →