Data information

Where the numbers come from.

Understand the data behind NHL odds comparison, historical stats, fair-odds estimates and shot-price adjustments: what we collect, how we compare prices and how often the available records refresh.

Reading model prices

Prediction

Fair odds and bookmaker odds

Fair O/U is the decimal price implied by our player projection before bookmaker margin. The sportsbook columns show offered prices. A highlighted price is better than the model's fair price for that same line; it is an estimate, not a guaranteed outcome.

Read the odds board legend →
Pregame context

Projected and confirmed lineups

Open a matchup before faceoff to see the latest available lines and starting goalies. Projected lineups can change. These pages show the available lineup information; they are not a record of the exact inputs used for every previous model run.

Check a matchup's lineup →
History

Historical odds and line movement

The book screen shows recorded price and line movement for supported match markets and player props at the selected bookmaker. Charts end at the last available observation. Older match records without a timezone are labelled as source time and kept separate from records that can be converted to your local time.

Explore odds and line movement →
Research

Follow changes to the tools

Model notes explain our analysis and methods. The update feed records product and data changes, while game results and box scores show what happened on the ice.

Sources

Stats

Multiple hockey data sources

Schedule, roster, play-by-play, shift, team and player-reference data are collected from several trusted hockey data feeds and reconciled into one internal model before they appear on the site.

Odds

Sportsbooks and prediction markets

Pinnacle, Bet365, Bethard, FanDuel, Betsson, Unibet, BetMGM and DraftKings, plus the Kalshi and Polymarket prediction markets on match markets — quoted at the executable best ask rather than a last trade, so an exchange price is comparable with a sportsbook's. That is the market price: the exchanges usually add a fee when you buy at it rather than placing your own limit order as a market maker. Scrapers run continuously and write to an immutable event log so we can replay the line history if a row ever looks wrong.

Stats data

01

Per-game player stats

One row per (player × game × strength state). Strength states cover 5v5 / 5v4 / 5v3 / 4v5 / 3v5 / 4v4 / 3v3 plus empty-net situations, so power-play and shorthanded splits are first-class instead of derived after the fact.

02

Shot geometry

Every shot event (goal / shot-on-goal / missed / blocked) carries coordinates, distance to net, angle and a danger-zone bucket (high / medium / low) so the "average shot distance" you see on a player card is calculated from actual rink coordinates.

03

Season rollups

We keep a season-level table per (player × team × season × regular/playoff) that's recomputed from the per-game rows. That's what powers the season-history table on every player page.

04

Refresh cadence

Completed-game stats are processed daily after the night's games, and rosters refresh weekly. Failed game syncs are retried on subsequent runs. Coverage and freshness depend on the source feeds and processing, so a missing or delayed record can still occur.

Odds data

01

Two market layers

Match markets (moneyline, total shots, home/away team totals) and player props (shots on goal, goals, assists, points, PP-points, blocks, hits, faceoffs, first/last goalscorer). Each row is one (bookie, market, line, side) snapshot.

02

Opening, current and final prices

The live board compares current quotes. Historical player charts use available opening and final snapshots, with current quotes as a fallback. A first observed price may differ from a sportsbook's original opening price; history reflects the records we collected.

03

Line reconciliation

When books offer the same prop at different lines (e.g. shots 2.5 vs 3.5), we keep those selections separate. The default reference line prioritises the line offered by the most supported books, using bookmaker priority and price to break ties. Best-price and model comparisons use the same market, line and side, including available alternative lines.

04

Historical shot-price adjustments

Premium player odds history shows adjusted shots-on-goal prices when a matching team-shots line is available. With a 29-shot baseline, the over price is multiplied by 29 / team line and the under price by team line / 29. Recorded sportsbook prices remain visible alongside this adjustment; it is separate from the predictive model's fair odds.

Questions about a number you see?

Ping us — every odds row links back to the bookie + timestamp we recorded.