Flashscore Basketball Box Scores & Team Stats Scraper
Pricing
from $1.00 / 1,000 results
Flashscore Basketball Box Scores & Team Stats Scraper
Extract basketball match box scores, player statistics, and quarter-by-quarter team performance data from Flashscore. Covers FG%, 3P%, FT%, rebounds, assists, steals, blocks, and 21 per-player stats. No proxy required.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Extractify Labs
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
1
Monthly active users
20 hours ago
Last modified
Share
Extract detailed basketball match statistics from Flashscore — 21 per-player box score fields and per-quarter team performance metrics — for any completed or live basketball match. Supply Flashscore match URLs or raw match IDs; the actor returns one structured item per match with a full nested players array and team statistics breakdown.
Data source: Flashscore internal feed endpoints (
df_st_1for team stats,df_psn_1for player box scores). No proxy required.
What basketball data can you extract?
Player box scores (21 statistics per player)
For every player on both teams, the actor returns:
| Stat group | Fields |
|---|---|
| Identity | player_name, team, team_abbreviation, player_url, nationality, height_cm |
| Scoring | points, fg_made, fg_attempted, fg2_made, fg2_attempted, fg3_made, fg3_attempted, ft_made, ft_attempted |
| Rebounding | total_rebounds, offensive_rebounds, defensive_rebounds |
| Playmaking | assists, turnovers |
| Defense | steals, blocks, blocks_against, personal_fouls, technical_fouls |
| Efficiency | plus_minus, minutes |
Per-player fields that are not recorded for a given match (e.g. blocks_against, technical_fouls) are omitted from that player's object — they will not appear as zero or null.
Team statistics (per quarter and match total)
For each period (Match, 1st Quarter, 2nd Quarter, 3rd Quarter, 4th Quarter, OT), the actor returns rows across three categories:
- Scoring: Field goals %, 3-point field goals %, Free throws %
- Rebounds: Total rebounds, Offensive rebounds, Defensive rebounds
- Other: Assists, Blocks, Steals, Turnovers, Personal fouls
Key features
- 21 player statistics per match — complete box score for all players on both teams
- Per-quarter team statistics — FG%, 3P%, FT%, rebounds, assists, blocks, steals, turnovers, fouls broken down by quarter and match total
- Flexible input — supply Flashscore match URLs (
startUrls) or raw 8-character match IDs (matchIds), or both - Selective data fetching — toggle team stats and player box scores independently; each toggle corresponds to one HTTP request per match
- No proxy required — direct requests to Flashscore feed APIs; 2 requests per match in the default configuration
- Covers all basketball leagues — NBA, EuroLeague, national leagues, and any other basketball sport on Flashscore
- Clean, absent-field output — missing player stats are omitted (not null), compatible with strict dataset schema validation
Limitations
| Limitation | Detail |
|---|---|
| Final scores not available | home_score and away_score are not present in the Flashscore df_st_1 historical feed. This actor does not output a final score field. |
| Quarter scores not available | quarter_scores is always an empty array ([]). The per-quarter score data (IG÷/IH÷ fields) exists only in live feeds, not in the historical df_st_1 endpoint used by this actor. |
| Team names require player stats | home_team and away_team are sourced from the player stats feed (df_psn_1). If includePlayerStats is disabled, team names will be absent from output. |
| Height data quality | height_cm is sourced directly from Flashscore. For some non-NBA leagues the field contains placeholder values (e.g. 102). If the value appears implausible, treat it as not recorded. |
| Point-in-time snapshot | Each run captures data at the moment of execution. The actor does not subscribe to live updates. |
| Basketball only | Sport ID 3 (basketball). For football or other sports, use the relevant Flashscore actor. |
Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
startUrls | array | Yes (if matchIds absent) | — | Flashscore basketball match page URLs. The match ID is extracted from the URL path or ?mid= query parameter. |
matchIds | array | Yes (if startUrls absent) | — | Raw Flashscore match IDs — 8-character alphanumeric strings (e.g. "OxuYoJH6"). |
includeTeamStats | boolean | No | true | Fetch per-quarter team statistics. Disabling skips the df_st_1 feed request (one fewer HTTP request per match). |
includePlayerStats | boolean | No | true | Fetch per-player box scores. Disabling skips the df_psn_1 feed request. Also removes home_team and away_team from output. |
maxItems | integer | No | (unlimited) | Maximum number of matches to process. Leave blank for no limit. |
Validation rules:
- At least one of
startUrlsormatchIdsmust be provided and non-empty. - At least one of
includeTeamStatsorincludePlayerStatsmust betrue. If both arefalse, the actor exits immediately with an error.
Supported URL formats
The actor accepts two Flashscore URL formats:
Format A — with ?mid= query parameter:
https://www.flashscore.com/match/basketball/new-york-knicks-WCNO4nbt/philadelphia-76ers-vwRW2QSh/?mid=OxuYoJH6
Match ID extracted from ?mid=OxuYoJH6.
Format B — match ID in trailing path segment:
https://www.flashscore.com/match/basketball/knicks-76ers-OxuYoJH6/
Match ID extracted from the final 8-character path segment.
URLs from which a match ID cannot be extracted are logged as warnings and skipped.
Sample input (both toggles enabled)
{"matchIds": ["OxuYoJH6", "nRQtuO9m"],"includeTeamStats": true,"includePlayerStats": true}
Sample input (player stats only, from URL)
{"startUrls": ["https://www.flashscore.com/match/basketball/new-york-knicks-WCNO4nbt/philadelphia-76ers-vwRW2QSh/?mid=OxuYoJH6"],"includeTeamStats": false,"includePlayerStats": true}
Output fields
Top-level fields (one item per match)
| Field | Type | Always present | Description |
|---|---|---|---|
match_id | string | Yes | Flashscore internal match identifier (8 characters) |
match_url | string | Yes | Flashscore match page URL |
home_team | string | Only when includePlayerStats: true | Full home team name |
away_team | string | Only when includePlayerStats: true | Full away team name |
quarter_scores | array | Yes | Always [] — see Limitations |
team_stats | array | Only when includeTeamStats: true | Team statistics rows (see below) |
players | array | Only when includePlayerStats: true | Player box scores (see below) |
scraped_at | string | Yes | ISO 8601 UTC timestamp |
team_stats[] element fields
| Field | Type | Example | Description |
|---|---|---|---|
period | string | "Match" | Period label: "Match", "1st Quarter", "2nd Quarter", "3rd Quarter", "4th Quarter", "OT" |
category | string | "Scoring" | Stat group: "Scoring", "Rebounds", "Other" |
stat_name | string | "Field goals %" | Stat label from Flashscore feed |
home_value | string | "50.63%" | Home team value (raw string — may include %) |
away_value | string | "45.33%" | Away team value |
players[] element fields
| Field | Type | Notes |
|---|---|---|
team | string | Full team name |
team_abbreviation | string | E.g. "NYK", "PHI" |
player_name | string | Display name as shown on Flashscore |
player_url | string | Relative Flashscore player profile URL |
nationality | string | Player nationality |
height_cm | integer | Height in centimetres; absent if not recorded |
points | integer | Points scored |
total_rebounds | integer | Total rebounds |
assists | integer | Assists |
minutes | string | Minutes played in MM:SS format |
fg_made | integer | Field goals made |
fg_attempted | integer | Field goals attempted |
fg2_made | integer | 2-point field goals made |
fg2_attempted | integer | 2-point field goals attempted |
fg3_made | integer | 3-point field goals made |
fg3_attempted | integer | 3-point field goals attempted |
ft_made | integer | Free throws made |
ft_attempted | integer | Free throws attempted |
plus_minus | integer | Plus/minus; absent if not recorded |
offensive_rebounds | integer | Offensive rebounds; absent if not recorded |
defensive_rebounds | integer | Defensive rebounds; absent if not recorded |
personal_fouls | integer | Personal fouls; absent if not recorded |
steals | integer | Steals; absent if not recorded |
turnovers | integer | Turnovers; absent if not recorded |
blocks | integer | Blocks; absent if not recorded |
blocks_against | integer | Blocks against; absent if not recorded |
technical_fouls | integer | Technical fouls; absent if not recorded |
Sample output
The following is real output from match OxuYoJH6 (New York Knicks vs Philadelphia 76ers, NBA). Two players shown (10 per team in the actual dataset); team_stats truncated to 4 of ~40 rows.
{"match_id": "OxuYoJH6","match_url": "https://www.flashscore.com/match/basketball/OxuYoJH6/","home_team": "New York Knicks","away_team": "Philadelphia 76ers","quarter_scores": [],"team_stats": [{"period": "Match","category": "Scoring","stat_name": "Field goals %","home_value": "50.63%","away_value": "45.33%"},{"period": "Match","category": "Scoring","stat_name": "3-point field goals %","home_value": "25.00%","away_value": "43.59%"},{"period": "Match","category": "Rebounds","stat_name": "Total rebounds","home_value": "37","away_value": "32"},{"period": "1st Quarter","category": "Scoring","stat_name": "Field goals %","home_value": "57.14%","away_value": "38.46%"}],"players": [{"team": "New York Knicks","team_abbreviation": "NYK","player_name": "Anunoby OG.","player_url": "/player/anunoby-og-ogugua/jiNJMxEa/","nationality": "United Kingdom","height_cm": 197,"points": 24,"total_rebounds": 5,"assists": 2,"minutes": "37:25","fg_made": 9,"fg_attempted": 17,"fg2_made": 7,"fg2_attempted": 10,"fg3_made": 2,"fg3_attempted": 7,"ft_made": 4,"ft_attempted": 4,"plus_minus": 12,"offensive_rebounds": 2,"defensive_rebounds": 3,"personal_fouls": 3,"steals": 4,"blocks": 1},{"team": "Philadelphia 76ers","team_abbreviation": "PHI","player_name": "Maxey T.","player_url": "/player/maxey-tyrese/r9DvnZeC/","nationality": "USA","height_cm": 200,"points": 26,"total_rebounds": 3,"assists": 6,"minutes": "46:48","fg_made": 9,"fg_attempted": 23,"fg2_made": 8,"fg2_attempted": 17,"fg3_made": 1,"fg3_attempted": 6,"ft_made": 7,"ft_attempted": 9,"defensive_rebounds": 3,"personal_fouls": 1,"steals": 1,"turnovers": 6}],"scraped_at": "2026-05-09T18:19:58Z"}
Use cases
Fantasy sports developers
Build or power fantasy basketball applications with per-match player box score data. The 21-field player output covers every statistic used in standard fantasy scoring systems: points, rebounds, assists, steals, blocks, turnovers, three-pointers made, plus/minus, and more. Fetch historical match data to backfill a season, or run the actor on a schedule after each match to keep your scoring engine current.
Betting analytics
Enrich sports betting models with historical per-quarter team performance metrics. The team_stats output provides field goal %, 3-point %, free throw %, and rebounding breakdowns split by quarter — useful for building pre-match and historical spread models, identifying teams that struggle in specific quarters, or validating line movement against statistical trends.
Sports research and analytics
Conduct season-level analysis by extracting box scores across hundreds of matches. Compare player efficiency across different leagues (NBA, EuroLeague, national leagues), study team-level performance patterns, or track individual player progression across a season. All 21 player stat fields are available; absent fields are omitted (not zero), preserving data fidelity.
Sports journalism and fact-checking
Verify game statistics quickly for match reporting and fact-checking. Query a specific match by ID and retrieve the complete box score in seconds — no browser automation, no scraping overhead. Useful for confirming player scoring lines, team shooting percentages, or quarter-by-quarter performance narratives before publication.
How it works
- The actor fetches the Flashscore homepage to extract an authentication token from the core JavaScript bundle.
- For each match ID (from
startUrlsormatchIds), the actor makes up to two direct HTTP requests to Flashscore's internal feed endpoints:df_st_1_{matchId}— team statistics (ifincludeTeamStats: true)df_psn_1_{matchId}— player box scores (ifincludePlayerStats: true)
- Responses are parsed using a state-machine feed parser (delimiter-separated text format used internally by Flashscore).
- One dataset item is emitted per match.
Request budget: 2 fixed requests (homepage + token) + up to 2 per match. A 10-match run with both toggles on = 22 HTTP requests total.
No browser, no proxy, no JavaScript rendering. All data comes from lightweight feed endpoints.
Related actors
| Actor | What it does |
|---|---|
| Flashscore Basketball Live Matches | Live basketball scores, current quarter, team lineups — for in-progress matches |
| Flashscore: Match Listings, Scores & Fixtures | Multi-sport match listings by date — get match IDs for use with this actor |
| Flashscore Results | Completed match results with scores across all sports |
| Flashscore Team Fixtures | Upcoming and past fixtures for a specific team |
| Flashscore Countries & Leagues | Full directory of sports, countries, and league URLs on Flashscore |
FAQ
Q: How do I find a Flashscore basketball match ID?
Navigate to any basketball match page on Flashscore. The match ID is the 8-character alphanumeric segment in the URL, or the value of the ?mid= query parameter. You can also use the Flashscore: Match Listings, Scores & Fixtures actor to retrieve match IDs for a given date and sport.
Q: Why is quarter_scores always an empty array?
Quarter score data (IG÷/IH÷ fields) is only available in Flashscore's live feed endpoints, not in the historical df_st_1 feed used by this actor. The field is always present but always empty. Per-quarter team statistics (FG%, rebounds, etc.) are still available through the team_stats array.
Q: Why are home_score and away_score missing from the output?
Final score data is not available in the df_st_1 or df_psn_1 Flashscore feed endpoints. To get final scores, use the Flashscore: Match Listings, Scores & Fixtures or Flashscore Results actor.
Q: Does this actor cover leagues outside the NBA?
Yes. Any basketball match on Flashscore is supported — NBA, EuroLeague, FIBA competitions, national leagues, and more. Data availability depends on Flashscore's coverage for that league. Matches with no team statistics recorded will return an absent team_stats field; player stats are typically available regardless of league.
Q: What happens if a player stat field is not recorded?
Fields are omitted from that player's object entirely — they will never appear as null or 0. For example, if a player did not record any blocks, the blocks field will not be present in their object at all.
Q: Can I use this for live matches?
The actor fetches a point-in-time snapshot. For matches currently in progress, it will return whatever statistics Flashscore has recorded up to the moment of the request. For continuous live monitoring, schedule the actor to run at regular intervals (e.g. every 5 minutes). For dedicated live match tracking, consider the Flashscore Basketball Live Matches actor.