SofaScore Scraper - Live Scores, Fixtures, Stats & Odds
Pricing
from $1.50 / 1,000 dataset items
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
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
| Field | Description |
|---|---|
matchId, url | Sofascore match id and link |
sport, status, statusDescription, startTime | e.g. football, finished / inprogress / notstarted, "2nd half", UTC ISO-8601 |
country, countryCode, tournament, tournamentId, season, seasonId, round | Competition context ("England", "Premier League", "Premier League 26/27", "Round 7") |
homeTeam, awayTeam | id, name, shortName, code, country, url |
homeScore, awayScore | current plus period1, period2, overtime, penalties, … when available |
winner | home, away or draw |
venue, city, referee, attendance, hasXg | Match info (filled when any match detail is requested; youth and lower leagues often have none) |
statistics | Optional. Whole match and per half/period: possession, expected goals, big chances, shots, passes, duels, tackles, saves… with display and numeric values |
lineups | Optional. Formation, starters and bench (position, shirt number, rating, minutes, per-player stats), missing players and why |
incidents | Optional. Goals (scorer, assist, score after the goal), cards with reason, substitutions, VAR, periods, in match order |
odds | Optional. 1X2, double chance, draw no bet, both teams to score, over/under lines…: decimal and fractional, opening and current, winning flag |
shotmap | Optional (football). Every shot: player, minute, xG, xGOT, situation, body part, outcome, pitch coordinates |
scrapedAt | When 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, updatedAtname, team, position, positionsDetailed, shirtNumber, country, dateOfBirth, heightCm, preferredFoot, marketValue, marketValueCurrency, contractUntil, urlUse 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
| Field | Description |
|---|---|
mode | matches (default), standings or squads |
sports | One or more of 25 sports (default football). Used for days/live and for name lookups |
dates | UTC days: 2026-10-21, today, yesterday, tomorrow, +2, -3. Defaults to today when no other source is given |
liveOnly | Only matches in progress right now |
tournaments, seasonId, tournamentMatches | League URLs, ids or names (Premier League), an optional past season id, results/fixtures/both |
teams | Team URLs, ids or names (Real Madrid) → recent results and upcoming matches, or the squad in squads mode |
matchUrls | Match URLs or ids |
countries, tournamentFilter, statuses | Filters for day and live lists: country/region (England, Europe), tournament name words, match status |
includeStatistics, includeLineups, includeIncidents, includeOdds, includeShotmap | Per-match details |
standingsType | total, home or away table |
maxItems | Maximum rows |
proxyConfiguration | Leave 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.