# FMCSA carrier changes: suspensions, revocations, insurance (`data_blume/us-trucking-changes`) Actor

Changes to US trucking carriers' operating authority and insurance from FMCSA's open data: new authorities, suspensions and suspension notices, revocations, reinstatements, insurance filings and cancellations. Companies only.

- **URL**: https://apify.com/data_blume/us-trucking-changes.md
- **Developed by:** [Datablume](https://apify.com/data_blume) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 carrier changes

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

### What is US Trucking Changes?

US Trucking Changes gives you the changes to US trucking carriers' operating authority and insurance, read from the open-data files of FMCSA, the US regulator of trucking companies: new applications for authority, grants, suspensions, revocations and reinstatements, suspension notices that FMCSA has served (many take effect weeks later), and insurance policies filed, cancelled or replaced.

Each row gives the carrier's USDOT and docket numbers, its legal name, the city and state (or province) of its business address, the dates, FMCSA's own words for the change and, for insurance, the form, the amount and the insurer (FMCSA's daily files often leave the insurer empty: on 21 Oct 2026 its daily insurance file named none). Every row links to FMCSA's own record of the change and of the carrier, and gives the date of the file it came from and when the change and the carrier were each fetched.

Use it two ways: search the changes (by kind, carrier, state, name and dates), or keep a watch list of the carriers you work with and get only what changed since your last run. A watch list is carrier risk monitoring: run it every day or every week, and each run gives you the suspensions, revocations, insurance cancellations and other changes for your carriers that were added to the data since the run before, each change once as a rule (the exceptions are under How to use it).

Companies only: carriers that FMCSA's census marks as individuals or partnerships, and carriers whose legal name may be a person's name, are left out. No row holds a phone number, email address, street address or company officer, and our requests for data never ask for them.

Not affiliated with or endorsed by FMCSA or the US Department of Transportation.

### Who it is for

- Insurance agents looking for carriers that have just applied for authority or whose cover has just been cancelled
- Freight brokers and shippers watching the carriers they book for suspensions, revocations and insurance changes
- Factoring, fuel-card, ELD and compliance firms looking for newly authorised carriers
- Developers and AI assistants that need FMCSA's daily authority and insurance changes in one call

### What data does it return?

One row per change:

| Field | What it is |
| --- | --- |
| `event_id` | Our stable name for the change: the first 16 characters of a SHA-256 fingerprint of FMCSA's file and the record's columns read. On the daily feed the insurer is left out of an insurance record's fingerprint, because FMCSA's daily files often leave it empty, so a policy read from a daily file and from the All With History file is one change. Two records identical in all those columns get the same event_id and make one row (2 of the 241 records fetched on 9 Oct 2026) |
| `event_type` | The kind of change, from FMCSA's own words by the table in the docs: authority_application, authority_granted, authority_reinstated, authority_suspended, authority_revoked, suspension_notice, insurance_filed, insurance_cancelled or insurance_replaced |
| `event_date` | The day the change takes effect: the status change date (authority changes), the effective date (suspension notices; empty where FMCSA gives none), the policy's effective date (insurance filings) or its cancellation date (cancellations and replacements) |
| `notice_date` | The day FMCSA served the suspension notice, or received the insurance policy; empty for the other kinds |
| `future_dated` | true when event_date is after file_date: a suspension or a policy that has not taken effect yet |
| `usdot_number` | FMCSA's USDOT number for the carrier |
| `docket_number` | The carrier's MC, MX or FF docket number, written as FMCSA's Motus Carrier file writes it (for example MC1659934, where FMCSA's suspension file writes MC-1659934) |
| `legal_name` | The carrier's legal name as FMCSA publishes it (Motus Carrier, or the census where Motus Carrier has no row), read separately from the change, at carrier_fetched_at |
| `city` | City of the carrier's business address as FMCSA publishes it (the physical address, where the name comes from the census) |
| `state` | State or province of the carrier's business address as FMCSA publishes it (FMCSA registers Canadian and Mexican carriers too, for example ON for Ontario) |
| `business_type` | FMCSA's census business type where the census has one (CORPORATION in this product); FMCSA records it only after a review, so it is usually empty |
| `company_basis` | Why the row counts as a company: the census business type, or a legal form (for example LLC) or a public body in the legal name where the census is silent |
| `authority_type` | The operating authority the change is about, as FMCSA publishes it, for example Motor Carrier of Property (Except Household Goods) |
| `detail` | FMCSA's own words for the change: the reason (authority changes), the notice type (suspension notices) or the status reason CANCEL or TERM/REPL (insurance cancellations and replacements) |
| `insurance_type` | BI\&PD, Cargo, Bond or Trust Fund, from FMCSA's insurance type code |
| `insurance_form` | FMCSA's form code, for example BMC-91X |
| `insurer` | The insurance company as FMCSA publishes it |
| `coverage_amount` | FMCSA's maximum coverage amount as published (MAX_COV_AMOUNT). FMCSA's data dictionary says it is in thousands, but the published values read as dollars (750000 for most BI\&PD policies, 75000 for a broker's bond), so it is given unchanged; check the unit against FMCSA's record before relying on it |
| `source_dataset` | The FMCSA file that holds the change, with its id: the All With History file, where FMCSA keeps every record (the daily feed reads each change from that file's daily difference file, the address in source_url, or, for a period the daily update missed, from the All With History file itself; source_url shows which) |
| `source_record_url` | FMCSA's own record of the change in its open-data file, asked for the same columns as the row (where the file holds identical copies of the record, the link matches each copy) |
| `carrier_record_url` | FMCSA's own record the legal name, city and state come from (Motus Carrier, or the census), read at carrier_fetched_at |
| `file_date` | Date FMCSA last updated the file the change came from |
| `source_url` | The address the change was read from |
| `fetched_at` | When the change was fetched (the answer at source_url) |
| `carrier_fetched_at` | When the legal name, city and state were fetched: they come from a separate answer (Motus Carrier or the census), read after the change itself |
| `read_method` | code, text_recognition, claude or manual |

### Kinds of change

`event_type` is set by FMCSA's own words, by this table. Rows are made only from FMCSA's fixed phrases; free text, such as a withdrawal reason that carries an email address, never reaches a row.

| Kind | FMCSA file | What it means |
| --- | --- | --- |
| `authority_application` | Motus AuthHist | A new application for operating authority: FMCSA's status Pending, reason Initial Status |
| `authority_granted` | Motus AuthHist | Operating authority granted: FMCSA's status Active, reason Granted |
| `authority_reinstated` | Motus AuthHist | Operating authority made active again: FMCSA's status Active with a reason starting Reinstated (one of them is FMCSA correcting its own move to Motus, Issue #220) |
| `authority_suspended` | Motus AuthHist | Operating authority suspended or made inactive: FMCSA's status Inactive with one of its suspension reasons |
| `authority_revoked` | Motus AuthHist | Operating authority revoked: FMCSA's status Inactive, reason Revoked |
| `suspension_notice` | Motus RevokeSuspend | A suspension notice FMCSA has served; it takes effect on event_date, which can be after the file date |
| `insurance_filed` | Motus Insur | An insurance policy, bond or trust fund FMCSA received for the carrier (active or pending) |
| `insurance_cancelled` | Motus InsHist | A policy cancelled: FMCSA's status reason CANCEL, ending on event_date, which can be after the file date |
| `insurance_replaced` | Motus InsHist | A policy ended because a new policy replaced it: FMCSA's status reason TERM/REPL |

### How to use it

**Search**

1. To follow new authorities, set `event_type` to `authority_granted` (or `authority_application`), and `state` if you want one state or province.
2. To watch a carrier, put its USDOT number in `usdot` or its docket number in `docket`, and leave the rest empty. Part of the legal name in `name` works too.
3. To see suspensions that have not taken effect yet, set `event_type` to `suspension_notice` and `from` to today's date.
4. Choose `max_rows`, the most rows you want (default 20), and run it. `to` sets the latest event date.
5. Run it. The rows are the run's results. You can download them as JSON, CSV, XML, Excel, an HTML table, RSS or JSONL, or read them with Apify's API.

**Watch list (carrier risk monitoring)**

1. Put the USDOT numbers of your carriers in `watch_usdots` (up to 50,000) and leave the search fields empty.
2. Give the list a name in `watch_list` if you keep more than one (for example `my-fleet`); otherwise it is called `default`.
3. Choose `history_days`: on the first run, and for carriers you add later, you also get the changes added to the data in the last 0 to 31 days (default 7). 0 means the changes added from the start of today (UTC).
   Now and then FMCSA's daily file repeats an older record of a carrier "for completeness"; if we had not seen it before, it is added to the data then and your watch list gets it once, with its own (older) event date.
4. Set `max_rows` high enough for a day's changes (for example 1000) and run it on a schedule, daily or weekly. Each run gives only the changes added since the previous run of that watch list, every kind of change, oldest added first. If a run stops at `max_rows`, or at your maximum cost per run, the rest come with the next run. Each change is sent once, with two exceptions: if a run is aborted or times out while it is saving a page, that page comes again in the next run; and two runs of the same watch list can overlap if they start at the same moment or one runs for more than 2 hours (a run started while another is going normally stops at once), so run each list on one schedule only.

The watch list remembers its previous run in a key-value store called `us-trucking-changes-watch-lists` in your own Apify account, one record per watch list. Deleting that record starts the list again. Changes are kept for watch lists for 35 days: run each list at least once a month.

### How much does it cost?

USD 0.005 for each row a run returns (one row is one change), in a search or a watch list, plus Apify's start charge of USD 0.00005 a run. Apify charges both to your Apify account. A watch list run with no new changes costs only the start charge.

### Input example

A search:

```json
{
  "event_type": "authority_granted",
  "state": "IL",
  "from": "2026-10-01",
  "max_rows": 20
}
```

A watch list:

```json
{
  "watch_usdots": ["4844789", "2216853", "3466711"],
  "watch_list": "my-fleet",
  "history_days": 7,
  "max_rows": 1000
}
```

### Output example

```json
{
  "event_id": "0a100c63f91ab790",
  "event_type": "authority_granted",
  "event_date": "2026-10-02",
  "notice_date": null,
  "future_dated": false,
  "usdot_number": "4844789",
  "docket_number": "MC57500082",
  "legal_name": "NB GROUP INC",
  "city": "Mount Prospect",
  "state": "IL",
  "business_type": null,
  "company_basis": "legal form INC in the legal name",
  "authority_type": "Motor Carrier of Property (Except Household Goods)",
  "detail": "Granted",
  "insurance_type": null,
  "insurance_form": null,
  "insurer": null,
  "coverage_amount": null,
  "source_dataset": "Motus AuthHist - All With History (yu5v-wbh6)",
  "source_record_url": "https://data.transportation.gov/resource/yu5v-wbh6.json?$select=docket_number,usdot_number,op_auth_type,op_auth_status,reason,status_change_date&docket_number=MC57500082&usdot_number=4844789&op_auth_type=Motor%20Carrier%20of%20Property%20%28Except%20Household%20Goods%29&op_auth_status=Active&reason=Granted&status_change_date=20261002",
  "carrier_record_url": "https://data.transportation.gov/resource/inys-ebih.json?$select=docket_number,usdot_number,legal_name,bus_city,bus_state_code&docket_number=MC57500082",
  "file_date": "2026-10-08",
  "source_url": "https://data.transportation.gov/resource/yu5v-wbh6.json?$select=docket_number,usdot_number,op_auth_type,op_auth_status,reason,status_change_date&$where=status_change_date%20between%20'20260928'%20and%20'20261004'%20AND%20op_auth_status%20in%20('Active')%20AND%20reason%20in%20('Granted')&$order=:id&$limit=5&$offset=230",
  "fetched_at": "2026-10-09T00:18:49+00:00",
  "carrier_fetched_at": "2026-10-09T00:25:05+00:00",
  "read_method": "code"
}
```

### What is covered

New changes are picked up every day at 16:00 UTC, after FMCSA's own daily update. The data starts on 21 October 2026, when our update first read FMCSA's daily files, so changes FMCSA published before then are left out, apart from a few in the rebuilt period below. Our update did not read FMCSA's daily files of 22 October 2026, so that period was rebuilt from FMCSA's All With History files; it can hold FMCSA records that none of our daily files carried, a few of them dated up to two days before the data starts. For FMCSA's two insurance files (Motus Insur and Motus InsHist) the rebuild found about 9 in 10 of the changes, so changes may still be missing from them between 21 and 23 October 2026, and every run's status message names that period.

Changes that took effect more than about 13 months ago leave the data; the few changes FMCSA gives no date for stay.

### Good to know

- The event date is the day a change takes effect. A suspension notice is served first and takes effect later, so `future_dated` is true until then. Some voluntary suspension notices have no effective date or docket number in FMCSA's record, and those fields are empty.
- FMCSA moved its registrations to a new system, Motus, on 14 May 2026. Carriers registered before then appear here only when something happens to them in Motus; this feed is not a list of every carrier's current status.
- `coverage_amount` is FMCSA's number as published. FMCSA's data dictionary says amounts are in thousands, but the published values read as dollars (750000 for most BI\&PD policies), so we give the number unchanged.
- FMCSA records a carrier's business type only after a review, so `business_type` is usually empty; `company_basis` says why each row counts as a company.
- If our daily update ever misses one of FMCSA's daily files, every run's status message names the period whose changes may be missing, unless we rebuilt the period from FMCSA's All With History files and the rebuild found at least 98 in 100 of the changes of the next daily file we read. Rows rebuilt that way have the All With History file's address as `source_url` and the day FMCSA loaded that file as `file_date`, and a rebuilt period can hold some FMCSA records that none of our daily files carried, a few of them dated up to two days before our data starts.
- If our update has not finished for more than 48 hours, or FMCSA has not published new daily files for more than 72 hours, the status message says that too.
- **Can AI assistants use it?** Apify's MCP server lets AI agents find and run Store Actors: it "enables AI agents to discover and run Actors from Apify Store" (Apify's documentation).

### FMCSA's disclaimer

FMCSA publishes this with its files, and it applies to every row:

"Each of the datasets identified in this document is provided as a public service by the Federal Motor Carrier Safety Administration (FMCSA) to enhance public access to information. This information is constantly changing. The datasets are only a snapshot of the data at the time the datasets were generated. All information provided by FMCSA is for informational purposes only and does not constitute a legal contract between FMCSA and any person or entity unless otherwise specified. The information provided by FMCSA is not intended as, nor offered as, legal advice. In no event shall FMCSA, nor any of its employees, be responsible or liable, directly or indirectly, for any damage or loss caused, or alleged to be caused, by or in connection with the use of or reliance on any such content, goods, or services available in the datasets identified in this document."

### Support

Email hello@datablume.com. Sold by Datablume, a sole trader business based in Scotland.

# Actor input Schema

## `event_type` (type: `string`):

Kind of change. Leave empty for every kind. The meaning of each kind is in the table on this Actor's page.

## `usdot` (type: `string`):

FMCSA's USDOT number (exact). Give it as text, for example 4844789.

## `docket` (type: `string`):

Docket number written like MC1659934 (exact). MC-1659934 and MC01659934 are read as MC1659934.

## `name` (type: `string`):

Part of the carrier's legal name, in any case. For example logistics.

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

Two-letter state or province of the business address, for example TX or ON. Leave empty for every state and province.

## `from` (type: `string`):

Earliest event date, YYYY-MM-DD. The event date is the day the change takes effect, which for a suspension notice can be weeks after it was served.

## `to` (type: `string`):

Latest event date, YYYY-MM-DD.

## `watch_usdots` (type: `array`):

A watch list: up to 50,000 USDOT numbers. With a watch list, each run gives only the changes added to the data since this watch list's previous run, for these carriers, every kind of change; leave the search fields above empty. The first run gives the changes added in the last history_days days. Leave empty to search instead.

## `watch_list` (type: `string`):

A name for this watch list, 1 to 40 letters, digits and hyphens, for example my-fleet. Each name remembers its own previous run, in a key-value store called us-trucking-changes-watch-lists in your own Apify account.

## `history_days` (type: `integer`):

For a watch list's first run, and for carriers you add to it later: also give the changes added to the data in the last 0 to 31 days. 0 means the changes added from the start of today (UTC).

## `max_rows` (type: `integer`):

The most rows to return, from 1 to 1,000,000. A search returns them newest event date first, fetched 100 at a time; a watch list stops there and sends the rest on its next run.

## Actor input object example

```json
{
  "watch_list": "default",
  "history_days": 7,
  "max_rows": 20
}
```

# Actor output Schema

## `results` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("data_blume/us-trucking-changes").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("data_blume/us-trucking-changes").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 '{}' |
apify call data_blume/us-trucking-changes --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,data_blume/us-trucking-changes"
        }
    }
}
```

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/dhP79eVfOJs0iFfXn/builds/vdBR8axVt3YIe96ob/openapi.json
