# NTSB Aviation Accident Scraper (`crawlerbros/ntsb-aviation-accident-scraper`) Actor

Scrape NTSB's public CAROL database of U.S. aviation accidents and incidents. Search by NTSB number, registration, operator, airport, date range, aircraft category, injury severity, and more, or browse aviation safety recommendations.

- **URL**: https://apify.com/crawlerbros/ntsb-aviation-accident-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Travel, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

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

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## NTSB Aviation Accident Scraper

Scrape the **National Transportation Safety Board (NTSB)** public CAROL database of U.S. aviation accidents and incidents. Search over 180,000 aviation cases by NTSB number, registration number, operator, airport, location, date range, aircraft category, injury severity, damage, FAR part, phase of flight, and more — or browse aviation safety recommendations issued to the FAA and other agencies. HTTP-only via NTSB's public query API. No auth, no cookies, no proxy required.

### What this actor does

- **Two modes:** `accidents` (aviation accident/incident case search) and `safetyRecommendations` (safety recommendations to the FAA and other addressees)
- **30+ filters** covering the full NTSB CAROL query-builder surface — location, aircraft (make/model/serial/engines/amateur-built), operation type (GA/air medical/sightseeing/second pilot), weather, event category, phase of flight, lead investigating agency, detailed recommendation status/addressee category, and more
- **Date range filters** for event date (accidents) and date issued (recommendations)
- **Sortable** by event date, NTSB number, city, state, country, highest injury level, aircraft registration, aircraft category, or date issued
- **Direct links** to the NTSB CAROL case detail page for every record
- **Empty fields are omitted** — every record only contains fields NTSB actually reported

### Output: per-accident (mode = `accidents`)

- `ntsbNumber` — NTSB case number, e.g. `ERA24LA084`
- `caseKey` — internal NTSB case key (Mkey)
- `eventId` — NTSB event ID
- `completionStatus` — `Completed` or `In-work`
- `eventType` — `Accident`, `Incident`, or `Occurrence`
- `isStudy` — whether the case is a special study
- `eventDate` — ISO date/time of the event
- `city`, `state`, `country`
- `reportNumber`
- `registrationNumber` — aircraft tail number (N-number)
- `aircraftMake`, `aircraftModel`
- `additionalAircraft` — for cases involving more than one aircraft (e.g. midair collisions), an array of `{registrationNumber, aircraftMake, aircraftModel}` for every aircraft beyond the first
- `highestInjuryLevel` — `Fatal`, `Serious`, `Minor`, or `None`
- `injuryOnGroundCount`, `injuryOnboardCount`
- `hasSafetyRecommendation` — whether a safety recommendation resulted from this case
- `investigationMode` — always `Aviation`
- `reportType`, `mostRecentReportType`
- `docketPublishDate`, `originalPublishedDate`, `reportDate`
- `sourceUrl` — link to the NTSB CAROL case detail page
- `recordType: "aviationAccident"`, `scrapedAt`

### Output: per-recommendation (mode = `safetyRecommendations`)

- `recommendationId` — safety recommendation ID, e.g. `A-70-037`
- `status` — detailed status, e.g. `Closed - Acceptable Action`
- `investigationMode` — always `Aviation`
- `recommendationText` — full recommendation text
- `codingMode`, `codingTier1`, `codingTier2` — NTSB safety-issue coding taxonomy
- `relatedNtsbNumber` — the accident case this recommendation stems from
- `caseKey`
- `addresseeName` — agency/organization the recommendation was sent to
- `dateClosed`
- `eventDate`, `city`, `state`, `country`
- `reportNumber`, `reportNumberCleaned`
- `sourceUrl` — link to the NTSB CAROL case detail page
- `recordType: "safetyRecommendation"`, `scrapedAt`

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `accidents` | `accidents` / `safetyRecommendations` |
| `ntsbNumber` | string | – | NTSB number contains (mode=accidents) |
| `registrationNumber` | string | – | Aircraft N-number contains (mode=accidents) |
| `operatorName` | string | – | Operator/airline name contains (mode=accidents) |
| `airportName` | string | – | Airport name contains (mode=accidents) |
| `city` | string | – | City contains (mode=accidents) |
| `state` | string | – | U.S. state/region select (mode=accidents) |
| `country` | string | – | Country name, e.g. `United States` (mode=accidents) |
| `eventDateFrom` / `eventDateTo` | string | – | Event date range (mode=accidents) |
| `highestInjury` | string | – | `Fatal` / `Serious` / `Minor` / `None` |
| `eventType` | string | – | `Accident` / `Incident` / `Occurrence` |
| `aircraftCategory` | string | – | Airplane, Helicopter, Glider, etc. |
| `engineType` | string | – | Reciprocating, Turbo fan, Electric, etc. |
| `damage` | string | – | Destroyed / Substantial / Minor / None |
| `farPart` | string | – | FAA regulation part (Part 91, 121, 135, …) |
| `flightOperationType` | string | – | Personal, Business, Instructional, etc. |
| `flightServiceType` | string | – | Passenger / Cargo / Mail |
| `flightScheduledType` | string | – | Scheduled / Non-scheduled |
| `weatherCondition` | string | – | VMC / IMC |
| `eventCategory` | string | – | CICTT event category (Loss of Control, CFIT, …) |
| `phaseOfFlight` | string | – | Takeoff, Landing, Enroute, etc. |
| `openClosedStatus` | string | – | Investigation `Completed` / `In-work` |
| `minOnboardInjuries` | int | – | Minimum onboard injury/fatality count |
| `aircraftMake` | string | – | Aircraft manufacturer contains, e.g. `Cessna` |
| `aircraftModel` | string | – | Aircraft model contains, e.g. `172` |
| `registeredOwner` | string | – | Aircraft registered owner name contains |
| `airportId` | string | – | Nearest airport identifier/code contains, e.g. `ORD` |
| `serialNumber` | string | – | Aircraft manufacturer serial number contains |
| `numberOfEngines` | int | – | Exact number of engines (1–8) |
| `amateurBuilt` | string | – | Homebuilt/amateur-built aircraft only, or exclude |
| `generalAviationFlight` | string | – | General aviation flights only, or exclude |
| `airMedicalFlight` | string | – | Air medical (air ambulance) flights only, or exclude |
| `commercialSightseeing` | string | – | Commercial sightseeing flights only, or exclude |
| `secondPilotPresent` | string | – | Whether a second pilot was onboard |
| `leadAgency` | string | – | Lead investigating agency: NTSB, Other, US Coast Guard |
| `recKeyword` | string | – | Recommendation text contains (mode=safetyRecommendations) |
| `addresseeName` | string | – | Addressee agency contains (mode=safetyRecommendations) |
| `recStatus` | string | – | `Open` / `Closed` |
| `recPriority` | string | – | `Urgent` / `Non-urgent` |
| `recDetailedStatus` | string | – | Detailed 15-value recommendation status (e.g. `Open - Await Response`, `Closed - Superseded`) |
| `addresseeCategory` | string | – | Type of organization addressed (Federal Government, Private Industry, Airport, etc.) |
| `isReiterated` | string | – | Recommendations NTSB has reiterated to the addressee, or exclude |
| `recDateIssuedFrom` / `recDateIssuedTo` | string | – | Date issued range (mode=safetyRecommendations) |
| `sortBy` | string | event date | Sort column: event date, NTSB number, city, state, country, highest injury, aircraft registration, aircraft category, or date issued (recommendations) |
| `sortDescending` | boolean | `true` | Sort newest first |
| `maxItems` | int | `50` | Hard cap on emitted records (1–5000) |
| `proxyConfiguration` | object | Apify proxy | Not required for normal use since NTSB CAROL is publicly accessible; only engaged automatically if the upstream API returns a block response |

### Example: recent fatal accidents in California

```json
{
  "mode": "accidents",
  "state": "CA",
  "highestInjury": "Fatal",
  "eventDateFrom": "2023-01-01",
  "maxItems": 100
}
```

### Example: helicopter accidents under Part 135

```json
{
  "mode": "accidents",
  "aircraftCategory": "HELI",
  "farPart": "135",
  "maxItems": 50
}
```

### Example: open safety recommendations to the FAA

```json
{
  "mode": "safetyRecommendations",
  "addresseeName": "FAA",
  "recStatus": "open",
  "maxItems": 100
}
```

### Example: search by aircraft registration

```json
{
  "mode": "accidents",
  "registrationNumber": "N12345",
  "maxItems": 10
}
```

### Example: amateur-built Cessna accidents

```json
{
  "mode": "accidents",
  "aircraftMake": "Cessna",
  "amateurBuilt": "true",
  "maxItems": 50
}
```

### Example: open safety recommendations awaiting response from federal agencies

```json
{
  "mode": "safetyRecommendations",
  "recDetailedStatus": "11",
  "addresseeCategory": "3",
  "maxItems": 100
}
```

### Use cases

- **Aviation safety research** — analyze accident trends by aircraft category, phase of flight, or event type
- **Insurance & risk assessment** — pull accident history for specific aircraft registrations or operators
- **Journalism** — investigate accidents at specific airports or by specific operators
- **Regulatory compliance** — track open safety recommendations affecting your organization
- **Academic studies** — bulk-export aviation accident data for statistical analysis
- **Aircraft due-diligence** — check an N-number's accident/incident history before purchase

### FAQ

**What is the data source?**
NTSB's public CAROL (Case Analysis Reporting Online) database at data.ntsb.gov — the same system that powers the public search UI at ntsb.gov. This actor calls the same public JSON query API the website itself uses.

**Is this affiliated with the NTSB?**
No. This is an independent, third-party actor built on NTSB's publicly accessible query API.

**How far back does the data go?**
NTSB's aviation accident database goes back to the 1960s for older, briefer records, with full detail from the 1980s onward.

**How fresh is the data?**
Data reflects NTSB's live CAROL database, updated continuously as investigations progress.

**Why are some fields missing on a record?**
NTSB doesn't populate every field for every case (e.g., older or still-open investigations may lack some details). Empty fields are omitted rather than returned as null.

**What does `mode=accidents` vs `mode=safetyRecommendations` return?**
`accidents` returns individual aviation accident/incident case records. `safetyRecommendations` returns the formal safety recommendations NTSB issues to agencies like the FAA as a result of investigations — a distinct, smaller dataset.

**Can I filter by both state and country?**
Yes — filters combine with AND logic. Combining a narrow location filter with a narrow date range may return 0 results if no matching cases exist; that's expected NTSB data, not an actor error.

**Is a proxy required?**
No. NTSB CAROL's API is publicly accessible without a proxy. The actor only engages the free Apify AUTO proxy automatically if the upstream API ever returns a block response.

# Actor input Schema

## `mode` (type: `string`):

What to fetch from NTSB CAROL.

## `ntsbNumber` (type: `string`):

Filter to cases whose NTSB number contains this text, e.g. `ERA24`.

## `registrationNumber` (type: `string`):

Filter by aircraft tail/registration number, e.g. `N123AB`.

## `operatorName` (type: `string`):

Filter by airline/operator name, e.g. `Delta`.

## `airportName` (type: `string`):

Filter by nearest airport name, e.g. `O'Hare`.

## `city` (type: `string`):

Filter by event city, e.g. `Chicago`.

## `state` (type: `string`):

Filter to a specific U.S. state, territory, or region.

## `country` (type: `string`):

Filter by country name, e.g. `United States`, `Canada`, `Mexico`, `United Kingdom`. Matched case-insensitively against NTSB's ~289 known country names.

## `eventDateFrom` (type: `string`):

Only events on/after this date.

## `eventDateTo` (type: `string`):

Only events on/before this date.

## `highestInjury` (type: `string`):

Filter by the most severe injury reported.

## `eventType` (type: `string`):

Filter by NTSB event classification.

## `aircraftCategory` (type: `string`):

Filter by aircraft category.

## `engineType` (type: `string`):

Filter by aircraft engine type.

## `damage` (type: `string`):

Filter by degree of aircraft damage.

## `farPart` (type: `string`):

Filter by the FAA regulation part the flight was conducted under.

## `flightOperationType` (type: `string`):

Filter by the purpose/type of the flight operation.

## `flightServiceType` (type: `string`):

Filter by flight service type.

## `flightScheduledType` (type: `string`):

Filter by whether the flight was scheduled service.

## `weatherCondition` (type: `string`):

Filter by basic weather condition at the accident site.

## `eventCategory` (type: `string`):

Filter by the CICTT (ICAO) event category, e.g. Loss of Control, Runway Excursion.

## `phaseOfFlight` (type: `string`):

Filter by the flight phase during which the event occurred.

## `openClosedStatus` (type: `string`):

Filter by whether NTSB's investigation is completed or still in work.

## `minOnboardInjuries` (type: `integer`):

Only include cases with at least this many injured/fatal occupants onboard.

## `aircraftMake` (type: `string`):

Filter by aircraft manufacturer, e.g. `Cessna`.

## `aircraftModel` (type: `string`):

Filter by aircraft model, e.g. `172`.

## `registeredOwner` (type: `string`):

Filter by the aircraft's registered owner name.

## `airportId` (type: `string`):

Filter by nearest airport identifier/code, e.g. `ORD`.

## `serialNumber` (type: `string`):

Filter by aircraft manufacturer serial number.

## `numberOfEngines` (type: `integer`):

Only include aircraft with exactly this many engines.

## `amateurBuilt` (type: `string`):

Filter to (or exclude) homebuilt/amateur-built aircraft.

## `generalAviationFlight` (type: `string`):

Filter to (or exclude) general aviation flights.

## `airMedicalFlight` (type: `string`):

Filter to (or exclude) air medical (e.g. air ambulance) flights.

## `commercialSightseeing` (type: `string`):

Filter to (or exclude) commercial sightseeing flights.

## `secondPilotPresent` (type: `string`):

Filter by whether a second pilot was onboard.

## `leadAgency` (type: `string`):

Filter by which agency led the investigation.

## `recKeyword` (type: `string`):

Filter safety recommendations whose text contains this keyword, e.g. `engine`.

## `addresseeName` (type: `string`):

Filter by the agency/organization the recommendation was addressed to, e.g. `FAA`.

## `recStatus` (type: `string`):

Filter by whether the recommendation is open or closed.

## `recPriority` (type: `string`):

Filter by priority level.

## `recDateIssuedFrom` (type: `string`):

Only recommendations issued on/after this date.

## `recDateIssuedTo` (type: `string`):

Only recommendations issued on/before this date.

## `recDetailedStatus` (type: `string`):

Filter by the detailed recommendation status (more granular than open/closed).

## `addresseeCategory` (type: `string`):

Filter by the type of organization the recommendation was addressed to.

## `isReiterated` (type: `string`):

Filter to (or exclude) recommendations that NTSB has reiterated to the addressee.

## `sortBy` (type: `string`):

Upstream column to sort by. Leave blank to sort by event date (mode=accidents) or date issued (mode=safetyRecommendations).

## `sortDescending` (type: `boolean`):

Sort newest/highest first.

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

Hard cap on emitted records.

## `proxyConfiguration` (type: `object`):

Not required for normal use — NTSB CAROL is publicly accessible. Only engaged automatically if the upstream API returns 403/429.

## Actor input object example

```json
{
  "mode": "accidents",
  "sortDescending": true,
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `records` (type: `string`):

Dataset containing all scraped NTSB aviation accident/incident and safety recommendation records.

# 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 = {
    "mode": "accidents",
    "sortDescending": true,
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/ntsb-aviation-accident-scraper").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 = {
    "mode": "accidents",
    "sortDescending": True,
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/ntsb-aviation-accident-scraper").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 '{
  "mode": "accidents",
  "sortDescending": true,
  "maxItems": 50
}' |
apify call crawlerbros/ntsb-aviation-accident-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawlerbros/ntsb-aviation-accident-scraper"
        }
    }
}

```

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/jOtm5ZLGl2bcB3xKi/builds/oQgkhy61byxC3NVOu/openapi.json
