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

SofaScore Scraper - Live Scores, Fixtures, Stats & Odds

Pricing

from $1.50 / 1,000 dataset items

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

SofaScore Scraper - Live Scores, Fixtures, Stats & Odds

Sofascore data for football and 24 more sports: matches by day, live, league, team or URL with scores, plus optional stats (xG, possession, shots), lineups with ratings, goals and cards, odds and shotmaps. League tables and squads too.

Pricing

from $1.50 / 1,000 dataset items

Rating

0.0

(0)

Developer

axly

axly

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

SofaScore Scraper — Live Scores, Fixtures, Match Stats, Lineups & Odds

Get structured sports data from Sofascore for football and 24 other sports. Collect every match of a day, live scores, a league's fixtures and results, or a team's recent and upcoming games. Each match comes with teams, scores by period, round and status. Add match statistics (xG, possession, shots…), lineups with player ratings, goals and cards, bookmaker odds and shotmaps when you need them. League tables and team squads (market value, contract, position) are separate modes.

Built for football analysts and scouts, betting models, fantasy and dashboard apps, and journalists who need clean, schedulable sports data without running their own scraper.

What you get

FieldDescription
matchId, urlSofascore match id and link
sport, status, statusDescription, startTimee.g. football, finished / inprogress / notstarted, "2nd half", UTC ISO-8601
country, countryCode, tournament, tournamentId, season, seasonId, roundCompetition context ("England", "Premier League", "Premier League 26/27", "Round 7")
homeTeam, awayTeamid, name, shortName, code, country, url
homeScore, awayScorecurrent plus period1, period2, overtime, penalties, … when available
winnerhome, away or draw
venue, city, referee, attendance, hasXgMatch info (filled when any match detail is requested; youth and lower leagues often have none)
statisticsOptional. Whole match and per half/period: possession, expected goals, big chances, shots, passes, duels, tackles, saves… with display and numeric values
lineupsOptional. Formation, starters and bench (position, shirt number, rating, minutes, per-player stats), missing players and why
incidentsOptional. Goals (scorer, assist, score after the goal), cards with reason, substitutions, VAR, periods, in match order
oddsOptional. 1X2, double chance, draw no bet, both teams to score, over/under lines…: decimal and fractional, opening and current, winning flag
shotmapOptional (football). Every shot: player, minute, xG, xGOT, situation, body part, outcome, pitch coordinates
scrapedAtWhen the row was collected (UTC)

Standings mode rows:

tournament, season, group, position, team, played, wins, draws, losses, scoresFor, scoresAgainst, scoreDiff, points, winPercentage, gamesBehind, streak, promotion, updatedAt
. Squads mode rows:
name, team, position, positionsDetailed, shirtNumber, country, dateOfBirth, heightCm, preferredFoot, marketValue, marketValueCurrency, contractUntil, url
.

Use cases

  • Football analytics and scouting: a league's full season of results with xG, shots and player ratings from lineups; squads with market values and contract end dates.
  • Betting models: tomorrow's fixtures with opening vs current odds; results with statistics for backtests; live-score polling.
  • Apps, bots and dashboards: scheduled fixtures, live scores and league tables for websites, Discord/Telegram bots and fantasy games, across football, basketball, tennis, ice hockey, esports and more.
  • Journalism and research: match facts (scorers, cards, attendance, referee) and season tables on demand.

Input

FieldDescription
modematches (default), standings or squads
sportsOne or more of 25 sports (default football). Used for days/live and for name lookups
datesUTC days: 2026-10-21, today, yesterday, tomorrow, +2, -3. Defaults to today when no other source is given
liveOnlyOnly matches in progress right now
tournaments, seasonId, tournamentMatchesLeague URLs, ids or names (Premier League), an optional past season id, results/fixtures/both
teamsTeam URLs, ids or names (Real Madrid) → recent results and upcoming matches, or the squad in squads mode
matchUrlsMatch URLs or ids
countries, tournamentFilter, statusesFilters for day and live lists: country/region (England, Europe), tournament name words, match status
includeStatistics, includeLineups, includeIncidents, includeOdds, includeShotmapPer-match details
standingsTypetotal, home or away table
maxItemsMaximum rows
proxyConfigurationLeave the default: the actor picks working Apify Proxy IPs by itself

Example: yesterday's top-league results with stats, goals and odds

{
"dates": ["yesterday"],
"tournamentFilter": ["Premier League", "LaLiga", "Serie A", "Bundesliga", "Ligue 1", "Champions League"],
"countries": ["England", "Spain", "Italy", "Germany", "France", "Europe"],
"statuses": ["finished"],
"includeStatistics": true,
"includeIncidents": true,
"includeOdds": true
}

Example: Premier League season results, then the table

{ "tournaments": ["Premier League"], "tournamentMatches": "last", "includeStatistics": true, "maxItems": 400 }
{ "mode": "standings", "tournaments": ["Premier League", "LaLiga", "NBA"], "sports": ["football", "basketball"] }

Example output (shortened)

{
"matchId": 16363890,
"url": "https://www.sofascore.com/football/match/tottenham-hotspur-coventry-city/lsI#id:16363890",
"sport": "football",
"status": "finished",
"startTime": "2026-10-19T19:00:00Z",
"country": "England",
"tournament": "Premier League",
"season": "Premier League 26/27",
"round": "Round 7",
"homeTeam": {"id": 33, "name": "Tottenham Hotspur", "code": "TOT"},
"awayTeam": {"id": 11, "name": "Coventry City", "code": "COC"},
"homeScore": {"current": 3, "period1": 1, "period2": 2},
"awayScore": {"current": 1, "period1": 0, "period2": 1},
"winner": "home",
"venue": "Tottenham Hotspur Stadium",
"referee": "Andy Madley",
"attendance": 60913,
"statistics": {"all": {"ballPossession": {"name": "Ball possession", "home": "65%", "away": "35%", "homeValue": 65, "awayValue": 35},
"expectedGoals": {"name": "Expected goals", "home": "0.86", "away": "0.77"}}},
"incidents": [{"type": "goal", "minute": 14, "team": "home", "player": {"id": 334, "name": "James Maddison"}, "homeScore": 1, "awayScore": 0}],
"odds": [{"market": "Full time", "choices": [{"name": "1", "side": "home", "decimal": 1.53, "initialDecimal": 1.48, "winning": true},
{"name": "X", "side": "draw", "decimal": 4.5}, {"name": "2", "side": "away", "decimal": 6.0}]}],
"scrapedAt": "2026-10-22T08:00:00Z"
}

Scheduling and integrations

Create a Schedule in Apify Console (every few minutes with liveOnly, or daily with dates: ["yesterday"]). Read results through the Apify API (/v2/datasets/{id}/items?format=json|csv|xlsx) or send them on with webhooks and integrations (Google Sheets, Slack, Make, Zapier, Airbyte).

Use it from AI assistants

The actor works as a tool in AI agents through the Apify MCP server (https://mcp.apify.com): ask for "yesterday's Premier League results with xG" or "the LaLiga table" and the agent can run it and read the dataset.

FAQ

Which sports? Football, basketball, tennis, ice hockey, American football, baseball, handball, volleyball, rugby, cricket, esports, table tennis, darts, snooker, futsal, motorsport, MMA, water polo, badminton, Aussie rules, beach volleyball, floorball, bandy, mini football and cycling. Details depend on what Sofascore tracks per sport and league. For tennis-specific fields (set and tie-break scores, point-by-point, ATP/WTA rankings) use our Tennis Scraper.

How fresh is the data? Each run reads Sofascore at run time. Live rows show the score at that moment.

Why are statistics, lineups or shotmaps empty for some matches? Sofascore only has them for leagues it covers in depth; lower and youth leagues often have scores and goals only. Statistics and shotmaps exist once a match has started; lineups appear about an hour before kick-off.

Do I need a proxy? No setup needed. The default Apify Proxy setting is enough; the actor switches IPs by itself when one is blocked.

Is this legal? The actor collects publicly visible sports results and statistics. You are responsible for how you use the data and for complying with Sofascore's terms in your jurisdiction.

Something is wrong or missing? Open an issue on the actor page. Issues are read and answered.