Introduction
Did you know ESPN gives away an incredible amount of data...for free? Hidden in plain sight, ESPN’s own website uses an open API that anyone can tap into. With a few clicks in your browser’s developer tools, you can unlock a treasure trove of sports stats, play-by-play data, scores, schedules, and more.
In this guide, we’ll break down how to access ESPN’s API, what kind of information you can extract, and why this is a goldmine for developers, sports analysts, and data enthusiasts.
Where the ESPN API Lives
ESPN’s site makes API calls to:
https://site.web.api.espn.com/apis
This endpoint is wide open. You don’t need authentication keys or tokens, just a simple GET request will return structured JSON data.
Real Example: 2016 NBA Finals, Game 7
Let’s take one of the greatest games in sports history, Cavaliers vs. Warriors, 2016 Game 7.
Open the ESPN page for the game: Cavs vs Warriors, Game 7
Now, do the following:
- Right-click → Inspect → Open Network tab.
- Filter traffic by Fetch/XHR.
- Look at the requests firing in the background.
You’ll notice an endpoint like this:
summary?region=us&lang=en&contentorigin=espn&event=400878160
That event
parameter is the unique game ID.
The Full ESPN API Endpoint
Here’s the complete URL for the 2016 Finals Game 7:
Paste it directly into your browser, or hit it with curl, Python, or Node.js, and you’ll see ESPN return a ton of structured JSON data.
In Node.js, you would do:
import axios from 'axios'
const response = await axios.get("https://site.web.api.espn.com/apis/site/v2/sports/basketball/nba/summary?region=us&lang=en&contentorigin=espn&event=400878160")
console.log(response.data)
What Data Can You Get?
The API returns far more than just the score. For a single game, you can access:
- Team and player stats
- Play-by-play details
- Box scores
- Highlights and recaps
- Injuries, rosters, and schedules
This makes ESPN’s API incredibly powerful if you’re building apps, scraping sports data, or analyzing historical matchups.
Here is a sample of the json that gets returned for that game:
{
"boxscore": {
"teams": [
{
"team": {
"id": "5",
"uid": "s:40~l:46~t:5",
"slug": "cleveland-cavaliers",
"location": "Cleveland",
"name": "Cavaliers",
"abbreviation": "CLE",
"displayName": "Cleveland Cavaliers",
"shortDisplayName": "Cavaliers",
"color": "061642",
"alternateColor": "bc945c",
"logo": "https://a.espncdn.com/i/teamlogos/nba/500/cle.png"
},
"statistics": [
{
"name": "fieldGoalsMade-fieldGoalsAttempted",
"displayValue": "33-82",
"label": "FG"
},
{
"name": "fieldGoalPct",
"displayValue": "40.2",
"abbreviation": "FG%",
"label": "Field Goal %"
},
{
"name": "threePointFieldGoalsMade-threePointFieldGoalsAttempted",
"displayValue": "6-25",
"label": "3PT"
},
{
"name": "threePointFieldGoalPct",
"displayValue": "24.0",
"abbreviation": "3P%",
"label": "Three Point %"
},
{
"name": "freeThrowsMade-freeThrowsAttempted",
"displayValue": "21-25",
"label": "FT"
},
{
"name": "freeThrowPct",
"displayValue": "84.0",
"abbreviation": "FT%",
"label": "Free Throw %"
},
{
"name": "totalRebounds",
"displayValue": "59",
"abbreviation": "REB",
"label": "Rebounds"
},
{
"name": "offensiveRebounds",
"displayValue": "9",
"abbreviation": "OR",
"label": "Offensive Rebounds"
},
{
"name": "defensiveRebounds",
"displayValue": "39",
"abbreviation": "DR",
"label": "Defensive Rebounds"
},
{
"name": "assists",
"displayValue": "17",
"abbreviation": "AST",
"label": "Assists"
},
{
"name": "steals",
"displayValue": "7",
"abbreviation": "STL",
"label": "Steals"
},
{
"name": "blocks",
"displayValue": "6",
"abbreviation": "BLK",
"label": "Blocks"
},
{
"name": "turnovers",
"displayValue": "11",
"abbreviation": "TO",
"label": "Turnovers"
},
{
"name": "teamTurnovers",
"displayValue": "0",
"abbreviation": "TTO",
"label": "Team Turnovers"
},
{
"name": "totalTurnovers",
"displayValue": "11",
"abbreviation": "ToTO",
"label": "Total Turnovers"
},
{
"name": "technicalFouls",
"displayValue": "0",
"abbreviation": "TECH",
"label": "Technical Fouls"
},
{
"name": "totalTechnicalFouls",
"displayValue": "0",
"abbreviation": "TECH",
"label": "Total Technical Fouls"
},
{
"name": "flagrantFouls",
"displayValue": "0",
"abbreviation": "FLAG",
"label": "Flagrant Fouls"
},
{
"name": "turnoverPoints",
"displayValue": "10",
"abbreviation": "Points Conceded Off Turnovers",
"label": "Points Conceded Off Turnovers"
},
{
"name": "fastBreakPoints",
"displayValue": "18",
"abbreviation": "FBPs",
"label": "Fast Break Points"
},
{
"name": "pointsInPaint",
"displayValue": "48",
"abbreviation": "PIP",
"label": "Points in Paint"
},
{
"name": "fouls",
"displayValue": "15",
"abbreviation": "PF",
"label": "Fouls"
},
{
"name": "largestLead",
"displayValue": "7",
"abbreviation": "LL",
"label": "Largest Lead"
}
],
"displayOrder": 1,
"homeAway": "away"
},
{
"team": {
"id": "9",
"uid": "s:40~l:46~t:9",
"slug": "golden-state-warriors",
"location": "Golden State",
"name": "Warriors",
"abbreviation": "GS",
"displayName": "Golden State Warriors",
"shortDisplayName": "Warriors",
"color": "00275D",
"alternateColor": "1d428a",
"logo": "https://a.espncdn.com/i/teamlogos/nba/500/gs.png"
},
"statistics": [
{
"name": "fieldGoalsMade-fieldGoalsAttempted",
"displayValue": "32-83",
"label": "FG"
},
{
"name": "fieldGoalPct",
"displayValue": "38.6",
"abbreviation": "FG%",
"label": "Field Goal %"
},
{
"name": "threePointFieldGoalsMade-threePointFieldGoalsAttempted",
"displayValue": "15-41",
"label": "3PT"
},
{
"name": "threePointFieldGoalPct",
"displayValue": "36.6",
"abbreviation": "3P%",
"label": "Three Point %"
},
{
"name": "freeThrowsMade-freeThrowsAttempted",
"displayValue": "10-13",
"label": "FT"
},
{
"name": "freeThrowPct",
"displayValue": "76.9",
"abbreviation": "FT%",
"label": "Free Throw %"
},
{
"name": "totalRebounds",
"displayValue": "48",
"abbreviation": "REB",
"label": "Rebounds"
},
{
"name": "offensiveRebounds",
"displayValue": "7",
"abbreviation": "OR",
"label": "Offensive Rebounds"
},
{
"name": "defensiveRebounds",
"displayValue": "32",
"abbreviation": "DR",
"label": "Defensive Rebounds"
},
{
"name": "assists",
"displayValue": "22",
"abbreviation": "AST",
"label": "Assists"
},
{
"name": "steals",
"displayValue": "7",
"abbreviation": "STL",
"label": "Steals"
},
{
"name": "blocks",
"displayValue": "5",
"abbreviation": "BLK",
"label": "Blocks"
},
{
"name": "turnovers",
"displayValue": "10",
"abbreviation": "TO",
"label": "Turnovers"
},
{
"name": "teamTurnovers",
"displayValue": "0",
"abbreviation": "TTO",
"label": "Team Turnovers"
},
{
"name": "totalTurnovers",
"displayValue": "10",
"abbreviation": "ToTO",
"label": "Total Turnovers"
},
{
"name": "technicalFouls",
"displayValue": "0",
"abbreviation": "TECH",
"label": "Technical Fouls"
},
{
"name": "totalTechnicalFouls",
"displayValue": "0",
"abbreviation": "TECH",
"label": "Total Technical Fouls"
},
{
"name": "flagrantFouls",
"displayValue": "0",
"abbreviation": "FLAG",
"label": "Flagrant Fouls"
},
{
"name": "turnoverPoints",
"displayValue": "16",
"abbreviation": "Points Conceded Off Turnovers",
"label": "Points Conceded Off Turnovers"
},
{
"name": "fastBreakPoints",
"displayValue": "7",
"abbreviation": "FBPs",
"label": "Fast Break Points"
},
{
"name": "pointsInPaint",
"displayValue": "28",
"abbreviation": "PIP",
"label": "Points in Paint"
},
{
"name": "fouls",
"displayValue": "23",
"abbreviation": "PF",
"label": "Fouls"
},
{
"name": "largestLead",
"displayValue": "8",
"abbreviation": "LL",
"label": "Largest Lead"
}
],
"displayOrder": 2,
"homeAway": "home"
}
]
},
"format": {
"regulation": {
"periods": 4,
"displayName": "Quarter",
"slug": "quarter",
"clock": 720
},
"overtime": {
"clock": 300
}
},
"gameInfo": {
"venue": {
"id": "2465",
"guid": "37dd5843-ceb6-382e-a56e-5f236c4ead2b",
"fullName": "Oracle Arena",
"shortName": "ORACLE Arena",
"address": {
"city": "Oakland",
"state": "CA",
"zipCode": "94621"
},
"grass": false,
"images": [
{
"href": "https://a.espncdn.com/i/venues/nba/day/2465.jpg",
"width": 2000,
"height": 1125,
"alt": "",
"rel": ["full", "day"]
}
]
},
"attendance": 19596,
"officials": [
{
"fullName": "Mike Callahan",
"displayName": "Mike Callahan",
"position": {
"name": "Referee",
"displayName": "Referee",
"id": "40"
},
"order": 1
},
{
"fullName": "Dan Crawford",
"displayName": "Dan Crawford",
"position": {
"name": "Referee",
"displayName": "Referee",
"id": "40"
},
"order": 2
},
{
"fullName": "Monty McCutchen",
"displayName": "Monty McCutchen",
"position": {
"name": "Referee",
"displayName": "Referee",
"id": "40"
},
"order": 3
}
]
},
"pickcenter": [
{
"provider": {
"id": "1004",
"name": "consensus",
"priority": 0
},
"details": "GS -4.5",
"spread": -4.5,
"awayTeamOdds": {
"winPercentage": 49,
"favorite": false,
"underdog": true,
"current": {
"pointSpread": {
"alternateDisplayValue": "+4.5",
"american": "+4.5"
}
},
"team": {
"$ref": "http://sports.core.api.espn.pvt/v2/sports/basketball/leagues/nba/seasons/2016/teams/5?lang=en®ion=us"
},
"teamId": "5"
},
"homeTeamOdds": {
"winPercentage": 51,
"favorite": true,
"underdog": false,
"current": {
"pointSpread": {
"alternateDisplayValue": "-4.5",
"american": "-4.5"
}
},
"team": {
"$ref": "http://sports.core.api.espn.pvt/v2/sports/basketball/leagues/nba/seasons/2016/teams/9?lang=en®ion=us"
},
"teamId": "9"
}
},
{
"provider": {
"id": "1003",
"name": "numberfire",
"priority": 0
},
"details": "GS -5",
"overUnder": 205,
"spread": -5,
"overOdds": 45.25,
"underOdds": 52.83,
"awayTeamOdds": {
"averageScore": 99.18,
"winPercentage": 31.73,
"favorite": false,
"underdog": true,
"moneyLine": 160,
"moneyLineOdds": 31.73,
"spreadOdds": 49.07,
"spreadReturn": -0.063,
"current": {
"pointSpread": {
"alternateDisplayValue": "+5",
"american": "+5"
},
"spread": {
"alternateDisplayValue": "+49",
"american": "+49"
},
"moneyLine": {
"alternateDisplayValue": "+160",
"american": "+160"
}
},
"team": {
"$ref": "http://sports.core.api.espn.pvt/v2/sports/basketball/leagues/nba/seasons/2016/teams/5?lang=en®ion=us"
},
"teamId": "5"
},
"homeTeamOdds": {
"averageScore": 104.22,
"winPercentage": 68.27,
"favorite": true,
"underdog": false,
"moneyLine": -180,
"moneyLineOdds": 68.27,
"spreadOdds": 46.27,
"spreadReturn": -0.117,
"current": {
"pointSpread": {
"alternateDisplayValue": "-5",
"american": "-5"
},
"spread": {
"alternateDisplayValue": "+46",
"american": "+46"
},
"moneyLine": {
"alternateDisplayValue": "-180",
"american": "-180"
}
},
"team": {
"$ref": "http://sports.core.api.espn.pvt/v2/sports/basketball/leagues/nba/seasons/2016/teams/9?lang=en®ion=us"
},
"teamId": "9"
},
"current": {
"over": {
"alternateDisplayValue": "+45",
"american": "+45"
},
"under": {
"alternateDisplayValue": "+53",
"american": "+53"
},
"total": {
"alternateDisplayValue": "205",
"american": "205"
}
}
},
{
"provider": {
"id": "1002",
"name": "teamrankings",
"priority": 0
},
"details": "GS -5",
"overUnder": 205,
"spread": -5,
"overOdds": 102,
"underOdds": -113,
"awayTeamOdds": {
"averageScore": 99.7,
"favorite": false,
"underdog": true,
"moneyLine": 169,
"spreadRecord": {
"wins": 43,
"losses": 39,
"pushes": 4,
"summary": "43-39-4"
},
"spreadOdds": -107,
"current": {
"pointSpread": {
"alternateDisplayValue": "+5",
"american": "+5"
},
"spread": {
"alternateDisplayValue": "-107",
"american": "-107"
},
"moneyLine": {
"alternateDisplayValue": "+169",
"american": "+169"
}
},
"team": {
"$ref": "http://sports.core.api.espn.pvt/v2/sports/basketball/leagues/nba/seasons/2016/teams/5?lang=en®ion=us"
},
"teamId": "5"
},
"homeTeamOdds": {
"averageScore": 104.4,
"favorite": true,
"underdog": false,
"moneyLine": -188,
"spreadRecord": {
"wins": 44,
"losses": 49,
"pushes": 1,
"summary": "44-49-1"
},
"spreadOdds": -103,
"current": {
"pointSpread": {
"alternateDisplayValue": "-5",
"american": "-5"
},
"spread": {
"alternateDisplayValue": "-103",
"american": "-103"
},
"moneyLine": {
"alternateDisplayValue": "-188",
"american": "-188"
}
},
"team": {
"$ref": "http://sports.core.api.espn.pvt/v2/sports/basketball/leagues/nba/seasons/2016/teams/9?lang=en®ion=us"
},
"teamId": "9"
},
"current": {
"over": {
"alternateDisplayValue": "+102",
"american": "+102"
},
"under": {
"alternateDisplayValue": "-113",
"american": "-113"
},
"total": {
"alternateDisplayValue": "205",
"american": "205"
}
}
}
],
"againstTheSpread": [
{
"team": {
"id": "5",
"uid": "s:40~l:46~t:5",
"displayName": "Cleveland Cavaliers",
"abbreviation": "CLE",
"links": [
{
"href": "https://www.espn.com/nba/team/_/name/cle/cleveland-cavaliers",
"text": "Clubhouse"
},
{
"href": "https://www.espn.com/nba/team/schedule/_/name/cle",
"text": "Schedule"
}
],
"logo": "https://a.espncdn.com/i/teamlogos/nba/500/cle.png",
"logos": [
{
"href": "https://a.espncdn.com/i/teamlogos/nba/500/cle.png",
"width": 500,
"height": 500,
"alt": "",
"rel": ["full", "default"],
"lastUpdated": "2024-06-25T21:17Z"
},
{
"href": "https://a.espncdn.com/i/teamlogos/nba/500-dark/cle.png",
"width": 500,
"height": 500,
"alt": "",
"rel": ["full", "dark"],
"lastUpdated": "2024-06-25T21:13Z"
},
{
"href": "https://a.espncdn.com/i/teamlogos/nba/500/scoreboard/cle.png",
"width": 500,
"height": 500,
"alt": "",
"rel": ["full", "scoreboard"],
"lastUpdated": "2024-06-25T21:18Z"
},
{
"href": "https://a.espncdn.com/i/teamlogos/nba/500-dark/scoreboard/cle.png",
"width": 500,
"height": 500,
"alt": "",
"rel": ["full", "scoreboard", "dark"],
"lastUpdated": "2024-06-25T21:13Z"
}
]
},
"records": []
},
{
"team": {
"id": "9",
"uid": "s:40~l:46~t:9",
"displayName": "Golden State Warriors",
"abbreviation": "GS",
"links": [
{
"href": "https://www.espn.com/nba/team/_/name/gs/golden-state-warriors",
"text": "Clubhouse"
},
{
"href": "https://www.espn.com/nba/team/schedule/_/name/gs",
"text": "Schedule"
}
],
"logo": "https://a.espncdn.com/i/teamlogos/nba/500/gs.png",
"logos": [
{
"href": "https://a.espncdn.com/i/teamlogos/nba/500/gs.png",
"width": 500,
"height": 500,
"alt": "",
"rel": ["full", "default"],
"lastUpdated": "2024-06-25T21:17Z"
},
{
"href": "https://a.espncdn.com/i/teamlogos/nba/500-dark/gs.png",
"width": 500,
"height": 500,
"alt": "",
"rel": ["full", "dark"],
"lastUpdated": "2024-06-25T21:13Z"
},
{
"href": "https://a.espncdn.com/i/teamlogos/nba/500/scoreboard/gs.png",
"width": 500,
"height": 500,
"alt": "",
"rel": ["full", "scoreboard"],
"lastUpdated": "2024-06-25T21:18Z"
},
{
"href": "https://a.espncdn.com/i/teamlogos/nba/500-dark/scoreboard/gs.png",
"width": 500,
"height": 500,
"alt": "",
"rel": ["full", "scoreboard", "dark"],
"lastUpdated": "2024-06-25T21:14Z"
}
]
},
"records": []
}
],
"meta": {
"gp_topic": "gp-basketball-nba-400878160",
"gameSwitcherEnabled": true,
"picker_topic": "picker-basketball-nba",
"lastUpdatedAt": "2016-06-20T02:38:48Z",
"firstPlayWallClock": "2016-06-20T00:10:56Z",
"lastPlayWallClock": "2016-06-20T02:38:48Z",
"gameState": "post",
"syncUrl": "https://client.espncdn.com/fauxcast/stats/46/400878160/en/us/"
}
}
How to Explore More Data
To grab more games, just swap out the event ID in the URL. For example:
- Change
/basketball/nba/
to/football/nfl/
for NFL data. - Replace the
event=400878160
with another game’s ID.
Tip: You can find event IDs just by browsing ESPN game pages and checking the URLs.
Why This Matters
Sports APIs usually require paid subscriptions, API keys, or limited free tiers. But ESPN is (intentionally or not) giving developers free, open access to world-class sports data.
Whether you’re building a fantasy sports tool, a live stats dashboard, or running data analysis, this API can save you time and money.
Final Thoughts
The ESPN API is one of the easiest ways to get high-quality, real-time sports data, without credentials or paywalls. By leveraging simple GET requests, you can extract detailed stats, play-by-play logs, and game summaries for NBA, NFL, and more.
If you’re into sports analytics or app development, it’s worth experimenting with.
Looking for More Than ESPN?
While ESPN’s API is a fun hidden gem, it’s limited to what they expose on their own site. If you need serious scale or access to other platforms, check out Scrape Creators.
Scrape Creators gives you:
- Ready-made APIs for TikTok, Instagram, YouTube, Twitter (X), Reddit, and more.
- Pay-as-you-go pricing, no expensive contracts.
- Fast support from real developers (not bots).
- Billions of profiles and posts available via clean JSON.
Instead of reverse engineering APIs one by one, you can plug into Scrape Creators and start pulling the data you need today.
Try Scrape Creators, your shortcut to reliable social media data.