Sofascore Scraper avatar

Sofascore Scraper

Pricing

Pay per event

Go to Apify Store
Sofascore Scraper

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

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

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.
  • maxItems limits output and cost.
  • Empty filters return an empty dataset rather than fabricated records.
  • Invalid inputs fail clearly instead of silently changing scope.

Getting started

  1. Open the Actor input.
  2. Choose Events by date or Live events.
  3. Enter a SofaScore sport slug such as football, basketball, or tennis.
  4. For date mode, enter a YYYY-MM-DD date.
  5. Keep Include match statistics enabled when you need detailed metrics.
  6. Set maxItems to your desired result cap.
  7. Run the Actor.
  8. 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

FieldTypeDefaultPurpose
modestringdateDiscover events by date or fetch events live now.
sportstringfootballLowercase SofaScore sport slug.
datestringtodayDate in YYYY-MM-DD format for date mode.
eventIdsstring arrayemptyExact numeric SofaScore event IDs.
eventUrlsstring arrayemptyPublic match URLs containing #id:<event ID>.
includeStatisticsbooleantrueFetch statistics where SofaScore makes them available.
statusstringallKeep all, scheduled, live, or finished events.
teamstringemptyCase-insensitive home/away team substring.
tournamentstringemptyCase-insensitive competition substring.
maxItemsinteger100Save 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

FieldDescription
eventIdStable SofaScore event identifier.
eventUrlPublic match URL reconstructed from source IDs and slugs.
sportSport slug.
startTimeScheduled UTC start time.
statusMachine-readable match state.
statusDescriptionHuman-readable status.
tournamentCompetition ID, name, and slug.
categoryGeographic/category context.
homeTeam, awayTeamTeam IDs, names, and slugs.
scoreCurrent/final and period scores where available.
roundTournament round when available.
venueVenue or stadium when available.
countryCountry or geographic category.
hasStatisticsWhether the run found statistics for this match.
statisticsNormalized period/group/name/home/away values.
sourceModedate, live, or event.
scrapedAtUTC 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 start event per run;
  • one item event 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 eventsEstimated 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

  1. Save a Task with mode: "live".
  2. Select the sport and a practical result cap.
  3. Enable statistics if downstream analysis needs them.
  4. Add an Apify schedule, for example every 10 minutes.
  5. Use eventId as the merge key in your database.
  6. Compare status, score, statistics, and scrapedAt between 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 ApifyClient
client = 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().items
print(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 statistics array.
  • 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.

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.