Methodology
Where the data comes from, how probabilities are computed and how we measure our own accuracy.
Data
Teams, schedules, final scores and quarter-by-quarter scores come from the BALLDONTLIE API. Standings, home/away records, last-10 form, quarter splits, head-to-head records and league averages are computed from those game results; missing values stay empty and are never replaced by zero.
Live scores
While games are in progress our server asks BALLDONTLIE for the latest scores every 30 seconds, and the scores page refreshes itself every 20 seconds. A live score can therefore lag the arena by up to about a minute.
Live win probability (model wp-v1)
During a game, the home team's chance of winning is Φ((margin + μ·t) / (σ·√t)), where margin is the current home lead, t the share of regulation time left, μ the pre-game expected margin from our Elo model and σ = 17 points. σ was fitted on 13,022 games (2016-17 to 2026-27) at the end of each quarter: the side the model favors goes on to win 69% of the time after the first quarter, 75% at halftime and 82% after the third quarter. The game page shows this probability play by play, next to the score margin minute by minute; the play-by-play itself comes from ESPN's public game data.
Team box scores
Shooting, rebounds, assists, turnovers, paint and fast-break points come from the team box score published by Highlightly after each game. Our free access allows a limited number of requests per day, so the most recent games are filled first and older games are added progressively; the stats page shows how many games are covered.
News and recaps
Game recaps and nightly roundups are written by a program, only from the data above: final score, quarter scores, team box score, records, streaks, season series and our pre-game probability. They contain no quotes, injury news or rumors. A recap is published once the game is final and updated when the team box score arrives.
Schedule
The full season schedule is refreshed every 30 minutes. Times are shown in Eastern Time; the team calendar files (.ics) use universal time and your calendar app converts them to your time zone.
Model
Win probabilities come from an Elo rating model (elo-v2): every team starts at 1500, ratings move after each final score with K = 20 and a margin-of-victory multiplier, home court is worth +70 Elo points (over 13,000 games from 2016-17 to 2026-27 it gives a Brier score of 0.218 against 0.221 for +100), and ratings regress 25% toward the mean between seasons. The probability for the home team is 1 / (1 + 10^(−(Elo home + 70 − Elo away) / 400)). The expected margin is the Elo difference divided by 28.
Frozen predictions and scoring
Each prediction is stored before the game starts and is never edited. After the final buzzer it is scored with the Brier score (0 = perfect, 0.25 = a coin flip). The running accuracy is published on the predictions page.
What this is not
Probabilities are estimates, not certainties and not betting advice. “Fair odds” are simply 1 / probability, without any bookmaker margin. This site is not affiliated with the NBA or its teams.
