SofaScore Scraper - Live Scores, Stats, Lineups & Odds
Pricing
from $0.99 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 hours ago
Last modified
Categories
Share
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.
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 |
|
➤ You are here ATP, WTA live and history Scores, fixtures, stats, odds 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
| 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.
{"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:
| 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
Action Network
FanDuel
DraftKings
BetMGM
Bet365
🎯 Daily fantasy & player props
Player Props Aggregator
PrizePicks
Underdog Fantasy
Sleeper
DraftKings Pick6
Bet365
🎾 Live scores & match data
Tennis Abstract
Flashscore
Bet365
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.
