NBA Play-by-Play Scraper avatar
NBA Play-by-Play Scraper

Pricing

from $0.20 / 1,000 results

Go to Apify Store
NBA Play-by-Play Scraper

NBA Play-by-Play Scraper

Scrape complete play-by-play data from any NBA game since 2002. Clean, structured, ready for analysis.

Pricing

from $0.20 / 1,000 results

Rating

0.0

(0)

Developer

SportsVerse

SportsVerse

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

🏀 NBA Play-by-Play Scraper

NBA Logo

The best NBA play-by-play scraper on Apify — clean and analysis-ready data from 2002 onward

Apify Store Maintained Made for Sports Analytics Data Quality

Stop cleaning messy basketball data. Get every NBA play since 2002 - 60+ fields, proper types, zero cleanup required.


🎯 What does this scraper do?

This actor extracts detailed play-by-play information from every NBA game played since 2002. It delivers clean, structured data ready for analysis or integration into your applications. No manual cleanup, no parsing nightmares, no messy nested data.

Key Benefits

  • 60+ fields per play - shots, fouls, rebounds, substitutions, and more
  • 2002–present - 20+ seasons of historical coverage
  • Clean structure - proper types and descriptive field names
  • Fast & reliable - built-in validation and error handling
  • Export anywhere - JSON, CSV, Excel, XML, and more

💡 No manual cleanup. No parsing nightmares. Just clean data.


📦 What data can you extract?

Every play returns 60+ structured data points organized into logical categories:

CategoryWhat's Included
🎮 Game InfoGame ID, season info, game date, game phase (regulation/overtime)
🏀 TeamsHome & away team names, cities, mascots, abbreviations
⏱️ TimingQuarter, game clock, time remaining in quarter/half/game
🎯 Play DetailsPlay type, category, full description, which team performed it
📊 ScoringCurrent score, point differential, who's leading, tie status
🏹 ShotsShot type, made/missed, points attempted, court coordinates
👤 PlayersPlayers involved in each play
💰 BettingPoint spread, home favorite status
And moreTimeouts, play sequences, boolean flags

💡 See the full data dictionary for all 60+ fields below.


🚀 How to scrape NBA play-by-play data

Quick Start Guide

Extracting the NBA play-by-play data is simple - no coding required.

  1. Create account — Sign up for a free Apify account
  2. Open scraper — Go to NBA Play-by-Play Scraper
  3. Select inputs — Choose a team and season year
  4. Run — Click Start in the Apify Console
  5. Export — Download as JSON, CSV, Excel, XML, or HTML

Try it FREE - No credit card required


📥 Inputs

The scraper requires two simple inputs:

InputRequiredDescriptionExample
Season4-digit year (2002–present)2026 → 2025-26 season
TeamNBA team mascot nameRaptors, Lakers, Celtics

Option A: Use Apify Console (No Code)

The easiest way to get started — just point and click.

  1. Open the NBA Play-by-Play Scraper
  2. Enter a season year (defaults to latest)
  3. Select a team from the dropdown
  4. Click Start
  5. Download results

Apify Console Input UI

Option B: Use the API (Programmatic)

For automation, scheduling, or integration into your pipeline:

{
"season": 2026,
"team": "Lakers"
}

⚠️ Note: both season and team are required fields.


📤 Output

Results are stored in the Storage tab as a structured dataset. View directly on the platform or download in multiple formats.

Results Preview

Once scraping completes, preview your data immediately in the Output tab:

Apify Output Preview

Organized Views

We've pre-configured logical dataset views to help you explore the data more easily:

Grouped Dataset Views

Sample JSON Output

Each play returns a clean, flat JSON object with 60+ fields. Field names are descriptive and grouped by prefix (game_, time_, score_, shot_, etc.) so you can quickly find what you need.


📖 Data Dictionary

Complete reference for all 60+ fields returned by this scraper. Fields are grouped by prefix for easy navigation.

FieldTypeCategoryDescription
game_idintegerGameUnique identifier for the game
game_seasonintegerGameSeason year (e.g., 2026 for 2025-26 season)
game_season_typeintegerGameSeason type (1 = preseason, 2 = regular, 3 = playoffs)
game_datestringGameGame date and tip-off time
game_phasestringGameCurrent phase (Regulation, Overtime, etc.)
home_team_idintegerHome TeamUnique team identifier
home_team_fullstringHome TeamFull team name (e.g., "Los Angeles Lakers")
home_team_locationstringHome TeamTeam city (e.g., "Los Angeles")
home_team_mascotstringHome TeamTeam mascot (e.g., "Lakers")
home_team_abbreviationstringHome TeamTeam abbreviation (e.g., "LAL")
away_team_idintegerAway TeamUnique team identifier
away_team_fullstringAway TeamFull team name
away_team_locationstringAway TeamTeam city
away_team_mascotstringAway TeamTeam mascot
away_team_abbreviationstringAway TeamTeam abbreviation
play_sequenceintegerSequenceOrder of play within the game
play_idintegerSequenceUnique identifier for the play
time_quarterintegerTimingCurrent quarter (1-4, 5+ for overtime)
time_quarter_displaystringTimingDisplay format (e.g., "1st Quarter")
time_halfintegerTimingCurrent half (1 or 2)
time_clockstringTimingGame clock display (e.g., "9:18")
time_clock_minutesintegerTimingMinutes remaining on clock
time_clock_secondsintegerTimingSeconds remaining on clock
time_wallclockstringTimingActual timestamp of the play (UTC)
time_remaining_quarterintegerTimingSeconds remaining in quarter
time_remaining_halfintegerTimingSeconds remaining in half
time_remaining_gameintegerTimingSeconds remaining in game
play_type_idintegerPlayNumeric code for play type
play_typestringPlaySpecific play type (e.g., "Pullup Jump Shot")
play_categorystringPlayStandardized category (Shot, Foul, Turnover, etc.)
play_descriptionstringPlayFull play description
play_description_shortstringPlayAbbreviated description
play_team_idintegerPlayTeam that performed the play
play_team_fullstringPlayFull name of team that performed the play
play_team_rolestringPlayTeam role (Home or Away)
is_scoring_playbooleanFlagsWhether points were scored
is_turnoverbooleanFlagsWhether play resulted in turnover
is_foulbooleanFlagsWhether play involved a foul
is_substitutionbooleanFlagsWhether play was a substitution
score_homeintegerScoringHome team score after this play
score_awayintegerScoringAway team score after this play
score_differentialintegerScoringScore difference (home - away)
score_is_tiebooleanScoringWhether game is tied
score_home_leadingbooleanScoringWhether home team is leading
score_away_leadingbooleanScoringWhether away team is leading
score_leader_quarterintegerScoringWhich team led at end of quarter (null if ongoing)
score_leader_halfintegerScoringWhich team led at end of half (null if ongoing)
player_primary_idintegerPlayersPrimary player involved in play
player_secondary_idintegerPlayersSecondary player (e.g., assister, fouled player)
player_tertiary_idintegerPlayersThird player if applicable
shot_is_attemptbooleanShotsWhether play was a shot attempt
shot_attempt_typestringShots"Two Points" or "Three Points"
shot_resultstringShots"Made" or "Missed"
shot_points_attemptedintegerShotsPoints attempted (2 or 3)
shot_coordinate_xnumberShotsCourt X coordinate
shot_coordinate_ynumberShotsCourt Y coordinate
timeout_homebooleanTimeoutsWhether home team called timeout
timeout_awaybooleanTimeoutsWhether away team called timeout
betting_spreadnumberBettingPoint spread for the game
betting_home_favoritebooleanBettingWhether home team is favored
betting_spread_availablebooleanBettingWhether spread data is available
betting_home_spreadnumberBettingHome team spread value

💡 Note: Some fields may be null depending on the play type — for example, shot coordinates only appear for shot attempts. All missing values are explicit null, not empty strings.


🔗 Sportsverse Data Suite

Building something bigger? Our ecosystem covers comprehensive sports data. Check out our other sports scrapers:

ActorDescriptionStatus
🏀 NBA Play-by-PlayEvery play from every game (this actor)✅ Available
🏀 NBA Team Box ScoresTeam statistics per game✅ Available
🏀 NBA Player Box ScoresPlayer statistics per game✅ Available
🏀 NBA ScheduleGame schedules and matchups🚧 Coming Soon
🏀 NCAA Play-by-PlayCollege basketball play-by-play🚧 Coming Soon
🏀 NCAA Team Box ScoresCollege team statistics🚧 Coming Soon
🏀 NCAA Player Box ScoresCollege player statistics🚧 Coming Soon
🏒 NHL Play-by-PlayHockey game events🚧 Coming Soon
🏒 NHL Box ScoresPlayer & team statistics🚧 Coming Soon
🏈 NFL Play-by-PlayFootball play tracking🚧 Coming Soon
🏈 NFL Box ScoresPlayer & team statistics🚧 Coming Soon
⚾ MLB Play-by-PlayBaseball game events🚧 Coming Soon
⚾ MLB Box ScoresPlayer & team statistics🚧 Coming Soon

🤝 Support & Feedback

Found a bug? Want a new field? Have an idea?

  • 🐛 Report issues in the actor comments
  • 💡 Suggest features or enhancements
  • 📊 Request additional fields or output tweaks

We read every message and aim to respond quickly.


Built with ❤️ and lots of ☕ for the sports analytics community