# Sports Injury Reports API (`parsebird/sports-injury-reports-api`) Actor

Get NFL, NBA, WNBA, MLB and NHL injury reports as clean JSON: player status, injury type, body part, expected return date and analyst notes. Filter by league, status and team.

- **URL**: https://apify.com/parsebird/sports-injury-reports-api.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.25 / 1,000 player injuries

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### Sports Injury Reports API

Sports Injury Reports API gives you the current **NFL, NBA, WNBA, MLB and NHL injury reports** as clean JSON, one row per injured player, with status, injury details, estimated return date and analyst notes.

<table><tr>
<td style="border-left:4px solid #1C1917;padding:12px 16px;font-weight:600">
Pull every listed injury across five leagues in a single run of a few seconds, filter by status (Out, Questionable, Day-To-Day, Injured Reserve, MLB injured list and more) or by team, and get body part, side, diagnosis, fantasy designation and ESPN player IDs on every row.
</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```
Use the Apify Actor "parsebird/sports-injury-reports-api" (call it via ApifyClient) to get current sports injury reports. Example (JavaScript): const { ApifyClient } = require('apify-client'); const client = new ApifyClient({ token: '<APIFY_TOKEN>' }); const run = await client.actor('parsebird/sports-injury-reports-api').call({ leagues: ['nfl', 'nba'], statusFilter: 'out', teams: [], maxItems: 0 }); const { items } = await client.dataset(run.defaultDatasetId).listItems(); Inputs (all optional): leagues (array, default ["nfl","nba","mlb","nhl"], valid nfl/nba/wnba/mlb/nhl), statusFilter (string, default "all", one of all/active/out/day-to-day/questionable/doubtful/injured-reserve/injured-list/suspension, case-insensitive), teams (array of team abbreviations like "KC", nicknames like "Lakers", or ESPN team IDs; default all teams), maxItems (integer, default 0 = no cap). Each output row is one player injury: league, team_id, team, team_abbreviation, athlete_id, athlete, athlete_short, position, position_name, status, injury_type, injury (body part), injury_detail, injury_side, return_date, fantasy_status, date_utc, short_comment, long_comment, source, player_url, headshot_url, fetched_at. API docs: https://apify.com/parsebird/sports-injury-reports-api/api. Get a token at https://console.apify.com/settings/integrations.
```

### What is Sports Injury Reports API?

**Sports Injury Reports API** is an [Apify Actor](https://apify.com/actors) that collects the injury reports [ESPN](https://www.espn.com/nfl/injuries) publishes for the **NFL, NBA, WNBA, MLB and NHL** and returns them as structured rows. You don't need an API key, an ESPN account or an HTML parser. Pick your leagues, click **Start**, and download the results as JSON, CSV or Excel.

It's an easy **NFL injury report API**, **NBA injury API**, **MLB injured list API** and **NHL injury API** in one place. Each row covers one player: their team, position, current status (for example `Questionable`, `Out`, `Day-To-Day` or `60-Day-IL`), the injured body part and diagnosis, ESPN's estimated return date, and the short and long analyst notes shown on ESPN's injury pages.

### What can Sports Injury Reports API do?

- 🏈 **Five leagues in one run**: NFL, NBA, WNBA, MLB and NHL, each fetched in full with a single request. A four-league run usually finishes in seconds.
- 🩺 **Injury details, not only a status**: body part (`Ankle`, `Hamstring`), diagnosis (`Sprain`, `Fracture`), side (`Left`/`Right`), estimated return date and the fantasy designation (`GTD`, `IR-R`, `PUP-R`, `15-Day IL`).
- 🔎 **Status filter**: keep only Out, Questionable, Doubtful, Day-To-Day, Injured Reserve, Suspension, recently cleared (Active) players, or every MLB injured-list stint (7, 10, 15 and 60-day) at once.
- 🏟️ **Team filter**: limit results to the teams you follow by abbreviation (`KC`, `LAL`, `NYY`), nickname (`Chiefs`, `Red Sox`) or ESPN team ID.
- 🆔 **Join-ready IDs**: every row has the ESPN `athlete_id` and `team_id`, plus the player page URL and headshot image URL.
- ⏱️ **Platform features**: [schedule](https://docs.apify.com/platform/schedules) hourly or daily runs, call it through the [Apify API](https://docs.apify.com/api/v2), trigger [webhooks](https://docs.apify.com/platform/integrations/webhooks) when a run finishes, and connect it to [Make, Zapier, n8n, Google Sheets, Slack and more](https://apify.com/integrations).

### What data can you extract from sports injury reports?

| Field | Description |
|-------|-------------|
| `league` | League code: `nfl`, `nba`, `wnba`, `mlb` or `nhl` |
| `team_id` / `team` / `team_abbreviation` | ESPN team ID, full team name, and abbreviation (e.g. `BAL`) |
| `athlete_id` / `athlete` / `athlete_short` | ESPN player ID, full name, and short name (e.g. `L. Jackson`) |
| `position` / `position_name` | Position abbreviation and full name (e.g. `QB` / `Quarterback`) |
| `status` | Player status as listed, e.g. `Out`, `Questionable`, `Day-To-Day`, `Injured Reserve`, `60-Day-IL` |
| `injury_type` | ESPN injury type, e.g. `questionable`, `day-to-day`, `15-day IL` |
| `injury` / `injury_detail` / `injury_side` | Body part, diagnosis and side, when ESPN lists them (`null` otherwise) |
| `return_date` | ESPN's estimated return date (`YYYY-MM-DD`), when listed |
| `fantasy_status` | Fantasy designation, e.g. `GTD`, `OUT`, `IR-R`, `PUP-R`, `60-Day IL` |
| `date_utc` | When the injury note was last updated (ISO 8601, UTC) |
| `short_comment` / `long_comment` | One-line news update and the full analyst commentary |
| `source` | Who wrote the note (currently `RotoWire` for most rows) |
| `player_url` / `headshot_url` | ESPN player page and headshot image |
| `fetched_at` | When this Actor fetched the data (ISO 8601, UTC) |

### How to get NFL, NBA, MLB and NHL injury reports

1. Open [Sports Injury Reports API](https://apify.com/parsebird/sports-injury-reports-api) and click **Try for free**. You'll need a free Apify account.
2. Under **Leagues**, keep the default (NFL, NBA, MLB, NHL) or add WNBA.
3. Optionally choose a **Player status**, for example `Out` or `Questionable`.
4. Optionally enter **Teams** to follow, such as `KC` or `Lakers`.
5. Click **Start**. Once the run finishes, open the **Output** tab and export the injury report as JSON, CSV, Excel or HTML, or read it through the [API](https://apify.com/parsebird/sports-injury-reports-api/api).
6. To keep the data fresh, add a [schedule](https://docs.apify.com/platform/schedules), for example every hour on game days.

### Input parameters

All fields are optional. Running with an empty input `{}` returns every current injury for the NFL, NBA, MLB and NHL.

```json
{
  "leagues": ["nfl", "nba", "mlb", "nhl"],
  "statusFilter": "all"
}
```

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| leagues | array | No | `["nfl", "nba", "mlb", "nhl"]` | Leagues to fetch. Supported: `nfl`, `nba`, `wnba`, `mlb`, `nhl`. |
| statusFilter | string | No | `"all"` | One of `all`, `active`, `out`, `day-to-day`, `questionable`, `doubtful`, `injured-reserve`, `injured-list` (any MLB IL), `suspension`. Case-insensitive. Rare statuses such as `Paternity` are returned only under `all`. |
| teams | array | No | all teams | Team abbreviations (`KC`), names or nicknames (`Lakers`, `Boston Red Sox`), or ESPN team IDs (`22`). Abbreviations can match teams in more than one league (`KC` is both the Chiefs and the Royals), so pair this with `leagues`. |
| maxItems | integer | No | `0` | Stop after this many rows. `0` means no cap. |

### Output example

Real rows from a run on October 16, 2026:

```json
[
  {
    "league": "nfl",
    "team_id": "33",
    "team": "Baltimore Ravens",
    "team_abbreviation": "BAL",
    "athlete_id": "3916387",
    "athlete": "Lamar Jackson",
    "athlete_short": "L. Jackson",
    "position": "QB",
    "position_name": "Quarterback",
    "status": "Questionable",
    "injury_type": "questionable",
    "injury": "Ankle",
    "injury_detail": "Sprain",
    "injury_side": "Left",
    "return_date": "2026-10-18",
    "fantasy_status": "QUESTIONABLE",
    "date_utc": "2026-10-15T20:40:00Z",
    "short_comment": "Jackson (ankle) officially went down as a non-participant at Thursday's practice.",
    "long_comment": "Jackson wasn't spotted by reporters earlier in the day, and Baltimore's injury report confirms his second absence in as many days to begin Week 6 prep. ...",
    "source": "RotoWire",
    "player_url": "https://www.espn.com/nfl/player/_/id/3916387/lamar-jackson",
    "headshot_url": "https://a.espncdn.com/i/headshots/nfl/players/full/3916387.png",
    "fetched_at": "2026-10-16T14:51:29.155050Z"
  },
  {
    "league": "mlb",
    "team_id": "29",
    "team": "Arizona Diamondbacks",
    "team_abbreviation": "ARI",
    "athlete_id": "4866477",
    "athlete": "Tyler Locklear",
    "athlete_short": "T. Locklear",
    "position": "1B",
    "position_name": "First Baseman",
    "status": "60-Day-IL",
    "injury_type": "60-day IL",
    "injury": "Thumb",
    "injury_detail": "Fracture",
    "injury_side": "Right",
    "return_date": "2027-02-01",
    "fantasy_status": "60-Day IL",
    "date_utc": "2026-09-12T21:22:00Z",
    "short_comment": "The Diamondbacks optioned Locklear to Triple-A Reno on Monday.",
    "long_comment": "Locklear ended up being a casualty of the 26-man active roster after the Diamondbacks needed to clear a spot ...",
    "source": "RotoWire",
    "player_url": "https://www.espn.com/mlb/player/_/id/4866477",
    "headshot_url": "https://a.espncdn.com/i/headshots/mlb/players/full/4866477.png",
    "fetched_at": "2026-10-16T14:51:29.155050Z"
  }
]
```

Long comments are shortened above. The dataset contains the full text.

### Use Sports Injury Reports API from Python or JavaScript

Install the [Apify API client](https://docs.apify.com/api/client/python) and use your [API token](https://console.apify.com/settings/integrations).

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("<APIFY_TOKEN>")

run = client.actor("parsebird/sports-injury-reports-api").call(run_input={
    "leagues": ["nfl"],
    "statusFilter": "questionable",
})

for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row["team_abbreviation"], row["athlete"], row["position"], row["injury"], row["status"])
```

#### JavaScript

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<APIFY_TOKEN>' });

const run = await client.actor('parsebird/sports-injury-reports-api').call({
    leagues: ['nba', 'wnba'],
    statusFilter: 'out',
    teams: ['Lakers', 'Celtics'],
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((row) => console.log(row.team, row.athlete, row.injury, row.return_date));
```

### Use cases

- **Fantasy sports tools**: flag Questionable and Out players before lineup lock and send start/sit alerts.
- **Sports betting models**: add player availability and injury severity as features next to odds data.
- **Injury news bots**: post new or changed injuries to Discord, Slack or Telegram from a scheduled run.
- **Daily digests and dashboards**: load a daily snapshot into Google Sheets, BigQuery or a BI tool and track how injury lists change over a season.
- **Team and media research**: compare injured-list usage, body parts and return timelines across teams and leagues.

### How it works

1. The Actor requests ESPN's public injuries feed once per selected league, and all leagues are fetched in parallel.
2. Each listed injury becomes one row. Team, player, position, status, injury details and analyst notes are normalized into flat fields, and timestamps are converted to ISO 8601 UTC.
3. Your status and team filters are applied, then `maxItems` caps the output.
4. Rows are saved to the run's dataset, ready to export or read through the API.

If a league is temporarily unreachable, the run retries it and still saves the other leagues. A league in its off-season may list few or no injuries.

### How much does it cost to get sports injury data?

Sports Injury Reports API uses pay-per-event pricing. You pay per injury row saved, and platform usage (compute and data transfer) is included in that price.

| Plan | Price per injury row | Price per 1,000 rows |
|------|---------------------|----------------------|
| Free | $0.00029 | **$0.29** |
| Bronze, Silver, Gold | $0.00025 | **$0.25** |

On October 16, 2026, a default run (NFL, NBA, MLB, NHL, all statuses) returned 1,346 rows, which costs about $0.39 on the Free plan and $0.34 on paid plans. With `statusFilter: "out"` the same run returned 93 rows (about $0.03). Row counts change with the season. To control spend, narrow `leagues`, `statusFilter` or `teams`, or set `maxItems`. The run also stops at the maximum cost per run that you set in Apify Console.

### Is it legal to scrape ESPN injury reports?

This Actor only reads injury information that ESPN publishes on public pages, without logging in or getting around any paywall. Scraping publicly available data is generally legal, but you are responsible for how you use it and for following ESPN's terms of use, especially if you republish the analyst notes. If you aren't sure, consult a lawyer. Read more on the [Apify blog about web scraping legality](https://blog.apify.com/is-web-scraping-legal/).

This Actor is unofficial and isn't affiliated with, endorsed by or sponsored by ESPN, RotoWire or any league.

### Other sports scrapers from ParseBird

- [Sports Betting Odds Scraper](https://apify.com/parsebird/sports-betting-odds-scraper): moneyline, spread and totals odds for NFL, NBA, MLB, NHL, soccer, UFC and more.
- [PrizePicks Scraper](https://apify.com/parsebird/prizepicks-scraper): PrizePicks player props, projections and lines for every active league.
- [MLB Stats Scraper](https://apify.com/parsebird/mlb-stats-scraper): MLB teams, rosters, schedules, standings, player stats and box scores.
- [SofaScore Scraper](https://apify.com/parsebird/sofascore-scraper): live scores, fixtures, lineups, statistics and standings across sports.
- [FlashScore Scraper](https://apify.com/parsebird/flashscore-scraper): live and scheduled scores for football, basketball, tennis and 13 other sports.
- [Kalshi Scraper](https://apify.com/parsebird/kalshi-scraper): Kalshi prediction market events, prices and volume.

### FAQ

**Where does the injury data come from?**
From the injury reports ESPN publishes for each league, the same data behind pages like [espn.com/nfl/injuries](https://www.espn.com/nfl/injuries). Most analyst notes are written by RotoWire, and the `source` field says who wrote each one.

**How often is the data updated?**
ESPN updates injury notes throughout the day, and `date_utc` shows when each note last changed. Every run fetches the latest version. For near-real-time data, [schedule](https://docs.apify.com/platform/schedules) the Actor to run every hour or more often on game days.

**Why do NFL results include players with status "Active"?**
ESPN keeps players who were recently injured on the list with status `Active` once they are cleared to play, and each one comes with a note about their return. Use `statusFilter` to drop or isolate them.

**Why are injury details or the return date sometimes empty?**
ESPN doesn't list a body part, side or return date for every player, for example for many `Active` NFL players. Those fields are `null` when ESPN leaves them out.

**Which statuses does each league use?**
In the run used for this README, the NFL listed Active, Questionable, Doubtful, Out, Injured Reserve and Suspension. The NBA listed Day-To-Day and Out, the NHL Day-To-Day, Out and Injured Reserve, and the WNBA Out. MLB listed 7, 10, 15 and 60-Day IL, Day-To-Day, Out, Suspension and Paternity.

**Do you support college football or soccer?**
Not at the moment. ESPN's injury feed for college sports was nearly empty and out of date when we tested it, and it returned no data for the Premier League.

**Can I export to CSV or Excel, or use it with Zapier or Make?**
Yes. Every dataset can be downloaded as JSON, CSV, Excel, XML or HTML, and the Actor works with [Make, Zapier, n8n, Google Sheets and other integrations](https://apify.com/integrations). Code snippets for every language are on the [API tab](https://apify.com/parsebird/sports-injury-reports-api/api).

**Something looks wrong or missing. What should I do?**
Open an issue on the [Issues tab](https://apify.com/parsebird/sports-injury-reports-api/issues) with the leagues and filters you used, and we'll look into it.

# Changelog

This Actor's version history is a separate document: https://apify.com/parsebird/sports-injury-reports-api/changelog.md

# Actor input Schema

## `leagues` (type: `array`):

Pick the leagues to fetch injury reports for. Each league is fetched in full in one request.

## `statusFilter` (type: `string`):

Return only players with this status. 'Injured list' covers every MLB IL stint (7, 10, 15 and 60-day). Rare statuses such as Paternity or Bereavement appear only under 'All statuses'.

## `teams` (type: `array`):

Optional. Keep only these teams. Enter a team abbreviation (KC, LAL, NYY), a team name or nickname (Chiefs, Boston Celtics, Red Sox) or an ESPN team ID. Leave empty for every team.

## `maxItems` (type: `integer`):

Stop after this many injury rows. 0 = no cap. A full four-league run returns roughly 1,000 to 1,500 rows depending on the time of year.

## Actor input object example

```json
{
  "leagues": [
    "nfl",
    "nba",
    "mlb",
    "nhl"
  ],
  "statusFilter": "all",
  "maxItems": 0
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "leagues": [
        "nfl",
        "nba",
        "mlb",
        "nhl"
    ],
    "statusFilter": "all"
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/sports-injury-reports-api").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "leagues": [
        "nfl",
        "nba",
        "mlb",
        "nhl",
    ],
    "statusFilter": "all",
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/sports-injury-reports-api").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "leagues": [
    "nfl",
    "nba",
    "mlb",
    "nhl"
  ],
  "statusFilter": "all"
}' |
apify call parsebird/sports-injury-reports-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parsebird/sports-injury-reports-api"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/CO6LRTetm7ZJ7GjZh/builds/xPhcNVUlCflMdbOC9/openapi.json
