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.
Data information
Every stat and odds line on BetProps is built from multiple data sources with a defined refresh cadence. This page is the contract — what we pull, how often, and how we reconcile it.
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.
Pinnacle, Bet365, Bethard, FanDuel, Betsson, Unibet and BetMGM. Scrapers run continuously and write to an immutable event log so we can replay the line history if a row ever looks wrong.
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.
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.
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.
The stats pipeline runs once a day after the last game finishes.
Rosters refresh weekly. If a game's events_synced flag is
ever stuck, the next nightly run picks it up — nothing is ever
permanently missed.
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.
For every market we store the first price we saw (open)
and the current price (closed). The "Best" column on the
odds board always uses closed prices; the open price feeds the drop
monitor.
When books offer the same prop at different lines (e.g. shots 2.5 vs 3.5), we pick a reference line — Pinnacle's closed line first, then the most-offered line otherwise — and only compare bookies at that line. No bogus apples-to-oranges payouts.
The player page also surfaces an "adjusted" over/under that scales the player's prop by the team-shots line for tonight's matchup (baseline 29 shots). Useful for filtering noise out of opponent- dependent props.
Ping us — every odds row links back to the bookie + timestamp we recorded.
We're in soft launch — tell us which bookie to add next, or anything that's missing or broken.