ESPN Depth Chart Scraper - NFL, NBA, MLB Starters avatar

ESPN Depth Chart Scraper - NFL, NBA, MLB Starters

Pricing

from $1.00 / 1,000 depth chart rows

Go to Apify Store
ESPN Depth Chart Scraper - NFL, NBA, MLB Starters

ESPN Depth Chart Scraper - NFL, NBA, MLB Starters

Scrape ESPN depth charts for every NFL, NBA and MLB team. Get the starter and each backup at every position with player name, jersey and headshot. Filter by team, player, position or depth. Export JSON, CSV or Excel.

Pricing

from $1.00 / 1,000 depth chart rows

Rating

0.0

(0)

Developer

Harish Garg

Harish Garg

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Categories

Share

ESPN Depth Chart Scraper — NFL, NBA, MLB Starters and Backups

Get the current ESPN depth chart for every NFL, NBA and MLB team as clean, structured data. See the starter and every backup at every position — quarterback, running back, point guard, starting pitcher, closer and more — with each player's name, jersey number, position and headshot photo.

Filter by team, player, position or depth. Download the results as JSON, CSV or Excel, call the Actor from the API, or ask for a depth chart from an AI assistant such as Claude or ChatGPT. No ESPN account or API key needed.

What does ESPN Depth Chart Scraper do?

It collects the depth chart of every team in the leagues you pick and returns one row per player per position. Each row tells you:

  • Who — player name, ESPN player ID, jersey number, position and headshot photo
  • Where — team, league, and the position on the chart (for example QB, LT, PG, SP, CL)
  • How deep — depth rank: 1 is the starter, 2 the first backup, and so on
  • Which formation — for the NFL, the formation or unit, for example 3WR 1TE, Base 4-3 D or Special Teams

A one-team run finishes in a few seconds. A full league finishes in under a minute, and all three leagues in about one minute.

Who is it for?

  • Fantasy football, basketball and baseball players — find each team's starters before lineup lock, and see who moves up when a starter is hurt.
  • Sports bettors and betting model builders — a starter change moves lines. Collect a daily snapshot and track depth chart changes over time.
  • Sports media, newsletters and apps — feed a depth chart table, a website widget or a "starter change" alert.
  • Analysts and researchers — compare how deep each team is at a position across a league.

Supported leagues

LeagueCodeCharts per team
NFLnflSeveral — one per formation or unit, such as 3WR 1TE, Base 4-3 D and Special Teams
NBAnbaOne, named Depth Chart
MLBmlbOne, named Depth Chart, with starting pitchers, relievers and every fielding position

ESPN does not publish current depth charts for the NHL, the WNBA, college sports or soccer, so those leagues are not offered.

How to get an ESPN depth chart

  1. Open the Actor and pick one or more leagues.
  2. Optionally, enter teams (for example KC, Lakers or New York Yankees), or set Maximum depth to 1 for starters only.
  3. Click Start.
  4. Open the Output tab to see the table, or export the data as JSON, CSV, Excel, XML or HTML.

To keep your data current, create a schedule (for example every morning) and connect it to Google Sheets, Slack, a webhook or your database.

Input

FieldWhat it doesExample
LeaguesLeagues to get depth charts for["nfl"], ["nba", "mlb"]
TeamsTeam abbreviations or team names. Leave empty for every team["KC", "49ers"], ["Lakers"]
Maximum depthOnly players this deep or higher. 1 = starters only, 2 = starters and first backups1
PlayersPart of a player's name["mahomes"]
PositionsPosition abbreviations or names. Matches the player's position or the chart position["QB", "RB"], ["Point Guard"], ["SP"]

Text filters ignore upper and lower case. A team abbreviation or city applies in every league you select: KC gives the Kansas City Chiefs in the NFL and the Kansas City Royals in MLB.

Example: one NFL team's full depth chart

{
"leagues": ["nfl"],
"teams": ["KC"]
}

Example: every NFL starter

{
"leagues": ["nfl"],
"maxDepthRank": 1
}

Example: starting and backup quarterbacks for every NFL team

{
"leagues": ["nfl"],
"positions": ["QB"],
"maxDepthRank": 2
}

Example: the Lakers' starting five

{
"leagues": ["nba"],
"teams": ["Lakers"],
"maxDepthRank": 1
}

Example: NBA point guards and MLB starting pitchers

{
"leagues": ["nba", "mlb"],
"positions": ["PG", "SP"]
}

Output

One row per player per position per chart. This is a real row from an NFL run:

{
"recordType": "depthChartEntry",
"league": "nfl",
"leagueName": "NFL",
"sport": "football",
"season": { "year": 2026, "displayName": "2026", "type": "Regular Season" },
"team": { "id": "12", "name": "Kansas City Chiefs", "abbreviation": "KC" },
"player": {
"id": "4241385",
"name": "Creed Humphrey",
"shortName": "C. Humphrey",
"jersey": "52",
"position": "Center",
"positionAbbreviation": "C",
"headshot": "https://a.espncdn.com/i/headshots/nfl/players/full/4241385.png"
},
"depthChart": {
"id": "21",
"name": "3WR 1TE",
"positionSlot": "c",
"position": "Center",
"positionAbbreviation": "C"
},
"rank": 1,
"slot": null,
"isStarter": true,
"retrievedAt": "2026-09-22T13:51:19.187Z"
}

Output fields

FieldDescription
league, leagueName, sportLeague code (nfl), name (NFL) and sport
seasonSeason year, ESPN's season label (for example 2026-27 in the NBA) and phase (Preseason, Regular Season, Postseason)
teamTeam ESPN ID, name and abbreviation
playerESPN player ID, name, short name, jersey number, position and headshot URL
depthChart.nameThe chart: an NFL formation or unit such as 3WR 1TE, or Depth Chart in the NBA and MLB
depthChart.positionThe position on the chart, for example Quarterback or Starting Pitcher
rankDepth at the position: 1 is the starter, 2 the first backup
isStartertrue when rank is 1
slotThe column, when a chart lists a position more than once: 1, 2 and 3 are the three wide receiver spots in the NFL 3WR 1TE formation. null for every other position
retrievedAtWhen your run collected the data. The same for every row of a run, so daily snapshots are easy to compare

Rows come sorted by league, team, chart, position and depth. Each run also saves a run summary (row counts, leagues and filters) in the key-value store under SUMMARY.

Good to know:

  • An NFL player can appear more than once — once for each formation or unit they are listed in. Filter on depthChart.name to keep one formation.
  • The NFL 3WR 1TE formation has three starting wide receivers. Each has rank: 1, and slot tells them apart.
  • In MLB, the P position lists the starting rotation in order: rank: 1 is the first starter. Relievers are under RP and the closer under CL.

How to use ESPN Depth Chart Scraper

In Apify Console

Fill in the input form and click Start. Save your setup as a task to run it again with one click, or add a schedule to run it every day.

With the Apify API

Run the Actor and get the results in one HTTP call. Replace YOUR_API_TOKEN with your token from Settings → API & Integrations.

curl -X POST "https://api.apify.com/v2/acts/hgservices~espn-depth-chart-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"leagues": ["nfl"], "teams": ["KC"], "maxDepthRank": 1}'

Add &format=csv to the URL to get CSV instead of JSON.

With JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('hgservices/espn-depth-chart-scraper').call({
leagues: ['nba'],
maxDepthRank: 1,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

With Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("hgservices/espn-depth-chart-scraper").call(
run_input={"leagues": ["nfl"], "positions": ["QB"], "maxDepthRank": 1}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["team"]["abbreviation"], item["player"]["name"])

With Claude, ChatGPT and other AI assistants

Connect your AI assistant to the Apify MCP server at https://mcp.apify.com, then ask in plain language. The assistant runs this Actor for you and answers from the results.

  • Claude (claude.ai or Claude Desktop): add a custom connector with the URL https://mcp.apify.com.
  • Claude Code: run claude mcp add --transport http apify https://mcp.apify.com.
  • ChatGPT: add https://mcp.apify.com as a connector (MCP server) in ChatGPT settings.
  • Cursor, VS Code, Windsurf and other MCP clients: add https://mcp.apify.com as an MCP server.

Sign in with your Apify account when asked. Example prompts:

  • "Who is the backup running back for the 49ers? Use the ESPN Depth Chart Scraper."
  • "List the starting quarterback of every NFL team."
  • "Show me the Yankees' starting rotation and bullpen from ESPN."
  • "Who starts at point guard for the Lakers?"

With integrations

Send the results to Google Sheets, Slack, Discord, email, Zapier, Make, n8n, Airbyte or any webhook, from the Actor's Integrations tab. A common setup: run every morning, compare the starters with yesterday's run, and post the changes to a Slack channel.

Scheduling ideas

Use caseCron (UTC)When
Daily depth chart snapshot0 13 * * *Every day at 9 AM US Eastern
NFL midweek update0 12 * * 3Wednesday, when teams release weekly depth charts
NFL game-day starters0 15 * * 0Sunday 11 AM US Eastern, before the early kickoffs, with maxDepthRank: 1

FAQ

How current is the data? Each run gets the depth charts as ESPN shows them at that moment. Run it again, or schedule it, for newer data.

When did a depth chart last change? ESPN does not publish a change date for depth charts. Schedule the Actor and compare runs with retrievedAt to see when a starter changed.

Why does the same NFL player appear several times? NFL teams publish one chart per formation or unit, for example 3WR 1TE, Base 4-3 D and Special Teams. A player is listed once in each chart they appear in.

Why is a player's name empty in a few rows? Rarely, ESPN lists a player on a depth chart who is not on the team's published roster. The row still has the ESPN player ID, so you can join it to other data.

My team filter returns nothing. Why? Use the ESPN team abbreviation (for example KC, SF, LAL or NYY) or a word from the team name (for example Chiefs, Lakers or Red Sox). Check that you selected the team's league. The run log and status message name every team that matched nothing.

Can I combine it with other sports data? Yes. See the related Actors below. They use the same league codes, team fields and player fields, so their data joins directly.

Feedback

Missing a league, a field or a filter? Open an issue on the Actor's Issues tab. We read every request.

Disclaimer

This Actor is not affiliated with, endorsed by or sponsored by ESPN. It collects publicly available depth chart information. Use the data in line with ESPN's terms and the laws that apply to you.