EditorialsRoster construction

How many players can a fantasy football roster actually hold?

The maximum roster a fantasy football league can hold depends entirely on the platform, and the ceilings are further apart than most tools assume. MyFantasyLeague publishes the highest at 90 roster spots and 100 teams. ESPN allows 30 roster slots in any combination and up to 20 teams. Yahoo ships a default maximum of 15 that a private-league commissioner can change. Sleeper publishes no hard cap on total roster size and runs to 32 teams.

A football field seen from directly overhead, yard lines and numbers running across it.
Photograph by Ameer Basheer on Unsplash

Every figure on this page is HexValue, the cross-position number HexMetrics assigns a player once it knows a league's shape. Two boards are built from the same 553-player pool for the 2026 season, identical except for the one setting under discussion, and the difference is what you see. Both are 12-team leagues. Percentages are suppressed for players below a HexValue of 5, because a ratio against a player worth almost nothing reports the size of the denominator rather than the size of the change.

The published ceilings

These are the numbers the platforms state, not estimates. If you are building anything that reads more than one of them, this table is the whole problem in four rows.

PlatformRoster spotsTeams
MyFantasyLeagueUp to 90Up to 100
ESPN30, any combinationUp to 20
Yahoo15 by default, adjustableVaries by league type
SleeperNo published cap32
Published maximums, checked 2026-08-20.

Three times between the top row and the second. A roster array sized for ESPN overflows on MyFantasyLeague, and a league-size selector that stops at 32 cannot represent an MFL league at all.

Adding every slot together gives you the wrong number

The ceiling is the easy part. The arithmetic underneath it is where tools actually break.

Taxi squad and injured reserve slots sit beside the roster, not inside it. Sum every slot and you overstate how many active players a team may carry.

Sleeper says players on IR and on the taxi squad are not counted against the position limit, and separately that taxi slots do not count against the roster limit. It also tells teams that are over the limit that they may move eligible players to IR and taxi, which is the same rule from the other direction.

The failure this produces is specific. Your waiver tool tells a manager they have room, they claim a player, and the platform rejects it. Nothing on your side ever reported an error.

The roster slots panel in HexCoach. QB, RB, WR, TE, FLEX, SFLEX, K and BN each have their own count, and IR and TAXI sit as two more fields beside them rather than inside the bench.
IR and TAXI are their own fields here, beside the bench rather than inside it, because that is how the platforms count them. A tool that sums this panel into one number tells a manager they have room on a roster that is already full. Open HexCoach

Reading it correctly from the Sleeper API

Sleeper hands you the lineup as a repeated list of slot codes in roster_positions, one entry per seat. Two running back slots means RB appears twice.

Taxi and IR are not in that array. They are taxi_slots and reserve_slots, separately. Build a roster from roster_positions alone and a league with six IR slots reports as having none.

And count slot codes you do not recognise rather than dropping them. Capacity is the sum of the seats, so dropping an unfamiliar one understates how full a team is, which is the summing error above arriving from the opposite side.

Why any of this matters before your draft

Count your seats before you build a board. Not the starting lineup, the whole thing. Your board needs at least as many names on it as your roster has places, and most drafts end with somebody taking a kicker two rounds early because they ran out of players they had actually looked at.

Then count taxi and reserve separately, because the platform does. Six reserve slots are six places to keep an injured player at no cost to your active roster, and that changes who is worth a late pick. A player who will not take a snap until November is a wasted bench seat and a free reserve seat. Same player, two very different prices, and the only thing that decides which one you are paying is a setting most managers never open.

Taxi does the same job in a dynasty startup. Rookie slots that sit outside the roster make the rookies you draft cheaper than their pick number suggests, and an otherwise identical league with no taxi squad prices that same rookie higher, because he has to hold a real seat to be kept.

The number is in your league settings and it is worth reading rather than assuming. Yahoo ships a default of 15 that your commissioner may well have moved. ESPN allows 30 in any combination. Sleeper publishes no total cap at all. Three managers in three leagues who all know the roster size are working from three different numbers.

What HexMetrics does with all this, including where it stops

Roster depth first: HexMetrics caps each individual slot rather than the roster as a whole, at 30 per slot type and no total limit, so it represents every roster in the table above and a good deal past them. A tool that cannot represent your league cannot value it.

League size is where it stops, and the honest number is 32. That is not a platform choice, which would be the criticism above turned on us. It is the player pool. Only 64 quarterbacks carry any value in the model at all, so a league large enough to start them all has no replacement level left to price against: at 32 teams the last starting quarterback is worth 0.148 of the first, at 48 it is 0.03, at 64 it is 0.002, and at 100 the pool runs out before the last team has drafted one. A 100-team board would render, and every number on it below the first two rounds would be noise.

So the ceiling is a limit of the data rather than of the interface, and raising it would take a deeper valued pool rather than a longer dropdown. The measurement behind those figures is a script in the repository, re-run before that cap is ever changed.

Where a league runs seats HexMetrics does not rank, individual defensive players being the main one, those seats still count toward capacity and show empty. An empty seat is honest. A seat filled with a number that means nothing is not.