What the data says
Findings from 7,899 NBA games with closing lines since 2020, tested on games the model had never seen. Each section reruns every day with the newest data.
The market already knew
Vegas closing lines missed the final margin by 10.55 points on average across 6,573 games from 2021–26. Courtline missed by 10.56. On totals both missed by about 14.2. The model agreed with the close so closely that it almost never moved a spread by a full point, and no group of leans cleared the 52.4% needed to profit at −110.
That is the expected answer. NBA closing lines are some of the most efficient prices in sports, and team form is already built into them. A backtest that reports this plainly is doing its job.
Tired road teams and the total
When the road team played its second game in two nights, games finished +1.23 points against the closing total across 1,158 games, about 2.2 standard errors from zero. Home teams on a back to back finished -0.65 points against the spread across 978 games. Both are suggestive and unproven, so they get retested on new games before they count.
| Situation | Games | Home margin vs spread | Total vs closing total | Std. errors |
|---|---|---|---|---|
| Home team on a back to back | 978 | -0.65 | +0.53 | +0.9 |
| Road team on a back to back | 1,158 | +0.10 | +1.23 | +2.2 |
| Both teams on a back to back | 299 | +0.66 | +0.62 | +0.6 |
| Neither team on a back to back | 4,736 | +0.05 | +0.30 | +1.2 |
Positive margin means the home team beat the spread on average. Positive total means games went over. Seasons 2021–26.
Home court, season by season
Home teams have won by about 1 to 2.5 points a game in each full season since 2020, under the old 3 point rule of thumb, and the average closing spread has stayed within half a point of that every season. The market's average miss has held between about 10 and 11 points on the margin and near 14 on the total.
Average home margin, in points Average closing spread for the home team. 2019–20 covers only the bubble restart games that have lines.
| Season | Games | Home margin | Home spread | Vegas miss, margin | Vegas miss, total |
|---|---|---|---|---|---|
| 2019–20 | 171 | +1.33 | +0.70 | 9.77 | 16.20 |
| 2020–21 | 1,155 | +1.12 | +1.32 | 10.74 | 14.43 |
| 2021–22 | 1,316 | +1.87 | +2.31 | 10.72 | 14.17 |
| 2022–23 | 1,313 | +2.60 | +2.32 | 9.83 | 14.13 |
| 2023–24 | 1,313 | +2.28 | +2.17 | 10.63 | 14.15 |
| 2024–25 | 1,315 | +1.87 | +1.95 | 10.63 | 14.14 |
| 2025–26 | 1,316 | +1.75 | +1.99 | 10.95 | 14.49 |
Team ratings today
Points scored and allowed per 100 possessions, weighted toward recent games (12 game half life) and carried over from last season with a 30% pull toward average. These feed the projections and the calculator. Data through November 13.
| # | Team | W–L | Off. rating | Def. rating | Net | Pace |
|---|---|---|---|---|---|---|
| 1 | San Antonio Spurs SA | 11–2 | 116.2 | 106.1 | +10.1 | 100.5 |
| 2 | Boston Celtics BOS | 10–2 | 115.7 | 107.3 | +8.4 | 97.4 |
| 3 | New York Knicks NY | 6–6 | 114.7 | 107.1 | +7.6 | 97.4 |
| 4 | Minnesota Timberwolves MIN | 9–3 | 113.1 | 107.5 | +5.7 | 102.2 |
| 5 | Houston Rockets HOU | 10–3 | 115.5 | 109.8 | +5.7 | 98.3 |
| 6 | Detroit Pistons DET | 8–3 | 113.3 | 107.9 | +5.3 | 100.4 |
| 7 | Los Angeles Lakers LAL | 11–2 | 116.3 | 112.3 | +4.0 | 100.1 |
| 8 | Oklahoma City Thunder OKC | 8–5 | 112.4 | 108.6 | +3.8 | 100.3 |
| 9 | Portland Trail Blazers POR | 9–3 | 114.2 | 110.4 | +3.7 | 101.0 |
| 10 | Denver Nuggets DEN | 6–4 | 115.9 | 113.8 | +2.0 | 100.2 |
| 11 | Golden State Warriors GS | 8–5 | 113.7 | 112.8 | +0.9 | 100.6 |
| 12 | Toronto Raptors TOR | 5–7 | 112.7 | 112.2 | +0.5 | 100.4 |
| 13 | Atlanta Hawks ATL | 7–6 | 111.6 | 111.7 | -0.1 | 103.8 |
| 14 | Miami Heat MIA | 6–6 | 114.6 | 114.9 | -0.3 | 103.5 |
| 15 | Cleveland Cavaliers CLE | 6–7 | 113.9 | 114.3 | -0.5 | 100.1 |
| 16 | Memphis Grizzlies MEM | 8–4 | 113.3 | 114.4 | -1.1 | 102.7 |
| 17 | Philadelphia 76ers PHI | 10–3 | 110.8 | 112.1 | -1.3 | 100.0 |
| 18 | LA Clippers LAC | 3–8 | 112.6 | 114.1 | -1.5 | 100.8 |
| 19 | Orlando Magic ORL | 5–7 | 108.8 | 110.8 | -2.0 | 100.7 |
| 20 | Dallas Mavericks DAL | 7–5 | 111.1 | 113.2 | -2.1 | 102.5 |
| 21 | Phoenix Suns PHX | 5–6 | 111.7 | 114.1 | -2.5 | 99.5 |
| 22 | Charlotte Hornets CHA | 4–8 | 109.0 | 111.6 | -2.6 | 97.6 |
| 23 | Indiana Pacers IND | 5–8 | 110.1 | 113.3 | -3.2 | 101.7 |
| 24 | Brooklyn Nets BKN | 3–8 | 107.7 | 114.7 | -7.0 | 100.5 |
| 25 | New Orleans Pelicans NO | 4–9 | 111.1 | 118.5 | -7.4 | 103.6 |
| 26 | Washington Wizards WSH | 4–9 | 108.6 | 116.7 | -8.2 | 102.5 |
| 27 | Chicago Bulls CHI | 2–9 | 109.1 | 117.4 | -8.3 | 105.3 |
| 28 | Utah Jazz UTAH | 1–12 | 107.7 | 116.6 | -8.9 | 103.3 |
| 29 | Sacramento Kings SAC | 1–11 | 109.0 | 118.0 | -9.0 | 100.8 |
| 30 | Milwaukee Bucks MIL | 1–12 | 107.7 | 118.7 | -11.0 | 99.4 |
Player minutes and props
If a model like this has an NBA edge anywhere, props are the likeliest place: thinner markets, many more lines, and slower adjustments to minutes and role changes. The plan is a player minutes model first, then props, then totals, with sides last if ever.
The obstacle is data. No public source has historical player prop lines, so Courtline will save its own prop odds going forward and grade early projections against results until enough market history builds up. Team form also knows nothing about injuries or trades yet, which is the first thing the next version needs.