ESPN Scores, Schedules & Odds Scraper
Pricing
from $2.00 / 1,000 records
ESPN Scores, Schedules & Odds Scraper
Collect ESPN fixtures, live and final scores, team records, venue and broadcast for the NFL, NBA, NHL, MLB, college sports, soccer and UFC, with the sportsbook moneyline, spread and total ESPN shows for each game (opening and current). Optional standings, teams, rosters and futures.
Pricing
from $2.00 / 1,000 records
Rating
0.0
(0)
Developer
Philip Kirkbride
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 hours ago
Last modified
Categories
Features
Share
Collect ESPN fixtures, live and final scores, team records, venue and broadcast for the NFL, NBA, NHL, MLB, college football and basketball, 18 soccer leagues and UFC, one record per game, together with the sportsbook lines ESPN shows for that game: moneyline, spread and total, each with its opening and current value, American and decimal odds and the implied probability. Optional extras: standings, teams, rosters and sportsbook futures boards. Built for sports-data analysts, bettors, fantasy and model builders who schedule runs and pipe the JSON into dashboards, alerts or models. No ESPN account or API key is needed.
Data only, not betting or financial advice. This is an unofficial tool: it is not affiliated with or endorsed by ESPN or any sportsbook.
Use cases
- Scoreboards and schedules: today's games and the next few days for the leagues you follow, with kickoff times in UTC, status, scores, period and clock.
- Line tracking: opening versus current moneyline, spread and total per game; schedule runs to chart how a line moves before the start.
- Closing-line studies: final scores next to the opening and closing lines of the same game, for model back-testing.
- Cross-book comparison: join each game with prediction-market or exchange
records on sport, league, participants and start time through the shared
canonicalMarketsenvelopes. Home and away are explicit here. - Reference data: standings tables, team lists, rosters and futures boards (title winner, MVP and more) to enrich your own tables.
Quick start
- Open the Actor and click Start. The prefilled form collects NFL, NBA and MLB games for today and the next three days, with their lines.
- Read the rows in the Output tab, or export them as JSON, CSV or Excel.
One league on chosen days:
{"leagues": ["epl"], "dateFrom": "2026-11-21", "dateTo": "2026-11-23"}
Yesterday's results with opening and closing lines:
{"leagues": ["nba"], "dateFrom": "2026-11-09", "includeClosingOdds": true}
Standings, teams and futures for one league:
{"leagues": ["nfl"], "collect": ["standings", "teams", "futures"], "maxResults": 1000}
Leaving leagues empty collects the default scope: NFL, NBA and MLB events
for today and the next three days (MLB covers the summer, when the other two
are out of season). When none of the three has a game in that window the run
stops with a message that says so and asks you to pick leagues and dates; it
never widens the scope by itself.
An empty input ({}, no leagues, dates or maxResults at all) is a sample:
the default scope, at most 20 records, and the run's status message says it
was a sample. Set any of those fields (the prefilled form does) for a full
run of up to 500 records.
Input
| Name | Type | Default | What it does |
|---|---|---|---|
leagues | array | NFL, NBA and MLB | Leagues to collect: nfl, ncaaf, nba, wnba, ncaab, ncaaw, mlb, nhl, epl, laliga, seriea, bundesliga, ligue_1, ucl, uel, mls, liga_mx, brasileirao, argentina_primera, eredivisie, primeira_liga, belgian_pro_league, scottish_premiership, super_lig, chile_primera, j1_league, ufc. |
collect | array | ["events"] | Any of events, standings, teams, rosters, futures. |
dateFrom / dateTo | string | today to today + 3 | Game days as YYYY-MM-DD (US Eastern calendar days). With only dateFrom, that single day. At most 31 days, and leagues × days at most 120. |
includeOdds | boolean | true | Add the sportsbook lines shown for each game. |
includeClosingOdds | boolean | false | Also look up the opening and closing lines of games that have started or finished (one extra lookup per such game, at most 100 per run). Needs includeOdds. |
includeAllCollegeGames | boolean | true | Every FBS / Division I game instead of only games involving ranked teams. |
maxResults | integer | 500 | Maximum dataset records per run (1–5,000), across all record kinds. Left empty in a run that also sets no leagues or dates, it is 20 (the sample). |
requestDelaySecs | number | 1 | Seconds between requests (0.25–10). |
A misspelt input field, an unsupported league or a window over the limits stops the run with an error that names the problem. Rosters are limited to three leagues per run and 40 teams per league.
Output
Every record has kind: event, standing, team, athlete or future.
All records share the same fields; fields that do not apply to a kind are
null (lists are empty).
Event records (one per game; one per bout for UFC):
- Identity:
recordKey,eventId,sport,league,leagueLabel,seasonYear,seasonType,week,title,sourceUrl. - Timing and state:
startTime(UTC),startTimeTbd,status(scheduled,in_progress,final,postponed,canceled,delayed,suspendedorunknown),statusNative,statusDetail,period,clock. - Sides:
homeandawaywithname,abbreviation,score,winner,record,rankand per-periodlinescores;competitorslists both, andparticipantsthe two names. Scores arenulluntil a game starts, never a placeholder zero. UFC fighters are not home or away, sohomeandawayarenullthere and the card's name is incardName. - Where to watch:
venue(name, city, state, country, indoor),neutralSite,broadcasts,notes. - Lines:
oddsAvailableandodds, one entry per sportsbook:moneyline.home,.awayand, for soccer,.draw;spread.homeand.away, each with itsline;total.overand.under, each with itsline;- every side has
openandcurrent, each a price withamerican,decimalandimpliedProbability; provider,details(the sportsbook's one-line summary) andlastUpdated(alwaysnullfor now: no update time is published for these lines; usecollectedAt).
canonicalMarkets: the same lines as one shared envelope per market, in the format our other sports Actors use, for joining across sources.
How to read the lines:
impliedProbabilityis1 / decimalof that single price. It includes the bookmaker's margin, so the sides of a market add up to more than 1.currentis the line shown when the run read the game. For a finished game collected withincludeClosingOddsit is the closing line.spread.home.current.lineof-2.5means the home team gives 2.5 points.- Anything not published is
null: a missing side, a line without a price or a game without lines (odds: [],oddsAvailable: false). No value is estimated or filled in from the other side.
Other records: standing (table, team, rank, wins, losses, ties, points,
record, streak, note), team (id, name, abbreviation, location, colours),
athlete (name, jersey, position, height, weight, age, experience, college,
status, team) and future (board, selection, price). Futures name their
selection by id; the name is filled in for teams, and for players when
rosters is collected in the same run.
The run summary (OUTPUT in the key-value store) reports records per kind,
events with and without lines per league, requests made, warnings and the
status succeeded, succeeded_empty, succeeded_partial or failed, and
sampleRun: true for the empty-input sample. The same one-line summary is the
run's status message.
Output example
Selected fields of a real NFL game collected 2026-11-10 (full records also
carry competitors, canonicalMarkets, statusNative, notes and the
other fields listed above):
{"recordKey":"espn:event:nfl:401873052","source":"espn","kind":"event","sourceUrl":"https://www.espn.com/nfl/game/_/gameId/401873052/commanders-giants","sport":"american_football","league":"nfl","leagueLabel":"NFL","seasonYear":2026,"seasonType":2,"eventId":"401873052","title":"Washington Commanders at New York Giants","shortName":"WSH @ NYG","startTime":"2026-11-13T01:15:00+00:00","status":"scheduled","statusDetail":"11/12 - 8:15 PM EST","week":10,"neutralSite":false,"participants":["New York Giants","Washington Commanders"],"home":{"id":"19","name":"New York Giants","abbreviation":"NYG","score":null,"record":"5-2-1"},"away":{"id":"28","name":"Washington Commanders","abbreviation":"WSH","score":null,"record":"2-5-1"},"venue":{"id":"3839","name":"MetLife Stadium","city":"East Rutherford","state":"NJ","country":"USA","indoor":false},"broadcasts":["Prime Video"],"oddsAvailable":true,"odds":[{"provider":"DraftKings","providerId":"100","details":"NYG -2.5","source":"scoreboard","currentBasis":"close","lastUpdated":null,"moneyline":{"home":{"open":{"american":-125,"decimal":1.8,"impliedProbability":0.5556},"current":{"american":-130,"decimal":1.7692,"impliedProbability":0.5652}},"away":{"open":{"american":105,"decimal":2.05,"impliedProbability":0.4878},"current":{"american":110,"decimal":2.1,"impliedProbability":0.4762}},"draw":null},"spread":{"home":{"open":{"line":-1.5,"american":-110,"decimal":1.9091,"impliedProbability":0.5238},"current":{"line":-2.5,"american":-110,"decimal":1.9091,"impliedProbability":0.5238}},"away":{"open":{"line":1.5,"american":-110,"decimal":1.9091,"impliedProbability":0.5238},"current":{"line":2.5,"american":-110,"decimal":1.9091,"impliedProbability":0.5238}}},"total":{"over":{"open":{"line":47.5,"american":-110,"decimal":1.9091,"impliedProbability":0.5238},"current":{"line":41.5,"american":-105,"decimal":1.9524,"impliedProbability":0.5122}},"under":{"open":{"line":47.5,"american":-110,"decimal":1.9091,"impliedProbability":0.5238},"current":{"line":41.5,"american":-115,"decimal":1.8696,"impliedProbability":0.5349}}}}],"collectedAt":"2026-11-10T23:10:16.420732+00:00"}
Pricing
Pay per result: $0.002 per dataset record (event, standings row, team, roster athlete or futures selection) plus $0.00005 per run start.
Worked examples, sizes measured 2026-11-11:
| Run | Records | Cost |
|---|---|---|
Empty input ({}), the sample | 20 | 20 × $0.002 + $0.00005 = $0.04005 |
| The prefilled form (NFL, NBA and MLB, four days; MLB out of season) | 29 | 29 × $0.002 + $0.00005 = $0.05805 |
| One Premier League weekend (21–23 Nov) | 10 | 10 × $0.002 + $0.00005 = $0.02005 |
| NFL standings, teams and futures together | 561 | 561 × $0.002 + $0.00005 = $1.12205 |
| A run that matches nothing | 0 | $0.00005 |
Use leagues, the date window and maxResults to keep runs small:
maxResults caps the record charge at maxResults × $0.002 per run. With a
maximum charge set on the run, the Actor stops at the last record that fits
and says so in the run summary.
Scheduling and monitoring
- Line movement: schedule a league-scoped run (for example hourly on game
days) and key your history on
recordKeypluscollectedAt. - Live scores: schedule a run for today's date every few minutes while
games are on;
status,period,clockand scores update on each run. - Results with closing lines: run once a day for yesterday's date with
includeClosingOdds. - Records are a fresh snapshot each run; nothing is remembered between runs.
De-duplicate on
recordKey.
How many games have lines
Measured on 2026-11-10; it changes through the week and the season.
| League | Games checked | With lines |
|---|---|---|
| NFL (Thu 12 Nov, Sun 15 Nov) | 13 | 13 |
| NBA, same day | 6 | 6 |
| NBA, next day | 10 | 5 |
| NBA, 2–3 days ahead | 13 | 0 |
| NHL, same day | 7 | 7 |
| NHL, 4 days ahead | 14 | 0 |
| College football (Sat 14 Nov) | 56 | 56 |
| Men's college basketball, same day | 69 | 56 |
| Men's college basketball, 4 days ahead | 72 | 0 |
| Women's college basketball, same day (not started) | 37 | 1 |
| Premier League (21–23 Nov) | 10 | 10 |
| La Liga, Serie A, Bundesliga, Ligue 1 (21–22 Nov) | 33 | 32 |
| MLS, Liga MX, Brasileirao (21–22 Nov) | 18 | 0 |
| UFC card (14 Nov) | 12 | 0 |
| Any game already started or finished | – | 0 without includeClosingOdds |
NBA, finished the day before, with includeClosingOdds | 8 | 8 |
FAQ
Which sportsbook are the lines from? The one ESPN shows for the game. On 2026-11-10 that was DraftKings for every game with lines. Finished games can carry a second entry with the last in-play prices.
Why does a game have no lines? Lines are usually published one or two days
before a game (earlier for the NFL, college football and the big European
soccer leagues), often not at all for UFC and smaller competitions, and they
are removed from game listings once the game starts. Use includeClosingOdds
for started and finished games.
How fresh is the data? Each run reads ESPN at run time; nothing is cached between runs.
Can I get a whole season? Up to 31 days per run. Split longer periods into several runs.
Are doubleheaders and rescheduled games handled? Each game has its own
eventId, so both games of a doubleheader are separate records. A postponed
game keeps status: "postponed" with no score.
Export formats? JSON, CSV, Excel, XML or RSS from the dataset, or read it through the Apify API in your own pipeline.
Limits
- The data comes from an unofficial, undocumented source that can change or become unavailable without notice. Check a run's status and warnings before relying on it.
- One sportsbook's lines as shown by ESPN, not a multi-book odds feed. No player props, alternate lines or historical line series; build history by scheduling runs.
- Not supported: boxing, AHL, CFL, Euroleague, tennis, golf and motor racing.
- No play-by-play, box scores, news, video or win-probability data.
- Team logos and player photos are not included.
- Futures selections for players have no name unless
rostersis collected in the same run. - You are responsible for using the data in line with the terms of the sites it comes from and the laws that apply to you.
For support, contact Apify support and include the Actor run ID.