# FMCSA Trucking Carrier Scraper (`foo121/fmcsa-carrier-scraper`) Actor

Export US trucking carriers from the official FMCSA motor-carrier census: DOT number, legal/DBA name, address, phone, fleet size, driver count and operating status. No API key required.

- **URL**: https://apify.com/foo121/fmcsa-carrier-scraper.md
- **Developed by:** [ziv shay](https://apify.com/foo121) (community)
- **Categories:** Lead generation, Business, Marketing
- **Stats:** 4 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$4.00 / 1,000 result items

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## FMCSA Trucking Carrier Scraper

**The most complete no-key FMCSA carrier export — DOT number lookup, carrier email, and the roadside safety record in one row. Trucking company leads straight from the official FMCSA data, no API key.**

Built for freight brokers, factoring companies, trucking insurance underwriters, and logistics GTM/lead-gen teams. The actor joins **three official FMCSA datasets on data.transportation.gov (Socrata) — no API key, no anti-bot wall**:

1. **Company Census File** — identity, address, fleet size, authority, cargo classes, MCS-150 update date.
2. **SMS Census** — adds the **carrier email on file** (~55% of carriers have one — the field paid lead vendors charge extra for).
3. **Vehicle Inspection File** — the **roadside safety record** aggregated per carrier: inspection count, violations, out-of-service counts, **out-of-service rate**, and last inspection date.

Filter by state, name, minimum fleet size, or hazmat — build targeted, *safety-scored* broker/insurance/factoring lead lists in one run.

### What you get

| Field | Description |
| --- | --- |
| `dotNumber` | USDOT number |
| `legalName` | Carrier's legal business name |
| `dbaName` | "Doing business as" name |
| `email` | Carrier email on file (from FMCSA SMS census; `""` when none) |
| `phone` | Phone number as filed |
| `street` / `city` / `state` / `zip` / `county` | Physical address |
| `mailingStreet` / `mailingCity` / `mailingState` / `mailingZip` | Mailing address |
| `powerUnits` | Number of trucks (power units) |
| `truckUnits` | Truck units |
| `totalDrivers` | Total drivers |
| `cdlDrivers` | CDL drivers |
| `ownedTrucks` / `ownedTractors` / `ownedTrailers` | Owned equipment counts |
| `operatingStatus` | `Active` or `Inactive` |
| `carrierOperation` | Business org type (corporation, LLC…) |
| `operationClassification` | Authority class (e.g. authorized for hire / private property) |
| `cargoCarried` | Cargo classification codes |
| `hazmatCarrier` | `true` if flagged as a hazmat hauler |
| `docketNumber` | MC docket number |
| `docketStatus` | `Active` / `Inactive` docket status |
| `mcs150Date` | Last MCS-150 update date (data freshness signal) |
| `mcs150Mileage` | Annual mileage reported on MCS-150 |
| `addDate` | Date the carrier was added to the census |
| `inspectionCount` | Total roadside inspections on record |
| `violationCount` | Total violations across those inspections |
| `outOfServiceCount` | Total out-of-service results |
| `outOfServiceRate` | OOS rate (% of inspections, the key safety KPI) |
| `driverOosCount` / `vehicleOosCount` / `hazmatOosCount` | OOS breakdown |
| `lastInspectionDate` | Date of the most recent inspection |
| `url` | Link to the carrier's FMCSA SAFER record |

Set `includeEmail: false` or `includeSafety: false` to skip the enrichment joins (each adds one batched lookup per page of 1,000 carriers — not a per-carrier round-trip).

### Input

| Field | Type | Default | Description |
| --- | --- | --- | --- |
| `state` | string | — | Filter by physical state, e.g. `CA` |
| `nameContains` | string | — | Filter to carriers whose name contains this text |
| `minPowerUnits` | integer | — | Minimum fleet size (number of trucks) |
| `activeOnly` | boolean | `true` | Return only carriers with Active operating status |
| `hazmatOnly` | boolean | `false` | Return only hazmat-flagged carriers |
| `includeEmail` | boolean | `true` | Join the carrier email on file |
| `includeSafety` | boolean | `true` | Join the roadside inspection / out-of-service record |
| `maxItems` | integer | `1000` | Maximum number of carriers to return |

#### Example input

```json
{
  "state": "TX",
  "minPowerUnits": 5,
  "activeOnly": true,
  "includeEmail": true,
  "includeSafety": true,
  "maxItems": 1000
}
```

### Example run output

Real record from a live run (CA carrier, DOT 2955):

```json
{
  "dotNumber": "2955",
  "legalName": "TREVIS BERRY TRANSPORTATION",
  "dbaName": "",
  "email": "INFO@TREVISBERRY.COM",
  "phone": "4088428238",
  "city": "GILROY",
  "state": "CA",
  "zip": "95020",
  "powerUnits": 49,
  "totalDrivers": 45,
  "cargoCarried": "C",
  "hazmatCarrier": false,
  "operatingStatus": "Active",
  "mcs150Date": "2026-01-07",
  "inspectionCount": 305,
  "violationCount": 136,
  "outOfServiceCount": 24,
  "outOfServiceRate": 7.9,
  "lastInspectionDate": "2026-06-15",
  "url": "https://safer.fmcsa.dot.gov/query.asp?searchtype=ANY&query_type=queryCarrierSnapshot&query_param=USDOT&query_string=2955"
}
```

### Use cases

- **Freight brokers** building carrier lead lists filtered by state and minimum fleet size.
- **Factoring companies** prospecting active carriers by region and size.
- **Trucking insurance providers** targeting carriers by power units and operating status.
- **Logistics GTM / lead-gen teams** ingesting DOT number lookup data with phone and address as filed.

### Why this vs other FMCSA actors

- **vs paid FMCSA-lead vendors:** they resell this **same public data** behind a markup or monthly subscription. This actor pulls it directly from the official source, no API key, pay-per-result.
- **vs other Apify FMCSA actors:** the census-only actors return identity + fleet but **no email and no safety record**; the safety-score actors scrape the SAFER web snapshot (anti-bot walled, fragile) and **omit insurance and email**. This actor is the only one that joins **carrier email + the roadside inspection / out-of-service record** onto the census, entirely from **no-key, no-anti-bot** Socrata datasets — so it's both more complete *and* more reliable.

**Honest scope:** all fields are exactly as carriers filed / as inspections were recorded in the official FMCSA datasets. Email is present for the ~55% of carriers who filed one (`""` otherwise). Safety metrics are aggregated from the public Vehicle Inspection File; they are not the BASIC percentile scores (those require SAFER, which is anti-bot walled) — they are the underlying raw inspection counts, violations and out-of-service rate, which are the inputs to a safety judgment.

### Pricing

Pay per result — billed only for the carrier records returned, no subscription.

### Keywords

FMCSA carrier data, trucking carrier scraper, DOT number lookup data, trucking company leads, motor carrier census scraper, freight broker leads, trucking insurance leads, USDOT carrier data, FMCSA Socrata scraper

# Actor input Schema

## `state` (type: `string`):

Optional two-letter US state of the carrier's physical address (e.g. CA, TX, FL).

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

Optional substring to match in the carrier legal name (e.g. LOGISTICS, EXPRESS). Case-insensitive.

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

Optional minimum number of power units (trucks). Use to target fleets above a size.

## `activeOnly` (type: `boolean`):

Only include carriers with active operating status.

## `hazmatOnly` (type: `boolean`):

Only include carriers flagged as transporting hazardous materials.

## `includeEmail` (type: `boolean`):

Join the carrier's email on file from the FMCSA SMS census (~55% of carriers have one). Adds one batched lookup per page.

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

Join roadside safety metrics (inspection count, violations, out-of-service counts and rate, last inspection date) from the FMCSA Vehicle Inspection File. Adds one batched aggregate per page.

## `maxItems` (type: `integer`):

Maximum number of carrier records to output.

## Actor input object example

```json
{
  "activeOnly": true,
  "hazmatOnly": false,
  "includeEmail": true,
  "includeSafety": true,
  "maxItems": 1000
}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("foo121/fmcsa-carrier-scraper").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("foo121/fmcsa-carrier-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call foo121/fmcsa-carrier-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=foo121/fmcsa-carrier-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/neFwIqF3QeRppeXZx/builds/GSqvxc5E7QPp1qWv9/openapi.json
