Methodology

Where the numbers come from, and what they assume.

Every statistic on BoxScore Lab derives from NBA Stats, the league’s own public data, refreshed nightly during the season. This build covers 4 seasons through August 9, 2026. Below: the sources, the refresh cadence, and the assumption behind each derived number, including the ones that make a metric weaker than it looks.

Source

One source: NBA Stats, the statistics service the league publishes at stats.nba.com. Box scores, lineup splits, shot coordinates, clutch splits, and play by play all come from there. Nothing is scraped from another site and nothing is hand-entered, so any disagreement with the league’s own numbers is a bug here rather than a difference of opinion. BoxScore Lab is not affiliated with the NBA.

Refresh

The pipeline runs every night during the NBA season and publishes a new build if the fetch and the validation both succeed. Out of season it stops on purpose rather than republishing numbers that cannot have changed, so a summer date on a page is the season ending, not a stalled job. Every page carries the date of the data it was built from, in the footer and in its opening sentence. This build is 20260810T0217, generated August 9, 2026.

What each build contains

Coverage differs by dataset. Shot coordinates are the largest by a wide margin, so older seasons of attempts are deliberately left out of what the site loads. This table is generated from the build itself.

clutch_players
2024-25 to 2025-26 (2 seasons)
clutch_teams
2024-25 to 2025-26 (2 seasons)
game_misc
2024-25 to 2025-26 (2 seasons)
Five man lineups
2022-23 to 2025-26 (4 seasons)
Two man combinations
2025-26
Three man combinations
2025-26
On and off splits
2022-23 to 2025-26 (4 seasons)
Play by play
2024-25 to 2025-26 (2 seasons)
period_splits
2024-25 to 2025-26 (2 seasons)
Player game logs
2022-23 to 2025-26 (4 seasons)
Player season totals and rates
2022-23 to 2025-26 (4 seasons)
Listed positions
2024-25 to 2025-26 (2 seasons)
shot_zones
2020-21 to 2025-26 (6 seasons)
Shot attempt coordinates
2020-21 to 2025-26 (6 seasons)
starters
2024-25 to 2025-26 (2 seasons)
Team game logs
2022-23 to 2025-26 (4 seasons)
Team season ratings and records
2022-23 to 2025-26 (4 seasons)

Derived metrics, and what they assume

Definitions for every column are in the glossary. What follows is the part a definition leaves out: the assumption each calculation rests on, and the reason to hold some of these numbers more loosely than others.

Rate stats and possessions

Per-100-possession figures divide by the possession count where the league supplies one. Where it does not, possessions are estimated, and a row with no usable possession count is left blank rather than filled in with a guess. Team offensive and defensive ratings on the team pages are labelled as estimates for this reason. See team efficiency in the glossary.

Shot quality and expected effective field goal percentage

Expected eFG% asks what a player’s shot diet would produce at league-average accuracy: each attempt is credited with the league’s make rate from the zone it was taken in, and the results are averaged. The gap between actual and expected is labelled shot making. The assumption is that a zone is a fair description of a shot, which it is not entirely: an open corner three and a contested one count the same here, because the public data does not say which was which. Read shot making as evidence, not as a skill measurement. See shooting and shot quality.

Lineup ratings and shrinkage

A raw lineup net rating is mostly noise at low possession counts, so each lineup is regressed toward its own team’s possession-weighted average. The weight is possessions divided by possessions plus 200, which puts a lineup with exactly 200 possessions halfway between its own number and its team’s. This is why the best five-man group on a team page is rarely the one with the wildest raw number. Lineup pages rank on the shrunk figure and show the raw one beside it. See lineups and impact.

Strength of schedule

Each game is joined to the season net rating of the opponent played, so strength of schedule is the average opponent quality faced, weighted naturally by how often each opponent came up. Adjusted net rating is simply net rating plus that figure. This is a first-order adjustment and not a rating system: opponent quality is taken at face value and never re-estimated in light of the schedules those opponents themselves played. It is a directional nudge. A team a point better after adjustment played a harder schedule; it is not a claim about who would win on a neutral floor.

On and off splits

The difference between how a team performs with a player on the floor and without. Nothing controls for who else was out there, which matters a great deal: a bench-heavy player’s off number is partly a statement about the starters. Treat these as a question worth asking rather than an answer.

Clutch and small samples

Clutch means the last five minutes with the score within five points, the league’s own definition. These are small samples by construction, often a few dozen minutes across a season, and a large swing in a clutch number is usually a sample and not a finding.

Percentiles

Percentile ranks compare a player against everyone league-wide with at least 500 minutes in that season. The minutes threshold is the whole reason the ranks are usable: without it the top of any rate leaderboard fills with players who took nine shots. For turnover rate and other measures where less is better, the ranking is inverted so a high percentile always reads as good.

Corrections

The league restates statistics after review, and a build here reflects whatever NBA Stats served the night it ran. If something looks wrong, it may be a restatement, and it may be an error of mine. Either way I would like to know: github.com/adrielconde9. Who maintains the site is on the about page.