FMCSA Carrier Safety - Inspections, Violations & Authority
Pricing
$0.10 / 1,000 fmcsa carrier records
FMCSA Carrier Safety - Inspections, Violations & Authority
US truck & bus carrier records (FMCSA open data, 4.5M carriers): registry details, inspection history, violations, SMS BASIC safety categories, operating authority, out-of-service orders and revocations - all keyed to the DOT number. Filter by DOT/MC, state or fleet size.
Pricing
$0.10 / 1,000 fmcsa carrier records
Rating
0.0
(0)
Developer
Wenhao Yang
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 hours ago
Last modified
Categories
Share
FMCSA Carrier Safety - Inspections, Violations, Authority & Out-of-Service
The US Federal Motor Carrier Safety Administration publishes the country's entire motor-carrier record - every registered truck and bus company, every roadside inspection, every violation those inspections wrote - as open data. This actor turns that record into a charged-per-record lookup, filter and aggregate tool keyed to the one identifier the whole system turns on: the DOT number.
Built for: insurers and underwriters pricing carrier risk, brokers and shippers vetting a carrier before they tender a load, fleet and compliance teams benchmarking their own safety record, litigation and claims researchers, and anyone doing diligence on a trucking company.
What it covers
Seven interlocking datasets, 37 million rows of public record, all tied to the same carrier identity:
| Dataset | Records | What it is |
|---|---|---|
| carrier | 4,501,050 | the company census: name, address, fleet, operation, commodities, safety rating |
| inspections | 8,304,136 | every roadside inspection, ~8,300 new per day |
| violations | 13,558,886 | the violations cited in those inspections, with the regulation section |
| smsViolations | 6,869,475 | the same violations carrying their SMS BASIC safety category and severity weights |
| authority | 1,860,604 | operating authority (common / contract / broker), insurance, bonds |
| oos | 399,280 | out-of-service orders served against carriers |
| revocations | 1,529,083 | authority revocations and their effective dates |
Each dataset carries the depth the source actually publishes:
- carrier - legal and DBA name, interstate vs intrastate status, the for-hire vs private distinction, the MC docket number and its status, the MCS-150 mileage filing, physical and mailing address, phone and email, power / truck / bus units, driver counts, the hazmat flag, the 30 commodity flags folded into one readable
cargoTypeslist, and the FMCSA safety rating (Satisfactory / Conditional / Unsatisfactory) with its review date. - inspections - date and start/end time, the inspecting state, the inspection level (full, walk-around, driver-only, vehicle-only), the location text, the carrier's name and address as captured on the day, and the violation and out-of-service counts split out by driver, vehicle and hazmat.
- violations - the regulatory part and section, the violation code and its full description, the unit it was written against, the out-of-service indicator, and any defect-verification or citation number.
- smsViolations - the BASIC category (Vehicle Maintenance / Unsafe Driving / Hours-of-Service / Driver Fitness / Hazardous Materials / Controlled Substances & Alcohol), the out-of-service indicator and the severity and time weights FMCSA uses to score carriers.
- authority - which authority the carrier holds and whether it is active, inactive or none, pending applications and revocations, the property / passenger / household-goods endorsements, and the minimum insurance coverage amount with any bond or cargo requirements.
- oos - the order date, the reason (imminent hazard, failure to pay, new-entrant audit failures, unfit) and the rescission date once lifted.
- revocations - the license type, the order service date, voluntary vs involuntary, and the effective date.
The fine print that matters
The DOT number is number-typed in some datasets and text in others, and in the authority and revocation files it is zero-padded to eight digits - so the same carrier is 3568188 in one table and "03568188" in the next. This actor normalizes both directions, so you query a carrier once, by its real DOT number, and get its records from every dataset.
The DOT number and the MC (docket) number are different namespaces that can collide numerically. A DOT of 1215404 and an MC of 1215404 are unrelated carriers. The two are kept as separate inputs and never conflated.
Null columns vanish from this source entirely, so a naive reader sees a different set of keys on every row. Every record here carries the full union of keys with '' for absent values - 157 keys, identical on every row of every dataset.
Dates arrive four different ways across these tables - YYYYMMDD, YYYYMMDD HHMM, MM/DD/YYYY and DD-MON-YY - and are normalized to YYYY-MM-DD on output. In the revocation file the source stores order dates as MM/DD/YYYY text, which sorts by month rather than by year, so that dataset filters by year rather than offering a date range that would silently return the wrong rows.
The safety rating is populated on only about 5% of the census - those FMCSA has actually rated. hasSafetyRating narrows to exactly those ~236,000 carriers instead of implying the whole register is rated.
The violations table joins on the DOT number through the inspections it belongs to (it carries no DOT column of its own), and that join names the carrier's inspection ids in the query, so it covers up to 1,000 inspections per carrier. A carrier with a longer history returns a clear error telling you to narrow by date or query one inspection by id - never a silently truncated violation history.
Dates are exact in every dataset: the SMS feed's dates are DD-MON-YY text that does not sort chronologically (its own ORDER BY returns April 2025 before August 2024), so a date window there is matched as exact day values rather than a range comparison that would quietly return the wrong months.
The authority dataset's insurance amount and the SMS BASIC category containing an ampersand are both published in forms a plain text match gets wrong: the coverage amount is a zero-padded string ("00750" is 750 thousand dollars, and "00000" means none on file), and the Controlled Substances BASIC is stored HTML-escaped, so an exact match on the readable name returns nothing - that category is matched on its readable prefix instead. The coverage amount is passed through exactly as the agency publishes it, zero padding and all.
Typical questions
- "Every inspection and violation for DOT 1215404 - with the out-of-service findings."
- "Which carriers in Texas run 50+ power units?"
- "Hazmat carriers, and who reports hauling passengers or refrigerated food."
- "Carriers with a Conditional or Unsatisfactory safety rating."
- "Out-of-service orders still in force for a carrier."
- "Who has had their operating authority revoked - voluntary or involuntary."
- "Aggregate inspections by state or by level; violations by regulation part."
- "The BASIC breakdown for a carrier - is its problem Unsafe Driving or Vehicle Maintenance?"
Inputs
| Input | What it does |
|---|---|
corpus | which dataset - carrier (default) / inspections / violations / smsViolations / authority / oos / revocations |
mode | rows (default) / aggregate |
dotNumber / mcNumber | the carrier (DOT is the join key across every dataset) |
name / state / city / zip | who and where |
statusCode / carrierOperation / classification | interstate/intrastate, for-hire/private, business class |
cargo / hazmatOnly | what they haul |
safetyRating / hasSafetyRating / reviewed | the FMCSA rating and review record |
minPowerUnits / minTruckUnits / minBusUnits / minDrivers | fleet-size ranges |
level / interstate / oosOnly / hazmatOosOnly / reportNumber | inspection detail |
basic / violCode / partNo / section | the violation and its BASIC category |
authorityType / authorityStatus / activeOnly / hasBond / hasCargo | operating authority |
reason / status / year | out-of-service orders and revocations |
dateFrom / dateTo | date window (YYYY-MM-DD) |
groupBy | aggregate over any dimension of the chosen dataset |
maxResults | cap records (default 200, up to 20000) |
Default run = the 200 carriers with the lowest DOT numbers - fast for the daily auto-test. For a targeted query add a filter or a DOT number; for a broad view use aggregate.
Low cost
From $0.0001 per record - billed only for the rows you use, at the platform floor. Cost scales with what you pull, not with the size of the register, and because each record is metered individually there's no per-run charge cap to hit on a big pull.
Why this is hard to do properly
The FMCSA record is not one dataset - it is seven tables whose only shared key is typed differently in each, and the columns that make a carrier's file meaningful are not in one place. Reconstructing one carrier's history means knowing that the DOT number is an integer in the census and inspection files but an eight-digit zero-padded string in the authority and revocation files, that the violations table has no DOT column at all and can only be reached through the inspections it belongs to, and that the SMS safety categories live in a fifth file that refreshes on a different cycle than the rest. Layer on four incompatible date encodings, columns that disappear entirely when null (so a thin reader sees a shifting schema row to row), an HTML-escaped BASIC category and a zero-padded insurance amount that both defeat exact matching, and a plain-text LIKE that is case-sensitive - and "look up this carrier" becomes a normalization problem before it is a data problem. Every pull here is a server-side push-down - the million-row tables are filtered, sorted and aggregated at the source, never scanned client-side. (The one exception is the violations-by-DOT join, which has to name the carrier's inspection ids, so it resolves those first and caps the carrier at 1,000 inspections.) A broad pull is integrity-checked against the corpus's known shape (row-count anchor and key-field coverage), so a degraded source fails loudly instead of returning an empty or wrong result.
Source
- US DOT / FMCSA open data (data.transportation.gov) - the FMCSA carrier census, inspection, violation, authority and enforcement files, live. Public open data, no login and no API key. Records are the agency's own published fields; not an endorsement of any carrier.