How this works
Nothing here is a black box. Every number on the site is defined on this page, including the ones that make the site look worse than it is.
The week
You keep a top 30 at QB, RB, WR and TE, half-PPR. Boards close at the kickoff of that week's first game — normally Thursday night, and in week 1 of this season a Wednesday, which is exactly why the rule is "the first ball" and not a weekday.
At that instant every board on the site becomes public and cannot be changed. The average of the human boards becomes The Crowd. Sleeper's own weekly projections, ranked, become Projections. Both are graded like everybody else and both sit on the leaderboard, but neither can win a week.
Did not set a board? Your season board is carried forward and graded. That is the default flow, not a penalty box.
Value captured, and edge
Add up the real half-PPR points of your top 12 at a position. That is captured — literally what you would have scored starting your own top twelve.
Captured on its own is not comparable between weeks, because a high-scoring Sunday lifts everybody. So the number on the leaderboard is edge:
edge = your captured − the benchmark's captured
The benchmark is The Crowd when at least 3 people ranked that position that week, and Projections when they did not. Every grade records which one it used and the page says so, because "+4.2 over the crowd" and "+4.2 over a projection" are different sentences.
A player who did not play
He is absent, not a zero. Dropped from every metric, for everybody.
Nobody could have known on Thursday that a Sunday inactive was coming. Scoring a DNP as a zero turns an accuracy table into a measure of injury luck, and the person who gets punished hardest is the one who ranked the injured star correctly high.
The consequence is worth stating: a board with fewer than 12 players who played is not graded at all. It is not a ranking of the position, and averaging it in would drag the benchmark down for everybody who did the exercise.
The other three numbers
nDCG at 5 and 12. Normalised discounted cumulative gain, using real points as the gain. Rewards getting the top of the board right — being correct about the third best receiver is worth more than being correct about the twenty-eighth.
Spearman ρ and Kendall τ. Whole-board agreement with the actual finishing order, over the players who played. Slower to move than captured, and better at telling a lucky week from a good one. Computed tie-safe, because two players on exactly 0.0 is a normal Sunday.
Hit rate. How many of your top 12 finished in the real top 12. Not part of the composite — it is here because it is the number people understand.
The Pick Score
One 0–100 number per board, so a week can have a winner. Three parts:
pick score = 100 × ( 0.45 × value + 0.3 × nDCG@12 + 0.25 × ρ′ )
value = 0.5 + 0.5 × clamp( edge ÷ (best possible − benchmark), −1, +1 )
ρ′ = (ρ + 1) ÷ 2
A board that exactly matches the benchmark scores about 67, which is why the letter grades sit where they do — the grade answers "how did this compare with the room", not "how many did you get right out of 30". Best possible is the top 12 available from the players somebody actually put on a board; measuring against the whole position would make the ceiling a third-string back nobody would rank, and every edge on the site a rounding error.
Letters are fixed bands over that score. Percentile, shown next to it, is against the humans only that week and at that position — it is the fair comparison across positions, because a quarterback week is more predictable than a receiver week and the letter does not know that.
The model: weekly boards into a season board
The default experience here is rank weekly. Keeping a separate rest-of-season board up to date is work nobody does for seventeen weeks, so the site does it for you.
Copying weekly boards across would not work, and the reason is the whole design: a weekly ranking is not a talent ranking. You move a receiver up eight spots because he is facing a defence with no corners, not because he became a better player on Tuesday.
So the model separates the two. Each week, for every player, it takes your weekly-minus-season movement and subtracts the same movement averaged across everybody else. What the whole room agrees on is matchup. What is left is your own read:
yours = (my weekly rank − my season rank) − (the room's average of the same)
target = value_curve( my season rank + yours )
new score = score + lr × (target − score)
The step size is assembled from four things:
- A base rate of 0.16. One week is one week; a full step would let a single Thursday rewrite your board.
- Recency decay. The same nudge moves less in week 15 than in week 2, because by then the board has thirteen weeks behind it.
- Conviction. The same call three weeks running moves the board properly. A one-off barely moves it, and flip-flopping is damped.
- Trust. How your boards at that position have actually graded, shrunk towards neutral so two lucky weeks do not make anybody an oracle. This is the one place where being right about football makes the software behave differently.
And two guard rails, because a model nobody trusts is a model everybody switches off: no player moves more than 6 slots in one run, and every run is recorded with the board exactly as it was — one click puts it back. Turn auto-apply off in your settings and the runs wait for you instead.
The value curve
Ranks have no arithmetic in them. Moving a running back from 3rd to 1st is worth about two points a game; moving one from 28th to 26th is worth a quarter of that. Treating rank distance as value makes the tail of a board matter as much as the top, and it is the most common way a ranking metric ends up measuring nothing. So every comparison goes through a curve of half-PPR points per game by positional finish, taken from last season and recomputed from this one once four weeks are in.
| Rank | QB | RB | WR | TE |
|---|---|---|---|---|
| 1 | 22.0 | 21.5 | 18.3 | 14.9 |
| 3 | 21.1 | 19.5 | 15.6 | 9.1 |
| 5 | 19.1 | 17.0 | 14.4 | 8.8 |
| 8 | 17.9 | 14.6 | 11.3 | 8.7 |
| 12 | 16.6 | 12.9 | 10.7 | 8.0 |
| 18 | 13.7 | 11.2 | 9.9 | 6.3 |
| 24 | 11.0 | 10.0 | 9.4 | 5.5 |
| 30 | 8.1 | 8.1 | 8.6 | 4.5 |
Getting in, and getting back in
You need an account to rank here. Not to read — the leaderboard, every locked week and every player page are open to anybody. But this site is a public record of who was right, and a record needs a name on it: one board per person, and a name that is still there in week 12.
So the cost is paid down at the form instead. Signing up is a handle and a password. The email is optional and is never emailed, because there is no mail server behind this site.
Which is why there is no "email me a reset link", and why there is a recovery code instead: twelve characters, shown once, stored only as a hash. Nobody here can read it back to you — including the person who built the site. It works once, and using it sets a new password and issues a fresh code.
Rooms
A private group with an invite link and its own leaderboard. Make one, send the link, and the same grading runs as a table of people you know.
A room re-slices, it does not re-score. Every number on a room's leaderboard is the number the site already computed — same grades, same edge, same benchmark. Only the rows are filtered. Nobody has to wonder which of their two scores is the real one.
The Crowd and Projections sit on every room's table whether or not they are "members", because "did our room beat the machine" is the argument a room exists to have. Changing the invite link un-invites everybody who has not used it yet.
Tiers, and why they are not graded
Press t on a board to draw a line under a rank. Tiers are how people actually think — "these four are the same to me" — and they are the one thing a flat list of thirty cannot say.
They are saved and shown on your public board, and they are deliberately not scored. A tier is a statement about confidence; inventing a rule that rewards one would make people draw them to move a number instead of to mean something.
Bring your own rankings — and take them away
Paste a list and it will read it. Rank numbers, teams and positions are all fine: 1. Josh Allen (BUF) and Josh Allen, BUF QB land the same place.
It shows you what it read, line by line, before it writes anything — and a line it is not sure about comes back unmatched rather than guessed. A stranger at number four, imported without a word, is worse than an import that failed.
Every board exports as CSV, because the only reason to trust a site that asks you to build something in it is being able to leave with it.
The consensus, as JSON
The most useful thing this site makes is the crowd's board, so it is readable by anybody, with CORS open, no key and no account:
GET /pick/api/v1/consensus?week=3&pos=RB
Average rank, votes, the spread of opinion, and — once the games are in — what each player actually did. Only ever a locked week: before that, nobody's board is public, including in aggregate.
Where the data comes from
Results and projections are Sleeper's, which is also who computes the half-PPR scoring and who restates it when the NFL issues a stat correction. Grades are rewritten in place when that happens, so a Tuesday correction updates Monday's numbers rather than doubling them. The schedule and the kickoff times are ESPN's public scoreboard. A week is only graded once every game in it has finished — during the games the numbers on the site are live and labelled as such, and they are not a grade.
Not affiliated with the NFL, Sleeper or ESPN. Self-hosted on a PC in an office in Toronto, which is also why it occasionally goes quiet for a minute.