SofaScore Scraper - Live Scores, Stats, Lineups & Odds avatar

SofaScore Scraper - Live Scores, Stats, Lineups & Odds

Pricing

from $0.99 / 1,000 results

Go to Apify Store
SofaScore Scraper - Live Scores, Stats, Lineups & Odds

SofaScore Scraper - Live Scores, Stats, Lineups & Odds

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.

Pricing

from $0.99 / 1,000 results

Rating

0.0

(0)

Developer

Zen Studio

Zen Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 hours ago

Last modified

Share

26 sports. Daily fixtures and live scores.

From Zen Studio, creators of PrizePicks Player Props, Underdog Player Props, DraftKings Odds and Bet365 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.

Get SofaScore data

Try today's fixtures

Open the actor 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.

{
"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.

Zen Studio Sports Data  •  Scores, stats and odds from the sites fans use
  SofaScore Scraper
➤ You are here
  Flashscore Tennis
ATP, WTA live and history
  Bet365 Sports Data
Scores, fixtures, stats, odds
  Tennis Abstract
Match history, Elo

Copy to your AI assistant

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

{
"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

{
"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

{
"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

{
"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

{
"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

{
"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

{
"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

ParameterTypeDefaultWhat it does
sportslistfootballSports for dates and live matches. all for all 26.
date / dateTotexttoday when nothing else is givenA day or a range of up to 31 days.
timezonetextUTCWhich day a match belongs to. Any IANA name such as America/New_York.
livetrue/falsefalseEvery match in play now.
maxItemsnumberno limitStop after this many results across the whole run.
urlslistSofaScore links of any kind, up to 1,000.
matchIds, teamIds, playerIds, tournamentIdslistNumbers from SofaScore links, up to 1,000 each.
searchQuerieslistNames to search for.
searchTypeslistall kindsteams, players, tournaments, matches, managers, referees, venues.
maxResultsPerQuerynumber20Hits per search and kind, best first.
matchSectionslistall but the bulky sections belowParts of each match to include. Empty list: fixture list only.
fixturesOverviewOnlytrue/falsefalseOne result per country with match counts instead of the matches.
teamSections, playerSections, tournamentSectionslistall but the bulky sections belowParts of each team, player and tournament to include.
seasontextcurrentSeason for tournament, team and player season sections.
tournamentMatches, teamMatchesnone, last, next, bothnoneAlso collect those matches as results.
playerMatchesnone, lastnoneAlso collect a player's played matches.
monitorChangestrue/falsefalseReturn only results that are new or changed since the last run with the same input.
monitorKeytextShare one change history across inputs.
includeUnchangedtrue/falsefalseWith monitoring on, also return unchanged results.
includeTranslationstrue/falsefalseKeep 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 typeWhat it holds
matchTeams 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.
teamNames and codes, country, colours, founding date, manager, venue, competitions, ranking.
playerPosition with its name and detailed positions, shirt number, height, preferred foot, nationality, date of birth and age, market value, contract end, team and league.
tournamentCategory and country, level, title holder and record winners, season dates, current round, colours.
manager, referee, venueProfile, career or card record, and city, capacity and coordinates.
raceMotorsport and cycling: race weekend or stage, series, circuit, dates, status, winner, results, team results and every session with its results.
categoryWith Day overview only: matches, videos and player-statistics matches per country for the day.

Match sections

SectionWhat you getWhen SofaScore has it
DetailsVenue, referee, attendance and the full match recordEvery match
StatisticsPossession, shots, expected goals (xG), big chances, passes, duels, saves, distance covered and more, for the match and each periodMost top leagues, many others
LineupsBoth 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
IncidentsGoals with scorer and assist, cards, substitutions, VAR decisions, added time, period scoresPlayed matches
Shot mapEvery shot with player, minute, situation, body part, result, position, xG and xG on targetMatches with player statistics
OddsEvery 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-offMatches with odds
Head-to-headThe teams' and the managers' record, every past meeting with score and link, both teams' league positions and how often they met this seasonEvery match
Votes, form, managersFan votes, last five results with table position and rating, both managersMost matches
Best playersBest players per team and the player of the match with ratingMatches with player statistics
MomentumAttack momentum minute by minuteMatches with player statistics, and others where SofaScore draws it
Team streaksCurrent streaks of both teams and in their meetings, with odds for the streak marketsMost matches
Highlights, average positions, predictionsVideo links, average player positions, SofaScore's predictions and how they turned outTop matches
Commentary, player of the match vote, weatherText commentary, the fans' vote, weather at the venue (off by default)Top matches
Point by point, tennis momentumEvery point of every game with server and score; momentum per gameTennis and padel
Innings, esports games, playoff seriesBatting and bowling innings; games and maps; the series a playoff match belongs toCricket and baseball; esports; playoff sports
News, social posts, team heatmaps, TV channelsNews 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-batsEvery 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 detailsEvery 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.

SectionWhy it is off by default
Match: commentary, player of the match vote, weather, news, social posts, team heatmaps, TV channelsLarge or rarely filled outside top matches
Match: at-batsAbout 70 more reads and up to 1 MB per baseball game
Match: player detailsAbout 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 postsUp to 90 KB per team
Player: season heatmap, videosUp to 40 KB per player
Tournament: full player statistics tableEvery 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.

{
"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.

{
"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

{
"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:

EventWhen it is chargedPrice per 1,000
ResultEach result saved: a match, team, player, tournament, manager, referee, venue, race or day overview line$1.99
DetailsEach 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

🎯 Daily fantasy & player props

🎾 Live scores & match data

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.