ESPN Sports Data Scraper — Scores, Standings, Rosters, News avatar

ESPN Sports Data Scraper — Scores, Standings, Rosters, News

Pricing

from $0.75 / 1,000 results

Go to Apify Store
ESPN Sports Data Scraper — Scores, Standings, Rosters, News

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

Banea Teodor

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

a month ago

Last modified

Categories

Security

Limited permissions

Share

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.

ModeOne row perTypical input
scoresgame on a date (up to 62 days per run)leagues + dateFrom/dateTo
schedulegame on a team's scheduleleague + teamIds (+ season)
standingsteam (or F1 driver) in the tableleagues (+ season, standingsLevel)
teamsteam in the leagueleagues
rostersplayer on a rosterleague + teamIds (or every team)
athleteStatsstat category × season for an athleteleague + athleteIds
newsarticleleagues (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 statusType vocabulary, startTime, homeScore/awayScore and decimal homeOdds/drawOdds/awayOdds.

How much does it cost?

$0.50 per 1,000 rows. No per-run fee, compute included.

RunRowsCost
Today's NBA scoreboard (default input)~10$0.005
A full NBA regular season of results~1,230$0.62
Premier League table20$0.01
Every NFL roster (32 teams)~2,400$1.20

Input

FieldTypeDescription
modestringscores (default), schedule, standings, teams, rosters, athleteStats or news.
leaguesarrayLeague slugs from the list (default ["basketball/nba"]).
customLeaguesarrayAny other ESPN slug as sport/league, e.g. soccer/ger.2.
dateFrom / dateTostringGame days for scores (YYYY-MM-DD, up to 62 days). Defaults to today. ESPN game days are US/Eastern.
includeGameDetailsboolean+1 request per game for closing odds, officials and venue details. Default false.
seasonintegerESPN season year (2026 = 2025-26 NBA). Defaults to the current season.
seasonTypestring1 preseason, 2 regular season, 3 postseason.
teamIdsarrayESPN team ids for schedules, rosters and news (one league). Empty = every team.
standingsLevelstringdefault (conferences), league (one table) or division.
includeTeamDetailsboolean+1 request per team in teams mode (record, venue, next game). Default true.
athleteIdsarrayESPN athlete ids for athleteStats (one league). Find them with rosters.
maxItemsintegerRow cap, split evenly across leagues/teams/athletes. Default 100; 0 = unlimited (capped at 10,000).
maxConcurrency / maxRequestsPerMinuteintegerDefault 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 scores with dateFrom/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 teams for team ids and rosters for athlete ids.
  • Custom leagues: any ESPN slug works in customLeagues (soccer/tur.1, soccer/sco.1, basketball/nbl). Unknown slugs are reported in ERRORS, not silently skipped.
  • College: basketball/mens-college-basketball and football/college-football return the full Division I / FBS slate (the Actor adds ESPN's groups parameter for you).
  • Tennis, golf and F1 have no two-team games; use standings (F1 drivers/constructors) or news for 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/hockey where Sofascore says football/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.