# FMCSA New Carrier Feed: New Trucking Companies & MC Authority (`moment-data/fmcsa-new-carrier-feed`) Actor

Daily feed of new US motor carriers (new USDOT numbers), new FMCSA authority grants (MC, brokers, freight forwarders) and suspensions/revocations from official FMCSA open data. Legal entities only. Filter by state, fleet size, interstate/intrastate, hazmat, cargo.

- **URL**: https://apify.com/moment-data/fmcsa-new-carrier-feed.md
- **Developed by:** [Luke Miller](https://apify.com/moment-data) (community)
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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 New Carrier Feed: New Trucking Companies, MC Authority Grants & Revocations

A daily **change feed** of the US trucking industry, built only on **official FMCSA open data** (data.transportation.gov, public domain): every **newly registered motor carrier** (new USDOT number), every **new operating authority granted** (MC / FF dockets for carriers, brokers and freight forwarders), and every **authority suspension or revocation order**, in one clean schema with fleet size, drivers, operation type, hazmat flag, cargo types and city/state.

**Entity-only by design:** you get legal entities (LLC, Inc, Corp, Ltd, LP, Co, public bodies). Sole proprietors and person-named carriers are dropped, and phone numbers, emails, fax, company officers and street addresses are never output.

No API keys, no logins, no scraping.

### Who it's for

- **Truck insurance agents and MGAs**: new authorities must file BIPD insurance within days, and suspensions often mean cancelled coverage. Both are timely reasons to reach out.
- **Factoring, fuel card, ELD, telematics, truck leasing and dispatch services**: new carriers with 1-10 power units, filtered by state and cargo.
- **Freight brokers and shippers**: vet new carriers and watch suspensions/revocations of carriers you already use (by state or authority type).
- **Compliance, BOC-3 process agents and permit services**: new registrations and grants by state.
- **Market researchers and analysts**: new-entrant and exit trends by state, fleet size and cargo.

### What you get

- **Three event types in one schema:** `newCarriers` (USDOT added to the FMCSA Company Census), `authorityGranted` (Motus authority history: status Active / Granted), `authorityRevoked` (Motus suspension and revocation orders, with type and effective date).
- **Carrier profile on every event:** legal name, business DBA, entity type, USDOT number, MC/FF docket, USDOT status and add date, interstate/intrastate, hazmat, carrier classes (authorized for hire, private, exempt...), power units, trucks, buses, drivers, CDL drivers, cargo types, MCS-150 date and mileage, safety rating, city, state, ZIP, county code, SAFER snapshot link.
- **Filters:** states, min/max power units, operation type, hazmat only, cargo types, authority type (property, householdGoods, passengers, broker, freightForwarder, mexicoDomiciled), days back.
- **New since last run:** a schedule pays only for records it has not delivered before.

### Quick start

1. Click **Start** with the default input (`{}`): the 30 newest events of the last 7 days (10 new carriers, 10 authority grants, 10 suspensions/revocations). Takes about 5 seconds.
2. For a daily lead list, create a **Schedule** with input like:

```json
{
  "mode": "sinceLastRun",
  "eventTypes": ["newCarriers", "authorityGranted"],
  "states": ["TX", "OK", "LA"],
  "operationTypes": ["interstate"],
  "minPowerUnits": 2,
  "maxItems": 500,
  "stateKey": "tx-ok-la-interstate"
}
```

3. Connect the run to **Google Sheets, a CRM, Slack, email or a webhook** with Apify integrations.

#### More recipes

- New freight brokers this week: `{"eventTypes": ["authorityGranted"], "authorityTypes": ["broker"], "maxItems": 200}`
- New hazmat carriers hauling chemicals or gases: `{"eventTypes": ["newCarriers"], "hazmatOnly": true, "cargoTypes": ["chemicals", "liquidsGases"]}`
- Suspensions of mid-size fleets in Colorado: `{"eventTypes": ["authorityRevoked"], "states": ["CO"], "minPowerUnits": 10, "daysBack": 30}`
- New refrigerated carriers: `{"eventTypes": ["newCarriers"], "cargoTypes": ["refrigeratedFood"], "maxItems": 100}`

### Input

| Field | Default | Notes |
|---|---|---|
| `mode` | `window` | `window` = stateless lookback. `sinceLastRun` = only events not delivered before (per `stateKey`), **use for schedules** |
| `eventTypes` | all three | `newCarriers`, `authorityGranted`, `authorityRevoked` |
| `states` | all | 2-letter codes of the physical address (also Canadian provinces / Mexican states) |
| `minPowerUnits`, `maxPowerUnits` | none | Fleet size from the MCS-150 |
| `operationTypes` | all | `interstate`, `intrastate`, `intrastate-hazmat`, `intrastate-non-hazmat` |
| `hazmatOnly` | `false` | Hazmat carriers only |
| `cargoTypes` | all | Any of 30 MCS-150 cargo classes, e.g. `generalFreight`, `refrigeratedFood`, `motorVehicles`, `chemicals` |
| `authorityTypes` | all | For grants/revocations: `property`, `householdGoods`, `passengers`, `broker`, `freightForwarder`, `mexicoDomiciled` |
| `daysBack` | `7` | By event date. An empty window is widened to 14, 30, 60 and then 120 days (`autoExtend`) |
| `maxItems` | `30` | Hard cap on delivered records and on spend. Shared round-robin across event types |
| `stateKey` | `default` | One key per schedule in `sinceLastRun` mode |

### Output (example, a real record from Oct 31, 2026)

```json
{
  "eventType": "authorityGranted",
  "eventDate": "2026-10-31",
  "eventId": "grant:MC98706791:Broker of Property (Except Household Goods):20261031",
  "usdotNumber": "7497671",
  "legalName": "BLACK MOUNTAINS LOGISTICS LLC",
  "dbaName": null,
  "entityType": "llc",
  "registeredDate": "2026-10-16",
  "usdotStatus": "active",
  "operationType": "intrastate-non-hazmat",
  "hazmat": false,
  "carrierClasses": [],
  "powerUnits": 0,
  "trucks": 0,
  "buses": null,
  "drivers": null,
  "cdlDrivers": null,
  "cargoTypes": [],
  "mcs150Date": null,
  "mcs150Mileage": 0,
  "mcs150MileageYear": 0,
  "safetyRating": null,
  "city": "RUSKIN",
  "state": "FL",
  "zip": "33573",
  "countyCode": "057",
  "country": "US",
  "dockets": [],
  "saferUrl": "https://safer.fmcsa.dot.gov/query.asp?searchtype=ANY&query_type=queryCarrierSnapshot&query_param=USDOT&query_string=7497671",
  "docketNumber": "MC98706791",
  "mcNumber": "98706791",
  "authorityType": "Broker of Property (Except Household Goods)",
  "authorityStatus": "Active",
  "revocationType": null,
  "revocationEffectiveDate": null,
  "source": "FMCSA Motus AuthHist (data.transportation.gov yu5v-wbh6) + Company Census",
  "firstSeenAt": "2026-10-31T11:06:21.833Z"
}
```

Each run also writes a summary to the `OUTPUT` record (window, filters, rows scanned per source, what each filter dropped, API calls, why it stopped).

Field notes:

- `eventDate`: registration date (`newCarriers`), date the authority became active (`authorityGranted`), or the date the order was served (`authorityRevoked`, with `revocationEffectiveDate` when it takes effect).
- `authorityRevoked` covers involuntary suspensions (usually insurance or BOC-3 cancellations), voluntary suspensions and revocations; `revocationType` tells you which.
- Brand-new carriers often have no docket yet in the census and report 0-2 power units; brokers report 0.
- `dbaName` is shown only when it reads like a business name.

### Data sources, timing and fair use

- **FMCSA Company Census File** (`az4n-8mr2`), **Motus AuthHist** (`yu5v-wbh6`) and **Motus RevokeSuspend** (`wb4f-neki`) on data.transportation.gov (Socrata, keyless, refreshed daily). Requests are spaced and retried politely; a default run makes about 5 API calls.
- FMCSA moved registration to its new Motus system in 2026. The legacy L\&I "AuthHist" (`9mw4-x3tu`) and "Revocation" (`sa6p-acbp`) files stopped receiving new grants and revocations in May 2026, so this Actor reads the live Motus files.
- The census add date usually appears 1-3 days after registration; `sinceLastRun` re-checks a 7-day overlap so late rows are not missed.
- This Actor is not affiliated with or endorsed by FMCSA or USDOT. Data is provided as published; verify on SAFER before relying on it.

### Pricing

Pay per event (Apify takes care of billing; you only pay for what is delivered):

| Event | Price | Charged |
|---|---|---|
| `apify-actor-start` | $0.005 | once per run |
| `carrier-record` | $0.003 | per carrier event record delivered (carrier profile included) |

A default test run (30 records) costs about $0.095. A daily state-filtered schedule (~40 records/day) costs about $0.125/day. `maxItems` and Apify's *max cost per run* cap your spend; the Actor stops delivering when your budget is reached, so you are never charged for more than you set. No separate platform-usage charges: compute is included in the event prices.

### FAQ

**Why are some new carriers missing?** Sole proprietors and carriers named after a person (e.g. "John Smith LLC") are excluded on purpose. This Actor is for business-to-business use on company records only.

**Do I get phone numbers or emails?** No. Personal contact fields are never requested from the source. Use the SAFER link or the company's own website for official contact channels.

**How is this different from FMCSA scrapers?** It is a change feed: new registrations, new authority grants and suspensions/revocations together, deduplicated across runs, from the official daily open-data files (no scraping of SAFER).

**How often should I schedule it?** Daily. FMCSA refreshes the files about once a day.

# Actor input Schema

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

window (default): events in the last N days, no saved state. sinceLastRun: only events not delivered before for this State key; use this for daily schedules.

## `eventTypes` (type: `array`):

Empty = all three. newCarriers: new USDOT registrations (FMCSA Company Census add date). authorityGranted: new operating authority granted (MC/FF docket; carriers, brokers, freight forwarders). authorityRevoked: authority suspension and revocation orders served.

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

2-letter codes of the carrier's physical address, e.g. TX, CA, CO (Canadian provinces and Mexican states also work, e.g. ON). Empty = all.

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

Only carriers reporting at least this many power units (trucks/tractors/buses) on their MCS-150. Note: brand-new carriers often report 1-2 units and brokers report 0. Empty or 0 = no minimum.

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

Only carriers with at most this many power units. Empty or 0 = no maximum.

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

interstate, intrastate (both kinds), intrastate-hazmat, intrastate-non-hazmat. Empty = all.

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

Only carriers flagged as hauling hazardous materials.

## `cargoTypes` (type: `array`):

Carrier hauls ANY of these (MCS-150 cargo classifications): generalFreight, householdGoods, metalSheetsCoilsRolls, motorVehicles, driveawayTowaway, logsPolesLumber, buildingMaterials, mobileHomes, machineryLargeObjects, freshProduce, liquidsGases, intermodalContainers, passengers, oilfieldEquipment, livestock, grainFeedHay, coalCoke, meat, garbageRefuse, usMail, chemicals, dryBulk, refrigeratedFood, beverages, paperProducts, utilities, farmSupplies, construction, waterWell, other.

## `authorityTypes` (type: `array`):

Filter authorityGranted / authorityRevoked by authority: property, householdGoods, passengers, broker, freightForwarder, mexicoDomiciled. Empty = all. Does not affect newCarriers.

## `daysBack` (type: `integer`):

Lookback window in days (by registration date, grant date or order serve date). In window mode an empty window is widened to 14, 30, 60 and then 120 days. Also the first-run window in sinceLastRun mode.

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

Hard cap on delivered records (also caps your spend). With several event types the cap is shared round-robin, newest first.

## `autoExtend` (type: `boolean`):

If nothing matches in Days back, retry with 14, 30, 60 and 120 days so you always see the latest matching events.

## `stateKey` (type: `string`):

Name of the saved feed for sinceLastRun mode. Each key keeps its own history, so use one key per schedule or filter set.

## Actor input object example

```json
{
  "mode": "window",
  "eventTypes": [
    "newCarriers",
    "authorityGranted"
  ],
  "hazmatOnly": false,
  "daysBack": 7,
  "maxItems": 30,
  "autoExtend": true,
  "stateKey": "default"
}
```

# Actor output Schema

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

One record per new carrier, authority grant or authority suspension/revocation.

## `summary` (type: `string`):

Window, filters, counts, what filters dropped, API calls.

# 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 = {
    "eventTypes": [
        "newCarriers",
        "authorityGranted"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("moment-data/fmcsa-new-carrier-feed").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 = { "eventTypes": [
        "newCarriers",
        "authorityGranted",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("moment-data/fmcsa-new-carrier-feed").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 '{
  "eventTypes": [
    "newCarriers",
    "authorityGranted"
  ]
}' |
apify call moment-data/fmcsa-new-carrier-feed --silent --output-dataset

```

## MCP server setup

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

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/rDuYVd8cdiybENnFZ/builds/qrNBU4sL0hZ6ijbQk/openapi.json
