SofaScore Scraper ⚽ Live Scores | Teams | Players | Fixtures
Pricing
from $1.00 / 1,000 results
SofaScore Scraper ⚽ Live Scores | Teams | Players | Fixtures
From $1/1K. Pull structured sports data from SofaScore across football, basketball, tennis, and 20+ sports. Search by keyword, paste URLs, fetch live matches, or download fixtures by date. Returns scores, stats, lineups, incidents, odds, teams, players, tournaments, and more.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
AbotAPI
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
2
Monthly active users
4 days ago
Last modified
Categories
Share
SofaScore Scraper
Pull structured sports data from SofaScore: live scores, match statistics, lineups, incidents, betting odds, league tables, teams, players, and tournaments. Works across football, basketball, tennis, and 20+ other sports. Search by keyword, paste links, grab every live match, or download a whole day of fixtures. Every record arrives as clean JSON with 100+ fields, ready for analysis, dashboards, or model training.
Why this scraper
- Four ways to find data, not one. Search by keyword, paste SofaScore links, pull all live matches, or list every fixture on a date. Most scrapers only accept URLs you have to build by hand.
- Four entity types, fully expanded. Matches, teams, players, and tournaments each come back with deep, named fields, plus the complete upstream object so nothing is lost.
- Match detail on demand. Toggle statistics, lineups (with player ratings and formations), incidents (goals, cards, subs), and odds per run. Pay only for the depth you use.
- League tables and squads. Tournament records can include the full standings; team records can include the entire player squad.
- 20+ sports. Football, basketball, tennis, ice hockey, American football, baseball, cricket, rugby, MMA, and more.
- Fast and lean. Direct JSON access, no browser. Hundreds of records per run on modest memory.
- Documented output. A full field list and a real example record are below, so you know exactly what you get before you run it.
Data you get
Sample shape: values are illustrative placeholders, not from a live record.
Match record
| Field | Example |
|---|---|
type | "match" |
id | 10000001 |
sport | "football" |
name | "Home Team - Away Team" |
homeTeam / awayTeam | "Home Team" / "Away Team" |
homeScore / awayScore | 2 / 1 |
homeScoreHalftime / awayScoreHalftime | 1 / 0 |
statusType | "finished" |
winnerCode | 1 |
startTimestamp | 1700000000 |
tournament / uniqueTournament | "Sample League 24/25" / "Sample League" |
season | "24/25" |
round | 12 |
venue / venueCity | "Sample Stadium" / "Sample City" |
latitude / longitude | 40.0000 / -3.0000 |
referee | "Referee Name" |
attendance | 40000 |
hasXg | true |
country | "Country" |
url | "https://www.sofascore.com/football/match/home-team-away-team/AbCdEf#id:10000001" |
statistics | possession, shots, passes, xG (when enabled) |
lineups | starters, subs, formations, ratings (when enabled) |
incidents | goals, cards, substitutions (when enabled) |
odds | pre-match markets (when enabled) |
votes | fan prediction poll: home / draw / away counts, both-teams-to-score, first-to-score (when enabled) |
raw | the complete upstream match object |
Team, player, and tournament records
| Field | Example |
|---|---|
type | "team" / "player" / "tournament" |
id | 2000001 |
name | "Sample Team" |
country | "Country" |
managerName / venue / venueCapacity (team) | "Manager Name" / "Sample Stadium" / 80000 |
shortName / nameCode / teamColors (team) | "Sample" / "SMP" / { "primary": "#ffffff" } |
position / shirtNumber / preferredFoot (player) | "F" / 10 / "Left" |
marketValue / marketValueCurrency (player) | 50000000 / "EUR" |
contractUntil (player) | 1861833600 |
tier / titleHolderName / mostTitles (tournament) | 1 / "Sample Champion" / 20 |
standings (tournament) | full league table when enabled |
squad (team) | full player list when enabled |
raw | the complete upstream object |
How to use
Search for a team and its stats:
{"mode": "search","searchQueries": ["Real Madrid"],"searchType": "team","maxItems": 5}
Every live football and tennis match right now:
{"mode": "live","sports": ["football", "tennis"],"includeStatistics": true,"includeIncidents": true}
All fixtures for a date, plus the next two days:
{"mode": "scheduled","sports": ["football"],"date": "2024-06-15","daysAhead": 2,"maxItems": 200}
Paste links (match, team, player, tournament):
{"mode": "url","urls": ["https://www.sofascore.com/team/football/real-madrid/2829","https://www.sofascore.com/player/lionel-messi/12994"]}
Match links must include the numeric id: copy the address bar while on a match page (it ends with #id:<number>), or use an /event/<number> link.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search, url, live, or scheduled. |
searchQueries | array | ["Real Madrid"] | Keywords to resolve (search mode). |
searchType | string | all | Restrict a query to team, player, tournament, or match. |
urls | array | sample | SofaScore links (url mode). |
sports | array | ["football"] | Sports for live and scheduled modes. |
date | string | today | YYYY-MM-DD for scheduled mode. |
daysAhead | integer | 0 | Extra days after date. |
includeStatistics | boolean | true | Match and player statistics. |
includeLineups | boolean | true | Match lineups and ratings. |
includeIncidents | boolean | true | Goals, cards, substitutions. |
includeOdds | boolean | false | Pre-match odds markets. |
includeVotes | boolean | false | Fan prediction poll (community sentiment) per match. |
includeStandings | boolean | true | Tournament league tables. |
includeSquad | boolean | false | Full team squads. |
maxItems | integer | 20 | Stop after this many records (0 = no limit). |
proxy | object | Apify proxy | Connection settings. |
Output example
Sample shape: values are illustrative placeholders, not from a live record.
{"type": "match","id": 10000001,"sport": "football","name": "Home Team - Away Team","homeTeam": "Home Team","awayTeam": "Away Team","homeScore": 2,"awayScore": 1,"statusType": "finished","winnerCode": 1,"startTimestamp": 1700000000,"tournament": "Sample League","season": "24/25","round": 12,"venue": "Sample Stadium","referee": "Referee Name","attendance": 40000,"country": "Country","url": "https://www.sofascore.com/football/match/home-team-away-team/AbCdEf#id:10000001","statistics": [{ "period": "ALL", "groups": [] }],"incidents": [{ "incidentType": "goal", "time": 23, "player": { "name": "Player Name" } }],"raw": {}}
Connection and plans
The scraper works on the Apify free plan with the default proxy and rotates connections automatically if an exit is refused. For large runs or sustained load, residential proxy (Starter plan and above) gives more rotation headroom. Pick it under the Connection section and, optionally, set a country.