ESPN Transactions Scraper - NFL, NBA, MLB, NHL & WNBA avatar

ESPN Transactions Scraper - NFL, NBA, MLB, NHL & WNBA

Pricing

from $1.00 / 1,000 saved transactions

Go to Apify Store
ESPN Transactions Scraper - NFL, NBA, MLB, NHL & WNBA

ESPN Transactions Scraper - NFL, NBA, MLB, NHL & WNBA

Scrape NFL, NBA, MLB, NHL and WNBA roster transactions from ESPN: signings, releases, trades, waivers, injured list and IR moves, call-ups and practice squad elevations. Filter by team or player. Get past years back to 2001. Export JSON, CSV or Excel.

Pricing

from $1.00 / 1,000 saved transactions

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 Transactions Scraper — NFL, NBA, MLB, NHL & WNBA Signings, Trades and Roster Moves

Get roster transactions for the NFL, NBA, MLB, NHL and WNBA from ESPN. Every signing, release, trade, waiver claim, injured reserve and injured list move, call-up, option and practice squad elevation, with the team and the date.

Get the moves of the last few days for a live feed, or a whole past year for research. Filter by team or by player. Download the data as JSON, CSV, Excel or HTML, or read it from the API.

No API key. No login. No coding needed.

What does ESPN Transactions Scraper do?

  • Signings and releases — free-agent signings, contract extensions, rookie contracts, two-way and hardship contracts, releases and waivers.
  • Trades — the players, draft picks and considerations that each team sent and received.
  • Injury moves — NFL injured reserve, MLB 10-day, 15-day and 60-day injured list, NHL long-term injured reserve, and every return from them.
  • Call-ups and send-downs — MLB recalls, options and selected contracts, NHL recalls from and assignments to the AHL.
  • Practice squad — NFL practice squad signings and game-day elevations.
  • Coaching and front office — hires and firings that ESPN reports as team transactions.
  • History — any past calendar year.

Supported leagues

LeagueCodeTransactions per yearWhat you get
NFLnflabout 2,800Signings, releases, trades, injured reserve, practice squad, elevations
MLBmlbabout 3,500Injured list, recalls, options, designated for assignment, trades, signings
NHLnhlabout 1,800Recalls, AHL assignments, waivers, injured reserve, signings, trades
NBAnbaabout 500Signings, two-way and 10-day contracts, waivers, trades, extensions
WNBAwnbaabout 150Signings, hardship contracts, waivers, trades

ESPN publishes no transactions for college sports or soccer.

Why use this sports transactions scraper?

  • Fantasy sports — Catch a waiver, a release or an injured reserve move as soon as ESPN reports it, and post it to your league's Slack or Discord.
  • Team and player trackers — Follow one club's roster moves, or every move that names one player.
  • Sports betting and prediction models — Add roster changes and injured list moves to your model as features.
  • Sports media and newsletters — Build a daily "transactions wire" for every league in one run.
  • Research and analytics — Download whole years to study roster churn, call-up patterns or trade activity in Excel, Google Sheets, Python or R.

How to scrape sports transactions from ESPN

  1. Click Try for free and sign in to Apify. A free account is enough.
  2. In Leagues, pick one or more leagues.
  3. Set Lookback (days) for recent moves, or set Year for a whole calendar year.
  4. Optional: add team abbreviations or team names in Teams, or player names in Players.
  5. Click Start. Most runs finish in a few seconds.
  6. Open the Output tab. Download the data as JSON, CSV, Excel or HTML, or view it as a table.

Input

FieldTypeDefaultDescription
leaguesstring[]["nfl"]nfl, nba, mlb, nhl, wnba
daysinteger7Transactions of today and the N days before it, from 1 to 365. 1 is today and yesterday. Not used when year is set
yearinteger—Every transaction of one calendar year, 1 January to 31 December, for example 2024
teamsstring[][]Team abbreviations, such as KC, LAL, NYY, TOR, or team names, such as Kansas City Chiefs, Lakers or Red Sox. Case does not matter. An abbreviation that more than one league uses, such as DAL, matches in every league you selected
playersstring[][]Player names. Part of a name is enough, and case does not matter

Input examples

This week's NFL transactions

{
"leagues": ["nfl"]
}

Today's and yesterday's moves in all five leagues

{
"leagues": ["nfl", "nba", "mlb", "nhl", "wnba"],
"days": 1
}

The Kansas City Chiefs, last 30 days

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

Every New York Yankees move of 2024

{
"leagues": ["mlb"],
"year": 2024,
"teams": ["Yankees"]
}

Every move that names one player in the last year

{
"leagues": ["nfl", "nba", "mlb", "nhl", "wnba"],
"days": 365,
"players": ["rodgers"]
}

Output

You get one row per transaction, newest first. The Output tab shows them as a table with the date, league, team and transaction.

{
"recordType": "transaction",
"league": "mlb",
"leagueName": "MLB",
"sport": "baseball",
"team": {
"id": "10",
"name": "New York Yankees",
"abbreviation": "NYY"
},
"description": "Agreed to terms with RHP Jonathan Loáisiga on a one-year contract.",
"date": "2024-12-21T08:00Z",
"dateLocal": "2024-12-21T03:00:00.000-05:00",
"retrievedAt": "2026-09-29T15:36:42.610Z"
}

Output fields

FieldDescription
league, leagueName, sportThe league, such as nfl and NFL, and the sport
team.id, team.name, team.abbreviationThe team that made the move. team.id is the ESPN team ID
descriptionThe transaction, with the players, their positions and the other team, such as "Traded WR A.J. Brown to New England for a 2028 first-round pick"
dateThe day of the transaction, as a UTC timestamp
dateLocalThe same day in US Eastern time, the time zone that the leagues report in
retrievedAtWhen the data was collected. The same value for every row of one run

Use the scraper with the Apify API

You can run the scraper and read the results from any programming language with the Apify API. Get your API token in Apify Console under Settings → API & Integrations, and replace <YOUR_API_TOKEN> below.

JavaScript / Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('hgservices/espn-transactions-scraper').call({
leagues: ['nfl', 'nba'],
days: 3,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const move of items) {
console.log(move.dateLocal.slice(0, 10), move.team.abbreviation, move.description);
}

Python (apify-client 3.0 or later)

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("hgservices/espn-transactions-scraper").call(run_input={
"leagues": ["mlb"],
"year": 2024,
"teams": ["NYY", "BOS"],
})
if run is None:
raise RuntimeError("The run was not found.")
for move in client.dataset(run.default_dataset_id).iterate_items():
print(move["date"][:10], move["team"]["abbreviation"], move["description"])

cURL — run the scraper and get the results in one call:

curl -X POST "https://api.apify.com/v2/acts/hgservices~espn-transactions-scraper/run-sync-get-dataset-items?format=json" \
-H "Authorization: Bearer <YOUR_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{ "leagues": ["nhl"], "days": 7, "teams": ["TOR"] }'

Change format=json to format=csv or format=xlsx to get a spreadsheet.

Use sports transactions in Claude, ChatGPT and other AI assistants

This scraper works as a tool for AI assistants through the Apify MCP server. Your assistant can find the scraper, read its input options, run it, and use the transactions in its answer.

Claude (claude.ai or Claude Desktop) — Go to Settings → Connectors, add a custom connector, and enter https://mcp.apify.com. Sign in to Apify when Claude asks.

Claude Code

$claude mcp add --transport http apify https://mcp.apify.com

ChatGPT — Turn on Developer mode in Settings → Apps & Connectors → Advanced settings. Then create a connector with the MCP server URL https://mcp.apify.com.

Cursor, VS Code and other MCP clients — Add https://mcp.apify.com as a remote MCP server. To give the assistant only this scraper, use https://mcp.apify.com?tools=hgservices/espn-transactions-scraper.

Then ask in plain language:

Use the ESPN Transactions Scraper to list every NFL player placed on injured reserve this week.

Which NBA players signed two-way contracts in the last 30 days?

Summarize the Toronto Maple Leafs' roster moves this month, and tell me who was recalled from the AHL.

For the best results, tell the assistant the league, the number of days and the team. This keeps the run fast and the cost low.

Integrations and scheduling

Connect the scraper to the tools you already use with Apify integrations: Google Sheets, Slack, Discord, Zapier, Make, n8n, Airbyte, Keboola, GitHub and more. You can also use webhooks to call your own endpoint when a run finishes.

Use Schedules in Apify Console to run the scraper automatically:

Use caseCronInput
Transaction wire, every 6 hours0 */6 * * *days: 1
Daily digest, every morning0 9 * * *days: 1
Weekly team report, every Monday0 8 * * 1days: 7, teams: ["KC"]
Year archive, every 2 January0 6 2 1 *year set to the year that ended

Run summary

Every run saves a SUMMARY record in the key-value store. It gives the number of transactions for each league, the period and the filters. If a league could not be read, it is named in failedLeagues, and the other leagues are still saved.

{
"totalTransactions": 8636,
"transactionsByLeague": { "nfl": 2649, "nba": 453, "mlb": 3578, "nhl": 1833, "wnba": 123 },
"transactionsBeforeFilters": 8636,
"leagues": ["nfl", "nba", "mlb", "nhl", "wnba"],
"failedLeagues": [],
"period": { "days": 365 },
"filters": { "teams": [], "players": [] },
"retrievedAt": "2026-09-29T15:35:49.604Z"
}

How much does it cost to scrape sports transactions?

See the Pricing tab for the current price. Every Apify account gets free monthly platform credit, which is more than enough to try the scraper.

A week of transactions for one league finishes in a few seconds. A full year of all five leagues is about 9,000 rows and finishes in about 10 seconds. The default memory of 256 MB is enough for every run, so you do not need to change it.

Data notes

  • The player is named only in the text. ESPN writes the players into description, often several in one transaction. Use the Players filter to find a player's moves.
  • Dates have no time of day. ESPN gives the day of each transaction only.
  • A year is a calendar year. year: 2025 returns 1 January to 31 December 2025. For a season that crosses New Year, such as the NBA or the NHL, run two years, or use Lookback (days).

FAQ

Do I need an ESPN account or an API key? No. You need only an Apify account.

How quickly does a new transaction appear? As soon as ESPN publishes it, usually on the same day. Schedule the scraper every few hours for a near-live feed.

Why did my run return no rows? Usually there were no moves in your period, or the team did not match. The run log names the teams that had transactions, so you can check the abbreviation or the name.

Can I get the transactions of one player? Yes. Put part of the name in Players, for example mahomes. Use a surname that is not too common, or add a team filter.

Can I combine this data with scores and schedules? Yes. The ESPN Sports Scores & Schedules scraper uses the same league codes and the same team fields, so the datasets join directly.

Is it legal to scrape sports transactions? This scraper collects only public information and never signs in. You are responsible for how you use the data, and for the terms of use of the data source.

Support

Did you find a bug, or do you need a field or a league that is not here? Open an issue on the Issues tab. Custom solutions are available on request.

This scraper uses public data from ESPN. It is not affiliated with, endorsed by, or sponsored by ESPN.