Soccer Scraper avatar

Soccer Scraper

Pricing

from $0.50 / 1,000 results

Go to Apify Store
Soccer Scraper

Soccer Scraper

Match results, fixtures and league tables from ESPN for the Premier League, LaLiga, Bundesliga, Serie A, Ligue 1, MLS and the Champions League. Set a date range of up to 120 days and get one row per match with the score, kickoff time, stadium and, if you want, team statistics.

Pricing

from $0.50 / 1,000 results

Rating

0.0

(0)

Developer

deriverge s.r.o.

deriverge s.r.o.

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Share

Soccer Scraper reads ESPN's scoreboards for the Premier League, LaLiga, the Bundesliga, Serie A, Ligue 1, MLS and the Champions League. Each match is one row with both clubs, the score, the kickoff time in UTC, the stadium, the crowd and the US TV channels. Set a date range and click Start: 19 and 20 September 2026 returned 57 matches. League tables, squads and news are separate modes. Goal scorers, cards per player and line-ups are not part of the output. It costs $1.00 per 1,000 results on the Free plan ($0.50 on Business), and the $5 of monthly credit in Apify's Free plan covers about 5,000 results.

What does a match row contain?

FieldDescription
league, leagueNameLeague key and ESPN's name for it, e.g. epl and English Premier League.
name, shortNameThe fixture with the away club first: Aston Villa at Tottenham Hotspur, AVL @ TOT.
startsAtKickoff as an ISO 8601 timestamp in UTC.
status, statusDetail, completedpre, in or post; ESPN's label such as FT or Postponed; true once the match was played to the end.
period, clockHalf and match clock at the last update. A finished match shows 2 and the added time, e.g. 90'+9'.
home.score, home.winnerGoals of the home club and whether it won; away has the same fields. After a draw both winner flags are false.
home.recordThe club's current league record as wins, draws and losses, e.g. 0-2-3.
seasonYear, seasonTypeESPN's season labels: 2026 and 2026-27-english-premier-league for this Premier League season, league-phase in the Champions League.
venue, attendanceStadium, city and country, and the crowd ESPN reports; 0 when it has no figure.
broadcastsUS TV and streaming channels ESPN lists, e.g. USA Net.
oddsESPN's betting line when it has one: provider, the home, away and draw moneylines (the draw in drawMoneyLine, e.g. 380), each side's handicap with its price, the total, and the home club's handicap in spread, e.g. -1.5. ESPN marks no favorite in soccer, so favorite is null and details names the club with the shorter price, as in ARS -270. The whole field is null when the only bookmaker is Bet 365, whose fractional and decimal odds are not read; on 30 September 2026 that applied to one Bundesliga and two MLS matches.
detail.teamStatsOnly with the box score option: 28 statistics per club, among them possessionPct, totalShots, shotsOnTarget, wonCorners and yellowCards.
urlMatch page on espn.com.

League table rows (type is standing) keep the figures in stats: rank, gamesPlayed, wins, ties (draws), losses, pointsFor (goals scored), pointsAgainst (goals conceded), pointDifferential, points and overall, e.g. 5-0-0. Squad rows (athlete) carry jersey, position such as Goalkeeper, heightCm, weightKg, age and status. News rows have the headline in title, a summary, publishedAt and the article url.

How to scrape soccer results and tables

  1. In Leagues, keep the seven prefilled keys or delete the ones you do not need: epl, laliga, bundesliga, seriea, ligue1, mls, ucl.
  2. Leave What to return on Games and results for matches. League table gives one row per club, Teams the clubs with their teamId, Team rosters the squads, Team schedules each club's played and upcoming matches, and League news the latest ESPN stories.
  3. Fill From date and To date with dates such as 2026-09-19, or with moving dates such as -7 and today for a task that runs every week. ESPN answers one day per request; a run covers up to 120 days.
  4. Turn on Include box score and injuries for match statistics. Game status keeps only finished, live or upcoming matches.
  5. Click Start. The matches appear in the Output tab as a table that you can download as CSV, Excel or JSON, or fetch through the API with an input like this:
{
"leagues": ["epl", "laliga", "ucl"],
"mode": "scoreboard",
"dateFrom": "-7",
"dateTo": "today",
"statusFilter": "final",
"includeGameDetail": true
}

Example output

One match from a run on 30 September 2026 with the box score option on. For this match ESPN filled only the team statistics, so injuries, headlines and lastPlay are empty.

{
"key": "espn:epl:401879269",
"type": "game",
"sport": "soccer",
"league": "epl",
"leagueName": "English Premier League",
"gameId": "401879269",
"name": "Aston Villa at Tottenham Hotspur",
"shortName": "AVL @ TOT",
"round": null,
"startsAt": "2026-09-19T11:30:00.000Z",
"status": "post",
"statusDetail": "FT",
"completed": true,
"period": 2,
"clock": "90'+9'",
"seasonYear": 2026,
"seasonType": "2026-27-english-premier-league",
"home": {
"id": "367",
"kind": "team",
"name": "Tottenham Hotspur",
"shortName": "TOT",
"location": "Tottenham Hotspur",
"score": 2,
"winner": false,
"record": "0-2-3",
"position": 0,
"homeAway": "home",
"periodScores": [],
"logo": "https://a.espncdn.com/i/teamlogos/soccer/500/367.png"
},
"away": {
"id": "362",
"kind": "team",
"name": "Aston Villa",
"shortName": "AVL",
"location": "Aston Villa",
"score": 3,
"winner": true,
"record": "1-1-3",
"position": 1,
"homeAway": "away",
"periodScores": [],
"logo": "https://a.espncdn.com/i/teamlogos/soccer/500/362.png"
},
"venue": {
"name": "Tottenham Hotspur Stadium",
"city": "London",
"state": null,
"country": "England",
"indoor": null
},
"attendance": 60920,
"neutralSite": null,
"broadcasts": [
"USA Net",
"Universo"
],
"odds": null,
"url": "https://www.espn.com/soccer/match/_/gameId/401879269/aston-villa-tottenham-hotspur",
"detail": {
"teamStats": [
{
"teamId": "367",
"name": "Tottenham Hotspur",
"stats": {
"foulsCommitted": "9",
"yellowCards": "1",
"redCards": "0",
"offsides": "5",
"wonCorners": "11",
"saves": "3",
"possessionPct": "63.8",
"totalShots": "20",
"shotsOnTarget": "7",
"shotPct": "0.4",
"penaltyKickGoals": "0",
"penaltyKickShots": "0",
"accuratePasses": "497",
"totalPasses": "571",
"passPct": "0.9",
"accurateCrosses": "4",
"totalCrosses": "28",
"crossPct": "0.1",
"totalLongBalls": "33",
"accurateLongBalls": "15",
"longballPct": "0.5",
"blockedShots": "4",
"effectiveTackles": "16",
"totalTackles": "35",
"tacklePct": "0.5",
"interceptions": "9",
"effectiveClearance": "10",
"totalClearance": "10"
}
},
{
"teamId": "362",
"name": "Aston Villa",
"stats": {
"foulsCommitted": "13",
"yellowCards": "2",
"redCards": "0",
"offsides": "2",
"wonCorners": "1",
"saves": "5",
"possessionPct": "36.2",
"totalShots": "15",
"shotsOnTarget": "6",
"shotPct": "0.4",
"penaltyKickGoals": "0",
"penaltyKickShots": "0",
"accuratePasses": "278",
"totalPasses": "331",
"passPct": "0.8",
"accurateCrosses": "1",
"totalCrosses": "6",
"crossPct": "0.2",
"totalLongBalls": "48",
"accurateLongBalls": "24",
"longballPct": "0.5",
"blockedShots": "3",
"effectiveTackles": "9",
"totalTackles": "18",
"tacklePct": "0.5",
"interceptions": "14",
"effectiveClearance": "37",
"totalClearance": "37"
}
}
],
"injuries": [],
"headlines": [],
"lastPlay": null,
"attendance": 60920
}
}

When the leagues play

The five European leagues run from August to May and pause for international breaks: ESPN listed no Premier League match from 21 September to 9 October 2026. MLS kept playing through that break, with 14 games on 26 September, one of them postponed. With both dates empty, ESPN returns the matches of the current day, or during a break the last day that had matches; on 26 September that meant the four Premier League matches of 20 September.

To follow matches live, save the input as a task (or give it a Watch name), turn on Return only what changed since the last run and schedule it every few minutes on match days. Each run returns only new matches and matches whose score or status text changed, and the CHANGES record in the run's storage lists every change with the old and the new value. With Only games with a betting line turned on, a match whose price or handicap moved comes back as well, and in League table a club returns when its points, goals or rank change.

How much does it cost to scrape soccer data?

Free planStarterScaleBusiness
1,000 results$1.00$0.80$0.65$0.50
Box score and injuries, per 1,000$1.00$0.80$0.65$0.50

You pay only for the events in the table. There is no start fee, and compute time and proxies are included.

A full Premier League season of 380 matches costs $0.38 on the Free plan and $0.19 on Business. Match statistics for all 380 add $0.38 on the Free plan, one box score event per match. Unchanged matches in the live mode and days without matches cost nothing.

Limits

  • A run reads at most 120 days, so a European season from August to May takes three runs.
  • There is no half-time score and no list of substitutions either; periodScores stays empty for soccer.
  • odds covers three markets from one bookmaker: the match result with the draw, the handicap and total goals. Other markets such as both teams to score are not read.
  • ESPN marks postponed and canceled matches as post with completed set to false. The Finished filter leaves them out.
  • statusDetail gives upcoming kickoffs in US Eastern time and startsAt in UTC, so an evening MLS kickoff falls on the next UTC day.
  • The form prefills Maximum rows with 200. A run started without that field stops at 2,000 rows.

FAQ

Scores, fixtures and league tables are facts that ESPN shows to every visitor, and the actor reads them from ESPN's public JSON feeds without logging in. News rows hold the headline, summary and link, never the article text, and squad rows contain what clubs publish about their professional players. You are responsible for how you use the data, including any rights that apply when you republish it.

How do I get the players of one club?

Run Teams once to find the club's teamId (Arsenal is 359), then choose Team rosters and enter the ID in Team identifiers. Without IDs the actor reads every club of the league, which means 20 squads for the Premier League.

Are cup competitions included?

Only the Champions League. The actor reads the seven competitions listed above, so domestic cups, the Europa League and national teams are not covered.

Support

This actor is built and maintained by deriverge s.r.o., a software company based in the Czech Republic. If a run fails or a field you need is missing, please open an issue in the Issues tab or write to us at info@deriverge.com. We respond in English and Czech. Runs can be scheduled in Apify Console or started from the API tab, which has examples for Python, JavaScript and cURL and works with Make, Zapier, n8n and the Apify MCP server. If the actor saves you time, a short review helps other people find it.