# FMCSA Trucking Carrier Lookup and Monitor (`jetlaunch/fmcsa-carrier-monitor`) Actor

Look up US trucking carriers by state, USDOT or MC number and monitor newly granted operating authority, from official FMCSA open data. No API key needed.

- **URL**: https://apify.com/jetlaunch/fmcsa-carrier-monitor.md
- **Developed by:** [Chris O'Byrne](https://apify.com/jetlaunch) (community)
- **Categories:** Business, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 carrier records

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

## FMCSA Trucking Carrier Lookup and Monitor

Search US trucking carriers, look up a carrier by USDOT or MC number, and get a list of carriers that were newly granted operating authority since your last run. The data comes straight from the Federal Motor Carrier Safety Administration (FMCSA) open data files on the US DOT portal (data.transportation.gov). No API key, login or proxy is needed.

Each result is one carrier with business-level fields: USDOT number, MC number, legal name, DBA, city and state, power units, driver count, operation type, operating authority status, safety rating, and inspection and crash counts for the last 24 months.

### Who is this for

- Freight brokers and shippers who want to check that a carrier has active authority before booking a load.
- Insurance agents, factoring companies, ELD and fuel-card sellers who build lists of carriers in a state or fleet size range.
- Compliance and risk teams who watch for newly authorized carriers or for carriers whose authority is no longer active.
- Analysts who need clean FMCSA data in JSON, CSV or Excel without downloading multi-million row files.

### What it does

- **Search** the Company Census File by state, operation type, USDOT status, authority status and minimum power units. Sort by USDOT number, fleet size or newest registration.
- **Look up** specific carriers by USDOT number or MC, MX or FF docket number. Numbers that cannot be found are listed in the run summary and are not charged.
- **New authority search**: set a date and get carriers whose authority was granted on or after it, newest first.
- **New authority monitor**: run it on a schedule and receive only carriers you have not been given before. Seen carriers are remembered per monitor name in a key-value store in your own account.
- **Safety counts**: inspections, inspections with an out-of-service violation, crash records, fatalities and injuries recorded on those crash records, all for the last 24 months.

### Input

| Field | What it does |
| --- | --- |
| `mode` | `search` (default) or `new-authority-monitor`. |
| `states` | Two-letter state codes of the carrier's principal place of business. Empty means all states. |
| `dotNumbers`, `mcNumbers` | Look up specific carriers. When used, the other filters are ignored. |
| `authorityStatus` | `ACTIVE` (default), `PENDING`, `INACTIVE` or `ANY`. |
| `authorityKinds` | `CARRIER` (default), `BROKER`, `FREIGHT_FORWARDER`. Brokers are left out by default. |
| `usdotStatus` | Census registration status: `ACTIVE` (default), `INACTIVE`, `ANY`. |
| `operationTypes` | `INTERSTATE`, `INTRASTATE_HAZMAT`, `INTRASTATE_NON_HAZMAT`. |
| `minPowerUnits` | Minimum number of power units. |
| `newAuthoritySince` | `YYYY-MM-DD`. Only carriers granted authority on or after this date. |
| `maxResults` | Stop after this many carriers (default 25). |
| `includeSafetyCounts` | Add 24-month inspection and crash counts (default on). |
| `excludeLikelyIndividuals` | Leave out carriers that look like sole proprietors. Without it they are returned with legalName and dbaName set to null. |
| `monitorName`, `lookbackDays`, `resetMonitorState` | Monitor mode settings. |
| `socrataAppToken` | Optional. A free portal token gives your runs their own rate-limit pool. |

Example input (this is also the default prefill):

```json
{
  "mode": "search",
  "states": ["MN"],
  "authorityStatus": "ACTIVE",
  "maxResults": 25
}
```

### Output

One dataset item per carrier. Dates are ISO dates. Example (shortened):

```json
{
  "dotNumber": "54488",
  "mcNumber": "MC146636",
  "legalName": "SMITH TRUCKING INC",
  "dbaName": null,
  "city": "WORTHINGTON",
  "state": "MN",
  "powerUnits": 137,
  "driverCount": 128,
  "operationType": "INTERSTATE",
  "authorityStatus": "ACTIVE",
  "safetyRating": "SATISFACTORY",
  "inspectionCount24m": 310,
  "oosInspectionCount24m": 21,
  "crashCount24m": 8,
  "crashFatalities24m": 0,
  "crashInjuries24m": 1,
  "mcNumbers": ["MC146636"],
  "authorities": [
    { "docketNumber": "MC146636", "type": "Motor Carrier of Property (Except Household Goods)",
      "kind": "CARRIER", "status": "ACTIVE", "source": "motus" }
  ],
  "latestAuthorityGrantDate": "1991-10-10",
  "usdotStatus": "ACTIVE",
  "likelySoleProprietor": false,
  "recordType": "carrier-record"
}
```

A run summary (counts, ids not found, data sources and the portal's last-modified time for each file) is saved to the key-value store under the key `OUTPUT`.

### Data sources and licence

All data is published by FMCSA on the US DOT open data portal, data.transportation.gov:

- Company Census File (`az4n-8mr2`): identity, fleet, operation type, safety rating.
- Motus Carrier and Motus AuthHist, "All With History" (`inys-ebih`, `yu5v-wbh6`): current operating authority and authority grants.
- Carrier, "All With History" (`6eyk-hxee`): the legacy authority file, frozen on 2026-05-14 and used for carriers not yet present in the Motus file.
- Vehicle Inspection File (`fx4q-ay7w`) and Crash File (`aayw-vxb3`): inspection and crash counts.

FMCSA states that it shares this data at no charge to the public. The datasets carry the portal's public access level and no separate licence text. The files are snapshots published for informational purposes and are not legal advice. Check the FMCSA SAFER system or the carrier before relying on a record for a legal or contractual decision. This Actor is not affiliated with or endorsed by FMCSA or the US Department of Transportation.

The Actor identifies itself with a descriptive User-Agent, sends requests one at a time, and backs off when the portal returns a rate-limit or server error. It does not use the FMCSA QCMobile API.

### Privacy rule

Only business-level fields are returned. Phone, fax, email, street address, ZIP code and company officer names are never requested from the source files, for any carrier. Carriers that look like sole proprietors (the census says Individual, or the legal name looks like a personal name) are flagged with `likelySoleProprietor`. For those carriers `legalName` and `dbaName` are returned as null because a personal name can identify a private individual. The USDOT number, MC number, city, state and business counts are still returned, so the record can be matched by number. The flag is a heuristic, so a few personal names may be missed and a few business names may be blanked. Use `excludeLikelyIndividuals` to leave these carriers out entirely.

### Pricing

Pay per event. You pay only for carriers saved to the dataset.

| Event | Price | When it is charged |
| --- | --- | --- |
| `carrier-record` | $0.004 | One carrier returned in search, lookup or new authority search. |
| `new-authority-record` | $0.006 | One carrier returned in monitor mode that was not returned by an earlier run of the same monitor. |

Not-found ids, empty runs and failed runs are not charged. Apify also charges $0.00005 to start each run (the platform's `apify-actor-start` event). A default run of 25 carriers costs about $0.10, and 1,000 carriers cost about $4.00. There is no extra charge for compute or storage. Use `maxResults` and the run's maximum cost setting to cap spending.

### FAQ

**How long does a run take?** In test runs on Apify, 25 carriers with safety counts took about 7 seconds and 500 carriers took about 90 seconds.

**How current is the data?** The portal refreshes the files daily. The run summary shows the last-modified time the portal reported for each file.

**Why can an old carrier show `latestAuthorityGrantDate` as null?** That date comes from the Motus authority history file, which does not hold every historic grant. Null means no grant is recorded there.

**Where does `authorityStatus` come from?** For each docket the Actor uses the Motus file first, then the frozen legacy file, then the docket flag in the census file. The `source` field of each entry in `authorities` says which one was used. Status is summarised over the authority kinds you select.

**What does a crash count mean?** The Crash File has one record per carrier vehicle in a reported crash, so two vehicles of one carrier in one crash count twice. Fatalities and injuries are the numbers recorded on those records.

**How does the monitor remember carriers?** It stores seen USDOT numbers in a named key-value store called `fmcsa-monitor-<monitorName>` in your account. Use one monitor name per filter set. Turn on `resetMonitorState` to start over.

### Limitations

- Fleet sizes and driver counts are self-reported by carriers on the MCS-150 form and some entries are wrong.
- Name search is not supported. Use state, number or date filters.
- New authority detection relies on the grant records in the Motus authority history file. Grants recorded before that file started may be missing from it.
- A search with a very selective filter can scan many census rows. A run stops with a note in the summary after 400,000 rows or shortly before its timeout.
- The portal throttles heavy use from shared IP addresses. The Actor retries politely. Add a free `socrataAppToken` for heavier use.

### Support

Open an issue in the Issues tab of this Actor. Include the run link and the input you used.

# Actor input Schema

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

Search returns carriers matching your filters. New authority monitor returns only carriers whose authority was granted since the previous run (seen carriers are remembered between runs).

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

Two-letter state codes of the carrier's principal place of business. Leave empty for all states.

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

Look up specific carriers by USDOT number. When USDOT or MC numbers are given, all other filters are ignored and each requested carrier is returned if it exists.

## `mcNumbers` (type: `array`):

Look up carriers by docket number, for example MC-123456 or 123456. Numbers without a prefix are treated as MC numbers.

## `authorityStatus` (type: `string`):

Keep only carriers whose operating authority has this status. ACTIVE means at least one authority of the selected kinds is active. ANY disables the filter.

## `authorityKinds` (type: `array`):

Which kinds of operating authority count. Default is motor carriers only. Add brokers or freight forwarders to include them.

## `usdotStatus` (type: `string`):

Status of the carrier's USDOT registration in the census file. Active is the usual choice. Use Inactive or Any when looking for carriers whose registration has lapsed.

## `operationTypes` (type: `array`):

Keep only these operation types as filed in the census. Leave empty for all.

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

Keep only carriers that report at least this many power units (trucks and tractors).

## `newAuthoritySince` (type: `string`):

Search mode: return only carriers that were granted operating authority on or after this date, newest first. Leave empty for no date filter. In monitor mode this only sets the start date of the very first run.

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

Order of results when no new authority date is set.

## `maxResults` (type: `integer`):

Stop after this many carriers. You are charged per carrier returned.

## `includeSafetyCounts` (type: `boolean`):

Add inspection, out-of-service inspection, crash, fatality and injury counts for the last 24 months from the FMCSA inspection and crash files.

## `excludeLikelyIndividuals` (type: `boolean`):

Leave out carriers whose legal name looks like a personal name or whose census record says Individual. This is a heuristic. If off, such carriers are still returned but with legalName and dbaName set to null.

## `monitorName` (type: `string`):

Monitor mode only. Seen carriers are stored under this name in your account, so each name keeps its own memory. Use a different name for each set of filters. Lowercase letters, digits and hyphens.

## `lookbackDays` (type: `integer`):

Monitor mode only. On the first run, return carriers granted authority in the last N days. Later runs continue from the previous run.

## `resetMonitorState` (type: `boolean`):

Monitor mode only. Ignore the saved list of seen carriers and start again.

## `socrataAppToken` (type: `string`):

Optional free app token from the data.transportation.gov portal. It gives your runs their own rate-limit pool. Not needed for normal use.

## Actor input object example

```json
{
  "mode": "search",
  "states": [
    "MN"
  ],
  "authorityStatus": "ACTIVE",
  "authorityKinds": [
    "CARRIER"
  ],
  "usdotStatus": "ACTIVE",
  "minPowerUnits": 0,
  "sortBy": "DOT_NUMBER",
  "maxResults": 25,
  "includeSafetyCounts": true,
  "excludeLikelyIndividuals": false,
  "monitorName": "default",
  "lookbackDays": 7,
  "resetMonitorState": false
}
```

# Actor output Schema

## `carriers` (type: `string`):

No description

## `summary` (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 = {
    "mode": "search",
    "states": [
        "MN"
    ],
    "authorityStatus": "ACTIVE",
    "maxResults": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("jetlaunch/fmcsa-carrier-monitor").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": "search",
    "states": ["MN"],
    "authorityStatus": "ACTIVE",
    "maxResults": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("jetlaunch/fmcsa-carrier-monitor").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": "search",
  "states": [
    "MN"
  ],
  "authorityStatus": "ACTIVE",
  "maxResults": 25
}' |
apify call jetlaunch/fmcsa-carrier-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jetlaunch/fmcsa-carrier-monitor"
        }
    }
}
```

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/3U6MOpX4czRuGG3WH/builds/ju5qZHubcaV8h8ipC/openapi.json
