ESPN Scraper: Live Scores, Odds & Box Scores API
Pricing
from $0.80 / 1,000 records
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
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
21 days ago
Last modified
Security
Limited permissionsShare
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 scrapers | This Actor |
|---|---|
| One league, one data type | 20+ leagues — NFL, NBA, MLB, NHL, WNBA, college, top European football — in one run |
| Scores only | Games, box scores, standings, rosters, injuries, news and odds |
| Today only | Any date range up to 400 days per run, including upcoming schedules with odds |
| Filter after download | teams, homeAway, gameStatus (live/final), startingWithinHours and broadcastNetworks |
| Need an API key | No key, no login, no account |
How to use
- Sign up for Apify — the free plan's monthly credit is enough to try this Actor.
- Open ESPN Scraper, fill in the input (the form is pre-filled with a working example) and click Start.
- Watch results stream into the dataset table while the run is going.
- 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 type | One row per | Includes |
|---|---|---|
| Games | game | date, status, score by period, records, venue, attendance, TV, betting odds (spread, over/under, moneylines), stat leaders |
| Box scores | player per game | every stat column ESPN shows. Football groups are merged (passing_YDS, rushing_TD, …); soccer includes goals, assists, shots, saves, cards |
| Standings | team | wins, losses, ties, win %, games behind, points, seed + all standing stats |
| Teams | team | IDs, abbreviations, colors, logos, links |
| Rosters | player | position, jersey, age, date of birth, height, weight, birthplace, college, experience, status, injuries |
| Injuries | injury | status (Out/Questionable…), injury, body part, expected return, date, reporter comments |
| News | article | headline, 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/endDateapply to games and box scores. Defaults are yesterday and today, and one run covers up to 400 days (e.g. a full season). - Teams:
teamsaccepts abbreviations or full names and is optional. - Season:
seasonselects 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. Default1000.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:
| Field | Example | What you get |
|---|---|---|
gameStatus | live | Only games in progress, with period and clock |
startingWithinHours | 24 | Games that start in the next 24 hours (the date range extends itself) |
broadcastNetworks | ["ESPN", "Prime Video"] | Only games on those networks (partial match) |
homeAway + teams | home + ["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:
| Event | Free plan | Bronze | Silver | Gold+ |
|---|---|---|---|---|
| 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
maxResultsto cap the bill. - Keep the default
proxysetting — 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:
- Apify API — start runs, fetch datasets and manage schedules over REST.
- apify-client for JavaScript and apify-client for Python — official SDKs.
- Schedules — run it on a cron to keep your data fresh.
- Webhooks — trigger downstream actions the moment a run finishes.
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 ApifyClientclient = 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.