ESPN Scraper: Live Scores, Odds & Box Scores API avatar

ESPN Scraper: Live Scores, Odds & Box Scores API

Pricing

from $0.80 / 1,000 records

Go to Apify Store
ESPN Scraper: Live Scores, Odds & Box Scores API

ESPN Scraper: Live Scores, Odds & Box Scores API

ESPN sports data for NFL, NBA, MLB, NHL, college sports, top soccer leagues and UFC: live scores and schedules (filter by status, start time, TV network, home or away), betting odds, player box scores, standings, rosters, injuries and news.

Pricing

from $0.80 / 1,000 records

Rating

0.0

(0)

Developer

Tinda Cloud

Tinda Cloud

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

21 days ago

Last modified

Categories

Security

Limited permissions

Share

ESPN Scores API: NFL, NBA, MLB, NHL, Soccer & UFC

Structured sports data from ESPN for the NFL, NBA, MLB, NHL, WNBA, college football & basketball, the Premier League, LaLiga, Bundesliga, Serie A, Ligue 1, MLS, Liga MX, the Champions League and UFC, all in one actor.

Choose leagues and data types, set a date range, and get clean rows ready for spreadsheets, databases, betting models, fantasy tools or AI agents.

Why use this ESPN Scraper?

Typical scrapersThis Actor
One league, one data type20+ leagues — NFL, NBA, MLB, NHL, WNBA, college, top European football — in one run
Scores onlyGames, box scores, standings, rosters, injuries, news and odds
Today onlyAny date range up to 400 days per run, including upcoming schedules with odds
Filter after downloadteams, homeAway, gameStatus (live/final), startingWithinHours and broadcastNetworks
Need an API keyNo key, no login, no account

How to use

  1. Sign up for Apify — the free plan's monthly credit is enough to try this Actor.
  2. Open ESPN Scraper, fill in the input (the form is pre-filled with a working example) and click Start.
  3. Watch results stream into the dataset table while the run is going.
  4. Export as JSON, CSV, Excel, XML, HTML or RSS — or pull the results from your own code with the Apify API.

What data can this scraper extract?

Data typeOne row perIncludes
Gamesgamedate, status, score by period, records, venue, attendance, TV, betting odds (spread, over/under, moneylines), stat leaders
Box scoresplayer per gameevery stat column ESPN shows. Football groups are merged (passing_YDS, rushing_TD, …); soccer includes goals, assists, shots, saves, cards
Standingsteamwins, losses, ties, win %, games behind, points, seed + all standing stats
TeamsteamIDs, abbreviations, colors, logos, links
Rostersplayerposition, jersey, age, date of birth, height, weight, birthplace, college, experience, status, injuries
Injuriesinjurystatus (Out/Questionable…), injury, body part, expected return, date, reporter comments
Newsarticleheadline, summary, publish time, teams & athletes tagged, image, link

Games with future dates return the schedule with pre-game odds, which is useful for pricing models and previews.

How to scrape ESPN sports data

{
"leagues": ["nfl", "nba", "eng.1"],
"dataTypes": ["games", "boxScores", "injuries"],
"startDate": "2026-09-13",
"endDate": "2026-09-15",
"teams": ["KC", "BUF", "Arsenal"],
"maxResults": 5000
}
  • Dates: startDate / endDate apply to games and box scores. Defaults are yesterday and today, and one run covers up to 400 days (e.g. a full season).
  • Teams: teams accepts abbreviations or full names and is optional.
  • Season: season selects a past season for standings.

Input reference

Every option at a glance. A minimal input that works as-is:

{
"leagues": [
"nba"
],
"dataTypes": [
"games"
],
"homeAway": "any",
"gameStatus": "any",
"maxResults": 1000
}

All fields:

  • leagues (Leagues) — Leagues to collect. Any of: nfl, college-football, nba, wnba, mens-college-basketball, womens-college-basketball, mlb, nhl, eng.1, esp.1, ger.1, ita.1, fra.1, usa.1, mex.1, uefa.champions, ufc.
  • dataTypes (Data) — What to collect. Games and box scores use the date range below; the others return current data. Any of: games, boxScores, standings, teams, rosters, injuries, news.
  • startDate (Start date) — First game day (YYYY-MM-DD). Default: yesterday. Upcoming dates return schedules with odds.
  • endDate (End date) — Last game day (YYYY-MM-DD). Default: today. Up to 400 days per run.
  • teams (Teams (optional)) — Limit to these teams by abbreviation or full name, e.g. “LAL”, “Boston Celtics”, “ARS”.
  • homeAway (Home or away (with Teams)) — Used together with Teams: keep only home games or only away games of those teams. Options: any, home (Only when the team plays at home), away (Only when the team plays away); default "any".
  • gameStatus (Game status) — Keep only games in this state. “Live now” gives in-progress scores with period and clock. Options: any, scheduled (Scheduled (not started)), live (Live now), final; default "any".
  • startingWithinHours (Starting within (hours)) — Keep only games that start in the next N hours, e.g. 24 for the next day's schedule. Extends the date range automatically.
  • broadcastNetworks (TV networks) — Keep only games broadcast on these networks (partial match), e.g. “ESPN”, “TNT”, “Prime Video”.
  • season (Standings season) — Season year for standings, e.g. 2025. Default: current season.
  • maxResults (Max results) — Stop after this many records. You are charged per record. Default 1000.
  • proxy (Proxy) — Apify datacenter proxy works for ESPN.

What the ESPN sports data output looks like

Finished game

{
"recordType": "game",
"league": "nba",
"gameId": "401810723",
"name": "San Antonio Spurs at New York Knicks",
"date": "2026-03-01T18:00Z",
"status": "Final",
"home": {
"name": "New York Knicks",
"abbreviation": "NY",
"score": 114,
"winner": true,
"record": "39-22",
"linescores": [
22,
29,
29,
34
]
},
"away": {
"name": "San Antonio Spurs",
"abbreviation": "SA",
"score": 89,
"winner": false,
"record": "43-17"
},
"venue": "Madison Square Garden",
"attendance": 19812,
"leaders": [
{
"team": "NY",
"category": "Points",
"player": "Mikal Bridges",
"value": "25"
},
{
"team": "NY",
"category": "Rebounds",
"player": "Karl-Anthony Towns",
"value": "14"
}
]
}

Upcoming game with odds

{
"recordType": "game",
"league": "nfl",
"gameId": "401872932",
"name": "Detroit Lions at Buffalo Bills",
"date": "2026-09-18T00:15Z",
"status": "Scheduled",
"odds": {
"provider": "DraftKings",
"details": "BUF -5.5",
"spread": -5.5,
"overUnder": 54.5,
"overOdds": null,
"underOdds": null,
"homeMoneyline": -238,
"awayMoneyline": 195,
"homeFavorite": true
}
}

Player box score

{
"recordType": "playerGameStats",
"league": "nba",
"gameId": "401810723",
"date": "2026-03-01T18:00Z",
"team": "SA",
"opponent": "NY",
"player": "Julian Champagnie",
"position": "F",
"starter": true,
"stats": { "MIN": "24", "PTS": "3", "FG": "1-4", "3PT": "1-3", "REB": "4", "AST": "1", "+/-": "-20" }
}

ESPN removes pre-game odds from finished games, so collect upcoming dates if you need lines.

What can you do with ESPN sports data data?

  • Sports betting & DFS models: historical results, player stat lines and closing lines.
  • Fantasy tools: box scores, injuries and rosters in one feed.
  • Media & newsletters: daily scores, standings and headlines.
  • Analytics & research: season-long datasets across many leagues.
  • AI agents & chatbots: fresh, structured sports facts.

How much does it cost?

Pay per record (a game, a player's stat line, a standings row, …), plus a negligible start fee per run. Set Max results or a spending limit to cap cost.

How to get only live games, tonight's schedule or one TV network

Four filters work on top of the date range:

FieldExampleWhat you get
gameStatusliveOnly games in progress, with period and clock
startingWithinHours24Games that start in the next 24 hours (the date range extends itself)
broadcastNetworks["ESPN", "Prime Video"]Only games on those networks (partial match)
homeAway + teamshome + ["LAL"]Only the Lakers' home games

Each game row also has state: pre (scheduled), in (live) or post (final).

Limits you should know about

  • Data comes from ESPN's public web endpoints. Availability of odds, leaders and stats varies by league and game.
  • Very old seasons may have fewer fields.
  • If something breaks after an ESPN change, open an issue and it will be fixed quickly.

Pricing — what you pay per record

This Actor uses pay-per-event pricing: no monthly rental, you pay for the results you get. Prices per 1,000 results by Apify plan:

EventFree planBronzeSilverGold+
record — One record saved to the dataset (game, player stat line, standing, roster player, injury or news article)$1.00$0.90$0.85$0.80

There is also a small start fee of $0.00005 per GB of memory ($0.00005 per run at the default 1 GB). Platform compute is included in the price — you are not billed separately for run time. Set a maximum total charge on the run if you want a hard cap, and use the input limits to control how much is fetched. The current prices are always on the Pricing tab.

Tips

  • For tonight's slate use startingWithinHours: 24 — the date range extends itself.
  • For live scores, schedule a run every few minutes with gameStatus: live.
  • Teams accept abbreviations or full names — LAL, Boston Celtics, ARS.
  • Box scores over a long date range produce many rows; set maxResults to cap the bill.
  • Keep the default proxy setting — it is only used as a fallback when a direct request is blocked.
  • Rows the Actor cannot read are logged and skipped, never charged — check the run log if a count looks low.

Automate & schedule

Run this Actor on autopilot and pull results into your own stack:

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });
const run = await client.actor('tindacloud/espn-sports-data').call({
"leagues": [
"nba"
],
"dataTypes": [
"games"
],
"homeAway": "any",
"gameStatus": "any",
"maxResults": 1000
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} records`);

Python

from apify_client import ApifyClient
client = ApifyClient("MY_APIFY_TOKEN")
run = client.actor("tindacloud/espn-sports-data").call(run_input={
"leagues": [
"nba"
],
"dataTypes": [
"games"
],
"homeAway": "any",
"gameStatus": "any",
"maxResults": 1000
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

cURL — run and get the results in one request:

curl -X POST "https://api.apify.com/v2/acts/tindacloud~espn-sports-data/run-sync-get-dataset-items?token=MY_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"leagues": ["nba"], "dataTypes": ["games"], "homeAway": "any", "gameStatus": "any", "maxResults": 1000}'

Integrate with any app

Connect the dataset to thousands of apps — no code required:

  • Make — multi-step automation scenarios.
  • Zapier — push new records straight into your CRM or sheet.
  • n8n — self-hosted workflows.
  • Slack — get notified when a run finishes or finds something new.
  • Google Drive / Sheets — auto-export every run to a spreadsheet.
  • Airbyte — pipe results into your data warehouse.
  • GitHub — trigger runs from commits or releases.
  • Webhooks — call your own endpoint when a run succeeds or fails.

Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this Actor from Claude, ChatGPT, Cursor or any agent framework through the Apify MCP server — ask your assistant to "get tonight's NBA schedule with TV networks and odds" and let it run this Actor for you.

Agent-ready: autonomous payments (x402 & Skyfire)

This Actor is agent-ready — AI agents can discover it, run it and pay for it on their own. It uses pay-per-event pricing and limited permissions, so it qualifies for Apify's agentic payments:

  • x402 — an open, HTTP-native payment protocol. Agents pay in USDC through the Apify MCP server — no Apify account needed.
  • Skyfire — agent-to-service payments with pre-funded Skyfire tokens.

Building an AI agent, MCP tool or data pipeline? This Actor is ready to plug in and pay as it goes.

Ready-made examples

Open one, change the fields, press Start — nothing to configure:

Frequently asked questions

Do I need an API key or a login?

No. Paste your input, press Start. There is nothing to connect and no account on the target site to create.

How do I export the results?

Every run produces a dataset you can download as JSON, CSV, Excel, XML or HTML, or read through the Apify API from your own code. You can also connect it to Make, Zapier or n8n.

Can I run this on a schedule?

Yes. Apify schedules run it every hour, day or week without you being there. Each run is independent, so a schedule gives you a fresh snapshot every time.

Can I call it from Python or JavaScript?

Yes — the Apify API runs any Actor and returns the dataset, and the official Python and JavaScript clients wrap it in a few lines. AI agents can call it too, through Apify's MCP server.

What does it cost?

You pay per result, not per hour. Filters are applied before anything is charged, so narrowing the input directly lowers the bill. Pages that cannot be read are reported in the log and never charged.

Is this data public?

Everything collected here is what ESPN shows to anyone without logging in. Check the target site's terms and the rules that apply to you before using the data commercially.

Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by ESPN Inc. or The Walt Disney Company. All trademarks mentioned are the property of their respective owners. "ESPN" is named here only in a descriptive sense — to identify the publicly available website this Actor reads. It collects only publicly available information that anyone can see without logging in; you are responsible for making sure your use of the data complies with applicable laws, regulations and the terms of the source website.