ESPN Scraper: Scores, Box Scores, Play-by-Play & Odds avatar

ESPN Scraper: Scores, Box Scores, Play-by-Play & Odds

Pricing

Pay per usage

Go to Apify Store
ESPN Scraper: Scores, Box Scores, Play-by-Play & Odds

ESPN Scraper: Scores, Box Scores, Play-by-Play & Odds

Scores, schedules and results for the NFL, NBA, MLB, NHL, WNBA, college football and basketball, MLS and 10 more soccer leagues from ESPN, with optional box scores, play-by-play, injuries, win probability and opening and closing betting lines.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Keelwright

Keelwright

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

2 days ago

Last modified

Security

Limited permissions

Share

ESPN Scraper: scores, box scores, play-by-play and betting lines

Get every game ESPN lists for the NFL, NBA, MLB, NHL, WNBA, college football and basketball, MLS and 10 more soccer leagues as clean JSON, CSV or Excel: scores by period, status, teams with records and rankings, venue, attendance, TV channels and the current betting line. Add box scores, play-by-play, injury reports, win probability and opening and closing lines when you need them.

  • 22 leagues in one Actor. NFL, college football (FBS and FCS), UFL, NBA, WNBA, G League, men's and women's college basketball (Division I), MLB, NHL, MLS, NWSL, Liga MX, Premier League, EFL Championship, LaLiga, Bundesliga, Serie A, Ligue 1, Champions League and Europa League.
  • Any day, past or upcoming. Today's scores, last night's results, next week's schedule or a whole season. All 1,401 NBA games of the 2025-26 season, preseason to the Finals, come back in about 35 seconds.
  • Box scores for every sport. Passing, rushing, receiving and defense in football; batting and pitching with innings pitched in baseball; time on ice and save percentage in hockey; lineups, formations and substitutes in soccer.
  • Play-by-play. Every play with period, clock, team and running score. Football plays carry the drive, down, distance and field position.
  • Opening and closing lines. Moneyline, spread and total with their opening and closing prices, kept after the game, plus ESPN's win probability before kick-off.
  • Injury reports. Both teams' injured players with status, injury and expected return date.
  • Results in date order, ready for a spreadsheet or a model, and only changed games on a schedule for live scores.

What can I use ESPN data for?

  • Betting models and backtesting: final scores with opening and closing moneylines, spreads and totals.
  • Fantasy sports and DFS: player box scores, injury reports, and probable pitchers and goalies.
  • Live score apps, bots and widgets: scores, periods and clocks every few minutes, saving only the games that changed.
  • Analytics and research: season results, team statistics and play-by-play for models, dashboards and papers.
  • Content and media: schedules, results, TV channels and recap headlines for newsletters, social posts and websites.

How to scrape ESPN scores

  1. Click Try for free.
  2. Pick the Leagues.
  3. Set the From date and To date: a date such as 2025-09-04, or a period such as 7 days, counted back from today in From date and ahead in To date. Leave both empty for today's games.
  4. Optionally filter by Teams, Game status or Part of the season, and tick Box score, Play-by-play, Opening and closing lines or Injury report.
  5. Click Start and download the results as JSON, CSV, Excel or HTML, or read them through the API.

Input examples

Today's games in the four major leagues:

{
"leagues": ["nfl", "nba", "mlb", "nhl"]
}

Yesterday's and today's finished NBA games with box scores and closing lines:

{
"leagues": ["nba"],
"dateFrom": "1 day",
"statuses": ["final"],
"includeBoxScore": true,
"includeOdds": true
}

The next seven days of NFL and college football with lines and injury reports:

{
"leagues": ["nfl", "college-football"],
"dateTo": "7 days",
"includeOdds": true,
"includeInjuries": true
}

One team's season, regular season and playoffs:

{
"leagues": ["nba"],
"teams": ["Lakers"],
"dateFrom": "2025-10-01",
"dateTo": "2026-06-30",
"seasonTypes": ["regular", "postseason"]
}

Live scores: run this every 5 minutes on a schedule to get only the games whose score or status changed.

{
"leagues": ["nfl", "college-football"],
"statuses": ["live", "final"],
"onlyChanged": true
}

What data do you get?

One row per game. Every row has:

FieldWhat it holds
gameId, urlESPN's game id and the game's page on espn.com
league, sport, season, weekLeague key and name, the season year and part (preseason, regular, postseason, other) and the football week
dateStart time in UTC
status, statusDetailscheduled, live, final, postponed, delayed, suspended or cancelled, and ESPN's own text such as Final/OT or Sun, October 25th at 8:20 PM EDT
period, clockCurrent or last period, inning or half, and the game clock while live
home, awayTeam id, name, abbreviation, score, score per period, record, college ranking, soccer form, team statistics, leaders and probable pitchers or goalies
winnerhome, away or draw once the game is final
venue, neutralSite, attendance, weather, broadcastsStadium and city, crowd, forecast for upcoming outdoor games, TV and streaming channels
note, series, headlinePlayoff round (ALCS - Game 4), series score and the recap headline
oddsThe line ESPN shows (DraftKings): moneyline, spread and total in American odds, and the favorite
keyEventsSoccer goals, cards and substitutions with the minute

With the extra options:

OptionAdds
Box scoreboxScore: team totals, every player's stat line (including players who did not play, with the reason) and the officials
Play-by-playplayByPlay: every play in order
Opening and closing linesodds with opening prices for every game, finished games too, and winProbability before the game
Injury reportinjuries: player, position, status, injury, expected return and when ESPN updated it

Output example

A finished NFL game with every option on (team statistics, players, plays and injuries cut to one or two entries):

{
"gameId": "401873008",
"url": "https://www.espn.com/nfl/game/_/gameId/401873008/commanders-49ers",
"league": {
"key": "nfl",
"name": "NFL",
"abbreviation": "NFL"
},
"sport": "football",
"season": {
"year": 2026,
"type": "regular",
"label": "regular-season"
},
"week": 6,
"date": "2026-10-20T00:15:00.000Z",
"status": "final",
"statusDetail": "Final",
"period": 4,
"clock": null,
"name": "Washington Commanders at San Francisco 49ers",
"shortName": "WSH @ SF",
"home": {
"id": "25",
"name": "San Francisco 49ers",
"shortName": "49ers",
"abbreviation": "SF",
"location": "San Francisco",
"score": 23,
"linescores": [13, 7, 3, 0],
"winner": true,
"record": "6-0",
"rank": null,
"form": null,
"statistics": {},
"leaders": [
{
"category": "rushingYards",
"player": "Christian McCaffrey",
"playerId": "3117251",
"value": "16 CAR, 64 YDS, 2 TD"
},
{
"category": "receivingYards",
"player": "Mike Evans",
"playerId": "16737",
"value": "3 REC, 94 YDS"
}
],
"probables": []
},
"away": {
"id": "28",
"name": "Washington Commanders",
"shortName": "Commanders",
"abbreviation": "WSH",
"location": "Washington",
"score": 17,
"linescores": [3, 0, 7, 7],
"winner": false,
"record": "1-4-1",
"rank": null,
"form": null,
"statistics": {},
"leaders": [
{
"category": "passingYards",
"player": "Jayden Daniels",
"playerId": "4426348",
"value": "29/40, 300 YDS, 2 TD"
}
],
"probables": []
},
"winner": "home",
"venue": {
"name": "Levi's Stadium",
"city": "Santa Clara",
"state": "CA",
"country": "USA",
"indoor": false
},
"neutralSite": false,
"attendance": 71561,
"weather": null,
"broadcasts": ["ESPN", "ABC"],
"note": null,
"series": null,
"headline": "Brock Purdy and the offense staked San Francisco to a big lead. The defense made sure the 49ers remained undefeated.",
"odds": {
"provider": "DraftKings",
"details": "SF -7.5",
"favorite": "home",
"moneyline": {
"home": -410,
"away": 320,
"draw": null,
"homeOpen": -250,
"awayOpen": 205,
"drawOpen": null
},
"spread": {
"home": -7.5,
"away": 7.5,
"homeOdds": -102,
"awayOdds": -118,
"homeOpen": -5.5,
"awayOpen": 5.5,
"homeOpenOdds": -110,
"awayOpenOdds": -110
},
"total": {
"line": 51.5,
"overOdds": -110,
"underOdds": -110,
"openLine": 50.5,
"openOverOdds": -110,
"openUnderOdds": -110
}
},
"winProbability": null,
"injuries": [
{
"side": "home",
"team": "SF",
"player": "Upton Stout",
"playerId": "4565200",
"position": "CB",
"status": "Questionable",
"injury": "Shoulder - AC Joint - Sprain",
"returnDate": "2026-10-25",
"updated": "2026-10-20T23:51:00.000Z"
}
],
"boxScore": {
"teams": [
{
"side": "away",
"team": "WSH",
"statistics": {
"firstDowns": 19,
"firstDownsPassing": 13,
"firstDownsRushing": 2,
"firstDownsPenalty": 4,
"thirdDownEff": "3-12",
"fourthDownEff": "1-3"
}
},
{
"side": "home",
"team": "SF",
"statistics": {
"firstDowns": 20,
"firstDownsPassing": 9,
"firstDownsRushing": 11,
"firstDownsPenalty": 0,
"thirdDownEff": "7-14",
"fourthDownEff": "2-2"
}
}
],
"players": [
{
"side": "away",
"team": "WSH",
"playerId": "4426348",
"name": "Jayden Daniels",
"jersey": "5",
"position": null,
"starter": null,
"didNotPlay": false,
"reason": null,
"stats": {
"passing": {
"completions": 29,
"passingAttempts": 40,
"passingYards": 300,
"yardsPerPassAttempt": 7.5,
"passingTouchdowns": 2,
"interceptions": 0,
"sacks": 4,
"sackYardsLost": 39,
"adjQBR": 44.6,
"QBRating": 110.4
},
"rushing": {
"rushingAttempts": 4,
"rushingYards": 10,
"yardsPerRushAttempt": 2.5,
"rushingTouchdowns": 0,
"longRushing": 4
}
}
}
],
"officials": ["Trawick Boger (Field Judge)", "Adrian Hill (Referee)"]
},
"playByPlay": [
{
"period": 1,
"clock": "14:55",
"team": "SF",
"type": "Pass Reception",
"text": "B.Purdy pass short left to C.McCaffrey to SF 42 for 6 yards (A.Robertson).",
"homeScore": 0,
"awayScore": 0,
"scoringPlay": false,
"drive": 1,
"down": 1,
"distance": 10,
"yardLine": "SF 36"
}
],
"scrapedAt": "2026-10-21T16:17:21.518Z"
}

The Games and Betting lines tabs of the dataset show the main columns as tables. Open a row or export JSON for everything.

How much does it cost?

Pay-per-event pricing starts on 20 November 2026. Until then the Actor costs only the Apify platform usage of your runs, which is small.

From 20 November 2026 you pay only for the games you get (pay per event); Apify platform usage is included.

WhatPrice
Game$3.00 per 1,000 games
Game with details$6.00 per 1,000 games
Run start$0.05 per 1,000 runs

A game costs the higher price only when it comes with at least one of the extra parts you asked for. An upcoming game that has no box score yet, or a game ESPN has no game page for, costs the lower price.

Examples:

  • One evening of NBA and NHL games (about 20 games): about $0.06.
  • All 1,401 NBA games of the 2025-26 season: about $4.20.
  • One NFL week with box scores, play-by-play, lines and injury reports (about 15 games): about $0.09.

Cap any run with Max results or with the maximum cost per run in the run options; the run stops cleanly at the limit. Apify's free plan includes $5 of monthly credit, enough for about 1,600 games.

Tips

  • Days follow US Eastern time, as ESPN lists them: a 10:30 pm game in New York belongs to that day, although its date (UTC) is already the next day.
  • Box scores and play-by-play come for games that have started. For upcoming games, use the lines and the injury report.
  • Closing lines stay. The scoreboard drops the line once a game is over; Opening and closing lines keeps it for finished games, with the opening prices.
  • The injury report is the current one. For a past game it shows today's report, not the one at game time.
  • Season years follow ESPN. Basketball and hockey seasons carry the year they end (the 2025-26 NBA season is 2026); football, baseball and soccer seasons carry the year they start. The NBA play-in counts as postseason, all-star games as other.
  • College sports cover every FBS and FCS football game and every Division I basketball game, not only ranked teams. A game between an FBS and an FCS team is saved once.
  • Long ranges. One run reads up to 1,100 league-days, about three seasons of one league. Split longer ranges into several runs.
  • How far back. Scores go back to at least 2005 for the NFL, MLB, NHL, college football and the Premier League, and to 1999 for the NBA. Box scores and play-by-play can be thinner for older games; a part ESPN doesn't have is null.
  • Integrations. Send results to Google Sheets, Slack, Zapier, Make or your own webhook with Apify integrations, or call the Actor through the API.

FAQ

How fast is it? A day of several leagues takes a few seconds. A whole season of one league takes about 35 seconds. With every extra part on, 50 games take about 10 seconds.

Which bookmaker are the lines from? The lines ESPN shows, currently from DraftKings. They are American odds: -150 means you risk 150 to win 100, +130 means you win 130 on 100.

Can I get live scores? Yes. Schedule a run every few minutes with Only new or changed games on. Each run returns only the games whose status, score, period or start time changed since the last run with the same settings.

Do I need a proxy? No. ESPN answers Apify's servers directly. The proxy option is there in case that changes.

Is it legal to scrape ESPN? This Actor reads publicly available sports data: scores, statistics, published betting lines and the public names of professional and college athletes. It does not log in or collect private information. Check the source's terms and your local laws for your use case, especially for commercial use.

Something is missing or broken? Open an issue in the Issues tab with the run link, and it will be looked at.

ESPN Scraper is an independent tool. It is not affiliated with, endorsed by or connected to ESPN, Inc., or any league or team. Betting lines are shown for information only.