ESPN Depth Chart Scraper - NFL, NBA, MLB Starters
Pricing
from $1.00 / 1,000 depth chart rows
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
Maintained by CommunityActor 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:
1is the starter,2the first backup, and so on - Which formation — for the NFL, the formation or unit, for example
3WR 1TE,Base 4-3 DorSpecial 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
| League | Code | Charts per team |
|---|---|---|
| NFL | nfl | Several — one per formation or unit, such as 3WR 1TE, Base 4-3 D and Special Teams |
| NBA | nba | One, named Depth Chart |
| MLB | mlb | One, 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
- Open the Actor and pick one or more leagues.
- Optionally, enter teams (for example
KC,LakersorNew York Yankees), or set Maximum depth to1for starters only. - Click Start.
- 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
| Field | What it does | Example |
|---|---|---|
| Leagues | Leagues to get depth charts for | ["nfl"], ["nba", "mlb"] |
| Teams | Team abbreviations or team names. Leave empty for every team | ["KC", "49ers"], ["Lakers"] |
| Maximum depth | Only players this deep or higher. 1 = starters only, 2 = starters and first backups | 1 |
| Players | Part of a player's name | ["mahomes"] |
| Positions | Position 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
| Field | Description |
|---|---|
league, leagueName, sport | League code (nfl), name (NFL) and sport |
season | Season year, ESPN's season label (for example 2026-27 in the NBA) and phase (Preseason, Regular Season, Postseason) |
team | Team ESPN ID, name and abbreviation |
player | ESPN player ID, name, short name, jersey number, position and headshot URL |
depthChart.name | The chart: an NFL formation or unit such as 3WR 1TE, or Depth Chart in the NBA and MLB |
depthChart.position | The position on the chart, for example Quarterback or Starting Pitcher |
rank | Depth at the position: 1 is the starter, 2 the first backup |
isStarter | true when rank is 1 |
slot | The 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 |
retrievedAt | When 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.nameto keep one formation. - The NFL
3WR 1TEformation has three starting wide receivers. Each hasrank: 1, andslottells them apart. - In MLB, the
Pposition lists the starting rotation in order:rank: 1is the first starter. Relievers are underRPand the closer underCL.
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 ApifyClientclient = 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.comas a connector (MCP server) in ChatGPT settings. - Cursor, VS Code, Windsurf and other MCP clients: add
https://mcp.apify.comas 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 case | Cron (UTC) | When |
|---|---|---|
| Daily depth chart snapshot | 0 13 * * * | Every day at 9 AM US Eastern |
| NFL midweek update | 0 12 * * 3 | Wednesday, when teams release weekly depth charts |
| NFL game-day starters | 0 15 * * 0 | Sunday 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.
Related Actors
- ESPN Injury Report Scraper — Out, Doubtful, Questionable, IR and IL players with ESPN's notes. Combine with depth charts to find the player who replaces an injured starter.
- ESPN Transactions Scraper — signings, releases, trades and IL moves.
- ESPN Sports Scores & Schedules — scores, schedules, venues and broadcasts for every game.
- ESPN Player Box Scores & Game Logs — every stat for every player in every game.
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.