ESPN Scraper avatar

ESPN Scraper

Pricing

from $1.00 / 1,000 games

Go to Apify Store
ESPN Scraper

ESPN Scraper

Extract ESPN sports data: live scores, schedules, standings, teams and box scores for NFL, NBA, MLB, NHL, college sports, top soccer leagues and UFC. Clean JSON for bettors, odds modellers, fantasy apps and AI agents.

Pricing

from $1.00 / 1,000 games

Rating

0.0

(0)

Developer

Rowfeed

Rowfeed

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

8 days ago

Last modified

Share

ESPN Sports Data Scraper – Scores, Schedules, Standings & Odds

Get ESPN's live scores, schedules, standings, team lists and box scores as clean JSON rows, across NFL, NBA, MLB, NHL, college football and basketball, WNBA, the top five European soccer leagues, MLS, the Champions League and UFC. Built for bettors and odds modellers, fantasy apps, sports media, dashboards and AI agents that need reliable sports data without a login, an API key or a headless browser. Plain HTTPS calls to ESPN's own public API with retries and a silent-failure check, so a scheduled run keeps working when ESPN hiccups.

What you get

  • Games – date, status, venue, home/away teams and scores, winner, broadcast network and, when a sportsbook has posted a line, the spread, over/under and moneylines.
  • Standings – wins, losses, ties, win percentage, points for/against, streak and rank per team, grouped by conference or table.
  • Teams – every team's ID, name, abbreviation, location, colors and logo.
  • Game summaries – box score totals per team (line by period/inning), statistical leaders, odds and a play-by-play list (capped at 500 plays).
  • Injury reports – current injury-report entries per team: player, position, status (Out, Questionable, Doubtful, Injured Reserve, Active), body part and the public news blurb explaining it. See Injury reports below.

Sample row

One NFL game from the default run:

{
"type": "game",
"league": "nfl",
"sport": "football",
"event_id": "401872656",
"name": "New England Patriots at Seattle Seahawks",
"short_name": "NE @ SEA",
"date": "2026-09-10T00:20Z",
"status": "STATUS_SCHEDULED",
"status_detail": "Wed, September 9th at 8:20 PM EDT",
"home_team": "Seattle Seahawks",
"home_abbrev": "SEA",
"home_score": 0.0,
"away_team": "New England Patriots",
"away_abbrev": "NE",
"away_score": 0.0,
"winner": null,
"broadcast": "NBC",
"url": "https://www.espn.com/nfl/game/_/gameId/401872656/patriots-seahawks",
"odds_provider": "DraftKings",
"spread": -3.0,
"over_under": 44.5,
"home_moneyline": -166.0,
"away_moneyline": 140.0,
"scraped_at": "2026-09-09T16:27:19+00:00"
}

Supported leagues

Input keyLeague
nflNFL
college-footballNCAA football
nbaNBA
wnbaWNBA
mens-college-basketballNCAA men's basketball
mlbMLB
nhlNHL
eng.1English Premier League
esp.1La Liga
ger.1Bundesliga
ita.1Serie A
fra.1Ligue 1
usa.1MLS
uefa.championsUEFA Champions League
ufcUFC

Injury reports

Set dataType to injuries to get the current injury report, one row per team (not per player). Each row lists every player currently on that team's report: status, body part, side/detail and expected return date when ESPN has one, plus the short public blurb explaining the entry. Covers every league where ESPN publishes this feed: NFL, NBA, MLB, NHL, WNBA, college football and men's college basketball. A league ESPN doesn't cover for injuries never stops the run: UFC comes back as an error row, while soccer leagues (and leagues in their off-season) return an empty report from ESPN, so they produce no rows and nothing is charged; the run log names each league with 0 rows.

Example input:

{ "leagues": ["nfl"], "dataType": "injuries" }

Example output row (Arizona Cardinals, shortened – ESPN caps each team's list at 25 entries, newest first; this shows 3 of them):

{
"type": "injuries",
"league": "nfl",
"team_id": "22",
"team": "Arizona Cardinals",
"abbrev": "ARI",
"injured_count": 6,
"listed_count": 25,
"injuries": [
{
"athlete_id": "4698113",
"athlete": "Max Melton",
"position": "CB",
"status": "Questionable",
"injury": "Toe",
"side": "Left",
"return_date": "2026-09-27",
"date": "2026-09-24T02:12Z",
"short_comment": "Melton (toe) did not participate at the Cardinals' practice Wednesday, Josh Weinfuss of ESPN.com reports."
},
{
"athlete_id": "4685408",
"athlete": "Will Johnson",
"position": "CB",
"status": "Injured Reserve",
"injury": "Neck",
"return_date": "2027-02-15",
"date": "2026-09-23T22:14Z",
"short_comment": "The Cardinals placed Johnson (neck) on injured reserve Wednesday, Darren Urban of the team's official site reports."
},
{
"athlete_id": "3051775",
"athlete": "Andrew Billings",
"position": "DT",
"status": "Active",
"injury": null,
"date": "2026-09-24T01:54Z",
"short_comment": "Billings (knee) did not appear on the Cardinals' injury report Wednesday, Josh Weinfuss of ESPN.com reports."
}
],
"scraped_at": "2026-09-24T11:39:14+00:00"
}

injured_count counts players who are not cleared (any status other than Active); listed_count counts every entry on the team's report. On 24 Sep 2026 the NFL report had 800 entries, of which 215 were injured (Questionable 161, Injured Reserve 25, Out 22, Doubtful 7) and 585 cleared (Active).

Pricing: charged one Team event ($0.0005) per team; all of that team's injuries are included in that one charge, so a full NFL run (32 teams) costs about $0.016.

Data scope: public injury status as ESPN itself publishes it – player, position, team, status, body part, side/detail, return date and the short public news blurb (short_comment). This Actor never outputs ESPN's long-form medical write-up or any contact/personal field beyond name, position and team.

Limitations: ESPN caps each team at its 25 most recent report entries, so a busy team's older entries roll off; most entries are status: "Active" (cleared/no longer a concern) rather than a current injury – filter on status if you only want players actually out, questionable, doubtful or on IR. Update timing depends on ESPN, not this Actor. A league without an injuries feed on ESPN's side returns one error row for that league and the run continues.

Input

FieldDefaultWhat it does
leagues["nfl","nba","mlb","nhl"]Which leagues to pull, from the table above.
dataTypescoreboardscoreboard/schedule (games), standings, teams, summary (box score per event ID), or injuries (current injury report per team).
dateFrom / dateTotoday / same as dateFromDate range (YYYY-MM-DD) for scoreboard/schedule. Capped at 31 days.
daysAhead1Rolling window from today when no dates are set: 7 = this week. Keeps scheduled runs current.
eventIds[]Event IDs to summarize (from a scoreboard row's event_id). Only used by summary.
maxEvents200Row cap; each row is one charged event.
includeOddstrueInclude spread/over-under/moneyline columns on game rows when a sportsbook has posted a line.

Pricing

Pay per event, no subscription: $1 per 1,000 games, $0.50 per 1,000 standings or teams, $5 per 1,000 game summaries. A default run (16 games today) costs about $0.016. Set a maximum charge on the run and the Actor stops cleanly when it is reached.

Use it from your tools

  • API and SDKs – call it via the Apify API or the official Python/JavaScript clients: one call to start the run, one to fetch the dataset as JSON or CSV.
  • Schedules – run it hourly or daily inside Apify and push new scores or standings to Google Sheets, a webhook or your own storage automatically.
  • n8n, Make and Zapier – trigger runs and pipe game data into a workflow through Apify's integration for each.
  • AI agents and MCP – this Actor is eligible for agentic use via Apify's MCP server and supports pay-per-event pricing, so an agent can call it mid-task and pay only per game, standing or team it actually reads.
  • Webhooks – fire on run finished to kick off the next step in a pipeline as soon as fresh scores land.

Details

  • Source: ESPN's public site API (site.api.espn.com). No authentication. Requests use a generic client User-Agent — ESPN's edge blocks branded/browser-style User-Agent strings, so this Actor doesn't spoof one, it just doesn't send a distinguishing header.
  • Reliability: 429 and 5xx responses are retried with exponential backoff (5 tries); a 200 without the expected data counts as a failure. One bad league or event never stops the run — it becomes an error row and the rest continues. A run fails only when it produced no rows and hit errors; no games today for a league is a successful, empty result for that league.
  • Run stats: the STATS record in the run's key-value store holds request and error counts per category (network, rate_limit, blocked, not_found, other).
  • Standings coverage varies by sport: American leagues expose win percentage, games back and streak; soccer leagues expose league points and rank instead. Missing fields are null, not an error.
  • Output: one dataset row per game, standing, team, summary or team injury report, tagged with a type column. The Overview table shows type, league, name, date, status, scores, spread and over/under; the injuries dataType uses its own Injuries table view. Export as JSON, CSV or Excel, fetch through the Apify API, or schedule runs into Google Sheets, Make, Zapier or your own code.

Not affiliated with ESPN.