DATA METHODOLOGY
How NBA Dunks Are Tracked
A complete explanation of our data pipeline, classification logic, and accuracy standards.
The Data Source
Dunk Ladder uses the Sportradar NBA Play-by-Play API (v8) as its primary data source. Sportradar is the official data partner of the NBA and provides real-time event data for every game. Every shot attempt in the NBA returns a shot_type field.
How Dunks Are Classified
Sportradar's taxonomy treats shot_type = "Dunk" as a first-class, discrete category โ a peer of "Jump Shot," "Layup," "Hook," and "Tip Shot." This is not a substring match or a description parse.
// Dunk filter โ exact string match const isDunk = (event) => event.shot_type === 'Dunk'
The shot_type_desc field provides the sub-type:
// Sub-types alley-oop | tip | driving | driving reverse putback | running | reverse | running reverse running alley-oop | cutting
Made, Missed, and Blocked Dunks
We track all three outcomes. A made dunk appears as a twopointmake event. A missed or blocked dunk appears as twopointmiss โ with the sameshot_type = "Dunk" classification. The blocking object is populated when a dunk is blocked.
Historical Data
For historical data (2004-2025), we cross-reference the DomSamangy NBA shot dataset from NBA.com, which uses an identical taxonomy (ACTION_TYPE ending in "Dunk Shot"). Both sources are structurally aligned.
Real-Time Updates
During live games, we consume Sportradar's Push Events feed โ a server-sent event stream that fires dunk events within approximately 2 seconds of the play occurring in the arena. The leaderboard and live feed update within 5 minutes during games.