Basketball Scraper: Box Scores, Play-by-Play & Odds avatar

Basketball Scraper: Box Scores, Play-by-Play & Odds

Pricing

from $4.20 / 1,000 match records

Go to Apify Store
Basketball Scraper: Box Scores, Play-by-Play & Odds

Basketball Scraper: Box Scores, Play-by-Play & Odds

Get basketball results, per-quarter team stats, player box scores, play-by-play, odds, rosters and standings for any team. Export to CSV, Excel, JSON, XML.

Pricing

from $4.20 / 1,000 match records

Rating

0.0

(0)

Developer

PunkRecordsData

PunkRecordsData

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 hours ago

Last modified

Categories

Share

PunkRecordsData

๐Ÿ€ Basketball Stats Scraper: Box Scores, Play-by-Play & Standings, PunkRecordsData

๐Ÿš€ Every NBA/EuroLeague team's games, full player box scores, play-by-play, betting odds, rosters and standings, in one run. Real basketball intelligence with no login, no API key.

Scrape basketball data straight from Sofascore's own live API: game results with score by quarter, team stats broken out by full game and each individual quarter, a full per-player box score (points, rebounds, assists, shooting splits, plus-minus, efficiency rating), the point-margin-over-time curve for the whole game, every real scoring play, bookmaker odds, a team's full season roster, and conference/division standings. Give it a team name and pull their recent and upcoming games, or feed in match IDs directly.

Built for the Apify platform: schedule a run to track a team's games as they finish, or feed player box scores straight into a fantasy or performance-analysis model.

๐Ÿ“‹ What the Basketball Stats Scraper does

Give it a team name (like "Los Angeles Lakers") and it returns one row per game: opponent, tournament, round, score by quarter, and status. Turn on Team statistics for scoring/rebounds/shooting stats broken out by the full game AND each individual quarter. Turn on Player box scores for every player's full stat line, Lineups for starters vs bench, Head-to-head record, Betting odds, Score margin graph for the point-differential curve minute by minute, Play-by-play for every real scoring play, Team roster for the full season squad, and Standings for the conference/division table, each computed once per unique team or tournament, not once per game.

๐Ÿ’ก Why it matters: most basketball scrapers on the market return a flat list of scores and stop there. This one also pulls player-level box scores, play-by-play and a score-margin graph, real depth most competitors don't expose, in the same run.

๐Ÿ“Š Output

Real sample fields from a verified run against "Los Angeles Lakers", one of three record types identified by recordType.

match-record (primary, one row per game):

{
"homeTeam": "Orlando Magic",
"awayTeam": "Los Angeles Lakers",
"homeScore": 104,
"awayScore": 105,
"scoreByQuarter": [
{ "quarter": 1, "homePoints": 30, "awayPoints": 37 },
{ "quarter": 2, "homePoints": 35, "awayPoints": 25 }
],
"statistics": [{ "period": "1Q", "group": "Scoring", "stat": "3 pointers", "home": "4/11 (36%)", "away": "3/9 (33%)" }],
"boxScore": [{ "playerName": "Paolo Banchero", "points": 16, "rebounds": 5, "assists": 6, "plusMinus": -18, "rating": 7.1 }],
"h2hRecord": { "homeWins": 4, "awayWins": 6 },
"scoreGraph": [{ "minute": 1, "margin": -6 }]
}

roster-record (one row per unique player on a team's season roster):

{ "teamName": "Orlando Magic", "playerName": "Desmond Bane", "position": "G", "heightCm": 196, "weightKg": 98, "country": "USA" }

standings-record (one row per team in a league table):

{ "tournamentName": "NBA", "teamName": "Detroit Pistons", "position": 1, "wins": 60, "losses": 22, "percentage": 0.732 }

Every extra you don't enable returns "Not Requested" instead of an empty field, and data a game genuinely doesn't have returns "N/A". You always know why a field is empty, never guess.

โœจ Why choose this Actor

  • Player box scores, not just the final score. Full per-player stat lines (points, rebounds, assists, shooting splits, plus-minus, efficiency rating), something most flat score-only scrapers don't touch.
  • Play-by-play included. Every real scoring play in the game, with player, time and running score, verified real on an NBA fixture (115+ plays per game).
  • A score-margin graph. The point-differential curve for the whole game, minute by minute, a genuinely distinct data shape no flat-score competitor exposes.
  • 10 real data types, one run. Match result, per-quarter statistics, box scores, lineups, head-to-head, odds, score graph, play-by-play, roster and standings, no need to run several different scrapers.
  • No login, no API key. Nothing to expire or get rate-limited on your account.

๐Ÿ“ˆ How it compares to alternatives

Measured against the closest published basketball actors on the Apify Store:

ActorPrimary priceBillable events
Generic multi-sport scrapers (highest volume, 800-3,900 runs/30d)$1.00-2.00/1k1 (flat score list)
Specialized basketball API actor (richest competitor, different source)$15.00/1k14, several from a deeper stats source
This ActorSee Store pricing10 (match, statistics, box score, lineups, h2h, odds, score graph, play-by-play, roster, standings), all raw Sofascore source data

๐Ÿš€ How to use

  1. Create a free Apify account. New accounts get $5 in free credit.
  2. Open the Basketball Stats Scraper and enter a team name (e.g. "Los Angeles Lakers") or a Sofascore match ID.
  3. Toggle on the extras you need: statistics, box scores, lineups, h2h, odds, score graph, play-by-play, roster, standings.
  4. Click Start and wait for the run to finish.
  5. Download your data as CSV, Excel, JSON or XML, or pull it via the API.

๐Ÿ’ผ Business use cases

Fantasy sports & DFS tools Pull player box scores and rosters to power projections, lineup optimizers or fantasy scoring.

Sports betting & odds comparison Track bookmaker odds alongside real box scores and score-margin curves for model backtesting.

Sports media & content Feed live scores, box scores and standings into a live-blog, recap generator or stats widget.

Performance analysis & scouting Use per-quarter team stats and play-by-play to study team tendencies and player performance trends.

๐Ÿ”Œ Automating Basketball Stats Scraper

Connect this Actor to Make, Zapier, Slack or Airbyte to push new game results or box scores into a spreadsheet, database or channel automatically. Schedule a run after each game night to catch box scores as soon as they're final.

๐ŸŒŸ Beyond business use cases

Research: sports-analytics and biomechanics research using real box score and play-by-play data. Personal projects: track your favorite team's games, box scores and standings automatically. Non-profit: youth-sports or amateur-league stats tracking using the same Sofascore data model. Experimentation: train win-probability or player-performance prediction models against real game data.

๐Ÿค– Ask an AI assistant about this scraper

Paste this Actor's Store page into ChatGPT, Claude or Perplexity and ask: "Does this basketball scraper include player box scores and play-by-play, or just final scores?" The README and input schema are structured so AI assistants can answer accurately from the page alone.

โ“ Frequently Asked Questions

Does this only return final scores, or also player stats? All 10: match result, per-quarter team statistics, player box scores, lineups, head-to-head, odds, score-margin graph, play-by-play, roster and standings, each an optional toggle.

Which leagues does this cover? Any basketball league Sofascore covers, including NBA, EuroLeague and others. Coverage depth (statistics, box scores) depends on what Sofascore itself publishes for that league; major leagues like the NBA have the richest data.

Do I need a team name, or can I use a specific game? Either works. A team name pulls that team's recent and upcoming games; a specific Sofascore match ID fetches just that game, bypassing search.

Do I need an API key for Sofascore? No. Every field comes from Sofascore's own public API; no login, session or API key required anywhere.

What's in the score-margin graph? A point value per minute of game time representing the score differential (positive means the home team was ahead), reconstructing the flow of the game without needing the full play-by-play.

How is the roster billed if the same team appears in multiple games in one run? Once. roster-record is computed and billed once per unique team encountered in the run, never re-billed for every game that team appears in.

How is standings billed the same way? Once per unique tournament/season combination in the run, not once per game.

What happens if a team name doesn't resolve? The Actor logs a warning and skips it rather than failing the whole run. Use the team's full common name (e.g. "Los Angeles Lakers", not "Lakers").

How fresh is the data? As fresh as Sofascore itself, scores and stats typically update within minutes of a real-world play.

Why does play-by-play sometimes show "N/A" for the quarter? Sofascore's own incident feed labels quarter-end markers but not every individual scoring play with its quarter; where that label is genuinely absent from the source, this Actor reports it honestly instead of guessing.

๐Ÿ”Œ Integrate with any app

Every run's output is available as CSV, Excel, JSON or XML, or through Apify's API and client libraries for Python and JavaScript.

Browse the rest of the PunkRecordsData catalog, including Tennis Match Stats Scraper and Sofascore Match Stats Scraper (football), for more sports data covering other Sofascore sports.

๐Ÿ’ก Pro Tip: browse the complete PunkRecordsData collection.

๐Ÿ†˜ Need Help? contact.punkrecordsdata@gmail.com

โš ๏ธ Disclaimer: This is an independent tool, not affiliated with, endorsed by, or sponsored by Sofascore, the NBA, or any league or team. It collects only publicly available data.