FMCSA Carrier Scraper avatar

FMCSA Carrier Scraper

Pricing

from $3.35 / 1,000 results

Go to Apify Store
FMCSA Carrier Scraper

FMCSA Carrier Scraper

Search 2M+ US trucking carriers from FMCSA / DOT open data by state, cargo or fleet size: contact, officers, fleet, CSA safety scores, authority + insurance history (revocations, lapses, coverage), crashes and inspections. Lead lists, a change monitor, or full safety profiles. No API key.

Pricing

from $3.35 / 1,000 results

Rating

0.0

(0)

Developer

Norm Data

Norm Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Norm Data

🚚 FMCSA Carrier Scraper

Search US trucking carriers and brokers from the official FMCSA / DOT open data with no API key. Filter 2M+ carriers by state, cargo, fleet size, operation class, safety rating and registration date for a clean B2B lead list, then enrich every row with CSA / SMS BASIC safety scores, the full authority and insurance history (grants, revocations, reinstatements, coverage amounts, lapses), crashes, roadside inspections and out-of-service orders. Run a lifecycle-change monitor for daily alerts, or pull a complete safety profile for a list of carriers.

Here is one real row (trimmed), for an established carrier with safety + history on:

{
"dot_number": "370617",
"mc_numbers": ["MC386188"],
"legal_name": "JFC INTERNATIONAL INC",
"entity_type": "carrier",
"status": "active",
"operation_class": "Interstate",
"hazmat": false,
"registration_date": "1998-06-11",
"phone": "3105551234",
"email": "dispatch@example.com",
"officer_1": "...",
"physical_address": "... LOS ANGELES, CA, 90001",
"physical_state": "CA",
"power_units": 210,
"drivers_total": 190,
"cargo_carried": ["General Freight", "Refrigerated Food"],
"safety_rating": "C",
"safety_rating_label": "Conditional",
"prior_authority_revocation": false,
"out_of_service": false,
"safety_scores": {
"inspections_total": 506,
"driver_oos_rate": 0.041,
"vehicle_oos_rate": 0.19,
"any_basic_alert": false,
"basics": {
"vehicle_maintenance": { "measure": 3.21, "alert": false },
"hours_of_service": { "measure": 1.08, "alert": false }
}
},
"authority_granted": true,
"authority_revoked": false,
"authority_types": ["MOTOR PROPERTY COMMON CARRIER", "MOTOR PROPERTY CONTRACT CARRIER"],
"last_authority_action": "REINSTATED",
"last_authority_action_date": "2019-04-02",
"insurance_on_file": true,
"current_insurer": "TOKIO MARINE AMERICA INSURANCE COMPANY",
"liability_coverage_thousands": 750,
"last_cancellation_date": "2023-06-30",
"crashes_total": 122,
"crashes_24mo": 8,
"inspections_24mo": 514,
"oos_rate_24mo": 0.093,
"safer_url": "https://safer.fmcsa.dot.gov/query.asp?searchtype=ANY&query_type=queryCarrierSnapshot&query_param=USDOT&query_string=370617",
"scraped_at": "2026-09-10T14:09:24.000Z"
}

What it does

Reads the FMCSA datasets published on data.transportation.gov (Socrata, keyless, updated daily): the carrier census, the SMS BASIC safety measures, authority and insurance history, the crash and inspection files, and out-of-service orders. It joins them by USDOT and MC docket number. Four modes:

  • Search - filter the census for a lead list, then batch-enrich every match.
  • Look up - resolve exact USDOT numbers, MC/MX docket numbers or company names. One row per identifier; ids that do not resolve come back as an error row.
  • Monitor - carriers with a new registration, authority revocation, reinstatement, insurance lapse or out-of-service order since a date, each tagged with the change type.
  • Safety - the full safety profile (CSA BASIC scores, authority + insurance history, 24-month inspection and crash detail) for the carriers you name.

Why this scraper

  • CSA / SMS BASIC safety scores. The seven Behavior Analysis categories with their raw measures and above-threshold alert flags, plus driver and vehicle out-of-service rates. No other FMCSA Actor on Apify parses these - they stop at the census snapshot.
  • Authority lifecycle, not just current status. Every grant, involuntary revocation and reinstatement with dates - so you can see a carrier that has been revoked three times, or one reinstated last week.
  • Insurance history with coverage and lapses. Current insurer and liability limit, plus every past filing with its cancellation date - the signal an underwriter or a factoring company actually acts on.
  • Crash and inspection detail. 24-month crash counts (fatal / injury / tow) and inspection out-of-service rates, computed from the crash and inspection files, not just a headline number.
  • A real change monitor. Not "USDOT numbers not seen before" - an actual lifecycle feed: revocations, lapses and out-of-service orders are the events worth a phone call.
  • Fast. Every source is a keyless JSON API and every enrichment is one batched query per dataset (dot_number IN (...)), not one request per carrier. A 2,000-carrier run with CSA scores, authority and insurance history takes about 2 seconds; the census pagination is the only real cost.
  • No API key. The DOT open data is free; a Socrata app token is optional and only for very large runs.

How it compares

CapabilityThis actorOther FMCSA scrapers on Apify
Census: identity, contact, officers, fleet, cargoyesyes
Filter by state / cargo / fleet size / registration dateyessome
CSA / SMS BASIC safety scores + alert flagsyesno
Authority history (grants / revocations / reinstatements)yescurrent status only
Insurance history (insurer, coverage, lapses)yescurrent only, if any
24-month crash + inspection out-of-service detailyescounts only
Lifecycle-change monitor (revocations, lapses, OOS)yesnew-carrier delta only
One row per look-up input, error rows for bad idsyesrare
Declared dataset schema + free-plan previewyesrare

Use cases

  • Freight-broker prospecting. New interstate carriers in your lanes, with phone, email and officer names, the day their authority is granted.
  • Insurance underwriting. Pull a carrier's CSA BASIC alerts, out-of-service rate, crash history and every past insurance cancellation before you quote.
  • Factoring / risk. Monitor mode on insurance_lapse and revocation - a lapse is a carrier to call, a revocation is one to stop funding.
  • Equipment / ELD / fuel-card sales. Filter by fleet size and cargo type, keep the officers and contact.
  • Compliance benchmarking. Rank a set of carriers on OOS rate and BASIC scores.

Quickstart

Search - new interstate reefer carriers in Texas, 5-50 trucks:

{
"mode": "search",
"state": ["TX"],
"operationClass": "interstate",
"cargo": ["coldfood"],
"minPowerUnits": 5,
"maxPowerUnits": 50,
"registeredAfter": "2026-06-01",
"includeSafety": true,
"maxItems": 500
}

Look up a batch:

{ "mode": "lookup", "identifiers": ["76830", "MC386188", "SWIFT TRANSPORTATION"], "includeHistory": true }

Monitor lifecycle changes in the last week:

{ "mode": "monitor", "since": "7 days", "events": ["revocation", "insurance_lapse", "oos_order"], "maxItems": 1000 }

Full safety profile:

{ "mode": "safety", "identifiers": ["370617", "593107"] }

Input reference

FieldApplies toDescription
maxItemsallCeiling on rows written.
modeallsearch, lookup, monitor or safety.
statesearch, monitorTwo-letter physical state code(s).
operationClasssearch, monitorinterstate, intrastate, intrastate_hazmat.
cargosearch, monitorCommodity types (genfreight, coldfood, chem, ...).
hazmatOnlysearch, monitorOnly hazmat-flagged carriers.
safetyRatingsearchS, C or U.
minPowerUnits / maxPowerUnitssearchFleet-size range.
registeredAfter / registeredBeforesearchRegistration-date window (ISO).
keywordsearchLegal or DBA name contains.
activeOnlysearch, monitorExclude de-registered carriers (default on).
identifierslookup, safetyUSDOT numbers, MC/MX numbers, or company names.
sincemonitorISO date or "7 days" / "2 weeks".
eventsmonitornew_registration, revocation, reinstatement, insurance_lapse, oos_order.
includeSafetysearch, lookupCSA BASIC scores + inspection/crash summary. Default on.
includeHistorysearch, lookupAuthority + insurance history. Billed separately.
includeInspectionssearch, lookupPer-inspection + per-crash detail. Billed separately.
socrataAppTokenallOptional free token for large runs.

Output reference (selected)

FieldDescription
dot_number / mc_numbers / legal_name / dba_nameIdentity.
status / entity_type / operation_class / business_type / hazmatClassification.
registration_date / mcs150_dateDates.
phone / cell_phone / email / officer_1 / officer_2Contact.
physical_address / mailing_address / address_undeliverableAddresses.
power_units / truck_units / drivers_total / drivers_cdl / cargo_carriedFleet and cargo.
safety_rating / safety_rating_label / recordable_crash_rate / prior_authority_revocationHeadline safety.
out_of_service / out_of_service_date / out_of_service_reasonCurrent OOS order.
safety_scoresCSA BASIC measures + alerts + OOS rates (with includeSafety).
authority_granted / authority_revoked / authority_types / last_authority_action / authority_historyAuthority lifecycle (with includeHistory).
insurance_on_file / current_insurer / liability_coverage_thousands / last_cancellation_date / insurance_historyInsurance (with includeHistory).
crashes_24mo / fatal_crashes_24mo / inspections_24mo / oos_rate_24mo24-month safety detail.
change_typeMonitor mode: new_registration, revocation, insurance_lapse, oos_order.
query / errorSet on an unresolved look-up id row.
safer_urlThe carrier's SAFER company snapshot page.
scraped_atISO 8601 collection timestamp.

Run via API and CLI

curl -X POST "https://api.apify.com/v2/acts/USERNAME~fmcsa-carrier-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"mode":"lookup","identifiers":["76830"],"includeHistory":true}'
$apify call USERNAME/fmcsa-carrier-scraper --input '{"mode":"monitor","since":"7 days","events":["revocation"]}'

Fetch results

$curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"

Billing and limits

  • Pay per result. Billed per carrier row written. includeSafety, includeHistory and includeInspections each add a separate event, charged only when that enrichment produced data.
  • No charge on failure. A run that produces zero rows fails with a message and is not billed.
  • An unresolved look-up id still writes one error: "not found" row and is billed as a base row.
  • Free Apify plans run the built-in 10-row sample only.
  • The DOT open-data API caps a single query at 50,000 rows; this Actor pages the census in 2,000-row chunks and batches enrichment lookups, so throughput is roughly 1,000 fully enriched carriers per second - the census pagination is the bottleneck, not the enrichment.
  • Very large runs can supply a free data.transportation.gov app token to raise the shared rate limit.

FAQ

Do I need an API key? No. data.transportation.gov is a keyless open-data host. A Socrata app token is optional and only helps on very large runs.

Why is a carrier's safety_rating blank? Most carriers have never had a compliance review, so they carry no rating. That is normal, not missing data.

What does authority_revoked: true mean? There is an involuntary revocation on record with no matching reinstatement. Carriers are routinely revoked for a lapsed insurance filing and reinstated within days - those show authority_revoked: false with the cycle in authority_history.

How fresh is the data? The census and most datasets update daily from a database that is about 24 hours behind live. It is not real-time.

Is this an official FMCSA tool? No. Independent, not affiliated with FMCSA or the US DOT. It reads only data they publish as open data.

Local development

bun install
bun test # offline: normalisation + input logic
bun run src/main.ts # reads storage/key_value_stores/default/INPUT.json
bun scripts/verify-live.mjs # hits data.transportation.gov directly, checks every mode