NHLFantasyHub

How our fantasy hockey rankings are calculated

Every number on this site is derived from the NHL's public statistics and schedule APIs. Nothing here is hand-adjusted, and no ranking is edited after it is computed. This page documents exactly how a player's position on the board is produced, and — just as importantly — what the method cannot tell you.

The short version

A player's rank is his value over replacement: how much fantasy value he produces compared with the best player at his position you could get for nothing.

That comparison is the whole point. Forty points from a centre and forty points from a defenceman are not worth the same, because replacing a centre is easy and replacing a defenceman is not. Raw totals hide that. Value over replacement is what surfaces it.

Step by step

  1. Fantasy value per player. For a points league, each counting stat is multiplied by that league's weight and summed. For a categories league, each category is converted to a z-score across the qualified player pool — how many standard deviations above or below the mean the player sits — and those z-scores are summed, so a category where everyone is bunched together counts for less than one where the spread is wide.
  2. Replacement level, per position. The replacement player at a position is the Nth-best player there, where N is the number of roster slots at that position multiplied by the number of teams in the league. In a 12-team league starting two centres, the 24th-best centre is the one you could always have had.
  3. Value over replacement. Subtract the replacement level from the player's value. This is the number the board sorts on.
  4. Rank. Ordinal by VORP descending, ties broken by player id, so ranks are unique by construction and read 1, 2, 3 rather than 1, 1, 3.

Replacement level is configuration, not a constant. League size and roster slots change it, and they change it a lot — the same player is a different asset in an 8-team league than in a 16-team one. “12-team standard” is an assumption this site makes explicit rather than bakes in.

Where the data comes from

All statistics, rosters and schedules come from the NHL's public statistics and schedule APIs. This site holds 10 seasons, back to 2016-17.

Regular-season and playoff statistics are stored as separate lines, never merged. A four-point playoff run and a four-point season are different facts, and adding them together would flatter anyone whose team went deep.

Skater totals are assembled from two NHL reports, because hits and blocked shots are published separately from goals and assists. If the second report is unavailable or returns a partial set, ingestion fails loudly rather than recording zeroes — a league-wide “0 hits” would silently reorder any board that weights them.

How often it updates

Statistics and the schedule refresh nightly during the season. Rankings are recomputed after the statistics land, so the board you see reflects the most recent completed games.

In the off-season the board holds the most recent completed season's final numbers, labelled with that season. It is not a projection of next year.

What this method does not do

These are not projections. The board describes what has already happened. It does not forecast next season, and it carries no ageing curve, no regression to the mean, and no adjustment for a player who changed line or team.

Injuries and usage are not modelled. A player who missed half a season ranks on what he actually produced. Nothing here knows he was hurt, and nothing knows he has since been promoted to the top power-play unit.

Goalie value is unusually unstable. Save percentage over a small number of starts is close to noise, and workload — how often a goalie actually plays — matters more than rate stats in most formats. The goalie board shows workload share for exactly this reason.

Team context is thin. A traded player's season is attributed using dated roster spells derived from the games he appeared in. That establishes when he played for whom, not when he was acquired — a player acquired at the deadline who does not dress for two weeks looks like he arrived later than he did.

Corrections

When the underlying NHL data is corrected, the next nightly run picks the correction up and the board changes with it. When a bug in this site's own calculation is found, it is fixed and the affected numbers are recomputed rather than left in place.

Terms used above are defined in the glossary, and common questions are answered in the FAQ.