ESPN Sports Data Scraper — Scores, Standings, Rosters, News
Pricing
from $0.75 / 1,000 results
ESPN Sports Data Scraper — Scores, Standings, Rosters, News
Live scores and results, team schedules, standings, teams, rosters, athlete season stats and news from ESPN for 40+ leagues (NBA, NFL, MLB, NHL, college, Premier League, La Liga, Champions League, UFC and more). Flat typed rows, no login
Pricing
from $0.75 / 1,000 results
Rating
0.0
(0)
Developer
Banea Teodor
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
a month ago
Last modified
Categories
Security
Limited permissionsShare
One Actor for ESPN's sports data: live scores and results, team schedules, standings, teams, rosters, athlete season stats and news for 40+ leagues — NBA, NFL, MLB, NHL, WNBA, college football and basketball, MLS, Premier League, LaLiga, Bundesliga, Serie A, Ligue 1, Champions League, Liga MX, UFC, F1 and more. Every row is flat and typed, so it drops straight into a spreadsheet, a database or a model.
What does ESPN Sports Data Scraper do?
Pick a mode and the leagues, and get one row per game, standings entry, team, player, stat line or article. No ESPN account, no API key, no proxy — the Actor reads ESPN's public JSON endpoints directly, which makes it fast and cheap enough to schedule every few minutes.
| Mode | One row per | Typical input |
|---|---|---|
scores | game on a date (up to 62 days per run) | leagues + dateFrom/dateTo |
schedule | game on a team's schedule | league + teamIds (+ season) |
standings | team (or F1 driver) in the table | leagues (+ season, standingsLevel) |
teams | team in the league | leagues |
rosters | player on a roster | league + teamIds (or every team) |
athleteStats | stat category × season for an athlete | league + athleteIds |
news | article | leagues (or teamIds) |
Why use this Actor?
- Seven data types, 40+ leagues, one row shape per type. Scores carry teams, scores, period scores, records, status, venue, broadcasts, top performers and odds. Standings carry wins, losses, points, streaks, home/away splits and every extra ESPN stat.
- Odds included. Pre-game spreads, totals and moneylines on scheduled games; closing lines,
officials and venue details on finished games with
includeGameDetails. - Reliable and cheap. ESPN's API answers plain HTTP with no rate limiting observed; a 1,000-row scores run is ~70 requests.
- Honest reporting. The status message says exactly why a league came back short: no more games in the range, league not found, not supported by ESPN for the mode, news cap.
- Stacks with our Sofascore actor. Same
statusTypevocabulary,startTime,homeScore/awayScoreand decimalhomeOdds/drawOdds/awayOdds.
How much does it cost?
$0.50 per 1,000 rows. No per-run fee, compute included.
| Run | Rows | Cost |
|---|---|---|
| Today's NBA scoreboard (default input) | ~10 | $0.005 |
| A full NBA regular season of results | ~1,230 | $0.62 |
| Premier League table | 20 | $0.01 |
| Every NFL roster (32 teams) | ~2,400 | $1.20 |
Input
| Field | Type | Description |
|---|---|---|
mode | string | scores (default), schedule, standings, teams, rosters, athleteStats or news. |
leagues | array | League slugs from the list (default ["basketball/nba"]). |
customLeagues | array | Any other ESPN slug as sport/league, e.g. soccer/ger.2. |
dateFrom / dateTo | string | Game days for scores (YYYY-MM-DD, up to 62 days). Defaults to today. ESPN game days are US/Eastern. |
includeGameDetails | boolean | +1 request per game for closing odds, officials and venue details. Default false. |
season | integer | ESPN season year (2026 = 2025-26 NBA). Defaults to the current season. |
seasonType | string | 1 preseason, 2 regular season, 3 postseason. |
teamIds | array | ESPN team ids for schedules, rosters and news (one league). Empty = every team. |
standingsLevel | string | default (conferences), league (one table) or division. |
includeTeamDetails | boolean | +1 request per team in teams mode (record, venue, next game). Default true. |
athleteIds | array | ESPN athlete ids for athleteStats (one league). Find them with rosters. |
maxItems | integer | Row cap, split evenly across leagues/teams/athletes. Default 100; 0 = unlimited (capped at 10,000). |
maxConcurrency / maxRequestsPerMinute | integer | Default 5 / 120. |
Example input:
{"mode": "scores","leagues": ["basketball/nba", "soccer/eng.1"],"dateFrom": "2026-04-01","dateTo": "2026-04-07","includeGameDetails": true,"maxItems": 500}
Output
A game row (recordType: "game"):
{"recordType": "game","title": "Raptors 101 @ Celtics 115","sport": "basketball","league": "nba","leagueName": "National Basketball Association","url": "https://www.espn.com/nba/game/_/gameId/401810987/raptors-celtics","scrapedAt": "2026-10-08T14:30:00.000Z","runId": "abc123","eventId": "401810987","uid": "s:40~l:46~e:401810987","name": "Toronto Raptors at Boston Celtics","shortName": "TOR @ BOS","seasonYear": 2026,"seasonType": 2,"seasonTypeName": "regular-season","week": null,"startTime": "2026-04-05T19:30:00.000Z","neutralSite": false,"conferenceGame": false,"groupName": null,"seriesSummary": null,"note": null,"headline": "Tatum and Brown carry Celtics to 115-101 win over Raptors","source": "scoreboard","statusType": "finished","statusDescription": "Final","statusState": "post","completed": true,"period": 4,"displayClock": "0:00","liveMinute": null,"winner": "home","homeTeamId": "2","homeTeamName": "Boston Celtics","homeTeamShortName": "Celtics","homeTeamAbbreviation": "BOS","homeTeamLogo": "https://a.espncdn.com/i/teamlogos/nba/500/scoreboard/bos.png","homeTeamColor": "008348","homeScore": 115,"homeScoreDisplay": "115","homePeriodScores": [26, 28, 26, 35],"homeRecord": "53-25","homeRank": null,"homeForm": null,"homeTopPerformer": "Jaylen Brown — 26 Pts","awayTeamId": "28","awayTeamName": "Toronto Raptors","awayTeamShortName": "Raptors","awayTeamAbbreviation": "TOR","awayTeamLogo": "https://a.espncdn.com/i/teamlogos/nba/500/scoreboard/tor.png","awayTeamColor": "ce1141","awayScore": 101,"awayScoreDisplay": "101","awayPeriodScores": [20, 30, 25, 26],"awayRecord": "30-48","awayRank": null,"awayForm": null,"awayTopPerformer": "Scottie Barnes — 22 Pts","venueId": "1824","venueName": "TD Garden","venueCity": "Boston","venueState": "MA","venueCountry": null,"venueIndoor": true,"attendance": 19156,"broadcasts": ["NBC Sports BO", "Sportsnet", "NBA TV"],"oddsProvider": "DraftKings","oddsDetails": "BOS -9.5","homeSpread": -9.5,"overUnder": 221.5,"homeMoneyline": -425,"awayMoneyline": 330,"drawMoneyline": null,"homeOdds": 1.235,"drawOdds": null,"awayOdds": 4.3,"oddsSource": "summary","officials": ["James Williams", "Che Flores", "Mark Lindsay"],"venueCapacity": null,"venueGrass": false,"boxscoreUrl": "https://www.espn.com/nba/boxscore/_/gameId/401810987"}
Standings rows carry rank, groupName/subgroupName, recordSummary, wins, losses,
ties, points, winPercent, gamesBehind, streakDisplay, homeRecord, awayRecord,
noteDescription (e.g. "Champions League") and extraStats with every other ESPN stat.
Team rows carry ids, names, colors, logo, record, venue and next game. Roster rows carry
jersey, position, height/weight, age, birthplace, college, experience, injury status and
headshot. Athlete stat rows carry one stats object per category and season (labels in
statsLabels) plus a career-total row. News rows carry headline, description, byline,
published date, image and tags.
Every row has recordType, title, sport, league, leagueName, url, scrapedAt
and runId. ESPN ids are strings.
Tips and tricks
- Daily results backfill: schedule
scoreswithdateFrom/dateTo= yesterday for the leagues you follow; one row per game,statusType: "finished". - ESPN game days are US/Eastern. A European evening kick-off belongs to the US date;
games are de-duplicated by
eventId, so overlapping ranges never double-count. - Find ids: run
teamsfor team ids androstersfor athlete ids. - Custom leagues: any ESPN slug works in
customLeagues(soccer/tur.1,soccer/sco.1,basketball/nbl). Unknown slugs are reported inERRORS, not silently skipped. - College:
basketball/mens-college-basketballandfootball/college-footballreturn the full Division I / FBS slate (the Actor adds ESPN'sgroupsparameter for you). - Tennis, golf and F1 have no two-team games; use
standings(F1 drivers/constructors) ornewsfor them. - News is capped at 50 articles per league or team request by ESPN.
- Athlete stats exist for nba, wnba, nfl, nhl and mlb; soccer athletes return current-season splits from ESPN's overview endpoint; college athletes have none.
- Stacking with Sofascore: ESPN says
soccer/football/hockeywhere Sofascore saysfootball/american-football/ice-hockey.
Integrations
Export the dataset as JSON, CSV or Excel from the Apify Console, or pull it through the API:
https://api.apify.com/v2/datasets/<datasetId>/items?format=csv
Connect the Actor to Google Sheets, Zapier, Make, Slack or a webhook with Apify integrations, or call it from your own code with the Apify API client (JavaScript/Python) and schedule it to run every few minutes during game time.