We price every NBA game ourselves: a fair spread, total and moneyline with no vig, built as a probability distribution of the final score. We compare that price to the market and keep score with closing line value and calibration, never short-run wins. Our team model comes within about half a point of the closing line, the best public forecast there is, and our player model, which knows who plays, within 0.31. The edge we are building toward lives where that line is slow: injury news, soft early numbers, and markets books price lazily.
School of thought
- Price a distribution, not a point. A projected margin of −4.5 means little until you know how widely games scatter around it. Spreads, moneylines and totals are three readings of the same distribution.
- The market is the benchmark, and a strong prior. The closing line at a sharp book carries everyone’s information. We measure ourselves against it, expect to lose to it on main lines, and bet only where we have a reason to know something it doesn’t.
- Keep score with closing line value and calibration, not wins. A true 55% bettor at −110 still shows a loss after 200 bets about 23% of the time. Beating the closing number shows within a few hundred bets; profit takes thousands.
- Walk forward, always. Every prediction uses only what was known before tip-off. A test scrambles every result after a cutoff and requires every earlier prediction to stay identical.
- Estimate from data, never from folklore. Home court, rest, pace and playoff effects are fitted, not hard-coded. The data has already overruled folklore twice: home court is about 2.1 points now, not 3–4, and games scatter with a sigma near 14, not 12.
- Be honest about results. Settings are chosen on two seasons and judged on three untouched ones. Every backtest run, good or bad, is logged, and no tuned setting may sit on the edge of its search grid.
- Paper trade before money. No real bets until 300+ logged picks show positive average closing line value.
How a line is made
Each morning the pipeline pulls last night’s results, updates the ratings and prices the day’s games. You type the line your book offers; the page turns the gap into a probability and an expected value and gives a verdict. Logged picks are graded overnight, and the closing line you enter scores them.
The math
Team strength (Method A): a Kalman filter
Each team’s rating is a hidden quantity that drifts; each game is a noisy measurement of the gap between two ratings. The Kalman filter moves every rating after each game by exactly as much as the evidence warrants: a lot early in the season, little once a rating is well established. It is the state-space approach Glickman and Stern used for NFL scores, and the same machinery as yield-curve factor models.
Why it fits: it adjusts for opponents automatically, gives every rating an uncertainty, handles the summer with a principled prior, and lets the recency half-life (about 18 games) come out of the fit instead of being picked. What the data said: capping blowouts hurt, home court is worth +1.76, and a back-to-back costs −2.26. Out of sample it misses final margins by 14.34 points against the close’s 13.83, a gap of +0.51 ± 0.06: level with the +0.5 target.
Pace × efficiency (Method B)
Basketball is a game of possessions and points per possession (Dean Oliver’s framework). Splitting pace from efficiency gives a total and both team totals, which a spread model cannot, and it is the base for halves and alt lines. Home and away scoring efficiency are nearly uncorrelated (0.02–0.23 by season), so the offense/defense model splits exactly into two filters: Method A’s margin and a new total-scoring filter. Playoff basketball gets its own learned offset: −3.5% possessions and −3.0 points per 100.
What the data said: it forecasts possessions better than a simple average (4.53 vs 4.77). Its totals trail the closing total by +0.56 ± 0.07, and its over/under probabilities miss calibration against the close (6.4% error), because its disagreements with the close carry no information.
From a number to a price
NBA margins scatter almost normally around the closing spread, with sigma 13.56 since 2020, wider than the 12 of older eras. Margins are whole numbers, so a whole-number line carries a push (about 2.8% near the center) and a half-point line cannot. To compare with a market we strip its vig: multiplicatively for spreads and totals, and with the power method for moneylines, which takes more vig off the longshot (the favorite–longshot bias).
Players (Method C): RAPM with a box-score prior
NBA lines move mostly on who plays, and our backtest agrees: when a key player was out, Method A trails the close by +0.63; in other games, about +0.41. So Method C rates players, not teams. NBA.com never lists who is on the floor, so we rebuild it for every stint (a stretch with the same ten players) from the play-by-play; rebuilt minutes match the box score for 99.9% of player-games. Then regularized adjusted plus-minus (RAPM): a ridge regression of each stint’s margin on the ten players, which separates teammates who share the floor. A box-score prior fitted alongside rates players with little floor time from their box score, the idea behind EPM. A minutes model spreads a team’s 240 minutes over the players available tonight.
What the data said: when a key player sat, Method C missed final margins by 13.95 against Method A’s 14.31 (−0.36 ± 0.10) and the close’s 13.68. Over all test games it trails the close by +0.31 ± 0.04, inside the +0.5 target. In the backtest, who played is known; on the slate it will come from the injury report, with questionable players priced as a mix of play and sit.
The blend (Phase 4)
Our “beyond the close” test estimates w: regress how far the result landed from the close on how far we disagreed with it (a forecast-encompassing test). A slope of zero means the market already holds everything the model knows. Today it is −0.05 ± 0.06 for Method A and +0.03 ± 0.06 for Method B, so the honest published line is the market’s. Method C, which knows who plays, is still at −0.13 ± 0.08: the close prices availability too. Its value is speed: repricing the moment news breaks, before the line moves.
How we test
- Walk-forward. Each game day is priced from earlier days only. The live slate can replay any past morning, and it must match the backtest exactly.
- Splits. 2020–21 warms the ratings up; 2021–22 and 2022–23 choose the settings; 2023–24 to 2025–26 judge them untouched.
- Scorecards. Margin and total error against the close on the same games, log loss and Brier score against the de-vigged close, calibration in 5% buckets, the beyond-the-close slope, and bootstrap error bars on every gap.
- Logs. Every run is appended to the backtest logs in
reports/, including the ones that looked worse.
Choices and alternatives
| Decision | Our choice | Alternatives considered | Why |
|---|---|---|---|
| Keeping score | Closing line value and calibration | Win rate, ROI | Win rate needs thousands of bets to separate skill from luck; CLV shows in hundreds. |
| Historical odds | Three free, licensed datasets | Paid odds API; scraping sites | Cost and licensing (decided Sep 28). The price: no opening lines, timestamps or sharp-book closes. |
| Team strength | Kalman state-space ratings | Least squares (built: +0.56), Elo, full Bayesian MCMC, machine learning on box scores | Uncertainty-aware recency and priors, fast, interpretable. Least squares did worse; box-score ML risks overfitting and leakage. |
| Units | Points per 100 possessions | Raw points | Pace-neutral: a fast team’s big margins aren’t mistaken for strength. |
| Blowouts | No margin cap | Cap at ±20; log damping | Every cap tried made forecasts worse. |
| Score distribution | Normal, sigma fitted | Discrete or empirical distributions; Skellam | NBA margins are near-normal, without football’s key numbers. Simulation comes later for derivatives. |
| Totals | Pace × efficiency | Regressing totals directly | Gives team totals and the possession model that halves and alt lines need. |
| De-vig | Multiplicative; power for moneylines | Additive; Shin | Power handles the favorite–longshot bias; Shin is built for many-runner markets like racing. |
| Validation | Walk-forward, tune/test split, every run logged | k-fold cross-validation; in-sample fit | Cross-validation leaks the future in time series; in-sample flatters. |
| Player ratings | Our own RAPM with a box-score prior | EPM subscription; plain RAPM; box-score metrics (BPM) | Free from our play-by-play and walk-forward by construction: a published season rating was fitted on later games, which would flatter a backtest (decided Oct 1). The box prior beat plain RAPM on the tune seasons. |
| Minutes | Recent minutes, scaled to 240 among available players | Substitution patterns; announced starters | Simple and walk-forward safe, 6.1 minutes RMSE per player-game. Who absorbs a missing star’s minutes comes next. |
| Live prices | You type your book’s line | A live odds feed | Free and works today. A feed would record closing lines for CLV automatically (open question). |
Where the edge is, and isn’t
Not in out-modeling closing lines on main markets with public team stats. Betting Method A’s side against the closing spread won 49.7% when we disagreed by a point or more and 46.6% at five or more; Method B’s over/under won 51.5% against closing totals. At −110, 52.4% breaks even. Where an edge can live, in the order we plan to pursue it:
- Injury and rest timing. Lines move most on availability. Method C will reprice a game the moment news breaks, before slower books adjust.
- Soft and early numbers. Openers and recreational books lag the sharp market, and you will almost always bet before the close. The CLV log measures exactly this.
- Derivatives. Books often price halves, team totals and alt lines as ratios of the main line. One joint possession model prices them all consistently.
- Shot-quality regression. Three-point percentage is mostly noise; teams on hot or cold streaks get mispriced by results-based ratings.
- Market-implied player values. When a star is ruled out, the line move is the market’s price of that player. Across hundreds of moves we can see where it over- or under-reacts.
- Selection. PASS most nights and CHECK NEWS when a gap is suspicious. Skipping bad bets is part of the edge.
How we’ll know: paper trading from opening night, and 300+ logged picks with positive average closing line value before any money.
Betting basketball: principles we follow
Keeping score
- Closing line value is the scoreboard. Beat the closing number consistently and results follow; fail to, and they won’t, whatever the short-run record says.
- Variance is huge: a true 55% bettor at −110 is still down after 200 bets about 23% of the time.
Price
- Know your break-even: 52.4% at −110, 51.2% at −105. Reduced juice is worth more than most handicapping.
- De-vig before comparing: a −110 / −110 market carries 4.76% vig.
- Shop every bet. Near the center of an NBA spread, half a point is worth about 1.4% in cover probability, about 2.7% of expected value at −110.
- Whole numbers can push; half points cannot.
Information
- Availability drives NBA lines: a star sitting can move a line 3–8 points. Know who plays before you bet.
- Rest matters, and is priced: a back-to-back costs about 2.3 points against one day off.
- Home court has shrunk: about 2.1 points in 2021–26 closing lines, from 3–4 before 2020.
- Season context: the final weeks bring tanking and resting, and our largest misses were final-week games. Playoff basketball is slower and lower-scoring.
Totals
- Totals are noisier than spreads (sigma about 18.5 vs 14.0), so a point is worth less: demand a bigger gap.
- Pace and officiating drive totals, and playoff totals run lower.
Discipline
- Size bets as a research budget: flat small stakes or fractional Kelly. Kelly stakes f = (b·p − q) / b of bankroll (b = decimal odds − 1, q = 1 − p): 5.5% at a true 55% and −110. Quarter Kelly (about 1.4%) guards against overestimating p.
- Correlated bets (same game, same player) are one bigger bet.
- A huge disagreement usually means you are missing news: check it before betting it.
- Parlays multiply the vig unless the legs are correlated in your favor.
- Record every bet: line, price, close and result.
- Recreational books limit winners, so plan for limited capacity, and bet only where it is legal.
Status and next steps
| Phase | Status | Result |
|---|---|---|
| 0 · Data | DONE | Every 2020–26 game joined to a closing line. |
| 1 · Method A | TIE | Gap +0.51 ± 0.06 against the +0.50 target. |
| 2 · Method B | FAIL | Totals gap +0.56; over/under not calibrated against the close. |
| Daily slate | DONE | Prices the next game day; you enter your book’s lines. |
| 3 · Method C | PASS | Beats Method A by 0.36 ± 0.10 when a key player sits; gap to the close +0.31. Next: the slate, with your injury input. |
| 4 · Blend | PLANNED | Weights from the beyond-the-close test. |
| 5 · Paper trade | FROM OCT 20 | 300+ picks with positive CLV before money. |
Glossary
- Closing line value (CLV)
- How much better your price was than the final pre-game price: decimal odds taken ÷ fair closing decimal − 1. For spreads and totals, also points beaten.
- De-vig, overround
- Books price both sides above 100% combined; the excess is the vig. De-vigging rescales to fair probabilities.
- Sigma (σ)
- The typical scatter of results around a forecast; turns a projected margin into probabilities.
- RMSE
- Root-mean-square error: the typical size of a forecast miss, in points.
- Log loss, Brier score
- Scores for probability forecasts; lower is better.
- Calibration, ECE
- Do 60% calls come in 60% of the time? ECE is the average gap between predicted and actual.
- Stint
- A stretch of a game with the same ten players on the floor.
- RAPM
- Regularized adjusted plus-minus: a ridge regression of every stint’s margin on the ten players on the floor, which separates teammates who share it.
- Kalman filter
- A method that tracks hidden, drifting quantities from noisy measurements and knows how sure it is.
- Walk-forward
- Testing a forecast only with information available at the time.
- Beyond-the-close slope
- Whether our disagreements with the market predict results; zero means the market already knew it.
- Expected value (EV)
- Average profit per unit staked at a price, given our probabilities.
Further reading: closing line value · de-vig methods · why NBA margins are near-normal · EPM player ratings · Glickman & Stern (1998), a state-space model for NFL scores · Dean Oliver, Basketball on Paper (2004) · Kelly (1956), a new interpretation of information rate
Each card is our own price for one game: a spread, a moneyline, a total and team totals, all with no vig. Type the line and price your book offers and the card compares the two: is your book’s price better than ours by enough to bet? Logged picks go to the Picks tab, where the closing line scores them.
The verdicts
- LEAN
- The best bet at your prices returns +3% or more on average (its expected value, below), and your book is close enough to our number to trust the comparison. Log it as a paper pick. It is not yet a real bet: no model here has beaten the closing line in a backtest.
- PASS
- Nothing reaches +3%. The card still names the best option and its EV. Most games should be a PASS: books price every side to lose a little on average.
- CHECK NEWS
- Your book is 3+ points from our spread (or its moneyline implies a margin that far from ours), or 8+ points from our total. A gap that big usually means the book knows something our numbers do not: an injury, a star resting, a lineup change. Check the news before trusting either number. The card never says LEAN on these.
- Enter your book’s line
- Nothing typed yet. A blank price counts as −110.
Spread or moneyline: how the card chooses
The card prices every option you type, both sides of the spread and both moneylines, from one forecast: our projected margin and how widely games scatter around it. Then it shows the option that returns the most on average. It has no preference for either market, only for the better price. Books set spreads and moneylines separately, so one is often cheaper than the other for the same team.
An example, with games scattering by 14 points: we have the home team by 5.5, so they win 65% of the time (a fair moneyline of −188) and cover −4.5 about 53% of the time.
- Your book has −4.5 at −110 and the moneyline at −160. The spread returns about +1% and the moneyline about +6%, so the card picks the moneyline.
- Your book has −3.5 at −110 and the moneyline at −200. The spread returns about +6% and the moneyline about −2%, so the card picks the spread.
The trade-off between the two markets is already in that math. A favorite’s moneyline costs more but only needs a win. An underdog’s moneyline pays more but loses every time they lose, where the spread also wins their close losses.
Fair moneyline
The moneyline with no vig that matches our win probability. At that price, betting either side breaks even in the long run if our probability is right.
Your book’s price beats ours when it pays more: +200 beats a fair +186, and −170 beats a fair −186. Books shade both sides worse than fair (that is the vig), so at most one side usually beats our price.
Team totals
Our total comes from Method B, pace × efficiency: how many possessions this game should have, from both teams’ pace, and how many points each team scores per possession, from its offense against this opponent’s defense, plus rest. Our spread comes from Method A. The team totals split the total by the spread:
So they always add up to our total and differ by our spread. And yes, they are specific to the opponent: the same team gets a lower team total against a strong defense or a slow team, and a higher one against a weak or fast one. Example: a total of 224 with the home team by 6 gives the home team 115 and the away team 109.
Expected value (EV)
What a bet returns on average per $1 staked, if our probabilities are right. A push returns the stake.
- Below 0: the price is worse than ours. Most options on most cards.
- 0 to +3%: a thin edge, well inside the model’s own error. PASS.
- +3% to about +8%: a LEAN. Skilled bettors’ long-run edges are usually a few percent, so this is where a real edge would show up.
- Above about +10%: be suspicious. On a main NBA line it nearly always means the model is missing news, not that the book is that wrong. Check before logging.
An EV is only as good as the probabilities behind it, and ours have not yet beaten the closing line in a backtest. Treat every LEAN as a paper pick until 300+ logged picks show positive closing line value.
The rest of the card
- Our line
- Method A’s fair spread for the favorite, rounded to the half point. Below it: the exact home spread, ± its uncertainty from the ratings.
- Wins %
- Our probability that the home team wins.
- Ratings by the names
- Each team’s rating: points per 100 possessions better (+) or worse (−) than an average team.
- Sigma, above the cards
- How widely results scatter around our spread and our total (about 14.0 and 18.5 points), refit before every slate. It turns a projected number into probabilities.
- B2B, NEUTRAL, LIVE, FINAL
- B2B: a team on the second night of a back-to-back, worth about 2.3 points and already in our line. NEUTRAL: neither team is at home. LIVE and FINAL: tip-off has passed, so logging is off.
- Pushes
- Margins and totals are whole numbers, so a whole-number line can push and return the stake. A half-point line cannot.
- Log pick
- Opens a confirmation with the card’s best option at your price: our line, its chance to win and its EV. Choose paper or real money (units are for real-money picks; a paper pick stakes nothing), then Confirm pick saves it to the Picks tab. Add the closing line there later: closing line value, not wins, is how picks are scored.
A backtest replays the past one game day at a time. Each day is priced using only what was known before tip-off, then compared with the final scores and with the closing line. The settings were chosen on 2021–22 and 2022–23 (tune). The 2023–24 to 2025–26 seasons (test) played no part in choosing them, so the test numbers are an honest preview. 2020–21 only warms the ratings up.
The three methods
- A · Spreads: team ratings
- Every team gets one number: points per 100 possessions better than an average team. A Kalman filter updates it after every game, moving it a lot early in the season and less once the rating is established. Projected margin = home rating − away rating + home court + rest. Solid and fast, but it sees results, not rosters: it cannot tell that a star is sitting tonight.
- B · Totals: pace × efficiency
- Projects how many possessions the game will have, from both teams’ pace, and how many points each team scores per possession, from its offense against the other’s defense. That gives our total and both team totals.
- C · Players: who plays
- Rates every player from the stretches of games he was on the floor (RAPM, with a box-score prior), then adds up the players available tonight, weighted by their expected minutes. When a star sits, his team’s rating drops by what he is worth.
The numbers
- RMSE
- Root-mean-square error: the typical size of a miss, in points. Take every miss (final margin minus projected margin), square it, average the squares and take the square root. Squaring makes big misses count extra. Lower is better. NBA games are noisy: even the closing line misses by about 13.56 points.
- Close RMSE
- The same for the closing line on the same games. This is the benchmark.
- Gap
- Model RMSE minus close RMSE. Positive means the market was closer. A model’s target is +0.50 or less.
- ± (error bar)
- How much a number could move from luck alone (a bootstrap standard error). A difference smaller than about twice its error bar is within noise.
- Log loss, Brier
- Scores for win probabilities; lower is better. A coin flip scores 0.693 log loss and 0.25 Brier. Log loss punishes confident wrong calls hardest.
- Calibration
- When we say 60%, does the home team win 60% of the time? Dots on the dashed line are calibrated; bigger dots stand for more games.
- Beyond the close
- Whether our disagreements with the closing line predict results: how far results land from the close, regressed on how far we disagreed with it. 0 means the market already knew everything we knew; positive means we add something. All three methods are near 0 so far.
- Pricing sigma
- How widely results scatter around our own predictions. It turns a projected margin into probabilities.
- PASS, TIE, FAIL
- Each phase’s exit test from the spec. TIE means the result misses the target by less than twice its error bar, so luck alone could explain the miss. Click a grade to see what it means for that method, and why.
What each view shows
- A · Spreads. The exit test (a gap of +0.50 or less), the fitted home court and rest effects, every season, calibration, the gap by likely cause, and the games where Method A and the close disagreed most.
- B · Totals. The same for totals: total RMSE against the closing total, over/under calibration, how often betting the model’s over/under against the closing total won (52.4% breaks even at −110), and every team’s offense, defense and pace.
- C · Players. Whether knowing who plays helps. A key player out is one of a team’s top three in minutes over his last ten games, averaging 30+, who did not play. The exit test asks Method C to beat Method A on those games. The player table splits each rating into a box-score part and an own part, what lineups show beyond the box score.
Likely causes come from who actually played, so they explain a miss after the fact; Method A could not have
known them. Every run is logged in reports/, including the ones that looked worse.
The closing line is a book’s last price before tip-off, after the market has bet and the news is in. It is the best public forecast of an NBA game, so it is our benchmark. This page measures how close it came to the final scores from 2020–21 to 2025–26; the season buttons show one season at a time.
Spreads
- Spread RMSE
- How far final margins landed from the closing spread, as a root-mean-square error: the typical miss, with big misses counting extra. If the home team closed −6 and won by 10, the miss is 4. Over 2020–26 it is 13.56 points: even the best forecast misses by 13–14 points in a typical game, so a handful of results says little about any model.
- Method A target
- Spread RMSE + 0.5. A model is level with the market when its own error is within half a point of the line’s.
- Market HCA
- Home-court advantage as the market prices it: the average closing spread for home teams playing in their own arena. Team strength averages out, since every team plays half its games at home. About 2.1 points over 2020–26, down from 3–4 before 2020; 1.3 in 2020–21, when arenas were mostly empty.
- Home vs line
- Home margin + home spread, averaged: how much home teams beat (+) or fell short of (−) the closing spread. Near 0 means the market priced home court right.
- Home margin
- How much home teams actually won by, on average.
Totals
- Total RMSE
- How far final totals (both teams’ points) landed from the closing total. About 18.0 points: totals are noisier than spreads.
- Total bias
- Final total minus closing total, averaged. Positive: games went over the closing total on average, so totals were set a little low. Negative: under. Near 0 is unbiased. Over 2020–26 it is +0.35 points, far too small to bet overs blindly: the vig costs more.
Moneylines
- De-vigged close
- A book’s two moneylines add up to more than 100%; the excess is the vig. We remove it with the power method, which takes more off the longshot, to get fair win probabilities.
- ML log loss
- Scores those probabilities against who won: the average of −ln(the probability the line gave the eventual winner). A coin flip scores 0.693 and perfect foresight 0; lower is better. Confident misses cost the most: an 80% favorite scores 0.22 when it wins and 1.61 when it loses. The close scores 0.600.
- ML Brier
- The average squared gap between the home-win probability and the result (1 if the home team won, 0 if not). A coin flip scores 0.25; lower is better. An 80% favorite scores 0.04 when it wins and 0.64 when it loses. The close scores 0.207.
Sigma by spread size
How widely results scatter around the closing spread, grouped by the size of the spread. The center line, 13.5, is the scatter over all games; a bar right of center means games with that spread scattered more, left of center less. Over 2020–26 the closest games, spreads under 3, scattered the most: about 14.4 points, against 13.2 to 13.7 for bigger spreads.
Why this page matters
Closing line value is a bettor’s scoreboard: getting a better number than this close, again and again, means beating the best forecast there is. And every model here is judged against these numbers. Each gap on the Backtest page is a model’s RMSE minus this one, on the same games.
Phase 0’s job was to collect every NBA game from 2020–21 to 2025–26 (regular season, play-in, playoffs and the NBA Cup final) with its box score, its play-by-play and a closing line, from free sources only, and to check that the result is complete and consistent. Every number on the other pages is only as good as this data, so this page shows what we have, where each piece came from, and what is still missing.
The exit test
Phase 0 passes when every game joins to a closing line: every game has a closing spread and a closing total. The header also counts games with a closing moneyline and with play-by-play.
Games
Games per season, by type. Neutral-site games (Paris, Berlin, London, Mexico City and the Cup finals in Las Vegas) have no home court. Play-by-play counts games with every event recorded; Method C uses it to rebuild who was on the floor. Green means complete.
Where each closing line came from
- Spread · consensus, BetMGM
- Which source gave each game’s closing spread: the consensus line first, BetMGM when consensus is missing or wrong.
- Conflicts
- Games where the two sources’ spreads differ by more than 3 points. The one nearer the spread implied by the OddsPortal moneyline wins: a pre-game price, never the final score, so the benchmark stays honest.
- Unconfirmed
- The chosen spread and the moneyline disagree by more than 10 points of win probability. These stay in, flagged; most fall in late December 2025 and early January 2026, when the consensus feed was wrong.
- ML · consensus, OddsPortal, BetMGM, none
- Where each closing moneyline came from. None means no valid moneyline (two playoff games).
Sources
Three free, openly licensed datasets: consensus closing lines (CC0), BetMGM closing lines (CC BY-SA) and the OddsPortal average across books (MIT). Each card counts the rows matched to a game (by team pair within a day, confirmed by the final score), rows that matched no game, rows whose score check failed, and rows with impossible prices that were dropped.
What is still missing
- Opening lines and timestamps. No free source has them, so closing line value against openers cannot be backtested. Paper trading records openers and closing lines live from opening night.
- A sharp-book close. Consensus and BetMGM are softer than a Pinnacle or Circa close, so our benchmark is a little easier to beat than the sharpest market.
The whole season from NBA.com’s schedule: preseason, regular season, NBA Cup and, once they are set, play-in and playoffs. Leave the team box on All teams to see the league a month at a time, or pick a team to see its season with its record and rest.
Reading a row
- Tip
- Tip-off time, Eastern. TBD until the NBA sets it; national TV games can move.
- Game
- Away @ home. Hover for the full team names.
- Result
- The winner first, with the score, once the game is final. A team’s own view shows W or L, in green or red.
- National TV
- National broadcasts only. Local channels are not listed.
- Badges
- PRE: preseason, which we do not price. CUP: an NBA Cup game; group games count in the standings like any other. NEUTRAL: a game away from both arenas (Paris, Manchester, Mexico City, the Cup final), so no home court. PLAY-IN, PLAYOFFS and POSTPONED mean what they say.
Rest and back-to-backs
Rest is the days off before a game: B2B means the second night of a back-to-back, then 1 day, 2 days and 3+ days. It is counted from the schedule, separately for the preseason, so it is known weeks ahead. A back-to-back costs about 2.3 points against one day off in our ratings, and our lines already include it. Books price it too; what is worth watching is when the two teams’ rest differs, or when a road trip stacks short rests together.
One team’s season
Pick a team to see its record (overall, home and away, regular season including Cup group games), how many back-to-backs it plays, and its next game. Each row shows its rest and its opponent’s. The # column numbers the season’s games; preseason games have none.
Where it comes from
The schedule is the snapshot the slate takes from NBA.com, at most once an hour, so results fill in each time the slate refreshes. Until the NBA Cup group stage ends in December, each team shows 80 of its 82 games: the NBA sets the last two from the Cup results, and the knockout games stay TBD until the bracket fills.