Sofascore Scraper
Pricing
Pay per event
Sofascore Scraper
Export live and scheduled Sofascore events with teams, tournaments, scores, status, venue, round, and available match statistics for sports analysis.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Export scheduled and live Sofascore events as clean JSON records for sports analysis, dashboards, reporting, and recurring monitoring.
The Actor collects teams, tournament context, scheduled start, match status, current or final score, venue, round, and available match statistics. It supports date-based discovery, live-event discovery, and exact SofaScore event IDs or match URLs.
No SofaScore login or buyer API key is required.
What can you do with this Sofascore scraper?
- Download fixtures for a sport and calendar date.
- Capture matches that are live when a run starts.
- Export one known match by event ID or public URL.
- Add possession, shots, expected goals, passes, cards, and other available statistics.
- Filter discovered records by status, team name, or tournament name.
- Schedule runs and compare datasets to monitor score and status changes.
This Actor returns event records. It does not place bets, predict outcomes, stream video, or modify SofaScore data.
Who is it for?
Sports analysts can build fixture and result tables without manually copying match pages.
Data engineers can schedule a consistent Sofascore data export into a warehouse or spreadsheet.
Publishers and dashboard teams can monitor status and score fields for internal reporting workflows.
Researchers can collect available match-level statistics for descriptive analysis.
Always check the source rights and your intended use before redistributing data.
Why use this Actor?
- Three targeting routes: date, live, and exact event.
- One normalized output shape across sports.
- Statistics are included in the event record at no separate event charge.
- Stable event IDs make snapshots easy to compare.
maxItemslimits output and cost.- Empty filters return an empty dataset rather than fabricated records.
- Invalid inputs fail clearly instead of silently changing scope.
Getting started
- Open the Actor input.
- Choose Events by date or Live events.
- Enter a SofaScore sport slug such as
football,basketball, ortennis. - For date mode, enter a
YYYY-MM-DDdate. - Keep Include match statistics enabled when you need detailed metrics.
- Set
maxItemsto your desired result cap. - Run the Actor.
- Download the dataset as JSON, CSV, Excel, XML, or RSS through Apify.
To target one match, provide eventIds or eventUrls. Exact targets take priority over discovery mode.
Input parameters
| Field | Type | Default | Purpose |
|---|---|---|---|
mode | string | date | Discover events by date or fetch events live now. |
sport | string | football | Lowercase SofaScore sport slug. |
date | string | today | Date in YYYY-MM-DD format for date mode. |
eventIds | string array | empty | Exact numeric SofaScore event IDs. |
eventUrls | string array | empty | Public match URLs containing #id:<event ID>. |
includeStatistics | boolean | true | Fetch statistics where SofaScore makes them available. |
status | string | all | Keep all, scheduled, live, or finished events. |
team | string | empty | Case-insensitive home/away team substring. |
tournament | string | empty | Case-insensitive competition substring. |
maxItems | integer | 100 | Save at most 1–500 matched events. |
Date export input
{"mode": "date","sport": "football","date": "2026-08-11","includeStatistics": false,"maxItems": 25}
Exact match statistics input
{"eventUrls": ["https://www.sofascore.com/football/match/usa-bosnia-and-herzegovina/EObszUb#id:12812992"],"includeStatistics": true,"maxItems": 1}
Output fields
| Field | Description |
|---|---|
eventId | Stable SofaScore event identifier. |
eventUrl | Public match URL reconstructed from source IDs and slugs. |
sport | Sport slug. |
startTime | Scheduled UTC start time. |
status | Machine-readable match state. |
statusDescription | Human-readable status. |
tournament | Competition ID, name, and slug. |
category | Geographic/category context. |
homeTeam, awayTeam | Team IDs, names, and slugs. |
score | Current/final and period scores where available. |
round | Tournament round when available. |
venue | Venue or stadium when available. |
country | Country or geographic category. |
hasStatistics | Whether the run found statistics for this match. |
statistics | Normalized period/group/name/home/away values. |
sourceMode | date, live, or event. |
scrapedAt | UTC extraction timestamp. |
Source fields can be null when SofaScore has not published them.
Output example
This shortened record reflects the Actor's real output shape:
{"eventId": 12812992,"sport": "football","startTime": "2026-07-02T00:00:00.000Z","status": "finished","tournament": { "id": 16, "name": "FIFA World Cup", "slug": "world-championship" },"homeTeam": { "id": 4724, "name": "USA", "slug": "usa" },"awayTeam": { "id": 4479, "name": "Bosnia & Herzegovina", "slug": "bosnia-and-herzegovina" },"score": { "home": 2, "away": 0, "period1Home": 1, "period1Away": 0 },"hasStatistics": true,"statistics": [{ "group": "Match overview", "name": "Ball possession", "home": "48%", "away": "52%", "period": "ALL" }],"sourceMode": "event"}
How much does it cost to export Sofascore events?
The Actor uses pay-per-event pricing:
- one
startevent per run; - one
itemevent for each matched event saved to the dataset; - no separate charge for the statistics included inside that event record.
At the current Bronze tier, the start is $0.005 and each event is $0.001104. Examples:
| Saved events | Estimated Actor charge |
|---|---|
| 1 | $0.006104 |
| 25 | $0.032600 |
| 100 | $0.115400 |
Apify applies the price tier associated with your plan. Infrastructure usage and plan rules are shown in Console before and after each run. Use the result limit to control the maximum saved-item cost.
Scheduling a live score monitor
- Save a Task with
mode: "live". - Select the sport and a practical result cap.
- Enable statistics if downstream analysis needs them.
- Add an Apify schedule, for example every 10 minutes.
- Use
eventIdas the merge key in your database. - Compare
status,score,statistics, andscrapedAtbetween snapshots.
A run is a snapshot, not a persistent stream. Your schedule frequency determines monitoring frequency.
API usage with cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~sofascore-live-events-statistics-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"mode":"live","sport":"football","maxItems":10}'
To wait for results:
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~sofascore-live-events-statistics-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"mode":"date","sport":"football","date":"2026-08-11","maxItems":5}'
JavaScript integration
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/sofascore-live-events-statistics-scraper').call({eventIds: ['12812992'],includeStatistics: true,maxItems: 1,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0]);
Python integration
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("automation-lab/sofascore-live-events-statistics-scraper").call(run_input={"mode": "live", "sport": "basketball", "maxItems": 20})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(items)
MCP and AI-agent use
Add this Actor to Claude Code through Apify MCP:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/sofascore-live-events-statistics-scraper"
Claude Desktop, Cursor, and VS Code setup
Use this same MCP configuration in Claude Desktop, Cursor, or VS Code:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/sofascore-live-events-statistics-scraper"}}}
Example prompts:
- “Export today's football fixtures from Sofascore, limit 30.”
- “Fetch event 12812992 and summarize its available match statistics.”
- “Get the current live basketball event snapshot as JSON.”
Limits and source behavior
- Statistics do not exist for every event.
- Upcoming matches commonly have an empty
statisticsarray. - Live availability changes minute by minute.
- A sport/date combination may naturally return no events.
- SofaScore can add, remove, or rename fields and routes.
- Date discovery may make several lightweight source requests to cover categories.
- The Actor retries transient failures with bounded backoff.
- A persistent access challenge fails the run rather than returning a false empty dataset.
- The Actor does not download images, video, commentary, odds, incidents, or lineups.
Troubleshooting
Why is statistics empty?
The event may be scheduled, too early in live play, or not covered with detailed metrics. Check hasStatistics. Try a completed event known to have a Statistics tab.
Why did a live run return few or zero records?
Live mode is a point-in-time snapshot. The selected sport may have no active matches. Use date mode for fixtures, or run again at a time when the competition is active.
Why did my team filter return nothing?
The filter is a case-insensitive substring over the home and away team names returned by SofaScore. Remove the filter, inspect the canonical spelling, and retry.
Can I submit any URL?
No. eventUrls accepts public sofascore.com match URLs containing an event ID. Other domains and non-event URLs fail validation.
Legality and responsible use
This Actor accesses publicly available sports information. You are responsible for complying with SofaScore's terms, applicable database rights, copyright, privacy law, and the rules governing your downstream use.
Do not use the Actor to overload the source, bypass access controls, misrepresent official data, or make regulated betting decisions without independent verification. Keep schedules and result caps proportionate to your purpose.
FAQ
Is this an official Sofascore API?
No. This is an independent Apify Actor that normalizes public SofaScore data. It is not endorsed by SofaScore.
Does it support multiple sports?
Yes, when SofaScore exposes the sport through its public routes. Use the lowercase sport slug. Football, basketball, tennis, ice hockey, baseball, and cricket are common examples.
Are live updates pushed continuously?
No. Each run produces one snapshot. Use an Apify schedule or API calls for recurring snapshots.
Can I export CSV or Excel?
Yes. Open the default dataset and select the desired Apify export format.
Are statistics charged separately?
No. Available statistics are included in each charged event record.
Does it require a proxy setting?
No buyer proxy input is exposed. The Actor manages its public data route internally.
Related Actors
For a source-independent sports workflow, explore other sports-data Actors from automation-lab on Apify. Choose the source that matches your analysis rather than merging records with incompatible IDs or field definitions.