# SofaScore Scraper - Live Scores, Stats, Lineups & Odds (`zen-studio/sofascore-scraper`) Actor

Every SofaScore match for any day, live or by link, across 26 sports: statistics, lineups with ratings, xG shot maps, incidents and every odds market. Plus teams, players and tournaments with squads, transfers, standings and leaderboards. Export JSON, CSV or Excel. No login needed.

- **URL**: https://apify.com/zen-studio/sofascore-scraper.md
- **Developed by:** [Zen Studio](https://apify.com/zen-studio) (community)
- **Categories:** Developer tools, Integrations
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.99 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

[![26 sports. Daily fixtures and live scores.](https://api.apify.com/v2/key-value-stores/pJ7iaZsTFhR3k9tjV/records/sofascore-readme-26-sports-4fe47e35b1b7.png)](https://console.apify.com/actors/Ve99rZEWoDb7nbBBE/input)

From **Zen Studio**, creators of [PrizePicks Player Props](https://apify.com/zen-studio/prizepicks-player-props), [Underdog Player Props](https://apify.com/zen-studio/underdog-player-props), [DraftKings Odds](https://apify.com/zen-studio/draftkings-odds) and [Bet365 Odds](https://apify.com/zen-studio/bet365-real-time-odds): 75,000+ lifetime runs across these four sports actors.

### Follow the sports you need

- **Daily fixtures across 26 sports.** Football, tennis, basketball, cricket, esports, motorsport and more. Pick a day, a date range and your time zone for fixtures and results that fit your schedule.
- **Scores from matches in play.** Get the score, match status and available period scores. Schedule repeat runs with change monitoring to return new or changed matches.
- **Match depth when you need it.** Add statistics, lineups with ratings, xG shot maps, odds and more where SofaScore publishes them. Teams, players and tournaments also support squads, transfers, standings and season data. An additional details charge applies to enriched rows.

Availability varies by sport, competition and match. Some statistics appear only after play starts. The hero's match cards use scores from previous exports.

<a href="https://console.apify.com/actors/Ve99rZEWoDb7nbBBE/input" data-demo-cta="true"><img src="https://api.apify.com/v2/key-value-stores/pJ7iaZsTFhR3k9tjV/records/sofascore-scraper-readme-cta-v1-8db172b66602.png" width="252" height="48" alt="Get SofaScore data"></a>

#### Try today's fixtures

Open the [actor input](https://console.apify.com/actors/Ve99rZEWoDb7nbBBE/input), switch to JSON and paste this example. It requests up to 20 rows total across supported sports. Detail sections are off for this first test, so these fixture rows incur the result charge. Enabling detail sections adds the details charge when data is returned. See [current pricing](https://apify.com/zen-studio/sofascore-scraper/pricing).

```json
{
  "date": "today",
  "sports": [
    "all"
  ],
  "timezone": "Europe/London",
  "maxItems": 20,
  "matchSections": []
}
```

For matches currently in play, replace `"date": "today"` with `"live": true`. Remove `maxItems` for no row limit. Export as JSON, CSV or Excel; JSON retains nested match and player data.

<table>
<tr><td style="padding:10px 14px;background:#374DF5;border:none;border-radius:4px 4px 0 0"><span style="color:#FFFFFF;font-size:14px;font-weight:700;letter-spacing:0.5px">Zen Studio Sports Data</span><span style="color:#EAF0FF;font-size:13px">&nbsp;&nbsp;&bull;&nbsp;&nbsp;Scores, stats and odds from the sites fans use</span></td></tr>
<tr><td style="padding:6px;border:1px solid #D8E4FF;border-top:none;border-radius:0 0 4px 4px;background:#EAF0FF">
<span style="display:inline-block;vertical-align:top;margin:4px;padding:8px 12px;border:1px solid #D8E4FF;border-radius:4px;background:#D8E4FF"><span style="white-space:nowrap"><img src="https://api.apify.com/v2/key-value-stores/pJ7iaZsTFhR3k9tjV/records/sofascore-scraper-readme-nav-icon-v1-9675d99f0098.png" width="20" height="20" alt="" style="vertical-align:middle">&nbsp;&nbsp;<a href="https://apify.com/zen-studio/sofascore-scraper" style="color:#2433B8;text-decoration:none;font-weight:700;font-size:13px">SofaScore Scraper</a></span><br><span style="color:#2433B8;font-size:12px;font-weight:600">&#10148; You are here</span></span>
<span style="display:inline-block;vertical-align:top;margin:4px;padding:8px 12px;border:1px solid #D8E4FF;border-radius:4px;background:#EAF0FF"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-V6kpzFq0uj3tyobvM-VF7ryKjCXg-flashscore-tennis-api-logo.png" width="20" height="20" alt="" style="vertical-align:middle">&nbsp;&nbsp;<a href="https://apify.com/zen-studio/flashscore-tennis-api" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Flashscore Tennis</a></span><br><span style="color:#57534E;font-size:12px">ATP, WTA live and history</span></span>
<span style="display:inline-block;vertical-align:top;margin:4px;padding:8px 12px;border:1px solid #D8E4FF;border-radius:4px;background:#EAF0FF"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-KhQrxB1NlVTWdsggg-aMGqlNypR0-bet365-icon_lc6m4t.png" width="20" height="20" alt="" style="vertical-align:middle">&nbsp;&nbsp;<a href="https://apify.com/zen-studio/bet365-sports-data" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Bet365 Sports Data</a></span><br><span style="color:#57534E;font-size:12px">Scores, fixtures, stats, odds</span></span>
<span style="display:inline-block;vertical-align:top;margin:4px;padding:8px 12px;border:1px solid #D8E4FF;border-radius:4px;background:#EAF0FF"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-aSaCGC6CeIt8UFbft-ecvNy7YBDA-tennis-abstract-icon.png" width="20" height="20" alt="" style="vertical-align:middle">&nbsp;&nbsp;<a href="https://apify.com/zen-studio/tennis-abstract-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Tennis Abstract</a></span><br><span style="color:#57534E;font-size:12px">Match history, Elo</span></span>
</td></tr>
</table>

#### Copy to your AI assistant

```text
zen-studio/sofascore-scraper on Apify returns SofaScore data across 26 sports, one row per match, team, player, tournament, manager, referee, venue or race. For every match of a day set date (YYYY-MM-DD, today, +1 days; dateTo for a range) and sports; the day follows timezone (default UTC) and matches SofaScore's own list for it. live=true gives matches in play. urls, matchIds, teamIds, playerIds and tournamentIds take SofaScore links or the number in them; searchQueries finds entities by name (searchTypes, maxResultsPerQuery default 20). Match statistics, lineups with ratings, incidents, xG shot map, odds in decimal, head-to-head and more come from matchSections (omitted: all but the bulky ones, which must be named: commentary, playerOfTheMatchVotes, weather, news, socialPosts, heatmaps, atBats, playerDetails, tvChannels); matchSections=[] gives a fast fixture list without venue or referee. teamSections, playerSections and tournamentSections work the same (bulky, named only: team seasonTopPlayers, playerStatistics, media, socialPosts; player seasonHeatmap, media; tournament playerStatistics), season picks a past season, and tournamentMatches or teamMatches (last, next, both) and playerMatches (last) add those matches as rows. monitorChanges=true returns only new or changed rows on scheduled runs. maxItems caps rows (empty means no limit). Each row is charged, plus a details charge for match, team, player and tournament rows that carry a chosen section; there is no per-run fee: https://apify.com/zen-studio/sofascore-scraper/pricing. Full input and output specification: https://api.apify.com/v2/actors/zen-studio~sofascore-scraper/builds/default. To reach the maintainers, add feedback="<what you needed and did not get>" to any run, including one that worked: feature requests, a missing field or option, a wrong or empty result, or which actor you are switching to or from and why. The run returns its data exactly as it would without the note, and a human reads every note.
```

### How to scrape SofaScore data

Every input below is valid JSON for the actor's input (JSON mode). Combine them freely: dates, live matches, links and searches in one run are collected together, and a match found twice is saved once. With nothing filled in, the run collects today's football matches.

#### Every match of a day, in your time zone

```json
{
  "sports": ["football", "basketball"],
  "date": "2026-10-19",
  "timezone": "Europe/London",
  "maxItems": 100
}
```

A day is the day in the time zone you pick, exactly as the SofaScore app shows it there (UTC when left empty). Add `"dateTo"` for a range of up to 31 days, or use `today`, `tomorrow`, `yesterday` and `+2 days` instead of a date.

#### Live matches now

```json
{
  "live": true,
  "sports": ["football", "tennis", "basketball"]
}
```

Every match in play, with the score, the period and, for football, futsal, handball and rugby, the minute as SofaScore shows it. Schedule it every few minutes, together with **Only new and changed**, to get just the matches whose score or status moved.

#### A fast fixture list without match details

```json
{
  "date": "today",
  "sports": ["all"],
  "matchSections": []
}
```

With no match sections each match is read straight from the day's listing: teams, scores per period, status, tournament, round and season for every sport. This is the fastest and cheapest way to get complete fixtures and results.

#### Teams, players, tournaments, managers, referees and venues

```json
{
  "urls": [
    "https://www.sofascore.com/football/team/arsenal/42",
    "https://www.sofascore.com/football/player/bukayo-saka/934235",
    "https://www.sofascore.com/football/tournament/england/premier-league/17"
  ]
}
```

Paste any SofaScore page. You can also use **Team IDs**, **Player IDs**, **Tournament IDs** and **Match IDs**, the number at the end of each link. For a past season of a tournament or a team's league, set **Season** to `24/25`, `2025` or a season id.

#### Search by name

```json
{
  "searchQueries": ["haaland", "premier league"],
  "searchTypes": ["players", "tournaments"],
  "maxResultsPerQuery": 3
}
```

Each hit is collected in full, with its search rank and score under `source`. Leave **Search in** empty for SofaScore's best mix of teams, players, tournaments, matches, managers, referees and venues.

#### A whole season's matches, with every section

```json
{
  "tournamentIds": ["17"],
  "tournamentMatches": "last",
  "maxItems": 200
}
```

`last` collects the season's played matches, `next` the fixtures to come, `both` all of them. The same works for a team's matches (**Team matches**). **Player matches** takes `last`, a player's played matches.

#### How many matches a day holds, per country

```json
{
  "date": "today",
  "sports": ["football"],
  "fixturesOverviewOnly": true
}
```

One result per country or competition group with its number of matches, matches with video and matches with player statistics, in your time zone. Use it to see a day's size before collecting it.

### Input parameters

| Parameter | Type | Default | What it does |
|---|---|---|---|
| `sports` | list | football | Sports for dates and live matches. `all` for all 26. |
| `date` / `dateTo` | text | today when nothing else is given | A day or a range of up to 31 days. |
| `timezone` | text | UTC | Which day a match belongs to. Any IANA name such as `America/New_York`. |
| `live` | true/false | false | Every match in play now. |
| `maxItems` | number | no limit | Stop after this many results across the whole run. |
| `urls` | list | | SofaScore links of any kind, up to 1,000. |
| `matchIds`, `teamIds`, `playerIds`, `tournamentIds` | list | | Numbers from SofaScore links, up to 1,000 each. |
| `searchQueries` | list | | Names to search for. |
| `searchTypes` | list | all kinds | teams, players, tournaments, matches, managers, referees, venues. |
| `maxResultsPerQuery` | number | 20 | Hits per search and kind, best first. |
| `matchSections` | list | all but the bulky sections below | Parts of each match to include. Empty list: fixture list only. |
| `fixturesOverviewOnly` | true/false | false | One result per country with match counts instead of the matches. |
| `teamSections`, `playerSections`, `tournamentSections` | list | all but the bulky sections below | Parts of each team, player and tournament to include. |
| `season` | text | current | Season for tournament, team and player season sections. |
| `tournamentMatches`, `teamMatches` | none, last, next, both | none | Also collect those matches as results. |
| `playerMatches` | none, last | none | Also collect a player's played matches. |
| `monitorChanges` | true/false | false | Return only results that are new or changed since the last run with the same input. |
| `monitorKey` | text | | Share one change history across inputs. |
| `includeUnchanged` | true/false | false | With monitoring on, also return unchanged results. |
| `includeTranslations` | true/false | false | Keep the Arabic, Bengali, Hindi and Russian spellings of names. |

Inputs saved for other SofaScore actors also run here: `mode: "live"`, `sport`, `dateFrom`, `daysAhead`, `eventIds`, `searchQuery`, `teamId`, `playerId`, `uniqueTournamentId`, and `includeStatistics: false` (and its siblings) to leave a section out.

### What data can you extract from SofaScore?

Every result has a `type`, its SofaScore `id` and `url`, readable flat fields for filtering and sorting, the sections you chose in SofaScore's own structure, `source` (how it was found) and `raw`, SofaScore's complete original record. Codes come with a readable label next to them: `winner` next to `winnerCode`, `positionName` next to `position` (in lineups too), `typeName` next to transfer and ranking types, decimal odds next to fractional odds, named strengths and weaknesses for footballers. Anything SofaScore does not have for a result is `null`.

| Result `type` | What it holds |
|---|---|
| `match` | Teams with ids, logos and countries; score now, at half-time, after normal time, extra time, penalties and on aggregate, plus every period, set and tie-break; status and live minute; tournament, round and season; venue with city, capacity and coordinates; referee; attendance; date and start time. |
| `team` | Names and codes, country, colours, founding date, manager, venue, competitions, ranking. |
| `player` | Position with its name and detailed positions, shirt number, height, preferred foot, nationality, date of birth and age, market value, contract end, team and league. |
| `tournament` | Category and country, level, title holder and record winners, season dates, current round, colours. |
| `manager`, `referee`, `venue` | Profile, career or card record, and city, capacity and coordinates. |
| `race` | Motorsport and cycling: race weekend or stage, series, circuit, dates, status, winner, results, team results and every session with its results. |
| `category` | With **Day overview only**: matches, videos and player-statistics matches per country for the day. |

#### Match sections

| Section | What you get | When SofaScore has it |
|---|---|---|
| Details | Venue, referee, attendance and the full match record | Every match |
| Statistics | Possession, shots, expected goals (xG), big chances, passes, duels, saves, distance covered and more, for the match and each period | Most top leagues, many others |
| Lineups | Both teams' starters and substitutes, formation, shirt numbers, positions, SofaScore ratings and every player's match statistics, missing players with the reason; predicted lineups before kick-off (`lineupsConfirmed: false`) | Where SofaScore covers lineups |
| Incidents | Goals with scorer and assist, cards, substitutions, VAR decisions, added time, period scores | Played matches |
| Shot map | Every shot with player, minute, situation, body part, result, position, xG and xG on target | Matches with player statistics |
| Odds | Every market (full time, double chance, both teams to score, totals, handicaps, corners, cards and more) with every choice in fractional and decimal odds, the opening price and whether it won; the featured markets; winning odds with expected against actual win rate; how the main market's odds moved before kick-off | Matches with odds |
| Head-to-head | The teams' and the managers' record, every past meeting with score and link, both teams' league positions and how often they met this season | Every match |
| Votes, form, managers | Fan votes, last five results with table position and rating, both managers | Most matches |
| Best players | Best players per team and the player of the match with rating | Matches with player statistics |
| Momentum | Attack momentum minute by minute | Matches with player statistics, and others where SofaScore draws it |
| Team streaks | Current streaks of both teams and in their meetings, with odds for the streak markets | Most matches |
| Highlights, average positions, predictions | Video links, average player positions, SofaScore's predictions and how they turned out | Top matches |
| Commentary, player of the match vote, weather | Text commentary, the fans' vote, weather at the venue (off by default) | Top matches |
| Point by point, tennis momentum | Every point of every game with server and score; momentum per game | Tennis and padel |
| Innings, esports games, playoff series | Batting and bowling innings; games and maps; the series a playoff match belongs to | Cricket and baseball; esports; playoff sports |
| News, social posts, team heatmaps, TV channels | News articles about the match; the clubs' social media posts; where each team touched the ball; TV channels showing it in about 140 countries (off by default) | Top matches; TV for upcoming matches |
| At-bats | Every at-bat with pitcher, hitter, inning, outcome and win probability, and every pitch in it with type, speed, zone, location and count (off by default: about 70 more reads and up to 1 MB per game) | Baseball |
| Player details | Every player who played, with heatmap and action map: passes, dribbles, defensive actions and ball carries with pitch positions (off by default) | Matches with player statistics |

#### Bulky sections, off until you pick them

Some sections are large or slow, so a default run leaves them out and a run that wants them names them. Nothing is left out of SofaScore's data: pick the section and it is there.

| Section | Why it is off by default |
|---|---|
| Match: commentary, player of the match vote, weather, news, social posts, team heatmaps, TV channels | Large or rarely filled outside top matches |
| Match: at-bats | About 70 more reads and up to 1 MB per baseball game |
| Match: player details | About 50 more reads per match, one set per player who played; plan on several times the run time |
| Team: own season top players, every squad player's season statistics, videos, social posts | Up to 90 KB per team |
| Player: season heatmap, videos | Up to 40 KB per player |
| Tournament: full player statistics table | Every player of the league with about 80 statistics each, around 1 MB for the Premier League |

The details charge is the same whichever sections you pick.

Team sections: squad with staff and depth chart, transfers in and out with fees and transfer type, trophies, rankings, recent form, previous and next match, competitions, the league table, season statistics with the team's league rank in each leaderboard statistic and when its goals fall, featured players, last and next matches, best Grand Slam results for tennis players, plus when chosen the team's season top players, every squad player's season statistics, videos and social posts. Player sections: attribute ratings, strengths and weaknesses, transfer history with type, national team record, career statistics by season, this season's statistics overall, home and away, every match rating this season, the last 12 months of ratings, penalty history and last matches, plus the season heatmap and videos when chosen. Tournament sections: all seasons, season facts, total, home and away tables, rounds, knockout brackets, groups, player and team leaderboards for every statistic, the best single-match performances, team of the week, team and player of the season, draft, most followed players, past winners, venues, teams, featured matches, video highlights, last and next matches, plus the full player statistics table when chosen. Managers and referees come with their last and next matches. Matches listed inside other results carry competition, season, round, teams, score by period and status; collect them as results of their own (**Team matches**, **Tournament matches**, **Player matches**) for every section.

#### Example match

A real row for Leeds United 1-1 Manchester United, collected with every match section turned on and shown as an excerpt: every flat field plus the statistics, incidents, shot map and odds sections, each list cut to its first entry. The row also carries lineups, featured and winning odds, odds movement, head-to-head, past meetings and league positions, votes, form, managers, best players, momentum, team streaks with their odds, highlights, average positions, predictions and `raw`; with the bulky sections picked it adds news, social posts, team heatmaps, every player's heatmap and action map and TV channels. One full row of every type, with lists cut to five entries, is in this [sample file](https://api.apify.com/v2/key-value-stores/pJ7iaZsTFhR3k9tjV/records/sofascore-scraper-sample-rows-v3-1897ece6b52f.json).

```json
{
  "type": "match",
  "id": 16363886,
  "name": "Leeds United - Manchester United",
  "url": "https://www.sofascore.com/football/match/manchester-united-leeds-united/JsK#id:16363886",
  "slug": "manchester-united-leeds-united",
  "customId": "JsK",
  "sport": "football",
  "sportName": "Football",
  "date": "2026-10-18",
  "startTimestamp": 1792328400,
  "startTime": "2026-10-18T13:00:00Z",
  "statusCode": 100,
  "statusType": "finished",
  "statusDescription": "Ended",
  "currentPeriod": null,
  "liveMinute": null,
  "liveMinuteText": null,
  "winnerCode": 3,
  "winner": "draw",
  "category": "England",
  "categoryId": 1,
  "country": "England",
  "countryCode": "EN",
  "tournament": "Premier League",
  "tournamentId": 1,
  "tournamentSlug": "premier-league",
  "uniqueTournament": "Premier League",
  "uniqueTournamentId": 17,
  "gender": "M",
  "season": "Premier League 26/27",
  "seasonYear": "26/27",
  "seasonId": 96668,
  "round": 7,
  "roundName": null,
  "roundSlug": null,
  "cupRoundType": null,
  "homeTeam": "Leeds United",
  "homeTeamId": 34,
  "homeTeamSlug": "leeds-united",
  "homeTeamShortName": "Leeds",
  "homeTeamNameCode": "LEE",
  "homeTeamCountry": "England",
  "homeTeamCountryCode": "EN",
  "homeTeamRanking": null,
  "homeTeamLogo": "https://img.sofascore.com/api/v1/team/34/image",
  "homeTeamUrl": "https://www.sofascore.com/football/team/leeds-united/34",
  "awayTeam": "Manchester United",
  "awayTeamId": 35,
  "awayTeamSlug": "manchester-united",
  "awayTeamShortName": "Man Utd",
  "awayTeamNameCode": "MUN",
  "awayTeamCountry": "England",
  "awayTeamCountryCode": "EN",
  "awayTeamRanking": null,
  "awayTeamLogo": "https://img.sofascore.com/api/v1/team/35/image",
  "awayTeamUrl": "https://www.sofascore.com/football/team/manchester-united/35",
  "homeScore": 1,
  "homeScoreHalftime": 0,
  "homeScoreNormaltime": 1,
  "homeScoreOvertime": null,
  "homeScorePenalties": null,
  "homeScoreAggregated": null,
  "homeScorePeriods": {
    "period1": 0,
    "period2": 1
  },
  "awayScore": 1,
  "awayScoreHalftime": 1,
  "awayScoreNormaltime": 1,
  "awayScoreOvertime": null,
  "awayScorePenalties": null,
  "awayScoreAggregated": null,
  "awayScorePeriods": {
    "period1": 1,
    "period2": 0
  },
  "venue": "Elland Road",
  "venueId": 2223,
  "venueCity": "Leeds",
  "venueCountry": "England",
  "venueCountryCode": "EN",
  "venueCapacity": 37890,
  "venueLatitude": 53.775644,
  "venueLongitude": -1.575748,
  "referee": "Darren England",
  "refereeId": 74774,
  "refereeCountry": "England",
  "attendance": 36983,
  "hasXg": true,
  "isAwarded": null,
  "homeFormation": "3-4-2-1",
  "awayFormation": "4-2-3-1",
  "lineupsConfirmed": true,
  "homeManager": "Daniel Farke",
  "homeManagerId": 265307,
  "awayManager": "Michael Carrick",
  "awayManagerId": 796626,
  "pregameFormLabel": "Pts",
  "homePregameForm": [
    "D",
    "D",
    "W",
    "D",
    "L"
  ],
  "homePregamePosition": 8,
  "homePregameValue": "9",
  "homePregameAverageRating": "7.38",
  "awayPregameForm": [
    "W",
    "D",
    "L",
    "D",
    "D"
  ],
  "awayPregamePosition": 14,
  "awayPregameValue": "6",
  "awayPregameAverageRating": "7.23",
  "headToHeadHomeWins": 1,
  "headToHeadAwayWins": 5,
  "headToHeadDraws": 4,
  "managerHeadToHeadHomeWins": 5,
  "managerHeadToHeadAwayWins": 1,
  "managerHeadToHeadDraws": 1,
  "playerOfTheMatch": "Youri Tielemans",
  "playerOfTheMatchId": 331737,
  "playerOfTheMatchRating": "7.5",
  "playerOfTheMatchTeam": "Manchester United",
  "playerOfTheMatchTeamId": 35,
  "statistics": [
    {
      "period": "ALL",
      "groups": [
        {
          "groupName": "Match overview",
          "statisticsItems": [
            {
              "name": "Ball possession",
              "home": "61%",
              "away": "39%",
              "compareCode": 1,
              "statisticsType": "positive",
              "valueType": "event",
              "homeValue": 61,
              "awayValue": 39,
              "renderType": 2,
              "key": "ballPossession"
            }
          ]
        }
      ]
    }
  ],
  "incidents": [
    {
      "text": "FT",
      "homeScore": 1,
      "awayScore": 1,
      "isLive": false,
      "time": 90,
      "addedTime": 999,
      "timeSeconds": 5400,
      "incidentType": "period",
      "reversedPeriodTime": 1,
      "reversedPeriodTimeSeconds": 0,
      "periodTimeSeconds": 2700
    }
  ],
  "shotmap": [
    {
      "player": {
        "name": "Matheus Cunha",
        "firstName": "Matheus",
        "lastName": "Cunha",
        "slug": "matheus-cunha",
        "shortName": "M. Cunha",
        "position": "F",
        "jerseyNumber": "10",
        "userCount": 89671,
        "gender": "M",
        "sofascoreId": "iga-nxe",
        "id": 886363
      },
      "isHome": false,
      "shotType": "block",
      "situation": "assisted",
      "playerCoordinates": {
        "x": 24.8,
        "y": 66.4,
        "z": 0
      },
      "bodyPart": "right-foot",
      "goalMouthLocation": "low-centre",
      "goalMouthCoordinates": {
        "x": 0,
        "y": 50.4,
        "z": 19
      },
      "blockCoordinates": {
        "x": 22.8,
        "y": 65.1,
        "z": 0
      },
      "xg": 0.018564365804195,
      "xgot": 0,
      "goalkeeper": {
        "name": "James Trafford",
        "firstName": "James",
        "lastName": "Trafford",
        "slug": "james-trafford",
        "shortName": "J. Trafford",
        "position": "G",
        "jerseyNumber": "1",
        "userCount": 19972,
        "gender": "M",
        "sofascoreId": "jvv-wqy",
        "id": 980643
      },
      "id": 9073249,
      "time": 90,
      "addedTime": 4,
      "timeSeconds": 5618,
      "draw": {
        "start": {
          "x": 66.4,
          "y": 24.8
        },
        "block": {
          "x": 65.1,
          "y": 22.8
        },
        "end": {
          "x": 49.6,
          "y": 0
        },
        "goal": {
          "x": 49.6,
          "y": 81
        }
      },
      "incidentType": "shot",
      "reversedPeriodTime": 1,
      "reversedPeriodTimeSeconds": 682,
      "periodTimeSeconds": 218
    }
  ],
  "odds": [
    {
      "sourceId": 201535817,
      "structureType": 1,
      "marketId": 1,
      "marketName": "Full time",
      "isLive": false,
      "fid": 201535817,
      "suspended": false,
      "id": 436464915,
      "marketGroup": "1X2",
      "marketPeriod": "Full-time",
      "choices": [
        {
          "initialFractionalValue": "19/10",
          "fractionalValue": "3/2",
          "sourceId": 32263620,
          "name": "1",
          "winning": false,
          "change": -1,
          "decimalValue": 2.5,
          "initialDecimalValue": 2.9
        }
      ]
    }
  ],
  "weather": null,
  "source": {
    "kind": "link"
  }
}
```

#### Example player

The flat fields of a player row; its sections are in the [sample file](https://api.apify.com/v2/key-value-stores/pJ7iaZsTFhR3k9tjV/records/sofascore-scraper-sample-rows-v3-1897ece6b52f.json).

```json
{
  "type": "player",
  "id": 934235,
  "name": "Bukayo Saka",
  "firstName": "Bukayo",
  "lastName": "Saka",
  "slug": "bukayo-saka",
  "shortName": "B. Saka",
  "sofascoreId": "iw8-xrp",
  "gender": "M",
  "sport": "football",
  "sportName": "Football",
  "position": "F",
  "positionName": "Forward",
  "positions": [
    "RW"
  ],
  "positionNames": [
    "Right winger"
  ],
  "jerseyNumber": "7",
  "shirtNumber": 7,
  "height": 178,
  "preferredFoot": "Left",
  "country": "England",
  "countryCode": "EN",
  "nationality": "England",
  "dateOfBirthTimestamp": 999648000,
  "dateOfBirth": "2001-09-05",
  "age": 25,
  "marketValue": 115000000,
  "marketValueCurrency": "EUR",
  "contractUntilTimestamp": 1909008000,
  "contractUntil": "2030-06-30",
  "retired": null,
  "deceased": false,
  "underage": false,
  "team": "Arsenal",
  "teamId": 42,
  "teamSlug": "arsenal",
  "teamUrl": "https://www.sofascore.com/football/team/arsenal/42",
  "tournament": "Premier League",
  "tournamentId": 1,
  "uniqueTournament": "Premier League",
  "uniqueTournamentId": 17,
  "userCount": 170917,
  "photo": "https://img.sofascore.com/api/v1/player/934235/image",
  "url": "https://www.sofascore.com/football/player/bukayo-saka/934235",
  "strengths": [
    "Penalty taking",
    "High pressing",
    "Positioning"
  ],
  "weaknesses": null
}
```

#### Example day overview line

```json
{
  "type": "category",
  "date": "2026-10-19",
  "sport": "football",
  "category": "England",
  "categoryId": 1,
  "categorySlug": "england",
  "country": null,
  "countryCode": "EN",
  "matchCount": 7,
  "videoCount": 7,
  "playerStatisticsCount": 1,
  "uniqueTournamentIds": [
    17,
    25492
  ],
  "url": "https://www.sofascore.com/football/2026-10-19"
}
```

#### Export and nested data

Download results as JSON, CSV, Excel, XML or HTML from the **Storage** tab, or read them from your own code with the Apify client for Python or JavaScript. JSON keeps every section intact. In CSV and Excel each nested section is spread over many columns, so use **Match sections** to keep only what you need there, or pick the **Matches**, **Teams**, **Players**, **Tournaments** or **Day overview** view for a compact table.

### Pricing

You pay for results, never for a run that finds nothing:

| Event | When it is charged | Price per 1,000 |
|---|---|---|
| Result | Each result saved: a match, team, player, tournament, manager, referee, venue, race or day overview line | $1.99 |
| Details | Each result that includes at least one section you chose (statistics, lineups, odds, squad, standings and so on) | $0.79 |

These are Free plan prices. Bronze pays $1.59 and $0.69, Silver $1.29 and $0.59, Gold and above $0.99 and $0.49. There is no fee per run.

For example, 1,000 football matches with the default sections cost $2.78 on the Free plan ($1.99 + $0.79). The same 1,000 matches as a plain fixture list, with **Match sections** empty, cost $1.99. Set **Result limit** or a maximum cost per run in the run options to cap any run.

### FAQ

**Do I need a SofaScore account, a key or a login?** No. Nothing to register and nothing to paste: run it with an Apify account.

**How do I export SofaScore data to Excel or CSV?** Run it, open the **Storage** tab and download Excel or CSV. For a tidy table pick one of the views (Matches, Teams, Players, Tournaments) before downloading.

**Can I get xG and shot maps?** Yes. Match statistics carry expected goals for both teams, and the shot map lists every shot with its xG and xG on target. Both exist where SofaScore tracks player statistics, mainly the bigger football leagues.

**Can I get player ratings?** Yes, three ways: each player's rating and match statistics inside the match lineups, every match rating of the season in the player's **Match ratings this season** section, and the league's rating leaderboard in the tournament's **Player leaderboards**.

**Are predicted lineups included before kick-off?** Yes, when SofaScore shows them. `lineupsConfirmed` is `false` until the teams are confirmed.

**Which odds are included, and are they decimal?** Every market SofaScore shows for the match from its default bookmaker, with fractional and decimal odds, opening prices, whether each choice won, and winning odds.

**How do I get live scores every few minutes?** Turn on **Live matches now**, pick your sports and schedule the actor in the **Schedules** tab, for example every 5 minutes. Add **Only new and changed** to receive just the matches that moved.

**Why does a date give a different number of matches than another tool?** A day depends on the time zone. This actor returns exactly the matches SofaScore lists for that day in your time zone, nothing from neighbouring days. Our measured day had 722 football matches; tools that fetch per competition or mix in other days report other numbers.

**Which sports are covered?** Football, basketball, tennis, ice hockey, American football, baseball, handball, volleyball, rugby, cricket, table tennis, badminton, futsal, esports, darts, snooker, water polo, mini football, padel, Aussie rules, beach volleyball, floorball, bandy, MMA, and races in motorsport and cycling.

**Can I use it from Python?** Yes. Call it with the Apify Python client (`pip install apify-client`), pass the same input as JSON and read the dataset items. It also works with Make, Zapier, n8n and AI agents through Apify's MCP server.

**How fresh is the data?** Each run reads SofaScore at that moment, so scores, odds and lineups are as current as SofaScore itself.

**What happens if part of a match cannot be read?** The match is still saved; the section that could not be read is left empty and the run log says so. Running it again usually fills it in.

### More Zen Studio scrapers for sports betting

**🏟️ Sportsbook odds**

- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-Pjlm871yhJCOjQh6I-xTwdMYSjNa-action-network-odds-icon.png" width="16" height="16" alt="Action Network scraper icon" style="vertical-align:middle;border-radius:3px"> **Action Network**
  - [Action Network Odds API](https://apify.com/zen-studio/action-network-odds)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-oLjv3CSV3BhHm5dGN-62o7r64lQq-fanduel-odds-api-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **FanDuel**
  - [FanDuel Odds API](https://apify.com/zen-studio/fanduel-odds)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-W8rOXiLSj8wrgF96k-PQehXxTEV5-draftkings-real-time-api-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **DraftKings**
  - [DraftKings Odds API](https://apify.com/zen-studio/draftkings-odds)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-TjShOnNguT17e9hfQ-ntCswWAqze-betmgm-real-time-api-logo-padded.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **BetMGM**
  - [BetMGM Odds API](https://apify.com/zen-studio/betmgm-odds)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-l6JP3yaLczAdUaiSf-yDHq17ycGp-bet365-icon_lc6m4t.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Bet365**
  - [Bet365 Real-Time Odds API](https://apify.com/zen-studio/bet365-real-time-odds)
  - [Bet365 Sports Data Scraper](https://apify.com/zen-studio/bet365-sports-data)

**🎯 Daily fantasy & player props**

- <img src="https://api.apify.com/v2/key-value-stores/pJ7iaZsTFhR3k9tjV/records/player-props-aggregator-icon.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Player Props Aggregator**
  - [Player Props Line Shopping](https://apify.com/zen-studio/player-props-aggregator)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-4AmgQeem8dEgMEiRF-VGffbe665M-prizepicks-scraper-logo.jpeg" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **PrizePicks**
  - [PrizePicks Player Props Scraper](https://apify.com/zen-studio/prizepicks-player-props)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-09TtSjF9Uzs5qfvLc-f9HhMKXsLt-underdog-fantasy-picks-api-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Underdog Fantasy**
  - [Underdog Fantasy Player Props API](https://apify.com/zen-studio/underdog-player-props)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-vZGwNIMCrwkjp76uR-6jWYFxsPSD-sleeper-fantasy-api-logo.jpg" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Sleeper**
  - [Sleeper Player Props](https://apify.com/zen-studio/sleeper-player-props)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-otCGHYjTnE0YKgVNJ-iYqrcfxJiq-draftkings-pick6-api-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **DraftKings Pick6**
  - [DraftKings Pick6 Player Props](https://apify.com/zen-studio/draftkings-pick6-player-props)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-l6JP3yaLczAdUaiSf-yDHq17ycGp-bet365-icon_lc6m4t.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Bet365**
  - [Bet365 Player Props API](https://apify.com/zen-studio/bet365-player-props)

**🎾 Live scores & match data**

- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-aSaCGC6CeIt8UFbft-ecvNy7YBDA-tennis-abstract-icon.png" width="16" height="16" alt="Tennis Abstract scraper icon" style="vertical-align:middle;border-radius:3px"> **Tennis Abstract**
  - [Tennis Abstract Scraper](https://apify.com/zen-studio/tennis-abstract-scraper)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-V6kpzFq0uj3tyobvM-VF7ryKjCXg-flashscore-tennis-api-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Flashscore**
  - [Flashscore Tennis Scraper & API](https://apify.com/zen-studio/flashscore-tennis-api)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-PReplR3mQf3tUpbKG-zUBywwwF1K-bet365-icon_lc6m4t.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Bet365**
  - [Bet365 Live Scores API](https://apify.com/zen-studio/bet365-live-scores)

### Support

Found a bug or missing a field? Open an issue in the **Issues** tab.

### Data use

This actor collects data SofaScore shows publicly on its website. You are responsible for how you use it: follow SofaScore's terms and the laws that apply to you, especially before republishing data, logos or photos.

***

*SofaScore data for any day, live or by link: matches with statistics, lineups, xG shot maps and odds, plus teams, players and tournaments across 26 sports.*

# Actor input Schema

## `sports` (type: `array`):

Sports for fixtures by date and live matches. Leave empty for football. Pick <code>All sports</code> for every sport SofaScore covers.

## `date` (type: `string`):

Every match on this day, as SofaScore lists it. Also accepts <code>today</code>, <code>tomorrow</code>, <code>yesterday</code> or <code>+2 days</code>. When nothing else is filled in, today's matches are collected.

## `dateTo` (type: `string`):

Optional last day of a range, up to 31 days. Leave empty for the single date above.

## `timezone` (type: `string`):

Which day a match belongs to, as in the SofaScore app in that time zone. Any IANA name works. Leave empty for UTC.

## `live` (type: `boolean`):

Every match in play right now for the chosen sports, with the live score and minute.

## `maxItems` (type: `integer`):

Stop after this many results across everything in the run. Leave empty for no limit: a busy football day has 700 or more matches.

## `urls` (type: `array`):

Any SofaScore page: a match, team, player, tournament (add <code>#id:</code> and a season id for a past season), manager, referee, venue, race, or a day such as <code>/football/2026-10-19</code>. Up to 1,000 per run.

## `matchIds` (type: `array`):

Match numbers from SofaScore links, one per line (for example <code>16363886</code>). Up to 1,000 per run.

## `teamIds` (type: `array`):

Team numbers from SofaScore links, one per line (for example <code>42</code>). Up to 1,000 per run.

## `playerIds` (type: `array`):

Player numbers from SofaScore links, one per line (for example <code>934235</code>). Up to 1,000 per run.

## `tournamentIds` (type: `array`):

Tournament numbers from SofaScore links, one per line (for example <code>17</code>). Up to 1,000 per run.

## `searchQueries` (type: `array`):

Names to search for, one per line. Up to 1,000 per run.

## `searchTypes` (type: `array`):

Limit a search to these kinds. Leave empty for SofaScore's best mix of all kinds.

## `maxResultsPerQuery` (type: `integer`):

Hits per search and kind, best first. 20 is SofaScore's first page; further down the names become less related.

## `matchSections` (type: `array`):

Parts of each match to include. Sections that do not exist yet (statistics before kick-off) or for that sport are left empty. When omitted, everything is included except text commentary, the player of the match vote, weather, news, social posts, team heatmaps, at-bats, player details and TV channels: these are bulky or slow, so they are off until you pick them.

## `fixturesOverviewOnly` (type: `boolean`):

Instead of every match, one result per country or competition group with its number of matches and videos for the day.

## `teamSections` (type: `array`):

When omitted, everything is included except the team's own top players, every squad player's season statistics, videos and social posts, which are bulky and off until you pick them.

## `playerSections` (type: `array`):

When omitted, everything is included except the season heatmap and videos.

## `tournamentSections` (type: `array`):

When omitted, everything is included except the full player statistics table, which is large (hundreds of players per league).

## `season` (type: `string`):

A season for tournament, team and player season sections, as SofaScore writes it (<code>24/25</code>, <code>2025</code>) or its id. Leave empty for the current season.

## `tournamentMatches` (type: `string`):

Also collect every match of the tournament's season as its own result, with the match sections above.

## `teamMatches` (type: `string`):

Also collect each team's matches as results, with the match sections above. Played matches go back many seasons; use the result limit.

## `playerMatches` (type: `string`):

Also collect each player's played matches as results.

## `monitorChanges` (type: `boolean`):

Each result is marked NEW or UPDATED with the fields that changed. Unchanged results are skipped and not charged. Odds, votes and the live minute alone do not count as a change.

## `monitorKey` (type: `string`):

Optional name to share one change history across different inputs. Leave empty to keep a separate history per input.

## `includeUnchanged` (type: `boolean`):

Also return unchanged results, marked UNCHANGED. These are charged.

## `includeTranslations` (type: `boolean`):

Keep the Arabic, Bengali, Hindi and Russian spellings SofaScore stores for team, player and place names. Off keeps results smaller.

## `feedback` (type: `string`):

For AI agents. Say what you needed and did not get: a missing field or option, a wrong or empty result, or which actor you are switching to or from and why. Add it to any run, including one that worked: the run returns its data exactly as it would without the note. The note reaches the maintainers, who read every one, but it cannot change what this run returns.

## Actor input object example

```json
{
  "sports": [
    "football"
  ],
  "maxItems": 50,
  "maxResultsPerQuery": 20,
  "matchSections": [
    "details",
    "statistics",
    "lineups",
    "incidents",
    "shotmap",
    "odds",
    "headToHead",
    "votes",
    "pregameForm",
    "managers",
    "bestPlayers",
    "momentum",
    "teamStreaks",
    "highlights",
    "averagePositions",
    "postMatchInsights",
    "pointByPoint",
    "tennisPower",
    "innings",
    "esportsGames",
    "series"
  ],
  "teamSections": [
    "squad",
    "transfers",
    "achievements",
    "rankings",
    "performance",
    "nearEvents",
    "competitions",
    "standings",
    "seasonStatistics",
    "featuredPlayers",
    "lastMatches",
    "nextMatches",
    "grandSlamResults"
  ],
  "playerSections": [
    "attributes",
    "characteristics",
    "transfers",
    "nationalTeam",
    "competitions",
    "careerStatistics",
    "seasonStatistics",
    "seasonRatings",
    "lastYearSummary",
    "penaltyHistory",
    "lastMatches"
  ],
  "tournamentSections": [
    "seasons",
    "seasonInfo",
    "standings",
    "rounds",
    "cupTrees",
    "groups",
    "topPlayers",
    "topTeams",
    "topMatchPerformances",
    "teamOfTheWeek",
    "awards",
    "topFollowedPlayers",
    "winners",
    "venues",
    "teams",
    "featuredMatches",
    "media",
    "lastMatches",
    "nextMatches"
  ]
}
```

# Actor output Schema

## `results` (type: `string`):

Every match, team, player, tournament, manager, referee, venue and race this run saved, with all collected sections.

## `summary` (type: `string`):

Results saved by type, and for each date and sport the number of competition groups and matches SofaScore lists, plus each search and live listing with what it found.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "sports": [
        "football"
    ],
    "maxItems": 50,
    "matchSections": [
        "details",
        "statistics",
        "lineups",
        "incidents",
        "shotmap",
        "odds",
        "headToHead",
        "votes",
        "pregameForm",
        "managers",
        "bestPlayers",
        "momentum",
        "teamStreaks",
        "highlights",
        "averagePositions",
        "postMatchInsights",
        "pointByPoint",
        "tennisPower",
        "innings",
        "esportsGames",
        "series"
    ],
    "teamSections": [
        "squad",
        "transfers",
        "achievements",
        "rankings",
        "performance",
        "nearEvents",
        "competitions",
        "standings",
        "seasonStatistics",
        "featuredPlayers",
        "lastMatches",
        "nextMatches",
        "grandSlamResults"
    ],
    "playerSections": [
        "attributes",
        "characteristics",
        "transfers",
        "nationalTeam",
        "competitions",
        "careerStatistics",
        "seasonStatistics",
        "seasonRatings",
        "lastYearSummary",
        "penaltyHistory",
        "lastMatches"
    ],
    "tournamentSections": [
        "seasons",
        "seasonInfo",
        "standings",
        "rounds",
        "cupTrees",
        "groups",
        "topPlayers",
        "topTeams",
        "topMatchPerformances",
        "teamOfTheWeek",
        "awards",
        "topFollowedPlayers",
        "winners",
        "venues",
        "teams",
        "featuredMatches",
        "media",
        "lastMatches",
        "nextMatches"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("zen-studio/sofascore-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "sports": ["football"],
    "maxItems": 50,
    "matchSections": [
        "details",
        "statistics",
        "lineups",
        "incidents",
        "shotmap",
        "odds",
        "headToHead",
        "votes",
        "pregameForm",
        "managers",
        "bestPlayers",
        "momentum",
        "teamStreaks",
        "highlights",
        "averagePositions",
        "postMatchInsights",
        "pointByPoint",
        "tennisPower",
        "innings",
        "esportsGames",
        "series",
    ],
    "teamSections": [
        "squad",
        "transfers",
        "achievements",
        "rankings",
        "performance",
        "nearEvents",
        "competitions",
        "standings",
        "seasonStatistics",
        "featuredPlayers",
        "lastMatches",
        "nextMatches",
        "grandSlamResults",
    ],
    "playerSections": [
        "attributes",
        "characteristics",
        "transfers",
        "nationalTeam",
        "competitions",
        "careerStatistics",
        "seasonStatistics",
        "seasonRatings",
        "lastYearSummary",
        "penaltyHistory",
        "lastMatches",
    ],
    "tournamentSections": [
        "seasons",
        "seasonInfo",
        "standings",
        "rounds",
        "cupTrees",
        "groups",
        "topPlayers",
        "topTeams",
        "topMatchPerformances",
        "teamOfTheWeek",
        "awards",
        "topFollowedPlayers",
        "winners",
        "venues",
        "teams",
        "featuredMatches",
        "media",
        "lastMatches",
        "nextMatches",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("zen-studio/sofascore-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "sports": [
    "football"
  ],
  "maxItems": 50,
  "matchSections": [
    "details",
    "statistics",
    "lineups",
    "incidents",
    "shotmap",
    "odds",
    "headToHead",
    "votes",
    "pregameForm",
    "managers",
    "bestPlayers",
    "momentum",
    "teamStreaks",
    "highlights",
    "averagePositions",
    "postMatchInsights",
    "pointByPoint",
    "tennisPower",
    "innings",
    "esportsGames",
    "series"
  ],
  "teamSections": [
    "squad",
    "transfers",
    "achievements",
    "rankings",
    "performance",
    "nearEvents",
    "competitions",
    "standings",
    "seasonStatistics",
    "featuredPlayers",
    "lastMatches",
    "nextMatches",
    "grandSlamResults"
  ],
  "playerSections": [
    "attributes",
    "characteristics",
    "transfers",
    "nationalTeam",
    "competitions",
    "careerStatistics",
    "seasonStatistics",
    "seasonRatings",
    "lastYearSummary",
    "penaltyHistory",
    "lastMatches"
  ],
  "tournamentSections": [
    "seasons",
    "seasonInfo",
    "standings",
    "rounds",
    "cupTrees",
    "groups",
    "topPlayers",
    "topTeams",
    "topMatchPerformances",
    "teamOfTheWeek",
    "awards",
    "topFollowedPlayers",
    "winners",
    "venues",
    "teams",
    "featuredMatches",
    "media",
    "lastMatches",
    "nextMatches"
  ]
}' |
apify call zen-studio/sofascore-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zen-studio/sofascore-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Ve99rZEWoDb7nbBBE/builds/wWUo5EZl3ZLQZd00O/openapi.json
