ESPN Soccer Scores, Fixtures & Standings Scraper
Pricing
from $6.15 / 1,000 results
ESPN Soccer Scores, Fixtures & Standings Scraper
Scrape soccer scores, fixtures, results, standings and teams for the FIFA World Cup and top leagues. Get match date, live status, home and away teams, scores, venue, broadcasts and league tables. Export to JSON, CSV or Excel.
Pricing
from $6.15 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
20 hours ago
Last modified
Categories
Share
ESPN Soccer Scores, Fixtures & Standings Scraper
Here is one real result from the standings mode, with every field the actor returns:
{"recordType": "standing","league": "eng.1","leagueName": "English Premier League","group": null,"season": "2026-2027","rank": 1,"team": "AFC Bournemouth","teamAbbrev": "BOU","teamLogo": "https://a.espncdn.com/i/teamlogos/soccer/500/349.png","gamesPlayed": 0,"wins": 0,"draws": 0,"losses": 0,"points": 0,"goalsFor": 0,"goalsAgainst": 0,"goalDifference": 0,"pointsPerGame": 0,"record": "0-0-0","observedAt": "2026-08-15T04:11:57.120Z","error": null}
The most complete ESPN soccer scraper available. From one input it returns match scores and fixtures, the full league table, or the team list for any of 18 competitions, with every field ESPN exposes: scores, match status and clock, venue, odds, team form and records for matches; rank, points, goal difference and per-game stats for standings; and team identity, colors and logos for teams.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
Pick a competition and one of three modes. The actor calls ESPN's public soccer data for that competition, normalizes it, and writes one record per match, table row, or team to the run's dataset:
- Scores & fixtures (
scoreboard): matches for the current matchday, a single date, or a date range. Each record has scores, status and clock, home/away teams with form and records, venue, broadcasts, and betting odds when available. - Standings (
standings): the current league table, one row per team with rank, played, wins/draws/losses, points, goals for/against, goal difference, and points per game. - Teams (
teams): the list of clubs in the competition with identity, colors, and logos.
Supported competitions include the FIFA World Cup, Premier League, LaLiga, Serie A, Bundesliga, Ligue 1, MLS, Liga MX, Liga Profesional (Argentina), Brasileirao, Primeira Liga, Eredivisie, UEFA Champions League, UEFA Europa League, CONMEBOL Libertadores, CONCACAF Gold Cup, UEFA European Championship, and FIFA Women's World Cup.
Quickstart
Open the actor, paste this into the input, and press Run. It returns the current Premier League table.
{"mode": "standings","league": "eng.1","maxRecords": 10}
Set mode to scoreboard for scores and fixtures (optionally with date or dateFrom/dateTo), or teams for the club list. Change league to any supported competition code.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
mode | enum | no | scoreboard | What to scrape: scoreboard (scores and fixtures), standings (league table), or teams (club list). |
league | enum | no | fifa.world | Competition code. One of fifa.world, eng.1, esp.1, ita.1, ger.1, fra.1, usa.1, mex.1, arg.1, bra.1, por.1, ned.1, uefa.champions, uefa.europa, conmebol.libertadores, concacaf.gold, uefa.euro, fifa.wwc. |
date | string | no | (current) | Scoreboard mode only. A single day as YYYY-MM-DD. Empty returns the current matchday and nearby fixtures. |
dateFrom | string | no | (none) | Scoreboard mode only. Start of a date range (YYYY-MM-DD). Use with dateTo. Overrides date. |
dateTo | string | no | (none) | Scoreboard mode only. End of a date range (YYYY-MM-DD). Use with dateFrom. |
maxRecords | integer | no | 10 | Maximum records to collect (matches, table rows, or teams). |
Output reference
One dataset item per record. The recordType field tells you which shape it is. Types: string, integer, number, boolean, object, array, or null when the source value is absent.
Standings records (recordType: "standing"):
| Field | Type | Description |
|---|---|---|
recordType | string | Always standing. |
league | string | Competition code. |
leagueName | string | Competition display name. |
group | string | Group name for multi-group competitions, else null. |
season | string | Season label. |
rank | integer | Position in the table. |
team | string | Team display name. |
teamAbbrev | string | Team abbreviation. |
teamLogo | string | Team logo URL. |
gamesPlayed | integer | Matches played. |
wins | integer | Wins. |
draws | integer | Draws. |
losses | integer | Losses. |
points | integer | League points. |
goalsFor | integer | Goals scored. |
goalsAgainst | integer | Goals conceded. |
goalDifference | integer | Goal difference. |
pointsPerGame | number | Points per game. |
record | string | Overall record summary. |
observedAt | string | ISO 8601 collection timestamp. |
error | string | null on success. |
Scoreboard records (recordType: "match"):
| Field | Type | Description |
|---|---|---|
recordType | string | Always match. |
matchId | string | ESPN event id. |
league / leagueName / season | string | Competition code, name, and season. |
round | string | Round or stage slug, when available. |
date | string | ISO kickoff date and time. |
name / shortName | string | Full and short match name. |
state | string | Match state, for example pre, in, post. |
status | string | Status description, for example Scheduled, Full Time. |
statusDetail | string | Detailed status or short detail. |
completed | boolean | true when the match is finished. |
clock | string | Displayed match clock (live matches). |
period | integer | Current period. |
homeTeam / homeAbbrev | string | Home team name and abbreviation. |
homeScore | string | Home score. |
homeWinner | boolean | true if home won. |
homeForm | string | Recent home form string. |
homeRecord | string | Home team record summary. |
homeLogo | string | Home team logo URL. |
homeStats | object | Home team stat map. |
awayTeam / awayAbbrev / awayScore / awayWinner / awayForm / awayRecord / awayLogo / awayStats | mixed | Same fields for the away team. |
venue / venueCity / venueCountry | string | Venue name and location. |
attendance | integer | Reported attendance, when available. |
broadcasts | string[] | Broadcaster names, or null. |
oddsProvider | string | Odds provider name. |
oddsHomeWin / oddsDraw / oddsAwayWin / oddsOverUnder / oddsDetails | mixed | Betting odds when published. |
url | string | ESPN match page URL. |
observedAt | string | ISO 8601 collection timestamp. |
error | string | null on success. |
Teams records (recordType: "team"):
| Field | Type | Description |
|---|---|---|
recordType | string | Always team. |
league / leagueName | string | Competition code and name. |
teamId | string | ESPN team id. |
team | string | Team display name. |
shortName | string | Short display name. |
abbreviation | string | Team abbreviation. |
location | string | Team location/city. |
color / alternateColor | string | Team primary and alternate colors (hex). |
teamLogo | string | Team logo URL. |
isActive | boolean | Whether the team is active. |
url | string | ESPN clubhouse URL. |
observedAt | string | ISO 8601 collection timestamp. |
error | string | null on success. |
On a failed request, a single item with recordType, league, and a populated error field is written instead.
Example output record
Real record from a live run (input {"mode": "standings", "league": "eng.1", "maxRecords": 5}):
{"recordType": "standing","league": "eng.1","leagueName": "English Premier League","group": null,"season": "2026-2027","rank": 1,"team": "AFC Bournemouth","teamAbbrev": "BOU","teamLogo": "https://a.espncdn.com/i/teamlogos/soccer/500/349.png","gamesPlayed": 0,"wins": 0,"draws": 0,"losses": 0,"points": 0,"goalsFor": 0,"goalsAgainst": 0,"goalDifference": 0,"pointsPerGame": 0,"record": "0-0-0","observedAt": "2026-08-15T04:11:57.120Z","error": null}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~espn-soccer-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"mode":"standings","league":"esp.1","maxRecords":20}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~espn-soccer-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"mode":"scoreboard","league":"eng.1","dateFrom":"2026-08-15","dateTo":"2026-08-18","maxRecords":50}'
Apify CLI:
apify call scrapers_lat/espn-soccer-scraper \--input '{"mode":"teams","league":"ita.1"}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per record returned (
resultevent), whether match, table row, or team. See the pricing tab for the current per-result price. - No charge on failure. If a request fails, the actor writes a single item with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 records per run. Upgrade for higher
maxRecords.
FAQ and troubleshooting
A run returned 0 records. Why?
For scoreboard, there may be no matches on the requested date (for example a league's off-season). Try the current matchday, a date range with fixtures, or an in-season competition. Zero-result runs are not charged.
Which competition codes are supported? The 18 codes listed in the input reference, from the FIFA World Cup to domestic leagues (Premier League, LaLiga, Serie A, MLS, Liga MX, and more) and continental cups.
Can I get a specific match day?
Yes, in scoreboard mode. Pass a single date, or a dateFrom/dateTo range (both YYYY-MM-DD).
Do standings include goal difference and form?
Standings rows include rank, played, wins/draws/losses, points, goals for/against, goal difference, points per game, and an overall record summary. Recent form appears on match records (homeForm, awayForm).
Are betting odds always present?
Odds fields are populated only when ESPN publishes odds for the match, and are null otherwise.
Is this an official ESPN tool? No. This actor is independent and has no affiliation with ESPN or the Walt Disney Company. It reads only data that is publicly available on ESPN.
Related scrapers
- Sofascore Scraper: Live scores, stats, and lineups across sports.
- Transfermarkt Scraper: Player values, transfers, and squads.
- FIFA World Cup Scraper: World Cup fixtures, results, and squads.
- MLB Stats Scraper: MLB scores, schedules, and stats.
- SeatGeek Events Scraper: Live sports and event tickets.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with ESPN. Accesses only publicly available data on ESPN.
