# FMCSA Scraper: Carrier Safety and Crashes (`parselab/fmcsa-carrier-safety-crashes-scraper`) Actor

Scrape FMCSA data on US trucking and bus companies. Get fleet size, drivers, mileage and USDOT and MC numbers, with crashes, inspections, out-of-service rates and safety flags per carrier, plus crash, inspection and violation records. Filter by name, state or fleet. Export to CSV or Excel.

- **URL**: https://apify.com/parselab/fmcsa-carrier-safety-crashes-scraper.md
- **Developed by:** [ParseLab](https://apify.com/parselab) (community)
- **Categories:** Business, Other
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $18.00 / 1,000 results

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

## FMCSA Scraper: Carrier Safety, Crashes, Inspections and Violations

This FMCSA scraper turns the public safety data of US trucking and bus companies into clean rows. Search a carrier by USDOT number, name, state, city or fleet size and get its profile and its safety record in one row: trucks and drivers, annual mileage, operating authority numbers, hazardous materials flag, and the crashes, roadside inspections, out-of-service rates and violations of the last months. Single records of crashes, inspections and violations are available too.

The safety record is computed for you. For every carrier the Actor counts crashes, fatal crashes, crashes with injuries and tow aways, inspections, inspections with violations and out-of-service inspections, then adds rates, crashes per 100 trucks, crashes per million miles and plain language flags. You can compare a thousand carriers in one table instead of opening one page per company.

Freight brokers, shippers, insurers, lenders, fleet buyers, lawyers, journalists and safety researchers use it for carrier vetting and risk screening.

### What can you do with this FMCSA scraper?

- Check a carrier before you hire it: crashes, fatal crashes and out-of-service rates
- Rank the biggest fleets of a state by crashes per 100 trucks
- Find small carriers with a high vehicle out-of-service rate
- List carriers by city, ZIP code, type of operation or hazardous materials
- Pull all fatal crashes of a carrier or a state in a period
- Read the roadside inspections of a company with the violations found
- See which violation types a carrier gets most often
- Find the operating authority numbers (MC numbers) of a company
- Build a prospect list of fleets of a size you serve
- Export to CSV or Excel, or send changes to your own tools

### What data can you extract from FMCSA?

| Mode | One row is | Highlights |
|---|---|---|
| Carriers | One carrier | USDOT number, legal and trade name, active flag, MC and other docket numbers, type of operation, organization type, interstate or intrastate, hazardous materials, address, phone, power units, trucks, buses, drivers, CDL drivers, annual mileage and year, drivers per truck, long haul and short haul counts, registration and last update dates, prior revocation flag, link to the official page, and for the chosen months: crashes, fatal, injury and tow away crashes, crashes per 100 trucks, crashes per million miles, inspections, inspections with violations, out-of-service inspections, vehicle and driver out-of-service rates, violations of the last 24 months, safety flags |
| Crashes | One crash | Crash id, report number, date, time, state, city, location, fatalities, injuries, tow away, hazardous materials released, truck or bus, vehicles involved, placard, carrier USDOT, name, city and state |
| Inspections | One roadside inspection | Inspection id, date, time, state, place, inspection level, carrier, driver, vehicle and hazardous materials violations, out-of-service counts, post crash flag, weight, cargo tank, enforcement flags, shipper |
| Violations | One violation | Carrier, inspection date, violation code, safety category, description, group, driver or vehicle, out-of-service flag, severity and time weights |

### How to scrape FMCSA data

1. Choose **Carriers with safety record**, **Crash records**, **Roadside inspections** or **Violations**.
2. Add USDOT numbers, company names, states, cities or ZIP codes.
3. For carriers, set the minimum fleet size and the months of safety record.
4. Set **Max Items** and click **Start**.
5. Export the dataset as CSV, Excel or from the Apify console.

### Input example

```json
{
  "mode": "carriers",
  "states": ["TX"],
  "minPowerUnits": 1000,
  "sortBy": "crashes",
  "safetyMonths": 24,
  "maxItems": 100
}
```

### Carrier output example

```json
{
  "dotNumber": "53467",
  "legalName": "Werner Enterprises Inc",
  "city": "Omaha",
  "state": "NE",
  "docketNumbers": ["MC138328"],
  "powerUnits": 9863,
  "drivers": 9107,
  "reportedAnnualMileage": 796071597,
  "crashes": 705,
  "fatalCrashes": 10,
  "injuryCrashes": 237,
  "inspections": 11851,
  "outOfServiceRatePct": 11.8,
  "vehicleOutOfServiceRatePct": 10.9,
  "driverOutOfServiceRatePct": 1,
  "crashesPer100PowerUnits": 7.1,
  "crashesPerMillionMiles": 0.89,
  "safetyFlags": ["10 fatal crash(es) in the last 24 months"]
}
```

### Crash output example

```json
{
  "crashId": "5204619",
  "reportDate": "2026-09-11",
  "state": "FL",
  "city": "Hawthorne",
  "fatalities": 1,
  "injuries": 0,
  "towAway": true,
  "vehicleType": "Truck",
  "carrierName": "Werner Enterprises Inc"
}
```

### How much does it cost to scrape FMCSA data?

You pay per result: $24 per 1,000 rows plus a tiny start fee. The free plan returns up to 10 rows per run. A carrier row already includes its safety statistics, so you do not pay again for the crash and inspection counts.

### Tips for better results

- Large carriers have many crashes simply because they have many trucks. Use the crashes per 100 trucks and per million miles to compare carriers of different size.
- The rates are shares of the inspections of the period. A carrier with few inspections can show a high rate by chance, so the flags only appear with at least five inspections.
- The safety flags are a quick screen made with simple limits. They are not a safety rating of the agency and not legal advice.
- Annual mileage and the number of trucks are reported by the carrier itself in its registration and can be old. The date of the last update is in every row.
- Carriers can have several USDOT numbers or change names. Search the name and compare the rows.
- The violations mode covers the last 24 months, which is the window the agency uses for its safety measurement system.
- Crash records are filed by the states and can arrive months late, so the latest weeks of any search are incomplete.
- Sorting by crashes works on the first 2,000 carriers of the search. Narrow the search with a state or a fleet size to cover all of them.

### Who uses this data?

- **Freight brokers and shippers** vet carriers before they book loads.
- **Insurers and lenders** price and screen fleets.
- **Fleet buyers and recruiters** build lists of companies by size and place.
- **Lawyers and investigators** research the record of a company.
- **Journalists and researchers** study crashes and enforcement.

### Automate and connect

Schedule the Actor every week and send the carriers with new safety flags to Slack, Google Sheets, Zapier, Make or n8n, or trigger a webhook when a run ends.

### FAQ

**Do I need an account or a login?**
No. The Actor works without any login.

**What is a USDOT number?**
The number that the federal agency gives to every carrier that operates commercial vehicles in interstate commerce. Many states ask for it for intrastate carriers too.

**Where do the MC numbers come from?**
They are the docket numbers in the registration of the carrier. They show the operating authority that the company asked for.

**How current is the data?**
The agency updates the files every day. Crashes and inspections of the last days can still be missing.

**Does it show the official safety rating?**
No. It shows the counts and rates calculated from the open crash and inspection files. The official rating is on the SAFER page, and every row has a link to it.

**Is this legal advice?**
No. It is public information. Check the official record before you make a decision about a carrier.

### Legal note

This Actor collects information that is publicly visible on the website. Check the source site's terms and your local rules before using the data.

### Support

Missing a field or found a bug? Open an issue from the Actor page.

# Actor input Schema

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

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000.

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

Carriers returns one row per trucking or bus company with its size and its recent crashes, inspections and out-of-service rates. Crashes, inspections and violations return the single records.

## `dotNumbers` (type: `array`):

USDOT numbers of carriers, for example 1163849. The easiest way to look up known companies.

## `legalNames` (type: `array`):

Part of a company or trade name, for example Werner or Knight. In the crash and inspection modes it is the name of the carrier on the record.

## `states` (type: `array`):

Two letter state codes. For carriers it is the state of the company address, for crashes and inspections the state where it happened.

## `cities` (type: `array`):

Carriers mode. Part of the city name of the company address.

## `zipCodes` (type: `array`):

Carriers mode. ZIP codes or their first digits, for example 75201 or 752.

## `operationClasses` (type: `array`):

Carriers mode. Words of the classification, for example authorized for hire, private property, exempt for hire, private passenger.

## `carrierOperation` (type: `string`):

Carriers mode. Interstate carriers cross state lines.

## `activeOnly` (type: `boolean`):

Carriers mode. Skip carriers that are no longer active.

## `hazmatOnly` (type: `boolean`):

Carriers mode.

## `minPowerUnits` (type: `integer`):

Carriers mode. Trucks and tractors of the fleet, for example 50.

## `maxPowerUnits` (type: `integer`):

Carriers mode.

## `minDrivers` (type: `integer`):

Carriers mode.

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

Carriers mode. Sorting by crashes works on the first 2,000 carriers of the search.

## `includeSafety` (type: `boolean`):

Carriers mode. Adds the crash and inspection counts of the last months, out-of-service rates and safety flags. Makes the run a little slower.

## `safetyMonths` (type: `integer`):

Carriers mode. How many months back the crashes and inspections are counted.

## `dateFrom` (type: `string`):

Crashes and inspections modes. First date, in the form 2026-01-31.

## `dateTo` (type: `string`):

Crashes and inspections modes. Last date.

## `fatalOnly` (type: `boolean`):

Crashes mode.

## `injuryOnly` (type: `boolean`):

Crashes mode.

## `towAwayOnly` (type: `boolean`):

Crashes mode.

## `hazmatReleasedOnly` (type: `boolean`):

Crashes mode.

## `oosOnly` (type: `boolean`):

Inspections and violations modes. Keep inspections or violations that took a driver or a vehicle out of service.

## `minViolations` (type: `integer`):

Inspections mode. Keep inspections with at least this many violations.

## `inspectionLevels` (type: `array`):

Inspections mode. Level numbers 1 to 8, for example 1 for the full inspection.

## `violationGroups` (type: `array`):

Violations mode. Words of the safety category or group, for example unsafe driving, vehicle maintenance, hours of service, driver fitness.

## Actor input object example

```json
{
  "maxItems": 10,
  "mode": "carriers",
  "legalNames": [
    "Werner"
  ],
  "carrierOperation": "any",
  "activeOnly": true,
  "hazmatOnly": false,
  "sortBy": "powerUnits",
  "includeSafety": true,
  "safetyMonths": 24,
  "fatalOnly": false,
  "injuryOnly": false,
  "towAwayOnly": false,
  "hazmatReleasedOnly": false,
  "oosOnly": false
}
```

# Actor output Schema

## `overview` (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 = {
    "maxItems": 10,
    "legalNames": [
        "Werner"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("parselab/fmcsa-carrier-safety-crashes-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 = {
    "maxItems": 10,
    "legalNames": ["Werner"],
}

# Run the Actor and wait for it to finish
run = client.actor("parselab/fmcsa-carrier-safety-crashes-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 '{
  "maxItems": 10,
  "legalNames": [
    "Werner"
  ]
}' |
apify call parselab/fmcsa-carrier-safety-crashes-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parselab/fmcsa-carrier-safety-crashes-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/Ca31fiiN1mwiKgYI3/builds/05PhFzdhwmt6K5XaI/openapi.json
