NBA Scraper for Box Scores, Play-by-Play and Shot Charts

NBA.com is the league keeping its own books, not a wire service copying them. Learn the ten-digit game id and the whole archive opens: box scores, shot coordinates, draft picks, officiating reviews.

NBA Scraper
Solutions

Managed NBA scraper service: scope it, pace it, ship it

ScrapeIt runs the NBA scraper as a managed service. You name the seasons, season types and tables; we build the pipeline, pace it inside the crawl rules the site publishes, and deliver CSV, JSON, Excel, Parquet or a load into your warehouse.

The plumbing is part of the job, because the statistics host and the live JSON edge refuse ordinary automated clients: anti-bot handling, proxy rotation and CAPTCHA solving are included, and we hold the exit region steady so broadcast rows and localised labels stay comparable between runs. Nothing behind a sign-in is touched. Player statistics are professional sporting information about public figures, while contact details and private life are not collected, and injury data stops at the availability line the league itself requires before a game. NBA statistics are rights-protected and the league restricts commercial reuse, so take your use case to your own counsel.

What an NBA data export holds, field by field

The fixture record is the spine of an NBA data export: game id and gameCode, status text, period, a clock written as an ISO duration such as PT11M39.00S, tip-off in UTC with the Eastern time beside it, arena id, name, city and timezone, attendance, a sellout flag, the three officials with person ids, and the labels that say what the fixture was - Emirates NBA Cup, Championship, West Conf. Semifinals, Game 4, East Play-In - plus a neutral-site flag and per-game flags for whether tracking and hustle numbers exist.

Underneath sit the blocks buyers ask for by name:

  • Team block - team id, city, name, tricode, slug, wins and losses, live score, bonus state, timeouts remaining, seed, the period-by-period line score, team totals and the chart line of paint, second chance, fast break and bench points.
  • Player box score - person id, name, slug, position, jersey, minutes, FGM, FGA, FG%, 3PM, 3PA, 3P%, FTM, FTA, FT%, OREB, DREB, REB, AST, STL, BLK, TOV, PF, PTS and plus-minus, with starter and bench subtotals, an inactive list and a comment field carrying notes such as DNP - Coach's Decision.
  • Play-by-play - five hundred-odd typed actions in a full game, each with action number, clock, period, team, person id, description, an action type and a sub type at the level of Step Back Jump shot or Coach Challenge Overturn Ruling, plus the running score.
  • Shot geometry - every field goal carries x and y court coordinates in tenths of a foot, roughly minus 250 to 250 across the floor, with shot distance in feet, result and a shot value of two or three.
  • Advanced measures - OffRtg, DefRtg, NetRtg, PACE, PIE, TS%, eFG%, USG%, AST%, AST/TO, OREB%, DREB% and REB%, each defined in the site's own glossary.
  • Standings row - wins, losses, win percentage, games behind, conference and division records, home, road, neutral and overtime splits, last ten and streak.

Roster rows add height, weight, birth date, age, experience, school and a how-acquired note, and player profiles add draft year, round and pick, country, seasons played coded by season type and a game-by-game log. Every row carries league id, season, season type and collection time, because a per-game average without a season type is a guess.

What an NBA data export holds, field by field
Injury reports, officiating reviews, draft, combine and the NBA Cup

Injury reports, officiating reviews, draft, combine and the NBA Cup

Three league publications sit beside the statistics and have no aggregator equivalent. The injury report is a league requirement rather than editorial judgement: clubs must post a participation status and a stated reason for every affected player by 5 p.m. local time the day before a game, by 1 p.m. on the second day of a back-to-back, with a further game-day filing between 11 a.m. and 1 p.m., or 8 to 10 a.m. for early tips, refreshed through the day. We take the availability line the league requires and nothing more.

The officiating archive is the second. Last Two Minute reports cover finishes inside three points, are keyed by the same game id, and grade each reviewed event as correct call, incorrect call, correct non-call or incorrect non-call, with period, clock, call type and players. The third is the draft and combine record: picks back to 1947 with player, team, affiliation, year, round, pick in round and overall pick, defunct franchises included, plus combine anthropometrics - hand length and width, height with and without shoes, standing reach, wingspan - and the agility, sprint and vertical leap tables.

Around those sit the moving parts. A transaction log filters by signing, trade, waive and waiver claim. NBA Cup group tables run six groups of five over four games, marked for group winner and wild card. The schedule filter splits broadcasters across sixty-two regions, and the fixture payload separates national, international, OTT and radio carriers by region id. NBA League Pass prices arrive in the currency of the requesting country, so a comparable feed has to come from a pinned region.

How NBA.com is wired: league ids, season types and game ids

NBA.com is the league's own record, published by NBA Media Ventures, and that is the reason to scrape NBA pages rather than a wire copy: these are the numbers the league itself uses for leaders and franchise history, and everything downstream is a derivative with a lag. Schedule, standings, box scores, play-by-play, shot geometry, rosters, draft, transactions and the officiating archive all hang off one identifier scheme, so an NBA scraper that learns it reaches all of them.

That scheme is a ten-digit game id, readable once you split it: two digits for the league, one for the season type, two for the season start year, five for the sequence. League 00 is the NBA, 10 the WNBA, 20 the G League, with 13, 14, 15 and 16 reserved for the summer league circuits. The season-type digit runs 1 preseason, 2 regular season, 3 All-Star week, 4 playoffs, 5 play-in and 6 the NBA Cup final. Postseason ids split again at the tail into a zero, the round, the series inside that round and the game number, so 0042500224 is round two, series two, game four of 2025-26. A second key, the gameCode, writes the same fixture as 20251216/SASNYK.

Franchises occupy a fixed block from 1610612737 to 1610612766, one number each, and the number survives relocation and renaming. Players carry plain integers. Addresses hang off those numbers: a fixture at /game/ plus the id, with summary, box-score, game-charts and play-by-play tabs; a club at /team/ plus team id and slug, with roster, schedule and stats beneath it; a player at /player/ plus person id and slug, with career stats, per-game box scores and bio. The trailing slug is decoration. The integer is the handle, and it turns up again in the draft table, the transaction log and the officiating report.

Get a Quote
dev_w
25

Developers

customers
500+

Customers worldwide

pages
1 500 000 000+

Pages extracted

stime
15000+

Hours saved for our clients

Plans

Airplane

€199 / one-time

setup fee - included

Data limits100,000
Frequencyone-time
Run timeup to 5 days
Data storing7 days

Helicopter

€169 / mo

setup fee €499

Data limits250,000
Frequencymonthly
Run timeup to 5 days
Data storing14 days

Glasses

€229 / mo

setup fee €499

Data limits1,000,000
Frequencyweekly
Run timeup to 5 days
Data storing30 days

DNA

€549 / mo

setup fee €799

Data limits3,000,000
Frequency3 times daily
Run timesame day
Data storing90 days

Why an NBA feed starts from the source of record

The first argument for NBA scraping over a resold feed is provenance. This is the league's own book: leaders pages, qualification minimums, franchise records and the digitised box score archive all resolve here. When a model's number disagrees with the official number, the official number wins the meeting. A licensed vendor resells the same record with a contract behind it: collection buys the numbers, not the rights.

The second is the identifier spine. One integer follows a player out of the box score into the play-by-play stream, the draft table, the transaction log and the officiating review; one game id opens the box score, the shot chart and the last-two-minute report. Anyone stitching several basketball sources together spends most of the budget matching names; NBA ids turn that work into a lookup.

The third is depth that is unusual for an open source. Base statistics and digitised box scores reach the inaugural 1946-47 season, the draft table starts in 1947, advanced measures begin at 1996-97, lineup data at 2008, camera tracking at 2013-14 and play type splits at 2015-16. Individual counters entered the record at known dates - rebounds in 1950-51, minutes in 1951-52, steals and blocks in 1973-74, turnovers in 1977-78, three-pointers in 1979-80 - so a long backfill is scoped column by column.

The fourth is that none of it leaves the site on its own. There is no export button and no CSV: the help pages say plainly that the statistics are there to read, not to download. Every table you want as a file is an extraction job.

Our Blog

Reads Our Latest News & Blog

Learn how to use web scraping to solve data problems for your organization

How Artificial Intelligence Is Used In Web Scraping

How Artificial Intelligence Is Used In Web Scraping

Leveraging advances in technology, the AI-powered web scraper has skyrocketed in demand and is helping to expand capabilities by automating tedious daily tasks and speeding up data collection from thousands of websites several times over.

What is Web Scraping and What is it Used For?

What is Web Scraping and What is it Used For?

Web scraping is a method of obtaining web data by extracting it from pages of web resources with the help of a program, that is, in automatic mode. It is used to syntactically convert web pages into more usable forms.

Web Scraping for Machine Learning

Web Scraping for Machine Learning

If you specialize in machine learning, you need to feed large amounts of data to the algorithms. Web scraping is the easiest and the most efficient method of collecting the data from all over the Internet.

scrapeit logo

The people behind your NBA data pipeline

ScrapeIt is a managed web scraping agency, not a self-serve tool. A named engineer owns the job end to end: agreeing the seasons and tables with you, building the extraction, watching it when the site changes shape mid-season, and repairing it before your dashboard notices. Delivery lands on the schedule you set, in the format your systems already read, and the support channel is staffed by the people who wrote the collector. Start with a paid sample, check it against a game you know by heart, then scale the season list.

FAQ

Is there a public NBA API we can use instead of scraping?

There is no published developer programme and no documented public NBA API. No developer portal answers, and the help pages state that the statistics are offered for reading rather than download, in any format. The site runs on internal endpoints - a statistics host and a JSON edge - that carry no version, no documentation and no support, and both sit behind edge protection that turns away ordinary automated clients, so they break quietly and without notice. We treat them as one input among several, watch for shape changes and fall back to page collection. A licensed feed from the league's official distributor is a different product with guarantees attached, and this is not it.

How far back does NBA data go, and what can you cover?

Base statistics and digitised box scores reach the inaugural 1946-47 season and the draft table starts in 1947. Advanced measures begin at 1996-97, lineup data at 2008, camera tracking at 2013-14 and play type splits at 2015-16. Individual counters arrived at known dates, so a deep backfill is scoped column by column rather than promised wholesale. We agree the season range, the season types - preseason, regular season, All-Star, play-in, playoffs and the NBA Cup - and the table list up front, and adding a table later is a configuration change, not a rebuild.

How often can an NBA feed be refreshed?

Per phase, because that is what keeps the bill sensible. Schedules, rosters and transactions move on a daily pass. The injury report is filed the evening before a game and again on the morning of it, so it is collected on those windows. Live score, play-by-play and box score run at minute level during a game and stop the moment it goes final. The site updates base numbers in step with play and settles advanced numbers ten to fifteen minutes after the buzzer, so we follow that rhythm rather than hammer the page. Completed seasons are collected once, since a finished box score never changes.

What formats do you deliver NBA data in?

CSV, JSON, Excel, Parquet, or a direct push into your warehouse or object storage - Snowflake, BigQuery, Postgres, S3 and GCS are all routine. Games, teams, players, box score lines, play-by-play actions, shot events and standings arrive as separate related tables joined on NBA ids, so you can load the lot or only the slice you use. Runs are incremental with change records, timestamps are UTC with the Eastern tip-off kept alongside, and the schema is agreed in advance and versioned so a downstream model does not break when a column is added.

Is it legal to scrape NBA.com, and what do you leave out?

We collect what the site renders publicly, at a polite rate, inside the crawl rules it publishes, which on this source means leaving the api, search, amp and media-central paths alone. We do not sign in, so League Pass video and account areas are out of scope, and we do not work around geographic restrictions. The league's terms restrict reuse of its statistics: attribution is required, and commercial, betting, fantasy and comprehensive-database uses need consent, which is why serious commercial users license through the official distributor. Player records are professional sporting information; contact details, private life and medical notes are excluded.

How does it Work?

Step 1 - Make a Request

You share your needs, expectations, and desired timeframe. We’ll suggest the best solution based on your request and budget.

Step 2 - Configuring Custom Web Crawlers

Our specialists configure the crawlers and extract a sample dataset for your review before proceeding with the full-scale extraction.

Step 3 - Collect and Deliver

Once you approve the sample, we launch the project and start full data collection. We gather, filter, and structure the data for easy use, delivering it on time in your preferred format.

Step 4 - Maintain and Support

Our team manages ongoing processes, monitors website changes, and supports all data extraction cycles. We can also help integrate data into your systems or create dashboards to simplify analysis.

Request a Quote

Tell us more about you and your project information.
Which sites, which fields, how often. A couple of lines is enough.

We reply within 1 business day. No obligation.

scrapiet

Scrapeit Sp. z o.o.
10/208 Legionowa str., 15-099, Bialystok, Poland
NIP: 5423457175
REGON: 523384582