Live event monitoring
Use SofaScore endpoints to turn live event monitoring into repeatable API requests with documented inputs and JSON responses.
Collect SofaScore live sports events, teams, players, standings, lineups, odds, incidents, statistics, and head-to-head data as normalized JSON.
Extract public SofaScore live events, teams, players, standings, event statistics, lineups, odds, incidents, and head-to-head data as structured JSON.
Endpoint families
6
Documented params
310
Examples
109
Live catalog snapshot
Active endpoints
109
Methods
GET
Required params
267
Schema refs
109
{
"platform": "SofaScore",
"endpoint": "sofascore-search",
"method": "GET",
"path": "/sofascore/search",
"auth": "apiKey"
}Use cases
Extract public SofaScore live events, teams, players, standings, event statistics, lineups, odds, incidents, and head-to-head data as structured JSON.
Use SofaScore endpoints to turn live event monitoring into repeatable API requests with documented inputs and JSON responses.
Use SofaScore endpoints to turn team and player enrichment into repeatable API requests with documented inputs and JSON responses.
Use SofaScore endpoints to turn sports analytics into repeatable API requests with documented inputs and JSON responses.
Managed execution
Every figure below is read from the live SofaScore endpoint catalog — 109 endpoints, 310 documented request parameters, and 109 published response schemas — the same catalog Docs and Playground run against.
109 documented SofaScore endpoints, grouped into 109 request families — Categories, Category Tournaments and Draft, plus 106 more.
310 request parameters are documented across those SofaScore endpoints, 267 of them required — the full input contract is public before you write any integration code.
109 of the 109 SofaScore endpoints ship a recorded example response, and 109 carry a documented response schema — you can code against the real JSON before the first request.
SofaScore endpoints document their error responses (400, 404, 429 and 503) alongside the success schema, so a block, a rate limit, or a missing record comes back as a typed error rather than silently empty data.
109 hosted MCP tools back the SofaScore endpoints, so an agent can call the same routes with the same parameters and the same JSON contract, with no custom glue.
Coverage map
/sofascore/categories
/sofascore/category-tournaments
/sofascore/draft
/sofascore/draft-picks
/sofascore/esports-game
/sofascore/event
Featured endpoints
/sofascore/searchSearches SofaScore for teams, players, and competitions matching a free-text query. An empty `results` list is a valid response when nothing matches.
Response notes
- An empty `results` array is a valid response when nothing matches the query (not an error). - Each result carries a `type` (e.g. `team`, `player`, `uniqueTournament`); player results also carry `team_id`/`team_name` for their current club. - A missing `q` value returns an invalid-parameter error before upstream IO.
Sampled 14 Oct 2026: 20 items, 5 fields filled in every item, 3 not. type: player (17), team (3); name: “FC Barcelona” and 19 other values.
MCP tool sofascore_search
/sofascore/live-eventsReturns currently live events for a sport. The `sport` enum accepts `american-football`, `aussie-rules`, `badminton`, `bandy`, `baseball`, `basketball`, `beach-volley`, `cricket`, `darts`, `esports`, `floorball`, `football`, `futsal`, `handball`, `ice-hockey`, `mma`, `minifootball`, `padel`, `rugby`, `snooker`, `table-tennis`, `tennis`, `volleyball`, and `waterpolo`; the sports endpoint lists them. An empty `events` list is a valid response when nothing is live right now.
Response notes
- An empty `events` array is a valid response when nothing is live right now (not an error). - Invalid `sport` values return an invalid-parameter error before upstream IO.
Sampled 14 Oct 2026: 87 items, 10 fields filled in every item. start_timestamp: 2026-10-13; start_time: 2026-10-13.
MCP tool sofascore_live_events
/sofascore/eventReturns one SofaScore match by event id: home and away teams and scores, status, start time, tournament, attendance and winner code, plus venue and referee when SofaScore has them. An unknown or malformed id surfaces as an upstream error.
Response notes
- `venue` and `referee` are omitted when SofaScore has no data for them (e.g. neutral/unconfirmed venues). - An unknown or malformed id surfaces as an upstream error (SofaScore returns 404 for a missing event).
Sampled 14 Oct 2026: 14 of 14 fields returned with a value. event.start_timestamp: 2025-08-15; event.attendance: 60,315.
MCP tool sofascore_event
/sofascore/event-statisticsReturns one match's statistics (possession, shots, passes, and more, grouped and split by period). Returns 404 when SofaScore has no tracked statistics for the match.
Response notes
- Successful responses are cached for 10 minutes by default. - A genuine not-found response is cached for 30 minutes by default. Repeating the same request during that window returns the cached `404`; upstream blocks and other failures are not cached by this policy. - Statistics can appear later for an upcoming or live match. A cached absence can delay their visibility by up to 30 minutes, so avoid immediate retries and recheck after that interval when new coverage is expected. - `404` responses consume the plan’s request-rate allowance but do not consume credits. - Returns `404` when SofaScore has no tracked statistics for the match (common for lower-tier/friendly fixtures). - `periods` groups statistics by period (e.g. `ALL`, `1ST`, `2ND`); each period has named `groups` (e.g. "Match overview", "Shots") of home/away `items`.
Sampled 14 Oct 2026: 3 items, 2 fields filled in every item. period: “ALL” and 2 other values; groups: median 7 entries.
MCP tool sofascore_event_statistics
/sofascore/event-lineupsReturns one match's starting XI and substitutes per side, with formation. Returns 404 when SofaScore has no lineups for the match. A missing-lineup result may be reused for up to two minutes before checking again.
Response notes
- Returns `404` when SofaScore has no lineups for the match (not yet announced or not tracked). - A missing-lineup result may be reused for up to two minutes. Newly announced lineups can become visible after that window; upstream failures remain retryable. - An upstream `200` with `confirmed=false` and explicit empty player arrays on both sides also returns `404`. Predicted lineups with players remain valid; malformed or confirmed-empty payloads return `503`. - `confirmed` indicates whether the lineup is the official confirmed lineup rather than a predicted one. - `home`/`away` each carry a `formation` (e.g. `4-3-3`) and a `players` list; `substitute` marks bench players.
Sampled 14 Oct 2026: 20 items, 3 fields filled in every item, 1 not. position: M (9), D (6), F (3) and 1 more; jersey_number: 1 to 73, median 11.
MCP tool sofascore_event_lineups
/sofascore/event-incidentsReturns one match's goal, card, substitution, and period timeline from SofaScore. An empty `incidents` list is a valid response before kickoff.
Response notes
- Successful responses are cached for 30 seconds, so repeated calls for the same event id within that window return the cached result rather than re-fetching from SofaScore. Errors are never cached. - An empty `incidents` array is a valid response before kickoff (not an error). - `type` is one of `period`, `goal`, `card`, `substitution`, `injuryTime`, or another SofaScore incident type; fields not relevant to a given type are omitted. - Card incidents carry `card_color` (`yellow` or `red`); substitutions carry `player_in`/`player_out`.
Sampled 14 Oct 2026: 22 items, 2 fields filled in every item, 10 not. type: substitution (9), goal (6), card (3) and 2 more; time: 14 to 90, median 72.
MCP tool sofascore_event_incidents
Related APIs
Media & Streaming
Follow German football from the Bundesliga down to the lowest Kreisklasse. Discover competitions in all 22 federations, then read matchdays, standings, scorers, clubs, teams, and players from the DFB's own amateur-football portal.
Media & Streaming
Browse Sportskeeda's sports and entertainment coverage, community wikis, quizzes, and fan games with the catalog's current slugs and filter limits.
Media & Streaming
Research streaming catalogs, title availability, providers, offers, seasons, episodes, and release changes from JustWatch with normalized JSON.
How to scrape SofaScore
SofaScore publishes no documented API for third parties, so integrations read its public JSON surface. Crawlora's 109 SofaScore endpoints wrap that surface: every call is a GET authenticated with an x-api-key header, and IDs for teams, players, and competitions come from the search endpoint.
Send a free-text query to the SofaScore search endpoint (q=barcelona) and get back matching teams, players, and competitions with their numeric IDs and sport.
Events, statistics, lineups, incidents, odds, and head-to-head take an event id; team, team fixtures, team players, and player take their own id; standings and round fixtures also take season.
Every SofaScore endpoint is a GET with an x-api-key header — no SofaScore login, cookie, or session token is involved.
Poll live events with one of the endpoint's documented sport enum values, then use event IDs for detail. Event statistics successes are cached for 10 minutes by default and genuine not-found results for 30 minutes, so immediate retries do not reveal newly available coverage sooner.
Client libraries
Install the dedicated SofaScore client for your language. Each package covers the SofaScore endpoints on this page and calls Crawlora's hosted API with your API key.
npm install @crawlora-org/sofascorenpmpip install crawlora-sofascorePyPIgo get github.com/Crawlora-org/crawlora-sofascorepkg.go.devgem install crawlora-sofascoreRubyGemsnet.crawlora:crawlora-sofascoreMaven Centralcomposer require crawlora/sofascorePackagistcargo add crawlora-sofascorecrates.ioFAQ
SofaScore publishes no documented API or developer program for third parties, so there is no SofaScore API key to request. Its apps are backed by a credential-free public JSON surface, which is what integrations read. Crawlora is not affiliated with SofaScore — it normalizes that public surface into stable, documented endpoints, and you authenticate with your own Crawlora key in an x-api-key header. The free tier includes 2,000 credits per month with no card, and billing is pay-on-success.
Use the search endpoint. It takes a free-text q parameter and returns matching teams, players, and competitions with their numeric id, slug, sport, and country — those ids are what every other SofaScore endpoint takes. An empty results list is a valid response when nothing matches.
Each response carries the source_url it was collected from, so the mapping is visible in the payload itself — for example the player endpoint reports https://api.sofascore.com/api/v1/player/<id> and search reports https://api.sofascore.com/api/v1/search/all?q=<query>. Responses also carry a fetched_at timestamp so you can tell how fresh a record is.
Yes. The live events endpoint accepts the full documented sport enum; an empty events list is valid when nothing is live. Statistics successes are cached for 10 minutes by default, while a genuine 404 is cached for 30 minutes, counts against the plan's request-rate allowance, and consumes no credits. Lineups return 404 when they are unavailable, including an upstream unconfirmed response with explicit empty player arrays; predicted lineups that contain players remain valid.
Collecting publicly accessible sports data is generally treated differently from accessing private accounts, but it is not unconditional. Collect only public data, respect SofaScore's terms and rate limits, and check redistribution rights before republishing — sports fixtures and odds data can carry separate licensing obligations. This is not legal advice; review your local law before commercial use.