# FMCSA Truck Safety Records — Inspections, Violations & Crashes (`nexgensignal/us-motor-carrier-safety-records`) Actor

FMCSA roadside inspection and crash records for US trucks and buses: violations, out-of-service orders, fatalities and injuries, by USDOT number, state and date. Official MCMIS files, updated daily. No API key, no driver data. Part of NexGen Signal — official-source data products

- **URL**: https://apify.com/nexgensignal/us-motor-carrier-safety-records.md
- **Developed by:** [NexGen Signal](https://apify.com/nexgensignal) (community)
- **Categories:** News, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $33.50 / 1,000 inspection or crash records

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 Truck Safety Records — Inspections, Violations & Crashes

Get FMCSA's roadside inspection and crash records for US trucks and buses as clean JSON — every inspection with its violations and out-of-service orders, and every reported crash with fatalities, injuries, tow-away, road, weather and light conditions — straight from the Motor Carrier Management Information System (MCMIS) files FMCSA publishes and updates daily on data.transportation.gov.

Filter by USDOT number, reporting state, date, inspection level, out-of-service, hazmat and crash severity. Records come newest first. Carriers are identified by USDOT number only: no driver data exists in these public files, and this actor never delivers carrier names, addresses, VINs or licence plates.

The unit of output is one **safety record**: one roadside inspection (its violations attached) or one commercial vehicle in a reported crash. You pay per record delivered; a run that finds nothing costs nothing.

### Who buys this and for what job

- **Freight brokers, shippers and 3PLs** vetting a carrier's recent inspections, violations and out-of-service orders before tendering a load.
- **Commercial auto insurers and underwriters** pricing a fleet on its crash and inspection history by USDOT number.
- **Safety, compliance and fleet teams** tracking their own carrier's roadside results and the violations that drive out-of-service orders.
- **Analysts and journalists** studying fatal truck and bus crashes by state, date, road and weather conditions.

Buyers usually search for this as **"FMCSA inspection data"** or **"truck crash data"**.

### 📊 Sample Output

![Table of FMCSA roadside inspections reported by Texas with out-of-service violations: date, USDOT number, inspection level, violations and out-of-service counts.](https://api.apify.com/v2/key-value-stores/IXCaMKjxSmUTLHhmq/records/us-motor-carrier-safety-records.png)

| inspection_date | dot_number | inspection_level | violations_total | out_of_service_total | facility |
|---|---|---|---|---|---|
| 2026-10-09 | 2632632 | Walk-Around | 6 | 1 | Roadside |
| 2026-10-09 | 4556676 | Walk-Around | 5 | 1 | Roadside |
| 2026-10-09 | 3781181 | Walk-Around | 3 | 1 | Roadside |
| 2026-10-09 | 4515349 | Walk-Around | 3 | 1 | Roadside |
| 2026-10-09 | 3346939 | Walk-Around | 2 | 1 | Fixed |
| 2026-10-09 | 3819283 | Walk-Around | 1 | 1 | Roadside |

Rows from live run `DCwdAyIbmlxbh8muw` on Apify (the Store example: inspections reported by Texas with an out-of-service violation, 10 records). Notice the newest inspections first and the out-of-service count on every row; each record also carries its violations list (shown in the JSON sample below).

### ✅ What you get

Every field of each record:

- `record_id` — `FMCSA-INSP:<inspection_id>` or `FMCSA-CRASH:<crash_id>`, stable for upserts.
- `record_type` — `inspection` or `crash`.
- `dot_number` — USDOT number of the carrier (for crashes FMCSA has not yet matched, the uploaded number; `dot_number_source` says which).
- `report_state`, `report_number` — state that reported the inspection or crash, and its report number.
- `inspection_id`, `inspection_date`, `inspection_start_time`, `inspection_end_time` — inspection ID, date and local times.
- `inspection_level_id`, `inspection_level` — 1 Full, 2 Walk-Around, 3 Driver-Only, 4 Special Study, 5 Terminal (FMCSA's codes).
- `facility`, `location_description`, `county_state`, `county_fips_code` — Fixed or Roadside, and where it took place.
- `violations_total`, `out_of_service_total` — violations and out-of-service violations, also split into `driver_…`, `vehicle_…` and `hazmat_…` counts.
- `post_crash_inspection`, `hazmat_placard_required`, `gross_combination_weight_lbs` — inspection context.
- `traffic_enforcement`, `size_weight_enforcement`, `local_enforcement` — whether it was done with a traffic or size/weight stop, or by a local jurisdiction.
- `violations` — list per inspection: `code` (e.g. `393.9A-LHLI`), `description`, `regulation_part`/`regulation_section`, `unit` (driver, co-driver or vehicle n), `category_id`, `out_of_service`, `out_of_service_driver`, `defect_verification`.
- `crash_id`, `crash_date`, `crash_time`, `report_sequence_number` — crash ID, date, time and the vehicle's number within the crash.
- `fatalities`, `injuries`, `tow_away`, `vehicles_in_crash` — crash severity as reported.
- `federal_recordable`, `state_recordable`, `hazmat_placard`, `hazmat_released` — FMCSA flags.
- `location`, `city`, `city_fips_code`, `state`, `county_code`, `reporting_agency` — where the crash happened and who reported it.
- `vehicle_type`, `vehicle_configuration`, `cargo_body_type`, `gross_vehicle_weight_rating` — Truck or Bus, plus coded vehicle details as `{code, label}`.
- `trafficway`, `road_access_control`, `road_surface`, `weather`, `light` — conditions as `{code, label}`, labels from FMCSA's crash data dictionary.
- `crash_events` — sequence of events as FMCSA codes them, e.g. `COLLISION INVOLVING MOTOR VEHICLE IN TRANSPORT`.
- `carrier_state`, `carrier_interstate` — the carrier's state on file and whether it operates interstate.
- `status_code`, `status`, `last_changed` — MCMIS processing status and when FMCSA last changed the record.
- `source`, `source_dataset`, `source_url`, `source_data_updated`, `licence`, `attribution`, `observed_at` — provenance on every record: the FMCSA file, its dataset ID and page, when FMCSA last updated it, the public-domain notice, the attribution line and the UTC read time.

### ⚙️ Sample inputs

**1. The Store example — Texas inspections with out-of-service violations**

```json
{
  "recordType": "inspections",
  "reportStates": ["TX"],
  "outOfServiceOnly": true,
  "maxRecords": 10
}
```

Returned the 10 records above in run `DCwdAyIbmlxbh8muw`; $0.50 on the Free plan.

**2. One carrier's latest inspections**

```json
{
  "recordType": "inspections",
  "dotNumbers": ["80806"],
  "maxRecords": 20
}
```

Returned 20 inspections, newest first, in run `cMBiXvd8vO2sx7hOh`. Put several USDOT numbers in the list to vet a carrier panel in one run.

**3. Fatal truck and bus crashes this year**

```json
{
  "recordType": "crashes",
  "crashSeverity": "fatal",
  "dateFrom": "2026-01-01",
  "maxRecords": 40
}
```

Returned 40 crash records, newest first, in run `9wf6sm0VgjX9pQGJV`; add `reportStates` or `vehicleType` to narrow it.

Input fields:

| Field | Meaning |
|---|---|
| `recordType` | `inspections` (default) or `crashes`. |
| `dotNumbers` | USDOT numbers to keep; empty = all carriers. |
| `reportStates` | two-letter codes of the reporting states. |
| `dateFrom`, `dateTo` | inspection or crash date range, `YYYY-MM-DD`. |
| `outOfServiceOnly` | inspections with at least one out-of-service violation. |
| `inspectionLevels` | inspections only: 1-5. |
| `includeViolations` | inspections only: attach violations (default on). |
| `crashSeverity` | crashes only: `all`, `injury_or_fatal`, `fatal`. |
| `vehicleType` | crashes only: `all`, `truck`, `bus`. |
| `hazmatOnly` | hazmat-placarded vehicles only. |
| `order` | `newest_first` (default) or `oldest_first`. |
| `maxRecords` | stop after this many records (1-100,000; default 1,000). |

### 🧾 JSON sample record

```json
{
  "record_id": "FMCSA-INSP:89225650",
  "record_type": "inspection",
  "inspection_id": 89225650,
  "report_number": "V262604753",
  "report_state": "TX",
  "dot_number": 2632632,
  "inspection_date": "2026-10-09",
  "inspection_start_time": "06:34",
  "inspection_end_time": "07:17",
  "inspection_level_id": 2,
  "inspection_level": "Walk-Around",
  "facility": "Roadside",
  "location_description": "TX",
  "county_state": "TX",
  "county_fips_code": "405",
  "post_crash_inspection": false,
  "hazmat_placard_required": null,
  "gross_combination_weight_lbs": 130320,
  "violations_total": 6,
  "out_of_service_total": 1,
  "driver_violations": 0,
  "driver_out_of_service": 0,
  "vehicle_violations": 6,
  "vehicle_out_of_service": 1,
  "hazmat_violations": 0,
  "hazmat_out_of_service": 0,
  "traffic_enforcement": false,
  "size_weight_enforcement": false,
  "local_enforcement": null,
  "carrier_state": "TX",
  "carrier_interstate": true,
  "status_code": "C",
  "status": "Complete",
  "violations": [
    {
      "violation_id": 277389110,
      "sequence": 1,
      "code": "393.51C-BAPG",
      "description": "Air Brake - Inoperative/defective primary or secondary pressure gauge",
      "regulation_part": "393",
      "regulation_section": "51C-BAPG",
      "unit": "vehicle 1",
      "category_id": 16,
      "out_of_service": true,
      "out_of_service_driver": false,
      "defect_verification": "Unknown/Unverified"
    },
    {
      "violation_id": 277389111,
      "sequence": 2,
      "code": "393.9A-LHLI",
      "description": "Lighting - Headlamp(s) - Any inoperative",
      "regulation_part": "393",
      "regulation_section": "9A-LHLI",
      "unit": "vehicle 1",
      "category_id": 20,
      "out_of_service": false,
      "out_of_service_driver": false,
      "defect_verification": "Non-OOS/Driver Non-OOS"
    },
    {
      "violation_id": 277389112,
      "sequence": 3,
      "code": "396.17C-PI",
      "description": "Operating a CMV without documentation of a periodic inspection",
      "regulation_part": "396",
      "regulation_section": "17C-PI",
      "unit": "vehicle 1",
      "category_id": 29,
      "out_of_service": false,
      "out_of_service_driver": false,
      "defect_verification": "Non-OOS/Driver Non-OOS"
    },
    {
      "violation_id": 277389113,
      "sequence": 4,
      "code": "396.17C-PI",
      "description": "Operating a CMV without documentation of a periodic inspection",
      "regulation_part": "396",
      "regulation_section": "17C-PI",
      "unit": "vehicle 2",
      "category_id": 29,
      "out_of_service": false,
      "out_of_service_driver": false,
      "defect_verification": "Non-OOS/Driver Non-OOS"
    },
    {
      "violation_id": 277389115,
      "sequence": 5,
      "code": "392.2-SLLMF",
      "description": "State/Local Laws - Wheel (mud) flaps missing or defective",
      "regulation_part": "392",
      "regulation_section": "2-SLLMF",
      "unit": "vehicle 2",
      "category_id": 30,
      "out_of_service": false,
      "out_of_service_driver": false,
      "defect_verification": "Non-OOS/Driver Non-OOS"
    },
    {
      "violation_id": 277389114,
      "sequence": 6,
      "code": "392.2-SLLSR",
      "description": "State/Local Laws - State registration/tag violation",
      "regulation_part": "392",
      "regulation_section": "2-SLLSR",
      "unit": "vehicle 1",
      "category_id": 51,
      "out_of_service": false,
      "out_of_service_driver": false,
      "defect_verification": "Non-OOS/Driver Non-OOS"
    }
  ],
  "violations_attached": true,
  "last_changed": "2026-10-09T21:43:00",
  "source": "FMCSA MCMIS — Vehicle Inspection File",
  "source_dataset": "fx4q-ay7w",
  "source_url": "https://data.transportation.gov/d/fx4q-ay7w",
  "source_data_updated": "2026-10-11T10:51:14Z",
  "licence": "Public-domain U.S. Government work (17 U.S.C. 105): Federal Motor Carrier Safety Administration (FMCSA), U.S. Department of Transportation, Motor Carrier Management Information System (MCMIS) files published on data.transportation.gov. Free to reuse; no copyright restrictions.",
  "attribution": "Source: FMCSA, U.S. Department of Transportation — MCMIS data on data.transportation.gov",
  "observed_at": "2026-10-12T02:52:13Z"
}
```

### 🔧 How it works

1. **Robots check.** `data.transportation.gov/robots.txt` is read on every run. It allows the data endpoints used here and asks for one second between requests (`Crawl-delay: 1`); the actor waits that long between every request. A robots file that disallowed these paths would stop the run with nothing charged.

2. **Query the official files.** The actor queries FMCSA's MCMIS Vehicle Inspection File (`fx4q-ay7w`) or Crash File (`aayw-vxb3`) through the site's public data API with your filters, newest first, 1,000 rows at a time, selecting only the columns delivered — never driver, carrier name or address, shipper, VIN, licence plate or citation columns.

3. **Attach violations.** For inspections, the violations of each page are fetched from FMCSA's Vehicle Inspections and Violations file (`876r-jsdb`) and attached to their inspection.

4. **Deliver, then charge.** Each page is pushed to the dataset, then charged, so records and charges always match. Reading stops at `maxRecords` or your maximum charge.

5. **Receipt.** `RUN_RECEIPT` records the robots result, each file's last update, requests made, rows read, and delivered and charged counts.

No login, API key, proxy or bot workaround — FMCSA's public files only.

### 💰 Pricing example

Per record delivered, no start fee, no monthly charge:

| Apify plan | Price per record |
|---|---|
| Free | $0.05 |
| Bronze | $0.045 |
| Silver | $0.04 |
| Gold, Platinum, Diamond | $0.0335 |

- 10 records (the Store example): $0.50 on the Free plan, $0.335 on Gold.
- 1,000 records (the default cap): $50 on Free, $45 on Bronze, $40 on Silver, $33.50 on Gold.

**Coverage and size.** On 11 Oct 2026 the inspection file held 8,286,724 inspections (2,291,937 dated 2026), the violations file 13,543,682 violations and the crash file 5,006,175 crash records (114,462 dated 2026). FMCSA updates the files daily; inspections and crashes reach MCMIS after the reporting state uploads them, so the latest few days fill in over time. Records are those reported to FMCSA by US states and federal inspectors.

### ⚖️ Legal & ToS

Data: Federal Motor Carrier Safety Administration (FMCSA), U.S. Department of Transportation — MCMIS Vehicle Inspection File, Vehicle Inspections and Violations, and Crash File, published on data.transportation.gov. These are works of a U.S. federal agency and are not subject to copyright in the United States (17 U.S.C. §105). The catalog entries name no other licence (data.transportation.gov lists them as "unknown license"). Every record carries the notice in `licence` and a source line in `attribution`.

**Person data.** FMCSA states that driver information is not included in any public inspection or crash file. This actor additionally never selects carrier names, street addresses, cities, ZIP codes, shipper names, shipping-paper numbers, VINs, licence plates, citation numbers or drug-interdiction fields; carriers are identified by USDOT number only. `robots.txt` is honoured, including its crawl delay. One public site, declared User-Agent, no login, key, proxy or form.

Not affiliated with or endorsed by FMCSA or the U.S. Department of Transportation; records are FMCSA's as published.

### ❓ FAQ

**Do I need a Socrata app token or FMCSA account?**
No. The actor reads the public files with no token, key or login.

**Where are the carrier names?**
Left out on purpose. Some carriers are sole proprietors whose business name is a person's name, so records carry the USDOT number only. Join on `dot_number` with the FMCSA carrier census if you hold it.

**Is this the SMS / CSA BASIC score?**
No. These are the underlying inspection, violation and crash records. FMCSA's SMS percentiles are a separate calculation.

**How fresh is it?**
FMCSA updates the files daily; `source_data_updated` on every record shows the file's last update.

**Why can one crash appear more than once?**
The Crash File has one record per commercial vehicle involved. `report_number` groups the vehicles of one crash; `report_sequence_number` numbers them.

### 🆘 Troubleshooting

- **0 records with `dotNumbers`** — that carrier has no records in the range — check the number, or widen `dateFrom`/`dateTo`.
- **Recent days look thin** — states upload inspections and crashes after the event; re-run later for the latest days.
- **`violations` is empty on an inspection** — the inspection recorded no violations (`violations_total` is 0).
- **Run is slower with violations** — violations are an extra lookup per page; turn off `includeViolations` for inspection-level rows only.
- **SOURCE UNAVAILABLE message** — the source did not answer after four tries; nothing was charged — run again later.
- **CAPPED message** — your maximum total charge was reached; raise it in the run options.
- **Run failed with "Invalid input"** — a filter value is malformed; the message names the field. Nothing was charged.

### 🔗 Related Actors

- [UK Road Collision Records — DfT STATS19](https://apify.com/nexgensignal/uk-road-collision-records) — road collisions in Great Britain.
- [Mine Operator & Safety Records — US MSHA](https://apify.com/nexgensignal/mine-operator-safety-records) — another US federal safety register, for mines.
- [UK Vehicle Recalls — DVSA Car, Motorcycle & Parts Recall Data](https://apify.com/nexgensignal/uk-vehicle-recall-records) — vehicle and parts recalls.
- [Road Freight Statistics Europe — Eurostat Road Haulage Data](https://apify.com/nexgensignal/eurostat-road-freight) — road haulage volumes in Europe.
- [UK Road Traffic Flow Records — DfT AADF](https://apify.com/nexgensignal/uk-road-traffic-flow-records) — traffic counts by road and vehicle type.

🏢 **About NexGen Signal** — official-source data products from government and regulator publications. Browse the catalog: [apify.com/nexgensignal](https://apify.com/nexgensignal)

### ⭐ Found this useful?

If this actor saved you time, a rating on its Apify Store page helps other buyers find it.

Part of NexGen Signal — official-source data products.

# Actor input Schema

## `recordType` (type: `string`):

inspections = one record per roadside inspection, with its violations attached; crashes = one record per commercial vehicle in a reported crash.

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

Only these carriers (USDOT numbers, e.g. 80806). Leave empty for all carriers.

## `reportStates` (type: `array`):

Two-letter codes of the states that reported the inspection or crash, e.g. TX, CA. Leave empty for all states.

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

First inspection or crash date wanted, e.g. 2026-01-01.

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

Last inspection or crash date wanted, e.g. 2026-06-30.

## `outOfServiceOnly` (type: `boolean`):

Inspections only: keep inspections where at least one out-of-service violation was recorded.

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

Inspections only: 1 Full, 2 Walk-Around, 3 Driver-Only, 4 Special Study, 5 Terminal. Leave empty for all.

## `includeViolations` (type: `boolean`):

Inspections only: attach each inspection's violations (code, description, regulation, out-of-service flag). Turn off for faster, inspection-level rows.

## `crashSeverity` (type: `string`):

Crashes only.

## `vehicleType` (type: `string`):

Crashes only: trucks, buses or both.

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

Keep inspections where hazmat placards were required, or crashes where the vehicle carried a hazmat placard.

## `order` (type: `string`):

By inspection or crash date.

## `maxRecords` (type: `integer`):

Stop after this many records (each is charged once).

## Actor input object example

```json
{
  "recordType": "inspections",
  "dotNumbers": [],
  "reportStates": [
    "TX"
  ],
  "outOfServiceOnly": true,
  "inspectionLevels": [],
  "includeViolations": true,
  "crashSeverity": "all",
  "vehicleType": "all",
  "hazmatOnly": false,
  "order": "newest_first",
  "maxRecords": 10
}
```

# Actor output Schema

## `results` (type: `string`):

The delivered (and billed) inspection or crash records.

## `receipt` (type: `string`):

Robots result, dataset dates, rows read, delivered and charged counts.

# 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 = {
    "recordType": "inspections",
    "reportStates": [
        "TX"
    ],
    "outOfServiceOnly": true,
    "maxRecords": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgensignal/us-motor-carrier-safety-records").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 = {
    "recordType": "inspections",
    "reportStates": ["TX"],
    "outOfServiceOnly": True,
    "maxRecords": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("nexgensignal/us-motor-carrier-safety-records").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 '{
  "recordType": "inspections",
  "reportStates": [
    "TX"
  ],
  "outOfServiceOnly": true,
  "maxRecords": 10
}' |
apify call nexgensignal/us-motor-carrier-safety-records --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nexgensignal/us-motor-carrier-safety-records"
        }
    }
}
```

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/OPuOGxtyPu9AB3OZl/builds/OPvGpPZ3CJb0nMw86/openapi.json
