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.
Model notes · Site updates
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.