# FMCSA Carrier Verify (`sourcewire/fmcsa-carrier-verify`) Actor

Verify US trucking carriers and freight brokers by USDOT or MC number: operating authority, insurance on file, out-of-service orders, safety rating, authority age, plus a PASS / REVIEW / FAIL verdict with reasons. Official FMCSA data, agent-ready JSON.

- **URL**: https://apify.com/sourcewire/fmcsa-carrier-verify.md
- **Developed by:** [Curtis Still](https://apify.com/sourcewire) (community)
- **Categories:** Developer tools, AI, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.00 / 1,000 carrier reports

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 Carrier Verify — USDOT & MC carrier check API for brokers, shippers & AI agents

*By **SourceWire** — clean, agent-ready data tools.*

Verify any US motor carrier or freight broker in about a second. You get **operating authority status, insurance on file vs. required, out-of-service orders, safety rating, authority age, revocations**, and a **`PASS_BASIC_CHECKS` / `REVIEW` / `FAIL` verdict with plain-English reasons**.

Data comes only from **official FMCSA open datasets** on data.transportation.gov (US federal public data, updated daily). No login, no scraping of SAFER pages.

### Why use it

- **Fraud screening before you tender a load.** Double brokering and identity theft usually show up as brand-new authority, a missing BIPD filing, a pending revocation, or an inactive USDOT number. Each of these becomes a flag.
- **Bulk carrier onboarding and monitoring.** Run up to 10,000 USDOT or MC numbers on a schedule and alert on any carrier whose verdict changes.
- **Agent-ready output.** One flat JSON object per carrier with a stable schema and a deterministic verdict, so an LLM agent can act on it without parsing HTML.

### Use cases

- **Freight brokers & 3PLs:** vet a carrier before tendering a load; catch double-brokering red flags (new authority, missing insurance, pending revocation).
- **Shippers & procurement:** bulk-verify your carrier list and re-run on a schedule to catch changes.
- **Factoring, insurance & fintech:** KYB-style checks on trucking companies at onboarding.
- **AI agents & MCP:** give a ChatGPT/Claude/LangChain agent a reliable `verify_carrier` tool that returns a verdict instead of a web page.
- **Developers:** drop-in carrier-check endpoint for TMS, load boards and Zapier/Make/n8n workflows.

### Input

| Field | Type | Example | Notes |
|---|---|---|---|
| `dotNumbers` | string\[] | `["63585"]` | USDOT numbers |
| `mcNumbers` | string\[] | `["MC311233"]` | MC/FF/MX dockets; bare digits mean MC |
| `includeHistory` | bool | `true` | Adds the first-authority-granted date and revocation history |
| `maxCarriers` | int | `500` | Cost safety cap |

```json
{ "dotNumbers": ["63585", "4522887"], "mcNumbers": ["MC1820027"], "includeHistory": true }
```

### Output (one dataset item per carrier)

Key fields: `dotNumber`, `legalName`, `dbaName`, `usdotStatus`, `operation`, `entityType`, `location{city,state,zip}`, `powerUnits`, `drivers`, `hazmat`, `safetyRating`, `mcs150Date`, `dockets[]`, `authority[]{docket, common, contract, broker, revocationPending, bipdRequiredUsd, bipdOnFileUsd, cargoOnFile, bondOnFile}`, `insuranceFilings[]{type, insurer, effectiveDate, policyNumber, form}`, `firstAuthorityGrantedDate`, `authorityAgeDays`, `revocations[]`, `outOfServiceOrders[]`, **`flags[]`**, **`verdict`**, `sourceUrls[]`, `checkedAt`.

Shortened example:

```json
{"dotNumber":"4522887","legalName":"DIAMOND J TRUCKING LLC","usdotStatus":"ACTIVE","verdict":"FAIL",
 "flags":["Active out-of-service order: New Entrant Revoked - Refusal of Audit/No Contact",
          "For-hire interstate carrier with no ACTIVE operating authority"]}
```

#### Verdict rules

- **FAIL:** USDOT inactive; active out-of-service order; UNSATISFACTORY rating; authority revocation pending; BIPD on file below the required minimum; broker bond missing; a for-hire carrier with no active authority.
- **REVIEW:** CONDITIONAL rating; authority under 180 days old; application pending; cargo insurance required but missing; MCS-150 not updated in over 2 years.
- **PASS_BASIC_CHECKS:** none of the above. This is not an endorsement. Always confirm on SAFER before tendering.

### For AI agents (LLM usage notes)

- MCP: add `https://mcp.apify.com/?actors=SourceWire/fmcsa-carrier-verify` to your MCP client (Claude Desktop, Cursor, etc.) and the agent gets a carrier-verification tool.
- Call this actor via the Apify MCP server (`mcp.apify.com`) or the Apify API with `{"dotNumbers": [...]}`. Read `verdict` first, then `flags`.
- `NOT_FOUND` means FMCSA has no record. Treat it as high risk, not as an error.
- Insurance amounts are in USD. `coverageUsd` is often null, because FMCSA publishes many filings, such as surety bonds, with a 0 amount.
- A cargo filing can be on file when not required. That is fine.

### Privacy

By design, this actor **does not return** phone numbers, fax, email addresses, company officer names, or street addresses, even though some of them appear in the source data. It returns business-level compliance data only.

### Limitations

- Source datasets refresh daily, so changes made on SAFER today may appear tomorrow.
- These are basic compliance checks, not a full identity or fraud investigation (no VIN, ELD, or contact verification).
- Not legal advice.

### Data sources

FMCSA Company Census (`az4n-8mr2`), L\&I Carrier (`6eyk-hxee`), Active Insurance (`ypjt-5ydn`), Authority History (`9mw4-x3tu`), Revocations (`sa6p-acbp`), and Out-of-Service Orders (`p2mt-9ige`), all on https://data.transportation.gov. Set the optional env var `SOCRATA_APP_TOKEN` for higher rate limits.

### How to call it via API

```bash
curl -X POST "https://api.apify.com/v2/acts/SourceWire~fmcsa-carrier-verify/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" -d '{"dotNumbers":["63585"]}'
```

### About SourceWire

SourceWire builds small, reliable data tools for AI agents and automation — official public data, stable JSON schemas, no fluff. Questions or feature requests? Open an issue on this Actor's Issues tab.

# Actor input Schema

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

USDOT numbers to verify, e.g. \["63585", "2247505"]. Digits only; leading zeros are ignored.

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

Docket numbers, e.g. \["MC311233", "311233"]. Bare digits are treated as MC.

## `includeHistory` (type: `boolean`):

Adds first-authority-granted date (new-authority fraud signal) and revocation history. Two extra lookups per carrier.

## `maxCarriers` (type: `integer`):

Safety cap on how many carriers are checked (and charged) in one run.

## `maxSourceAgeHours` (type: `integer`):

If any FMCSA dataset used for a carrier was last updated longer ago than this, the result is INCOMPLETE (reason SOURCE_STALE) instead of PASS/REVIEW/FAIL. FMCSA datasets normally refresh daily.

## Actor input object example

```json
{
  "dotNumbers": [
    "63585"
  ],
  "includeHistory": true,
  "maxCarriers": 500,
  "maxSourceAgeHours": 72
}
```

# Actor output Schema

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

All carrier records in the default dataset (Verdicts view selected).

# 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 = {
    "dotNumbers": [
        "63585"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("sourcewire/fmcsa-carrier-verify").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 = { "dotNumbers": ["63585"] }

# Run the Actor and wait for it to finish
run = client.actor("sourcewire/fmcsa-carrier-verify").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 '{
  "dotNumbers": [
    "63585"
  ]
}' |
apify call sourcewire/fmcsa-carrier-verify --silent --output-dataset

```

## MCP server setup

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

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/dPcwbpTCNBf0QQwfM/builds/1nbDe8bqFzwS6TCYI/openapi.json
