SofaScore API Scraper
Pricing
from $1.00 / 1,000 dataset rows
SofaScore API Scraper
Scrape live scores, scheduled fixtures, match detail and search results directly from SofaScore's public backend API.
What does SofaScore API Scraper do?
SofaScore API Scraper extracts live scores, scheduled fixtures, full match detail, and search results straight from SofaScore's own backend REST API -- the same one the official Android app talks to. It covers football, basketball, tennis, cricket, esports, motorsport, and every other sport SofaScore tracks. Because it hits the API directly instead of rendering pages, it's fast, cheap, and returns clean structured JSON rather than scraped HTML.
Run it on the Apify platform to get scheduling, an API for pulling results, webhook/integration support, and automatic dataset export -- no need to babysit a script.
Why use SofaScore API Scraper?
- Sports betting & odds research -- pull live scores and fixtures on a schedule to feed models or dashboards.
- Fantasy sports tools -- player/team stats and match detail for lineup or projection tools.
- Media & content sites -- auto-populate scoreboards and fixture lists.
- Data analysis -- build historical match datasets by sweeping date ranges.
How to use SofaScore API Scraper
- Click Try for free (or Start) on the Actor page.
- Pick a Mode:
liveevents,scheduledevents for a date range,event_detailfor specific match IDs, orsearch. - Set the relevant fields (sport, date range, event IDs, or search query).
- Click Start and wait for the run to finish.
- Open the Dataset tab to view, export, or download results (JSON, CSV, Excel, HTML, and more).
Input
| Field | Type | Description |
|---|---|---|
mode | string | live, scheduled, event_detail, or search |
sport | string | SofaScore sport slug, e.g. football, basketball, tennis (used by live/scheduled) |
dateFrom / dateTo | string | YYYY-MM-DD range for scheduled mode (inclusive) |
maxPages | integer | Max pages per day for scheduled mode (pagination is 1-indexed) |
eventIds | array | Event IDs to fetch full detail for, in event_detail mode |
searchQuery | string | Free-text query for search mode (team, player, tournament) |
fetchEventDetails | boolean | For live/scheduled, fan out to full match detail per event (more requests) |
maxItems | integer | Stop after this many dataset items (0 = unlimited) |
requestDelaySecs | number | Delay between outgoing API calls |
proxyConfiguration | object | Optional; SofaScore isn't IP rate-limited, so this is rarely needed |
See the Input tab for the full schema with defaults.
Output
Output is flattened -- one level deep, no nested objects -- so it drops straight into CSV/Excel without post-processing.
Example dataset item for a live/scheduled event:
{"kind": "event","id": 16860578,"slug": "port-city-fc-golden-warriors-fc","startTimestamp": 1755532800,"sport": "football","tournament": "NPSL","category": "USA","country": "USA","homeTeamId": 452321,"homeTeam": "Port City FC","awayTeamId": 452322,"awayTeam": "Golden Warriors FC","homeScore": 1,"awayScore": 0,"statusType": "inprogress","statusDescription": "2nd half"}
You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.
Data table
| Field | Description |
|---|---|
kind | event, event_detail, or search_result -- identifies the record shape |
id / slug | SofaScore event or entity ID and URL slug |
startTimestamp | Unix start time |
sport, tournament, uniqueTournament, category, country, round, roundName | Competition context |
homeTeamId / homeTeam / homeTeamCountry, awayTeamId / awayTeam / awayTeamCountry | Team info |
homeScore / awayScore | Current score |
statusCode / statusType / statusDescription | Match status (not started / in progress / finished, period) |
venue / venueCity / referee | Present on event_detail items when SofaScore has the data |
resultType, score, entityId, entityName, entitySlug, entityType, teamId, teamName | search_result items only -- matched team/player/tournament and its parent team |
Pricing / Cost estimation
This Actor uses pay-per-event pricing: $1 per 1,000 dataset rows ($0.001/row), charged only for rows actually written to the dataset (plus standard Apify platform usage). Turning on fetchEventDetails or sweeping wide date ranges produces more rows -- use maxItems and maxPages to keep spend predictable, or set a max run charge cap in the run's advanced options.
Tips or Advanced options
- Leave
fetchEventDetailsoff for a fast overview pass; turn it on only when you need venue/referee-level detail. - For historical sweeps, narrow
dateFrom/dateToand setmaxItemsto avoid runaway runs. page=1is the first page of scheduled events for a given date --page=0always returns an empty list (undocumented API quirk).- Schedule this Actor to run daily/hourly via the Apify Schedules feature for always-fresh data.
FAQ, disclaimers, and support
This Actor calls SofaScore's public, unauthenticated backend API (no login, no key required, access-control-allow-origin: *). It's provided for research and legitimate data-integration use; you're responsible for complying with SofaScore's Terms of Service in your jurisdiction and use case. SofaScore's own FAQ states they don't officially license API access due to data-provider agreements, so treat this as an unofficial integration, not a supported one.
Current coverage: live/scheduled events, single-event detail, and search. Lineups, in-match statistics (shots, possession, xG), incidents (goals/cards/subs timeline), head-to-head history, league standings, odds, and team/player profile data are not yet covered -- betting, fantasy, and deep-analytics use cases that need those will require extending the Actor with additional modes.
Found a bug or need a custom field/endpoint added? Open an issue in the Actor's Issues tab, or reach out for a custom scraping solution.