Sofascore Live Scores & Fixtures Scraper
Pricing
from $2.00 / 1,000 results
Sofascore Live Scores & Fixtures Scraper
Scrape live scores, fixtures, and results from Sofascore across 21 sports — football, tennis, basketball, and more. Get period scores, tennis points, live match minutes, winners, seeds, and optional betting odds in clean JSON. Filter by tournament, pick any date, and export or automate via API.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
Banea Teodor
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
5 days ago
Last modified
Categories
Share
What does Sofascore Live Scores & Fixtures Scraper do?
This Actor extracts live scores, fixtures, and final results from Sofascore — one of the world's largest sports data platforms — across 21 sports: football, tennis, basketball, ice hockey, cricket, esports, MMA, and more. One run returns everything currently in play, or a full day's card of scheduled, live, and finished matches, as clean normalized JSON: period-by-period scores, tennis set/game/point states, live match minutes, tournament context, and optionally live betting odds.
It talks to Sofascore's JSON API directly — no browser, no screenshots — so runs finish in seconds and cost cents.
Why use this Actor?
- Every sport, one schema — a tennis match, a football game, and an NBA game come back with identical field sets. Build one pipeline, cover 21 sports.
- Real live detail — in-play tennis returns sets, games, and the current point ("40"–"15"); football returns the live match minute and per-half scores; finished matches carry the winner.
- Fixtures and results by date — any past date returns final results, any future date returns the schedule. Sofascore's own priority ordering puts top competitions (Champions League, ATP, NBA) first.
- Live betting odds included — optionally attach the featured "Full time" market: opening and current decimal odds for home/draw/away.
- Fast, filtered runs — the tournament filter ("Premier League", "ATP", "NBA", or a country) skips non-matching competitions before fetching them, so filtered runs are cheaper and faster.
- Built for pipelines — every row always has every field (null when a sport doesn't have it), ISO 8601 dates, numeric scores, absolute URLs.
How much does it cost?
You pay per event returned. Scraping all live football right now (~25–80 events) costs about a cent; a full day of top-flight fixtures with maxEvents: 200 finishes in under a minute. Use maxEvents to put a hard ceiling on any run — unlimited runs without a tournament filter are automatically capped at 10,000 events. Turning on includeOdds adds one request per event, which makes runs slower but not more expensive per result.
Input
| Field | Type | Description | Example |
|---|---|---|---|
mode | string | live (everything in play now, default) or scheduled (a day's fixtures and results). | "live" |
sports | array | Sports to scrape. The result cap is split evenly between them. | ["football", "tennis"] |
date | date | Day to scrape in scheduled mode (default: today). Past = results, future = schedule. | "2026-08-27" |
tournamentFilter | string | Only competitions whose tournament, category, or country name contains this text. | "Champions League" |
includeOdds | boolean | Attach the featured "Full time" betting market (decimal odds, opening + current). | false |
maxEvents | integer | Hard cap on returned events (= billed results). | 200 |
An empty input works: it returns live football.
Output
One row per match:
{"eventId": 14025044,"sport": "football","url": "https://www.sofascore.com/football/match/aek-athens-levski-sofia/QobsRgb#id:14025044","tournamentName": "UEFA Champions League, Playoff Round","uniqueTournamentId": 7,"uniqueTournamentName": "UEFA Champions League","categoryName": "Europe","countryName": null,"seasonName": "UEFA Champions League 26/27","round": 636,"roundName": "Playoff round","statusType": "finished","statusDescription": "Ended","startTime": "2026-08-26T18:00:00.000Z","liveMinute": null,"winner": "home","homeTeamId": 2687,"homeTeamName": "AEK Athens","homeTeamCountry": "Greece","homeTeamSeed": null,"awayTeamId": 2342,"awayTeamName": "Levski Sofia","awayTeamCountry": "Bulgaria","awayTeamSeed": null,"homeScore": 4,"awayScore": 0,"homeScoreDisplay": 4,"awayScoreDisplay": 0,"homePeriodScores": [3, 1],"awayPeriodScores": [0, 0],"homeScorePenalties": null,"awayScorePenalties": null,"homePoint": null,"awayPoint": null,"groundType": null,"firstToServe": null,"oddsMarketName": "Full time","homeOdds": 1.5,"drawOdds": 3.75,"awayOdds": 6.0,"homeOddsInitial": 1.44,"drawOddsInitial": 4.0,"awayOddsInitial": 6.5,"oddsSuspended": false,"scrapedAt": "2026-08-27T14:30:00.000Z","runId": "AbC123..."}
Field notes:
- Period scores are per period: football halves (
[3, 1]= 3 first-half goals, 1 second-half), basketball quarters, tennis games per set. - Tennis rows fill
homePoint/awayPoint(current game),groundType(surface),firstToServe, and seeds;homeScorecounts sets won. liveMinuteis the current match minute for clock sports in play, computed the way Sofascore's own clock works.winneris"home","away", or"draw"once decided.- Odds are decimal (converted from Sofascore's fractional values);
drawOddsis null on two-way markets like tennis. Events without a market keep null odds rather than being dropped. - Fields a sport doesn't have are
null, never omitted — the shape is identical on every row.
Tips and tricks
- Live scores dashboard: schedule the Actor every few minutes with
mode: "live"and your sports —eventIdis stable, so downstream you can upsert by it. - Results backfill: loop
mode: "scheduled"over past dates to build a historical results dataset with final scores and winners. - One competition only:
tournamentFilter: "Premier League"(or"ATP","NBA","Wimbledon", a country name) — filtered tournaments are skipped before fetching, so this is also the cheapest way to run. - Odds movement tracking: run with
includeOddson a schedule and diffhomeOddsagainsthomeOddsInitialbyeventId. - Multi-sport runs split
maxEventsevenly across the selected sports, so one busy sport can't crowd out the others.
Integrations
The dataset works with every Apify integration: export to JSON, CSV, Excel, push to Google Sheets, trigger webhooks on finish, or query via the Apify API from Python/Node. Typical setups: a scheduled live-scores feed into a Slack webhook, or the Apify API pulling each day's results into a stats model.