ESPN Scraper: Scores, Schedules & Odds avatar

ESPN Scraper: Scores, Schedules & Odds

Pricing

from $0.48 / 1,000 games

Go to Apify Store
ESPN Scraper: Scores, Schedules & Odds

ESPN Scraper: Scores, Schedules & Odds

Extract live scores, schedules and betting odds from ESPN's public API for NFL, NBA, WNBA, MLB, NHL, NCAA football, NCAA basketball and Premier League soccer.

Pricing

from $0.48 / 1,000 games

Rating

0.0

(0)

Developer

Vivien MORVAN

Vivien MORVAN

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

3 hours ago

Last modified

Categories

Security

Limited permissions

Share

Scrape live scores, schedules and betting odds from ESPN's public JSON API for NFL, NBA, WNBA, MLB, NHL, NCAA football, NCAA basketball and Premier League soccer, and get clean structured data.

At a glance

What you getScores, schedules and odds from ESPN: league, date, teams, scores, status, venue, broadcast, winner, odds.
Price$0.60 per 1,000 games: a 50-game test run costs about $0.04, start fee included.
Speed50 games in about 15 seconds. No login, no proxy, no browser to configure.
Try itClick Try for free: the form is already filled with league nba, mode upcoming, days 7, maxItems 50.
Keep it freshSchedule it daily and keep only the new games: see "Monitor new games daily" below.

What you can do with it

  • Track live and final scores: pull recent and in-progress games with the full score, venue and broadcast.
  • Watch upcoming games and odds: get scheduled games with pre-match spread, moneyline and total before they start.
  • Feed a scores widget or alert: run daily and get every game of the day for a league in one call.
  • Build a multi-league dataset: run the same actor once per league to compare schedules, scores and odds side by side.

Input

FieldWhat it does
Leaguenfl, nba, wnba, mlb, nhl, ncaaf, ncaab or eng.1 (Premier League).
Moderesults reads games going backward from today, with final or live scores. upcoming reads games going forward from today, with pre-match odds when published.
Number of daysHow many calendar days to read (default 14).
Maximum number of gamesThe run stops once this many games are saved.

Output

One record per game. Three real results from a live run (2026-11-02), showing a finished game, a scheduled game with odds, and a scheduled game with the away team favored:

[
{
"league": "nba",
"id": "401909907",
"url": "https://www.espn.com/nba/game/_/gameId/401909907/thunder-cavaliers",
"date": "2026-11-03T00:00Z",
"name": "Oklahoma City Thunder at Cleveland Cavaliers",
"shortName": "OKC @ CLE",
"state": "post",
"statusDetail": "Final",
"completed": true,
"venue": "Rocket Arena",
"venueCity": "Cleveland",
"homeTeam": "Cleveland Cavaliers",
"homeTeamAbbreviation": "CLE",
"homeScore": 112,
"awayTeam": "Oklahoma City Thunder",
"awayTeamAbbreviation": "OKC",
"awayScore": 117,
"winner": "away",
"broadcast": "NBCSN",
"odds": null
},
{
"league": "nba",
"id": "401909908",
"url": "https://www.espn.com/nba/game/_/gameId/401909908/pistons-hornets",
"date": "2026-11-03T00:30Z",
"name": "Detroit Pistons at Charlotte Hornets",
"shortName": "DET @ CHA",
"state": "pre",
"statusDetail": "Mon, November 2nd at 7:30 PM EST",
"completed": false,
"venue": "Spectrum Center",
"venueCity": "Charlotte",
"homeTeam": "Charlotte Hornets",
"homeTeamAbbreviation": "CHA",
"homeScore": 0,
"awayTeam": "Detroit Pistons",
"awayTeamAbbreviation": "DET",
"awayScore": 0,
"winner": null,
"broadcast": "NBA League Pass",
"odds": {
"provider": "DraftKings",
"details": "DET -6.5",
"spread": 6.5,
"overUnder": 209.5,
"moneylineHome": "+196",
"moneylineAway": "-237",
"favorite": "away"
}
},
{
"league": "nba",
"id": "401909909",
"url": "https://www.espn.com/nba/game/_/gameId/401909909/hawks-pacers",
"date": "2026-11-03T00:30Z",
"name": "Atlanta Hawks at Indiana Pacers",
"shortName": "ATL @ IND",
"state": "pre",
"statusDetail": "Mon, November 2nd at 7:30 PM EST",
"completed": false,
"venue": "Gainbridge Fieldhouse",
"venueCity": "Indianapolis",
"homeTeam": "Indiana Pacers",
"homeTeamAbbreviation": "IND",
"homeScore": 0,
"awayTeam": "Atlanta Hawks",
"awayTeamAbbreviation": "ATL",
"awayScore": 0,
"winner": null,
"broadcast": "NBA League Pass",
"odds": {
"provider": "DraftKings",
"details": "ATL -9.5",
"spread": 9.5,
"overUnder": 227.5,
"moneylineHome": "+311",
"moneylineAway": "-394",
"favorite": "away"
}
}
]

Export the dataset as JSON, CSV or Excel, or read it through the Apify API.

Why this one

  • One actor, eight leagues. NFL, NBA, WNBA, MLB, NHL, NCAA football, NCAA basketball and Premier League all use the same fields, instead of a different actor per sport.
  • Odds included. Spread, moneyline and total are already parsed from the raw API response, not just scores.
  • No browser, no proxy. Reads ESPN's own public JSON API directly, so runs are fast and cheap.

Good to know

  • odds is null until a sportsbook has posted a line for the game, and is never backfilled for games already finished.
  • winner is null until the game is completed; homeScore/awayScore are 0 before the game starts.
  • Only league, team and game data is collected: no player or fan personal data of any kind.

Who uses it

  • Monitoring: schedule a run and compare records between runs on their id.
  • Analysis: every record has the same fields, ready for a spreadsheet, a database or a dashboard.

Pricing

Pay per result: $0.60 per 1,000 games, plus $0.01 per run start with the default 4 GB of memory. For example, 100 games cost about $0.07. You only pay for the games you receive, and platform usage is included in that price. Store discounts apply automatically on paid Apify plans: up to 20% off every event on the higher tiers.

Run it from your code

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('bibian/espn-scores-scraper').call({
league: 'nba',
mode: 'upcoming',
days: 7,
maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Python:

from apify_client import ApifyClient
client = ApifyClient(token="<APIFY_TOKEN>")
run = client.actor("bibian/espn-scores-scraper").call(run_input={
"league": "nba",
"mode": "upcoming",
"days": 7,
"maxItems": 50
})
items = client.dataset(run["defaultDatasetId"]).list_items().items

Monitor new games daily and connect your tools

  1. Schedule it. Save a task for a league and schedule it as often as you need with Apify Schedules. Use state and completed to separate finished games from games in progress. Tick Only new results in the input and each run returns, and charges, only the games that earlier runs of the same search did not deliver.
  2. Push the results where you work. Add an Apify integration or a webhook to the task: Google Sheets, Slack, Make, Zapier, n8n or your own endpoint, triggered at the end of every run.
  3. Call it from your stack. The API and the JavaScript and Python clients return the dataset as JSON, CSV or Excel.
  4. Let an AI agent use it. Through the Apify MCP server, assistants such as Claude or ChatGPT can search the Store, read this page and run the actor as a tool.

Frequently asked questions

Do I need an account, cookies or a proxy for ESPN? No. The actor reads publicly visible pages only.

Which formats can I export? JSON, CSV, Excel, XML, HTML table or RSS, from the dataset page or through the API.

Is it legal to scrape? The actor collects publicly visible scores and schedules and respects the robots.txt rules of the site. How you use the data is your responsibility: check the site's terms and the laws that apply to you, for example the GDPR.

Need another site, a missing field or a new filter? Open an issue in the Issues tab and say what you need, with an example URL if you have one. Requests are read, and the most asked ones are built next.

Something does not work? Open an issue in the Issues tab. Every public actor is test-run daily and the broken ones are repaired.

Did this save you time? A short review on the Store page helps other people find the actor, and tells me what to improve next.

More data scrapers by the same author