Scrape every NBA field-goal attempt with exact court coordinates: true distance, angle, zone and plot-ready x/y. Adds expected points from the league's own per-zone baseline, so you can see which shots beat the league. Filter by game, player, team or date. No API key, no login.
One dataset row per NBA field-goal attempt: shooter, team, opponent,
home/away, period and game clock, action and shot type, made flag, points,
NBA's three zone labels, and the raw LOC_X/LOC_Y coordinates.
Computed spatial fields NBA does not publish: exact (unrounded) distance
from the hoop, bearing in degrees, distance from the baseline, plot-ready
coordinates for the standard 500×470 court grid in both orientations, and
geometric three-point / corner-three / restricted-area flags. Verified
against all 219,160 shots of the 2025-26 regular season.
Shot quality: expected points and points-over-expected, joined from the
league FG% table the endpoint returns alongside every query. The baseline is
fetched once for the whole season rather than per window, so the comparison
is against the league and not against the sample's own mean.
Complete season queries.shotchartdetail silently truncates at 102,400
rows, dropping over half a season without any error. League-wide queries are
split into windows before being sent, and anything still returned at the cap
is split again.
Targeting by game, player, team, date range, season and season type, with
players and games combinable.
Offseason-safe default: with no input at all the run resolves the most recent
season actually played and returns that season's last slate.