# FMCSA Carrier Data: USDOT & MC Lookup, Insurance (Lite) (`cleanyield/fmcsa-carrier-data-lite`) Actor

Free Lite: up to 25 results per run. Full version adds unlimited results, monitor mode and alerts: https://apify.com/cleanyield/fmcsa-carrier-data. Look up and search US trucking companies and brokers in official FMCSA data: USDOT/MC, authority, insurer, insurance history and upcoming cancellations,

- **URL**: https://apify.com/cleanyield/fmcsa-carrier-data-lite.md
- **Developed by:** [Clean Yield](https://apify.com/cleanyield) (community)
- **Categories:** Lead generation, Developer tools
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-usage

## 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 Carrier Data: USDOT & MC Lookup, Insurance, New Carriers

> **Free Lite version** of [FMCSA Carrier Data: USDOT & MC Lookup, Insurance, New Carriers](https://apify.com/cleanyield/fmcsa-carrier-data): up to **25 results per run**, no monitor mode or alerts.
> Need more results, scheduled monitoring and alerts? Use the [full version](https://apify.com/cleanyield/fmcsa-carrier-data) — you only pay for valid, complete results.

**You only pay for valid, complete results** — every carrier is schema-validated before it is saved; USDOT/MC numbers that don't exist and incomplete records are never charged.

#### Switching from another scraper? Paste your current input as is

Common FMCSA scraper input names (`usDotNumbers`, `mcMxNumbers`, `registeredWithinDays`, `registeredAfter`, `carrierOperation`, `companyName`, `hazmatOnly`...) are accepted unchanged, and `outputFormat: "leader-compatible"` adds the usual output names (`mcNumber`, `registrationDate`, `totalDrivers`, `currentlyOutOfService`...) next to ours. Same price per carrier, with fleet size counted like SAFER and every date in ISO format.

| Typical field | Here |
|---|---|
| `usDotNumbers` / `mcMxNumbers` | `dotNumbers` / `mcNumbers` (both accepted) |
| `registeredWithinDays` / `registeredAfter` | `addedWithinDays` / `addedSince` |
| `mcNumber`, `registrationDate`, `totalDrivers` | `mcNumbers[]` (`MC-123456`), `addDate` (ISO), `drivers` |
| insurer / insurance status | `insurancePolicies[]` (insurer, policy, coverage in USD, effective date) + `insuranceSummary` |

Full mapping in *Migrating from other scrapers*.

**USDOT number lookup, MC number lookup, new trucking authority feed and carriers near any ZIP in one Actor.** Look up and search every US trucking company, freight broker and new carrier registered with the FMCSA — straight from the official FMCSA open data (Company Census, Motus operating authority, insurance filings, revocations, out-of-service orders and the SMS inspection and crash data behind SAFER), refreshed daily. Built for truck insurance agents, freight factoring companies, freight brokers and carrier-vetting teams. Also works as a **USDOT number lookup**, **MC number lookup**, **daily new / revoked authority** feed, **carriers within N miles of a ZIP** search and **SAFER company snapshot** API — every carrier with a free **lead score**, its **insurance history** and announced **insurance cancellations**.

Want to try first? Use the free Lite version: https://apify.com/cleanyield/fmcsa-carrier-data-lite

### Why use this FMCSA carrier lookup and leads scraper?

- ✅ **Complete, accurate data**: 100% of results have every required field; 99.7% of key fields matched SAFER on a fixed test set of 69 real lookups, searches, radius and authority-event runs.
- 🧩 **One record replaces SAFER, L\&I and the census**: census + operating authority per MC docket (with grant date and last status change) + insurance filings (insurer, policy, coverage, effective date) + revocations + BOC-3 agent (current and legacy system) + out-of-service status + **24-month inspections, out-of-service rates vs the national average and crashes** like the SAFER snapshot.
- 🆕 **Brand-new carriers come with their pending MC number**: we read FMCSA Motus for every USDOT, so new registrations show their MC days or weeks before the census lists it (19 of 25 new Texas carriers in our test).
- 📰 **Daily authority feed**: carriers and brokers whose authority was **granted, newly applied for, reinstated, suspended or revoked** in the last N days, straight from FMCSA's daily authority history, with the event attached (`authorityEvent`). Schedule it daily with monitor mode and get only the new ones.
- 📍 **Radius search**: carriers within N miles of a ZIP (`75201`) or a city (`Dallas, TX`), combined with fleet size, cargo, new-carrier and authority filters; every result has `distanceMiles`. Geocoding is built in (US Census ZIP and city centroids), no extra cost.
- ⭐ **Free lead score on every carrier**: `leadScore` 0–100 + `leadTier` (hot / warm / cold) + `leadScoreFactors` with the reason for every point (pending authority, direct vs shared phone, company email, small fleet, no BOC-3 yet, insurance change coming...).
- 📉 **Insurance history and announced cancellations**: cancelled and replaced policies (insurer, policy, dates) and the next cancellation **already filed with a future date** (`upcomingInsuranceCancellation`, with days left) — the call list insurance agents want. Monitor mode alerts you when one is announced.
- 🎯 **Pro mode (one checkbox)**: a 0–100 carrier **risk score with its reasons**, estimated **insurance renewal date**, a dated **"why now"** line for outreach, your own **trend** since you started monitoring and a one-sentence **AI summary**.
- 🛡️ **Insurer and effective date for every insured carrier**: who insures the carrier, policy number, coverage in USD and when it took effect, plus an estimated renewal date in Pro mode — what truck insurance agents and factoring teams ask for first.
- 🚛 **Fleet size you can trust**: the raw FMCSA census `power_units` column is inflated for ~1 in 4 carriers registered in 2026; we count power units like SAFER does and flag inconsistent records.
- 🧹 **Clean, normalized output**: phones in E.164, repaired emails (original kept in `emailAsFiled`), ISO dates everywhere, USPS-style addresses with ZIP5 and county FIPS, MC numbers as `MC-123456`, one-line summary columns for spreadsheets, and **shared phones/emails flagged** (permit agents filing for many carriers).
- 🔁 **Built for monitoring**: schedule it and get only new carriers and carriers whose authority, insurance, fleet, contact or address changed — field by field.
- ⚡ **Fast**: 18 lookups in ~10 s and a 20-carrier search in ~8–10 s measured on Apify (about half the time of a typical alternative); sync mode for Clay, n8n and Make.
- 🔌 **Drop-in replacement**: accepts the input field names of other popular FMCSA scrapers and can add their output field names (see *Migrating from other scrapers*).
- 🤖 **AI-agent ready**: pay-per-result only (no usage fees), works through MCP without an Apify account.
- 🏛️ **Official, open, unblocked source**: U.S. DOT open data (Socrata API, rights "public"); no scraping of login pages, no proxies.

#### This Actor vs typical alternatives

Measured head-to-head: a widely used FMCSA scraper run on Apify on 2026-11-05, and this Actor (v0.3) run on Apify on 2026-11-06 with the same inputs from our fixed test set — 18 USDOT/MC lookups (big fleets, new entrants, out-of-service, inactive and non-existent numbers) checked against SAFER, plus the "new interstate carriers in Texas, last 30 days" search, compared on the same 34 carriers. Our full test set (69 real inputs) is in "Measured quality".

| Same 18 lookups + 1 search | Typical alternative (measured) | This Actor |
|---|---|---|
| Key fields matching SAFER (90 checks) | 88 / 90 (fleet copied from the inflated census column: XPO 20,208 trucks instead of 10,104) | **90 / 90** |
| Insurance attached to the right carrier | one policy of a different USDOT shown as the carrier's | **✓** |
| Useful fields filled (16 per carrier) | 80% | **90%** with defaults · **93%** with officer names on (free checkbox) |
| Lead score | ✓ (a number, no reasons) | **✓ free, with the reason for every point** |
| 24-month inspections, out-of-service rates vs national average, crashes | ✗ | **✓** |
| BOC-3 process agent on file | ✗ | **✓** (current and legacy FMCSA systems) |
| Insurance history + cancellations already filed for a future date | current policies only | **✓** |
| Daily feed of granted / pending / suspended / revoked authority | ✗ | **✓** |
| Carriers within N miles of a ZIP or city | ✗ | **✓** |
| Authority per MC docket (incl. pending MC) + insurer and policy effective date | ✓ | ✓ |
| Successful runs / unknown numbers charged | 100% / no | 100% / no |
| Time on Apify (18 lookups + 20-carrier search) | 40 s | **20 s** |
| Cost per 1,000 carriers | USD 5 | USD 5 (unchanged carriers in monitor mode are free) |
| Monitor mode (only new/changed carriers, field-level changes) + Slack/webhook alerts | only "not delivered before" | **✓** |
| Versioned output (`schemaVersion`) + public changelog + measured quality | ✗ | **✓** |

### What data can you get from FMCSA?

| Field | Example |
|---|---|
| `dotNumber` | `52767` |
| `mcNumbers` | `["MC-120675", "MC-204229", "MC-442453"]` |
| `legalName` / `dbaName` / `companyName` | `ACME TRUCK LINE INC` / `ACME SUPPLY CHAIN SOLUTIONS` / `Acme Supply Chain Solutions` |
| `entityType` / `entityTypes` | `carrier` / `["carrier", "freightForwarder"]` |
| `usdotStatus` / `authorityStatus` / `outOfService` | `active` / `active` / `false` |
| `carrierOperation` / `hazmat` | `interstate` / `true` |
| `powerUnits` / `drivers` | `1116` / `1065` |
| `physicalAddress` / `mailingAddress` | `{ "city": "GRETNA", "state": "LA", "zip5": "70053", "countyFips": "22051", ... }` |
| `phone` / `fax` / `email` | `+15043682510` / `+15043689389` / `admindept@acmetruck.com` |
| `cargoCarried` | `["General Freight", "Metal: sheets, coils, rolls", ...]` |
| `safetyRating` | `satisfactory` (`safetyRatingDate`: `2015-02-05`) |
| `mcs150Date` / `addDate` | `2026-04-18` / `1974-06-01` |
| `authority` | authorities per docket, BIPD required vs on file (USD), cargo/bond on file, source (`motus` or `legacy-li`) |
| `insurancePolicies` | insurer, policy number, type (`bipd`, `cargo`, `bond`), coverage, effective date, pending cancellation date |
| `dataQualityFlags` | `fleetCountsInconsistent`, `implausibleFleetSize`, `physicalAddressUndeliverable`, `sharedPhone`, `sharedEmail`... |
| `safety` | 24 months: inspections (vehicle/driver, out-of-service count and rate), crashes (fatal/injury/tow-away), 5 BASIC measures with acute/critical flags |
| `revocations` / `processAgent` | authority suspension/revocation orders · BOC-3 process agent |
| `authoritySummary` / `insuranceSummary` / `cargoCarriedText` | one-line versions for spreadsheets and CRMs |
| `phoneSharedCount` / `phoneIsShared` (and email) | `166` / `true` = a permit agent's phone, not the carrier's |
| `equipment`, `interstateDrivers`, `intrastateDrivers` | owned / term-leased / trip-leased trucks, tractors, trailers |
| `ageInDays` / `isNewEntrant` / `priorRevokedDotNumber` | `4` / `true` / previous revoked USDOT (reincarnated-carrier signal) |
| `leadScore` / `leadTier` / `leadScoreFactors` | `85` / `hot` / `[{ "code": "authorityPending", "points": 20, "detail": "..." }, ...]` — free, every carrier |
| `insuranceHistory` | cancelled or replaced filings: insurer, policy, coverage, effective and cancellation dates, `kind` (`cancellation`, `replacement`, `nameChange`) |
| `upcomingInsuranceCancellation` / `insuranceCancellationsLast12Months` | next cancellation already filed for a future date (`cancelEffectiveDate`, `daysUntil`, insurer) / count |
| `boc3OnFile` | `true` / `false` (docket but no BOC-3 in either FMCSA system) / `null` (no docket) |
| `safety.vsNationalAverage` | vehicle and driver out-of-service rate vs the national average published on SAFER (`above` / `below`, difference in points) |
| `distanceMiles` | radius search: miles from your ZIP or city |
| `authorityEvent` | authority events mode: `{ "eventType": "granted", "date": "2026-11-05", "docketNumber": "MC-80114410", ... }` |
| `riskScore`, `riskLevel`, `riskFactors`, `insuranceRenewal`, `whyNow`, `trend`, `insight` | Pro mode (see below) |
| `companyWebsite` | optional combo: website emails, phones, social profiles, technologies, hiring |
| `fmcsaUrl` | SAFER Company Snapshot link |
| `sourceDataset` / `sourceUpdatedAt` | `az4n-8mr2` / `2026-11-03T11:19:07.000Z` |

#### Example output

Real item from a run on 2026-11-04 with v0.2 (cargo, insurance and BASIC lists shortened; v0.3 fields right below):

```json
{
  "schemaVersion": 2,
  "dotNumber": "52767",
  "mcNumbers": ["MC-120675", "MC-204229", "MC-442453"],
  "legalName": "ACME TRUCK LINE INC",
  "dbaName": "ACME SUPPLY CHAIN SOLUTIONS",
  "companyName": "Acme Supply Chain Solutions",
  "entityType": "carrier",
  "entityTypes": ["carrier", "freightForwarder"],
  "businessType": "corporation",
  "usdotStatus": "active",
  "authorityStatus": "active",
  "carrierOperation": "interstate",
  "hazmat": true,
  "powerUnits": 1116,
  "trucks": 1108,
  "buses": 8,
  "drivers": 1065,
  "cdlDrivers": 887,
  "physicalAddress": {
    "street": "200 WESTBANK EXPRESSWAY", "city": "GRETNA", "state": "LA", "postalCode": "70053", "zip5": "70053",
    "country": "US", "countyFips": "22051", "oneLine": "200 WESTBANK EXPRESSWAY, GRETNA, LA 70053, US"
  },
  "phone": "+15043682510",
  "fax": "+15043689389",
  "email": "admindept@acmetruck.com",
  "cargoCarried": ["General Freight", "Metal: sheets, coils, rolls", "Drive/Tow away", "Logs, Poles, Beams, Lumber"],
  "safetyRating": "satisfactory",
  "safetyRatingDate": "2015-02-05",
  "mcs150Date": "2026-04-18",
  "addDate": "1974-06-01",
  "dunsNumber": "59118810",
  "dataQualityFlags": [],
  "outOfService": false,
  "authority": {
    "source": "motus",
    "authorities": [
      { "docketNumber": "MC-120675", "authorityType": "Motor Carrier of Property (Except Household Goods)", "status": "active" },
      { "docketNumber": "MC-442453", "authorityType": "Motor Carrier of Passengers", "status": "active" }
    ],
    "hasActiveCarrierAuthority": true,
    "hasActiveBrokerAuthority": false,
    "bipdRequiredUsd": 1500000,
    "bipdOnFileUsd": 10000000,
    "bondOnFile": true
  },
  "insurancePolicies": [
    {
      "docketNumber": "MC-120675", "insuranceType": "bipd", "layer": "primary", "formCode": "BMC-91X",
      "insurer": "Hudson Insurance Company", "policyNumber": "HMU200030-15", "coverageUsd": 5000000,
      "effectiveDate": "2024-05-01", "postedDate": "2024-05-31", "cancelEffectiveDate": null, "source": "motus"
    }
  ],
  "safety": {
    "measurementPeriodMonths": 24,
    "snapshotUpdatedAt": "2026-10-13T07:02:56.000Z",
    "inspections": { "total": 1323, "vehicle": 1071, "vehicleOutOfService": 255, "vehicleOutOfServiceRate": 0.2381, "driver": 1322, "driverOutOfService": 17, "driverOutOfServiceRate": 0.0129 },
    "crashes": { "total": 32, "fatal": 0, "injury": 13, "towaway": 19 },
    "basics": { "unsafeDriving": { "inspectionsWithViolations": 44, "measure": 0.33, "acuteCriticalViolation": false } }
  },
  "revocations": [],
  "authoritySummary": "MC-442453 Motor Carrier of Passengers: active since 2003-03-18; ... MC-120675 Motor Carrier of Property (Except Household Goods): active since 1991-12-26",
  "insuranceSummary": "BIPD primary USD 5,000,000 (Hudson Insurance Company), eff. 2024-05-01; Bond primary USD 75,000 (American Alternative Insurance Corporation), eff. 2020-06-01; ...",
  "phoneSharedCount": 3,
  "phoneIsShared": false,
  "fmcsaUrl": "https://safer.fmcsa.dot.gov/query.asp?searchtype=ANY&query_type=queryCarrierSnapshot&query_param=USDOT&query_string=52767",
  "sourceDataset": "az4n-8mr2",
  "sourceDatasetName": "FMCSA Company Census File",
  "sourceUpdatedAt": "2026-11-03T11:19:07.000Z",
  "scrapedAt": "2026-11-04T21:40:36.255Z"
}
```

(Check against SAFER for J B Hunt, USDOT 80806, the same week: SAFER 20,264 inspections and 22.4% vehicle out-of-service; this Actor 20,266 and 22.2%.)

Fields added in v0.3 (`schemaVersion: 3`), same carrier, real run on 2026-11-06 (history shortened):

```json
{
  "schemaVersion": 3,
  "leadScore": 58,
  "leadTier": "warm",
  "leadScoreFactors": [
    { "code": "directPhone", "points": 10, "detail": "Direct phone on file" },
    { "code": "companyEmail", "points": 10, "detail": "Company email domain (acmetruck.com)" },
    { "code": "largeFleet", "points": 3, "detail": "1116 power units" },
    { "code": "interstateForHire", "points": 5, "detail": "Interstate for-hire carrier" }
  ],
  "boc3OnFile": true,
  "upcomingInsuranceCancellation": null,
  "insuranceCancellationsLast12Months": 0,
  "insuranceHistory": [
    {
      "docketNumber": "MC-120675", "insuranceType": "bipd", "insurer": "HUDSON INSURANCE COMPANY", "policyNumber": "HMU200030-14",
      "coverageUsd": 5000000, "effectiveDate": "2023-05-01", "cancelEffectiveDate": "2024-05-01", "kind": "replacement", "reason": "TERM/REPL", "source": "legacy-li"
    }
  ],
  "safety": {
    "vsNationalAverage": {
      "vehicleNationalRate": 0.2226, "driverNationalRate": 0.0667, "vehicleRateDiff": 0.0155, "driverRateDiff": -0.0538,
      "vehicle": "above", "driver": "below", "nationalAverageAsOf": "2026-09-25"
    }
  },
  "distanceMiles": null,
  "authorityEvent": null
}
```

### Daily authority feed: new, suspended and revoked MC authority

Pick one or more **Authority events** and how many days back to read:

```json
{ "authorityEvents": ["granted", "pending"], "authorityEventsWithinDays": 1, "states": ["TX"], "maxResults": 500 }
```

| Event | What it means |
|---|---|
| `granted` | FMCSA granted the operating authority (new MC/FF/MX active) |
| `pending` | New authority application (initial status or published in the FMCSA Register) |
| `reinstated` | Authority reinstated after a suspension |
| `suspended` | Involuntary (insurance or BOC-3 cancelled) or voluntary suspension |
| `revoked` | Revoked or inactivated (e.g. insurance cancelled and the 35-day period elapsed) |
| `withdrawn` / `outOfService` | Application withdrawn / authority inactivated by an out-of-service order |

Each carrier comes with the full record (contact, fleet, insurance, safety, lead score) and `authorityEvent` (`eventType`, `date`, `docketNumber`, `authorityType`, `status`, `reason`). Add any filter (state, radius, fleet size, cargo). Schedule it daily with `authorityEventsWithinDays: 1` and **Monitor mode** on, and every run delivers only carriers you haven't received yet. Example on 2026-11-06: 20 Texas carriers granted or newly applied in the last 2 days in 9.7 s.

### Radius search: carriers near a ZIP or city

```json
{ "nearLocation": "Dallas, TX", "radiusMiles": 50, "minPowerUnits": 5, "maxPowerUnits": 50, "cargoTypes": ["generalFreight"], "maxResults": 100 }
```

`nearLocation` takes a 5-digit ZIP (`75201`) or `City, ST`. The Actor finds every ZIP whose US Census centroid is inside the radius (1–300 miles) and returns carriers based there (sorted by `sortBy`, newest first by default), each with `distanceMiles`. Example on 2026-11-06: 20 general-freight carriers with 5–43 trucks within 45 miles of Dallas in 8.2 s.

### Free lead score

Every carrier gets `leadScore` (0–100), `leadTier` (`hot` ≥ 70, `warm` 40–69, `cold` < 40) and `leadScoreFactors`, at no extra charge. Base 30, plus or minus fixed points: pending authority with no active one yet (+20), authority granted in the last 90 days (+15), registered in the last 30 days (+15) or new entrant (+8), direct phone (+10) or shared/permit-agent phone (−10) or none (−15), company email (+10) or personal mailbox (+5), small fleet 2–100 (+5), interstate for-hire (+5), insurance cancellation or replacement within 60 days (+10), no BOC-3 yet with pending authority (+5), inactive authority (−20), inactive USDOT or out-of-service order (−40). It ranks who to call first; Pro mode's `riskScore` measures something else (risk to insure or tender a load).

### Pro mode: risk score, renewal date and why-now

Tick **Pro mode** and every carrier also gets:

| Field | What it is |
|---|---|
| `riskScore` (0–100) + `riskLevel` | Higher = riskier to insure, finance or tender a load. Sum of fixed, published points, so you can always see why. `low` < 20, `medium` 20–49, `high` ≥ 50 |
| `riskFactors` | `[{ code, points, detail }]`, e.g. active out-of-service order (50), Unsatisfactory rating (25), BIPD on file below required (20), prior USDOT revoked (20), suspension/revocation order in the last 12 months (15), vehicle or driver out-of-service rate above the national average (8–15), acute/critical violation (10), Conditional rating (10), high crash frequency (10), new entrant (5), shared contact (5), MCS-150 older than 2 years (5) |
| `insuranceRenewal` | Estimated next renewal of the current BIPD policy (anniversary of its effective date), with insurer and days left — the timing insurance agents call on |
| `whyNow` | One dated reason to contact the carrier today: insurance cancellation pending, authority granted N days ago, MC pending, renewal in N days, registered N days ago |
| `trend` | With monitor mode: change in fleet, drivers, crashes and out-of-service rate since your monitor started following the carrier (your own history, grows every run) |
| `insight` | One-sentence AI summary (Claude Haiku) written only from the record's data |

In monitor mode, Pro also alerts on safety changes (new crashes, out-of-service rate, acute/critical violations). Without Pro, the run ends with an honest note of what Pro would have flagged (e.g. "3 high-risk carriers, 5 renewals due in 60 days").

Every run also saves a free **visual dashboard** (KPIs, carriers by state, fleet size, cargo, insurers, top carriers) in the run's key-value store (`DASHBOARD`, link in `SUMMARY`).

### Use cases

- **Truck insurance agents**: daily feed of authority granted or applied for in your states, carriers whose insurance cancellation is already filed (`upcomingInsuranceCancellation`), plus current insurer, policy effective date (renewal timing) and BIPD on file.
- **Freight factoring**: new authorities (MC granted) and carrier vetting — USDOT status, out-of-service orders, authority per docket, safety rating.
- **Freight brokers / carrier onboarding**: bulk-verify a carrier list by USDOT or MC and get alerted when a carrier's authority, insurance or contact changes.
- **Lead generation & CRM enrichment**: trucking companies within N miles of a ZIP or city, or by state, fleet size, cargo type or hazmat, ranked by the free lead score, with E.164 phones and emails ready to import.
- **Process agents, compliance and ELD sellers**: new authority with no BOC-3 on file yet (`boc3OnFile: false`), suspended or revoked carriers that need to reinstate.
- **Market research**: count and segment carriers by state, fleet size and cargo.

### Schedule it: monitor FMCSA carriers and get only what changed

1. Turn on **Monitor mode** (optionally give it a **Monitor state name**, e.g. `tx-new-carriers`).
2. Add a Slack webhook or a webhook URL (Zapier, Make, n8n — use it to send emails too) for alerts.
3. Open **Schedules** → **Create schedule** → daily or weekly → select this Actor with your input.

Three typical setups:

- **New carriers feed**: states + `addedWithinDays: 30` → each run outputs only carriers that weren't in the previous run.
- **Authority feed**: `authorityEvents: ["granted", "pending"]` (or `["suspended", "revoked"]`) + `authorityEventsWithinDays: 1` → every day, the new events only.
- **Watchlist**: your USDOT/MC numbers → each run outputs only carriers whose authority, insurance, out-of-service status, fleet, phone/email, address, name or safety rating changed.

Each run compares with the previous one and outputs only new or changed carriers (each item has `changeType`: `new` or `changed`, and `changes`: `[{ field, category, previous, current }]`). You pay only for those. The first run is the baseline (everything is `new`). A `MONITOR_SUMMARY` record in the run's key-value store counts changes by category (authority, insurance, fleet, contact...).

### How much does it cost to get FMCSA carrier data?

Pay per result (pay per event): no subscription, no platform usage fees, and unknown numbers or incomplete records are free.

| Results | Cost |
|---|---|
| 100 carriers | USD 0.50 |
| 1,000 carriers | USD 5 |
| 10,000 carriers | USD 50 |

Optional extras, only when you tick them (proposed prices):

| Extra | Price |
|---|---|
| Pro mode (`pro-result`) | + USD 5 per 1,000 carriers (USD 0.005 each) |
| Company website contacts (`company-website`) | + USD 10 per 1,000 websites read successfully (none charged when the carrier has no own domain or the site can't be read) |

**No surprises**: the run log starts with the maximum this run can cost (results × price, extras included, capped at your **Maximum cost per run**). The safety block, shared-contact check, raw census row and dashboard are free.

Example: an insurance agent who gets the ~1,500 new carriers of 3 states every week in monitor mode pays about USD 7.50 per week. Apify subscribers get a lower price per result (tiers on the Pricing tab). Set **Maximum cost per run** and the Actor stops exactly there.

### How to use the FMCSA carrier scraper

1. Click **Try for free**.
2. Paste USDOT or MC numbers (e.g. `80806`, `MC-135797`) **or** set filters (e.g. state `TX`, added in the last `30` days).
3. Click **Start** and download JSON, CSV or Excel, or get the data through the API.

#### Input example

```json
{
  "states": ["TX"],
  "entityTypes": ["carrier"],
  "operationType": "interstate",
  "addedWithinDays": 30,
  "maxResults": 25
}
```

#### Input fields

| Field | Description |
|---|---|
| `dotNumbers` | USDOT numbers to look up (bulk). When given, search filters are ignored and every number is returned regardless of status. |
| `mcNumbers` | MC / FF / MX docket numbers (`MC-135797`, `MC135797`, `135797`). |
| `states`, `cities`, `zipCodes` | Physical location: 2-letter states or full names, city names, ZIP codes or 3–4 digit prefixes. |
| `nearLocation`, `radiusMiles` | Radius search: 5-digit ZIP or `City, ST`, and miles (1–300, default 50). |
| `nameContains` | Text in the legal or DBA name. |
| `entityTypes` | carrier, broker, freightForwarder, shipper, intermodalEquipmentProvider, cargoTankFacility, registrant. |
| `operationType` | any, interstate, intrastate, intrastateHazmat, intrastateNonHazmat. |
| `authorizedForHireOnly`, `hazmat`, `cargoTypes` | For-hire only; hazmat only/exclude; cargo carried (e.g. refrigeratedFood). |
| `minPowerUnits`, `maxPowerUnits`, `minDrivers`, `maxDrivers` | Fleet size (power units counted like SAFER). |
| `addedWithinDays`, `addedSince`, `addedBefore`, `mcs150UpdatedSince` | Registration date (relative or absolute) and last MCS-150 update. |
| `usdotStatus`, `authorityStatus`, `safetyRatings`, `requireEmail`, `requirePhone` | Status and data filters. |
| `sortBy`, `maxResults` | newest, largestFleet, recentlyUpdated, dotNumber; cap of results (search mode). |
| `authorityEvents`, `authorityEventsWithinDays` | Authority events mode: granted, pending, reinstated, suspended, revoked, withdrawn, outOfService; days back (default 7). |
| `includeAuthority`, `includeInsurance`, `includeInsuranceHistory` | Add authority per docket + out-of-service status, insurance filings, and insurance history with announced cancellations (all on by default, free). |
| `contactData`, `includeOfficerNames` | Include / omit contact data (all or only for sole proprietors); officer names (off by default). |
| `socrataAppToken` | Optional free data.transportation.gov app token for very large runs. |
| `monitorMode`, `monitorStateName`, `notifyWebhookUrl`, `notifySlackWebhookUrl` | Monitor mode and alerts. |
| `includeSafety`, `checkSharedContacts`, `includeRawData` | 24-month inspections/crashes (on), shared phone/email check (on), every raw census column (off). |
| `maxResultsPerState` | Cap per state when you pick several states. |
| `savedListName`, `saveList` | Remember a USDOT/MC watchlist under a name; later runs reuse it (add more numbers any time). |
| `proMode`, `enrichCompanyWebsite` | Pro extras; company website contacts (both charged as extra events). |
| `outputFormat` | `standard` or `leader-compatible` (adds the field names of other FMCSA scrapers). |

Run with **no input at all** (`{}`, e.g. from an AI agent) and you get a free-of-surprises sample: the 25 newest interstate carriers of the last 7 days.

### Integrations and code examples

Bulk input is fine: thousands of USDOT or MC numbers in one run (300 carriers with authority, insurance history and safety in ~26 s on Apify), with polite pacing, retries and your budget cap.

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("cleanyield/fmcsa-carrier-data").call(run_input={"dotNumbers": ["80806", "53467"]})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["dotNumber"], item["legalName"], item["authorityStatus"], item["phone"])
```

#### JavaScript

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('cleanyield/fmcsa-carrier-data').call({ states: ['TX'], addedWithinDays: 7, entityTypes: ['carrier'], maxResults: 500 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((c) => [c.dotNumber, c.legalName, c.email]));
```

#### Sync mode (Clay, n8n, Make, HTTP)

One HTTP call returns the results directly (typically 3–6 s for a few USDOT numbers):

```
POST https://api.apify.com/v2/acts/cleanyield~fmcsa-carrier-data/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>
Content-Type: application/json

{ "dotNumbers": ["80806"] }
```

#### n8n and Make

Ready-made templates in this Actor's `templates/` folder: new carriers → Google Sheets (n8n), watchlist changes → Slack (n8n), weekly new-carrier leads (Make) and USDOT enrichment in Clay. Or use the official Apify node/app → **Run an Actor** → `cleanyield/fmcsa-carrier-data`.

#### Google Sheets, Slack, email

Ready: Slack and webhook alerts are built in (monitor mode); the n8n template `templates/n8n-new-carriers-to-google-sheets.json` appends new carriers to a Google Sheet, and the Make template sends a weekly leads email. Or use Apify's Google Drive integration to export every run automatically.

### For developers: use it inside your own Actor

Building a trucking, insurance or factoring product on Apify? Call this Actor as your FMCSA data layer:

- **Fast and synchronous**: `run-sync-get-dataset-items` returns a few USDOT lookups in ~3–6 s.
- **Stable schema**: every item has `schemaVersion` (now `3`); fields are only added, never renamed ([CHANGELOG](CHANGELOG.md)).
- **Clear price**: USD 5 per 1,000 valid carriers, no start fee, unknown numbers are free.

```js
import { Actor } from 'apify';

const run = await Actor.call('cleanyield/fmcsa-carrier-data', { dotNumbers: ['80806', '241829'], includeSafety: true });
const { items } = await Actor.apifyClient.dataset(run.defaultDatasetId).listItems();
for (const c of items) console.log(c.dotNumber, c.authorityStatus, c.safety?.inspections?.vehicleOutOfServiceRate);
```

### Migrating from other scrapers

Switch without rewriting your integration: this Actor accepts the input names below as they are, and `outputFormat: "leader-compatible"` adds the output names other scrapers use (our own fields stay, so nothing breaks either way).

| Their input | Ours (accepted as-is) |
|---|---|
| `registeredWithinDays` | `addedWithinDays` |
| `registeredAfter` / `addedAfter` (`2026-05-01`, `05/01/2026` or `30 days`) | `addedSince` / `addedWithinDays` |
| `registeredBefore` | `addedBefore` |
| `carrierOperation` / `carrierOperations` (`Interstate`, `Intrastate Hazmat`, `intrastate-non-hazmat`...) | `operationType` |
| `companyName` | `nameContains` |
| `activeOnly: false` / `statuses` | `usdotStatus` |
| `hazmatOnly: true` | `hazmat: "only"` |
| `includeEmail: false` | email left out |
| `enrichAuthority: false` | `includeAuthority` / `includeInsurance` off |
| `monitorStoreName` | `monitorStateName` |
| `usDotNumbers` / `mcMxNumbers` | `dotNumbers` / `mcNumbers` |
| `maxResultsPerState`, `includeRawData`, `requireEmail`, `requirePhone`, `minPowerUnits`, `maxPowerUnits`, `minDrivers`, `cargoTypes`, `safetyRatings`, `states`, `maxResults` | same name |

| Their output (with `leader-compatible`) | Ours |
|---|---|
| `mcNumber` (`MC1234567`) | `mcNumbers` (`["MC-1234567"]`) |
| `registrationDate`, `addedDate` | `addDate` |
| `operationType`, `status`, `classifications`, `isForHire` | `carrierOperation`, `usdotStatus`, `operationClassification` |
| `authorityGrantedDate`, `authorityStatusDate`, `authorityStatusReason` | `authority.grantedDate`, `authority.authorities[].statusDate/statusReason` |
| `currentlyOutOfService` | `outOfService` |
| `totalDrivers`, `cargoTypes`, `cargoTypesText`, `cellPhone` | `drivers`, `cargoCarried`, `cargoCarriedText`, `mobilePhone` |
| `physicalAddressText`, `saferSnapshotUrl` / `saferUrl` | `physicalAddress.oneLine`, `fmcsaUrl` |
| `primaryContactName`, `officerNames` | `companyOfficers` (with `includeOfficerNames`) |
| `phoneIsShared`, `emailIsShared`, `ageInDays`, `isNewEntrant`, `insuranceSummary`, `authoritySummary`, `revocations` | same name |
| `leadScore` | `leadScore` (free, 0–100, with `leadScoreFactors` explaining every point) |

Differences to know: our phones are E.164 (`+14045550127`), all dates ISO (`2026-10-01`), insurance amounts in USD (not thousands), and power units are counted like SAFER.

### Measured quality

Measured on a **fixed test set of 69 real cases** (30 USDOT lookups checked by hand against SAFER, 7 MC lookups, inactive, out-of-service and non-existent numbers, 18 different searches, 5 v2 cases — SAFER inspection/crash counts, empty input, other scrapers' input names — and 5 v3 cases: legacy BOC-3, radius around a ZIP and a city, authority events), re-run before every release (`reliability/latest.json`):

| Metric | Result (2026-11-06) | Target |
|---|---|---|
| Successful runs | **100%** | ≥ 99% |
| Results with every required field | **100%** (423 results) | ≥ 98% |
| Key fields matching SAFER | **99.7%** | ≥ 99% |

The only mismatch is a contradiction inside FMCSA itself (one fleet whose SAFER page and open data disagree). Plus 68 automated tests (including 19 hard cases: malformed input, garbage or empty source responses, timeouts, huge lists, duplicates, tiny budgets). Every change is listed in the [CHANGELOG](CHANGELOG.md).

### Use with AI agents / MCP

This Actor charges only per result (no usage fees), so AI agents can run and pay for it through the [Apify MCP server](https://mcp.apify.com) without an Apify account.

Example request to your assistant:

> "Find interstate trucking companies registered in Ohio in the last 14 days with 1 to 5 trucks, and give me their phone, email and MC number."

> "Check USDOT 241829 before I tender a load: is it out of service, is its insurance on file, and what is its vehicle out-of-service rate?"

> "Which trucking companies within 30 miles of 30303 got their MC authority granted this week?"

Tips for agents: pass USDOT/MC numbers in `dotNumbers`/`mcNumbers` for lookups, filters for searches (`nearLocation` + `radiusMiles` for "near X"), or `authorityEvents` for "new / revoked authority"; `{}` returns a 25-carrier sample; every item has `schemaVersion`, ISO dates and E.164 phones; `null` means "FMCSA has no value / not checked", never "0".

### Related Actors

- [Company Enrichment from Website](https://apify.com/cleanyield/company-enrichment-from-website) — add website emails, social profiles, technologies and hiring signals to the carriers you found here.

### FAQ

#### Is it legal to use FMCSA carrier data?

Yes. The data comes from U.S. DOT / FMCSA open datasets on data.transportation.gov, published with rights "public" for reuse. The Actor uses the official open-data API: no login, no captchas, no scraping of protected pages. Many carriers are sole proprietors, so records can include a person's name, phone and email: use `contactData` to omit contact data (all, or only for sole proprietors). Company officer names are off by default.

#### Can I use the phones and emails for cold outreach?

The data is public, but outreach is regulated. Calls and texts are subject to the **TCPA** (consent rules for autodialed calls/texts to mobile numbers, and the National Do Not Call Registry for telemarketing); commercial email is subject to **CAN-SPAM** (truthful headers and subject, physical address, working opt-out honored within 10 business days). You are responsible for how you use the data; this is not legal advice.

#### How fresh is the data?

The Company Census File is updated by FMCSA daily; authority and insurance come from FMCSA's Motus datasets (current system), with the legacy L\&I datasets (frozen on 2026-05-14) as fallback for carriers not yet in Motus. Every item has `sourceUpdatedAt` and `authority.source`. New registrations appear with a 1–2 day delay.

#### Why does the fleet size differ from other tools?

The raw `power_units` column of the FMCSA census is inflated for about 1 in 4 carriers registered in 2026 (for example XPO Logistics Freight: 20,208 in the census vs 10,104 on SAFER). We count power units like SAFER (trucks + buses) and add `fleetCountsInconsistent` to `dataQualityFlags` when the census disagrees.

#### What happens if a carrier fails or comes back incomplete?

Requests are retried automatically. Records without a USDOT number or legal name, and numbers that don't exist, are skipped and **you are not charged**. Every run stores a `RUN_STATS` record (successes, failures by reason) in its key-value store.

#### Will the output format change?

Fields are only added, never renamed or removed. Every item has `schemaVersion` (now `3`) and every change is in the [CHANGELOG](CHANGELOG.md).

#### Does it include inspections, crashes and the CSA BASICs?

Yes (`safety`, on by default): 24-month roadside inspections, vehicle and driver out-of-service counts and rates, crashes by type and the 5 public BASIC measures with acute/critical flags, from FMCSA's monthly SMS snapshot (the data behind the SAFER snapshot; it can lag SAFER by a few weeks). BASIC percentiles are not public for property carriers, so they are not included. Carriers registered after the latest monthly snapshot have `inspections: null` (not yet measured), never a made-up 0.

#### Can I get new authority or revocations every day?

Yes: set `authorityEvents` (e.g. `["granted"]` or `["suspended", "revoked"]`) and `authorityEventsWithinDays: 1`, turn on Monitor mode and schedule the Actor daily. It reads FMCSA's authority history, which FMCSA updates every day.

#### How does the radius search work?

`nearLocation` (ZIP or `City, ST`) is turned into coordinates with the US Census ZIP and city centroids bundled in the Actor, then every carrier whose ZIP centroid is within `radiusMiles` is returned with `distanceMiles`. Distances are ZIP-to-ZIP, not street-level.

#### Why is `phoneIsShared` true for some big companies?

It means 10+ USDOT records use that phone. Usually that's a permit or compliance agent filing for many small carriers (skip those for outreach); sometimes it's a large company's own subsidiaries. `phoneSharedCount` tells you how many.

#### Is this an official FMCSA or DOT product?

No. Not affiliated with or endorsed by the FMCSA, the U.S. Department of Transportation, SAFER or any insurer named in the data; those names only describe the official open data this Actor reads.

#### I found a bug / need a feature

Open an issue in the **Issues** tab. We usually answer within 24 hours.

# Changelog

This Actor's version history is a separate document: https://apify.com/cleanyield/fmcsa-carrier-data-lite/changelog.md

# Actor input Schema

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

USDOT numbers to look up, one per line (leading zeros and 'USDOT' prefixes are fine). Example: 80806. When you give USDOT or MC numbers, the search filters below are ignored and every number is returned regardless of status. Numbers that don't exist are reported in the log and never charged.

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

Operating authority docket numbers, one per line. Accepts 'MC-135797', 'MC135797', 'FF51075' or just '135797' (MC is assumed). Example: MC-135797.

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

Physical (domicile) state of the company: 2-letter codes or full names. Example: TX, OK. Leave empty for all states.

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

Physical city names (exact match, case-insensitive). Combine with States to avoid same-name cities elsewhere. Example: Dallas.

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

Physical ZIP codes (5 digits) or prefixes (3–4 digits match a whole area). Example: 75201 or 752.

## `nearLocation` (type: `string`):

Find carriers based within a radius of a 5-digit ZIP (75201) or a city with its state (Dallas, TX). Uses US Census ZIP centroids, no extra cost. Each result gets distanceMiles. Combine with any filter below (fleet size, cargo, new carriers...).

## `radiusMiles` (type: `integer`):

Radius around 'Near a ZIP or city', 1 to 300 miles. Default 50.

## `nameContains` (type: `string`):

Optional text that must appear in the legal name or DBA name (case-insensitive). Example: logistics.

## `entityTypes` (type: `array`):

Keep only entities registered as any of these types (FMCSA 'carship' field). Example: carrier for trucking companies, broker for freight brokers. Leave empty for all.

## `operationType` (type: `string`):

Interstate (crosses state lines, most for-hire trucking) or intrastate carriers. Example: interstate.

## `authorizedForHireOnly` (type: `boolean`):

Keep only companies whose operation classification includes 'Authorized for hire' (they haul freight for others — the ones brokers book and insurers quote). Excludes private fleets.

## `hazmat` (type: `string`):

Filter by the hazardous-materials flag. Example: only (hazmat carriers only).

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

Keep carriers that haul any of these cargo types (as declared on their MCS-150). Example: refrigeratedFood for reefer carriers.

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

Minimum number of power units (trucks/tractors) reported on the MCS-150. Example: 5.

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

Maximum number of power units. Example: 1 for owner-operators, 10 for small fleets.

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

Minimum total drivers reported on the MCS-150. Example: 2.

## `maxDrivers` (type: `integer`):

Maximum total drivers. Example: 20.

## `addedWithinDays` (type: `integer`):

Only companies whose USDOT number was added (registered) in the last N days — relative to each run, ideal for scheduled 'new carriers' feeds. Example: 30. FMCSA publishes new registrations with a 1–2 day delay.

## `addedSince` (type: `string`):

Only companies registered (USDOT add date) on or after this date, YYYY-MM-DD. Example: 2026-10-01. If 'Added in the last N days' is also set, the more recent date wins.

## `addedBefore` (type: `string`):

Only companies registered on or before this date, YYYY-MM-DD. Example: 2026-10-31.

## `mcs150UpdatedSince` (type: `string`):

Only companies that filed or updated their MCS-150 registration form on or after this date, YYYY-MM-DD. Example: 2026-09-01 (recently active companies).

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

Registration status of the USDOT number. Default: active (operating companies). Not applied to USDOT/MC lookups.

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

Filter by operating authority: 'active' = has an active MC/FF/MX authority (for-hire interstate carriers and brokers); 'none' = no authority docket (private fleets, intrastate).

## `safetyRatings` (type: `array`):

Keep only these FMCSA safety ratings. Most carriers are 'unrated'. Example: conditional, unsatisfactory (to vet risky carriers).

## `requireEmail` (type: `boolean`):

Keep only companies that published an email address on their FMCSA registration.

## `requirePhone` (type: `boolean`):

Keep only companies that published a phone number.

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

Order of the search results. Newest = most recently registered first.

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

Search mode: stop after this many carriers. Use it to cap your cost: you pay only for results actually returned. USDOT/MC lookups always return every number you list. Example: 1000.

## `maxResultsPerState` (type: `integer`):

Optional cap per state when you select several states (e.g. 200 per state). 0 or empty = no per-state cap (maxResults still caps the whole run).

## `authorityEvents` (type: `array`):

Daily feed from FMCSA's authority history: get the carriers and brokers whose operating authority was GRANTED, newly applied for (pending), reinstated, suspended, revoked, withdrawn or put out of service in the last N days, with the event in authorityEvent. Combine with state, radius, fleet and cargo filters. Schedule it daily with monitor mode to get only the new ones.

## `authorityEventsWithinDays` (type: `integer`):

How far back to read authority events. 1 = yesterday and today (for a daily schedule). Default 7, max 365.

## `includeAuthority` (type: `boolean`):

Add out-of-service order status, each carrier's operating authorities (type and status per MC docket) and insurance requirements vs. on file (BIPD amount, cargo, bond), from FMCSA's Motus and L\&I datasets. Free, adds ~1 s per 150 carriers.

## `includeInsurance` (type: `boolean`):

Add active/pending insurance filings: insurer, policy number, coverage, effective date (renewal timing for insurance agents) and pending cancellation date when published.

## `includeInsuranceHistory` (type: `boolean`):

Cancelled and replaced policies (insurer, policy, dates), the next cancellation already filed with a future date, and cancellations in the last 12 months. Free.

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

Add the SAFER-style safety block: roadside inspections (vehicle/driver), out-of-service counts and rates, crashes (fatal/injury/tow-away) for the last 24 months and the 5 public BASIC measures, from FMCSA's monthly SMS snapshot. No extra charge.

## `checkSharedContacts` (type: `boolean`):

Count how many USDOT records use the same phone and email. 10 or more (typically a permit or compliance agent, sometimes a company's own subsidiaries) sets phoneIsShared/emailIsShared so you can skip agent contacts. No extra charge.

## `contactData` (type: `string`):

FMCSA publishes the phone and email each company gives for official contact. Choose 'omitForIndividuals' to drop phone/email of sole proprietors (owner-operators registered as individuals), or 'omit' to drop all contact data. Outreach is subject to TCPA and CAN-SPAM.

## `includeOfficerNames` (type: `boolean`):

Add the names of up to 2 company officers listed on the MCS-150 (personal data: off by default).

## `includeRawData` (type: `boolean`):

Attach every column of the FMCSA Company Census (140+ fields, exactly as filed) in rawCensus. Bigger output; no extra charge.

## `outputFormat` (type: `string`):

leader-compatible adds (never replaces) the field names used by other popular FMCSA scrapers (mcNumber, registrationDate, authorityGrantedDate, currentlyOutOfService, saferSnapshotUrl, cargoTypes, totalDrivers, cellPhone...), so you can switch without changing your integration. See 'Migrating from other scrapers' in the README.

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

Optional free app token from data.transportation.gov (Developer settings) for higher API quota on very large runs. Not needed for normal use: the Actor paces its requests politely without one. E.g. the app token string shown in your data.transportation.gov developer settings.

## `monitorMode` (type: `boolean`):

For scheduled runs: remember what was found last time and output only carriers that are new or changed since the previous run (authority, insurance, fleet size, phone/email, address, name, safety rating). Each item gets changeType (new/changed) and a field-by-field changes list. You pay only for new/changed carriers. Schedule the Actor daily or weekly.

## `monitorStateName` (type: `string`):

Optional name of the storage that keeps the previous results. Use the same name across scheduled runs to compare against them. Leave empty to derive it automatically from the rest of the input. Lowercase letters, numbers and hyphens only. Example: tx-new-carriers.

## `notifyWebhookUrl` (type: `string`):

Optional. When monitor mode finds new or changed carriers, POST a JSON summary to this URL (works with Zapier, Make, n8n). Example: https://hooks.zapier.com/hooks/catch/123/abc

## `notifySlackWebhookUrl` (type: `string`):

Optional. Slack incoming-webhook URL to receive a message listing new and changed carriers. Example: https://hooks.slack.com/services/T000/B000/XXXX

## `savedListName` (type: `string`):

Give your USDOT/MC list a name (e.g. my-carriers) and the Actor remembers it: next runs use the saved list plus any numbers you add. Pair it with Monitor mode for a carrier watchlist.

## `saveList` (type: `boolean`):

Add the USDOT/MC numbers of this run to the saved list (off = use the saved list without changing it).

## `proMode` (type: `boolean`):

One checkbox for all the extras: a 0-100 carrier risk score with its reasons, estimated insurance renewal date, a dated 'why now' line for sales outreach, the trend since you started monitoring (fleet, crashes, out-of-service rate) and a one-sentence AI summary per carrier. In monitor mode it also alerts on safety changes. Charged as an extra 'pro-result' event per carrier (see Pricing).

## `enrichCompanyWebsite` (type: `boolean`):

For carriers whose email uses their own domain (not Gmail/Yahoo...), read the company website and add its emails, phones, contact page, social profiles, technologies and hiring status in companyWebsite. Slower (a few seconds per website). Charged as an extra 'company-website' event only when the website is read successfully.

## Actor input object example

```json
{
  "dotNumbers": [
    "80806",
    "53467"
  ],
  "mcNumbers": [
    "MC-135797"
  ],
  "states": [
    "TX",
    "OK"
  ],
  "cities": [
    "Dallas",
    "Fort Worth"
  ],
  "zipCodes": [
    "752"
  ],
  "nearLocation": "Dallas, TX",
  "radiusMiles": 50,
  "nameContains": "logistics",
  "entityTypes": [
    "carrier"
  ],
  "operationType": "interstate",
  "authorizedForHireOnly": false,
  "hazmat": "any",
  "cargoTypes": [
    "refrigeratedFood"
  ],
  "minPowerUnits": 5,
  "maxPowerUnits": 10,
  "minDrivers": 2,
  "maxDrivers": 20,
  "addedWithinDays": 30,
  "addedSince": "2026-10-01",
  "addedBefore": "2026-10-31",
  "mcs150UpdatedSince": "2026-09-01",
  "usdotStatus": "active",
  "authorityStatus": "any",
  "safetyRatings": [
    "satisfactory"
  ],
  "requireEmail": false,
  "requirePhone": false,
  "sortBy": "newest",
  "maxResults": 1000,
  "authorityEvents": [
    "granted",
    "pending"
  ],
  "authorityEventsWithinDays": 7,
  "includeAuthority": true,
  "includeInsurance": true,
  "includeInsuranceHistory": true,
  "includeSafety": true,
  "checkSharedContacts": true,
  "contactData": "include",
  "includeOfficerNames": false,
  "includeRawData": false,
  "outputFormat": "standard",
  "monitorMode": false,
  "monitorStateName": "tx-new-carriers",
  "notifyWebhookUrl": "https://hooks.zapier.com/hooks/catch/123/abc",
  "saveList": true,
  "proMode": false,
  "enrichCompanyWebsite": false
}
```

# Actor output Schema

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

All valid results of this run (only these are charged). JSON, CSV or Excel from the dataset.

## `runStats` (type: `string`):

RUN_STATS: results saved, failures by reason (not charged), retries and success rate.

## `dashboard` (type: `string`):

DASHBOARD: a shareable HTML page with charts and rankings for this run.

# 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 = {
    "states": [
        "TX"
    ],
    "entityTypes": [
        "carrier"
    ],
    "operationType": "interstate",
    "addedWithinDays": 30,
    "maxResults": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("cleanyield/fmcsa-carrier-data-lite").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 = {
    "states": ["TX"],
    "entityTypes": ["carrier"],
    "operationType": "interstate",
    "addedWithinDays": 30,
    "maxResults": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("cleanyield/fmcsa-carrier-data-lite").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 '{
  "states": [
    "TX"
  ],
  "entityTypes": [
    "carrier"
  ],
  "operationType": "interstate",
  "addedWithinDays": 30,
  "maxResults": 25
}' |
apify call cleanyield/fmcsa-carrier-data-lite --silent --output-dataset

```

## MCP server setup

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

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/XS54sMIRkMD5D0oiU/builds/8qQO4oMpg3h8PU1il/openapi.json
