Tools

FMCSA Carrier Verify

Verify US motor carriers and freight brokers by USDOT or MC number: operating authority, insurance on file vs. required, out-of-service orders, safety rating, authority age and revocations, with a PASS_BASIC_CHECKS / REVIEW / FAIL verdict and plain-English reasons.

Price$0.008 per carrier found ($8 per 1,000)
InputUSDOT numbers and/or MC, FF or MX docket numbers
Batch sizeUp to 10,000 carriers per run (set with maxCarriers, default 500)
DataOfficial FMCSA open datasets on data.transportation.gov, refreshed daily
OutputOne flat JSON object per carrier with a deterministic verdict

What it checks

  • USDOT status, operation type, entity type, power units, drivers, hazmat flag and MCS-150 date
  • Operating authority per docket (common, contract, broker), pending applications and pending revocations
  • Insurance: BIPD liability required vs. on file, cargo and bond filings, with insurer, effective date and form
  • Active out-of-service orders and safety rating
  • First-authority-granted date, authority age in days and revocation history (with includeHistory)
  • A list of flags in plain English and a verdict, plus links back to the FMCSA sources

Who it's for

  • Freight brokers and 3PLs vetting a carrier before tendering a load, and catching double-brokering red flags like brand-new authority, missing insurance or a pending revocation.
  • Shippers and procurement teams bulk-verifying a carrier list and re-running it on a schedule to catch changes.
  • Factoring, insurance and fintech teams running KYB-style checks on trucking companies at onboarding.
  • AI agent builders who want a reliable verify_carrier tool that returns a verdict instead of a web page.
  • Developers adding a carrier check to a TMS, load board, or Zapier, Make or n8n workflow.

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; or a for-hire carrier with no active authority.
REVIEW
CONDITIONAL rating; authority under 180 days old; application pending; cargo insurance required but missing; or 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.
NOT_FOUND
FMCSA has no record of the USDOT or docket number. Treat it as high risk, not as an error. Not charged.

Input example

{
  "dotNumbers": [
    "63585",
    "4522887"
  ],
  "mcNumbers": [
    "MC1820027"
  ],
  "includeHistory": true
}
FieldTypeNotes
dotNumbersstring[]USDOT numbers. Digits only; leading zeros are ignored.
mcNumbersstring[]MC/FF/MX dockets; bare digits are treated as MC.
includeHistorybooleanAdds first-authority-granted date and revocation history. Default true.
maxCarriersintegerCost safety cap, 1 to 10,000. Default 500.

Output example

Shortened from a real run on October 28, 2026. Each carrier is one dataset item.

[
  {
    "dotNumber": "63585",
    "found": true,
    "legalName": "WAL-MART TRANSPORTATION LLC",
    "usdotStatus": "ACTIVE",
    "operation": "INTERSTATE",
    "location": { "city": "BENTONVILLE", "state": "AR", "zip": "72716", "country": "US" },
    "powerUnits": 13618,
    "safetyRating": "SATISFACTORY",
    "dockets": ["MC311233"],
    "authority": [
      {
        "docket": "MC311233",
        "common": "ACTIVE", "contract": "ACTIVE", "broker": "ACTIVE",
        "revocationPending": false,
        "bipdRequiredUsd": 1000000, "bipdOnFileUsd": 1000000,
        "cargoOnFile": true, "bondOnFile": true
      }
    ],
    "firstAuthorityGrantedDate": "1996-12-06",
    "authorityAgeDays": 10917,
    "outOfServiceOrders": [],
    "flags": [],
    "verdict": "PASS_BASIC_CHECKS",
    "checkedAt": "2026-10-28T00:57:12Z"
  },
  {
    "dotNumber": "4522887",
    "found": true,
    "legalName": "DIAMOND J TRUCKING LLC",
    "usdotStatus": "ACTIVE",
    "flags": [
      "Active out-of-service order: New Entrant Revoked - Refusal of Audit/No Contact",
      "For-hire interstate carrier with no ACTIVE operating authority"
    ],
    "verdict": "FAIL"
  }
]

Full field list: dotNumber, legalName, dbaName, usdotStatus, operation, entityType, location, powerUnits, drivers, hazmat, safetyRating, mcs150Date, dockets[], authority[], insuranceFilings[], firstAuthorityGrantedDate, authorityAgeDays, revocations[], outOfServiceOrders[], flags[], verdict, sourceUrls[], checkedAt.

Pricing

Pay per event: $0.008 per carrier found in FMCSA data, which is $8 per 1,000 carriers. Numbers FMCSA has no record of, and MC dockets that can't be matched to a carrier, are returned as NOT_FOUND and not charged. Use maxCarriers to cap how many carriers one run can check. Apify bills through your Apify account; the Store page always shows the current price.

Use it from an AI agent (MCP)

Add the Apify MCP server with only this tool loaded. Clients that support remote MCP servers (Claude, Cursor, VS Code and others) will open a browser window so you can sign in to Apify the first time.

https://mcp.apify.com/?tools=sourcewire/fmcsa-carrier-verify

Typical JSON config (Cursor ~/.cursor/mcp.json, and similar files in other clients):

{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com/?tools=sourcewire/fmcsa-carrier-verify"
    }
  }
}

For step-by-step setup in Claude Desktop, Claude Code, Cursor and VS Code, see How to add Apify tools to Claude or Cursor via MCP.

Tips for agents: read verdict first, then flags. 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 on file when not required is fine.

Call it from code

curl -X POST "https://api.apify.com/v2/acts/sourcewire~fmcsa-carrier-verify/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"dotNumbers":["63585"]}'
# pip install apify-client
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("sourcewire/fmcsa-carrier-verify").call(
    run_input={"dotNumbers": ["63585", "4522887"], "includeHistory": True}
)
for carrier in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(carrier.get("dotNumber"), carrier["verdict"], carrier.get("flags"))

Privacy

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

Limitations

  • Source datasets refresh daily, so a change 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 datasets on data.transportation.gov: Company Census, L&I Carrier, Active Insurance, Authority History, Revocations and Out-of-Service Orders. No login and no scraping of SAFER pages.