# FMCSA Trucking Company Leads: USDOT Carrier Data (`waags/fmcsa-trucking-carrier-leads`) Actor

Get US trucking company leads from official FMCSA data: USDOT & MC numbers, phone, email, officer name, address, fleet size, drivers and cargo. Find newly registered carriers by state for insurance, factoring and ELD sales.

- **URL**: https://apify.com/waags/fmcsa-trucking-carrier-leads.md
- **Developed by:** [Andres Garcia](https://apify.com/waags) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.60 / 1,000 carrier records

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 Trucking Company Leads: USDOT Carrier Data with Phone & Email

Get **US trucking company leads** straight from the official **FMCSA Company Census File**: USDOT number, MC/MX docket number, legal and DBA name, **phone, email, company officer**, physical and mailing address, **fleet size (power units), drivers, cargo types**, hazmat flag and safety rating. Filter **newly registered carriers** by state and date to reach owner-operators and new fleets the week they get their authority.

**No login, no API key, no proxies.** The data comes from the U.S. DOT open-data portal (data.transportation.gov), refreshed by FMCSA daily.

### What can this FMCSA scraper do?

- 🆕 **New carrier leads:** "registered in the last 7/30/90 days" with a relative date that updates itself on every scheduled run
- 🗺️ **Filter by state**, carrier operation (interstate / intrastate), for-hire authority, hazmat, fleet size, driver count and **30 cargo types**
- ☎️ **Contact-ready rows:** phone in E.164 format, lowercase email, company officer names, title-cased company names and addresses
- 🔢 **USDOT + MC/MX numbers** and a direct **SAFER snapshot link** for every carrier
- 🔎 **Lookup mode:** paste USDOT numbers or search by company name
- ⚡ **Fast and cheap:** filtering runs server-side on the official dataset, so thousands of carriers take seconds
- 💰 **Pay per result** with a hard `maxItems` cap

### Who buys trucking leads?

| Industry | Why FMCSA data |
| --- | --- |
| **Commercial truck insurance agents** | New carriers must file insurance before their authority becomes active, which makes them the hottest leads in the market |
| **Freight factoring & fintech** | Small fleets (1–10 trucks) need cash flow from day one |
| **ELD, TMS, dispatch & fuel-card vendors** | Target by fleet size, operation and cargo |
| **Truck dealers, leasing, parts & tires** | Segment by power units and region |
| **Compliance & DOT filing services** | Reach carriers right after registration |
| **Freight brokers** | Build and vet carrier networks by state and cargo type |

### How to use it

1. Click **Try for free**. The input is prefilled with **Texas carriers registered in the last 30 days that have a phone number**, so the first run works in one click.
2. Change **states**, the **registration window**, fleet filters and cargo types.
3. Click **Start**, then export to **CSV, Excel, JSON** or your CRM through integrations (HubSpot via Zapier/Make, Google Sheets, webhooks).
4. **Schedule daily** with `Registered on or after = 1 day` to receive only fresh carriers every morning.

#### Input example

```json
{
    "states": ["TX", "OK", "LA"],
    "registeredFrom": "7 days",
    "forHireOnly": true,
    "carrierOperations": ["A"],
    "maxPowerUnits": 5,
    "cargoTypes": ["genfreight", "coldfood"],
    "requirePhone": true,
    "requireEmail": true,
    "maxItems": 500
}
```

| Field | Description |
| --- | --- |
| `states` | Physical-address states (2-letter codes) |
| `registeredFrom` / `registeredTo` | USDOT registration date window, `YYYY-MM-DD` or relative (`30 days`) |
| `activeOnly` | Only active USDOT registrations (default on) |
| `carrierOperations` | `A` Interstate, `B` Intrastate Hazmat, `C` Intrastate Non-Hazmat |
| `forHireOnly` / `hazmatOnly` | Authorized-for-hire carriers / hazmat carriers |
| `minPowerUnits`, `maxPowerUnits`, `minDrivers` | Fleet size filters (`maxPowerUnits: 1` = owner-operators) |
| `cargoTypes` | General freight, refrigerated food, household goods, building materials, livestock, chemicals… (30 types) |
| `requirePhone`, `requireEmail` | Only carriers with contact data |
| `nameContains`, `dotNumbers` | Company-name search or USDOT lookup |
| `maxItems` | Maximum results |

#### Output example

```json
{
    "dotNumber": "7499976",
    "mcNumber": null,
    "legalName": "Zeerak Trucking LLC",
    "dbaName": null,
    "status": "Active",
    "addedDate": "2026-09-29",
    "daysSinceAdded": 2,
    "carrierOperation": "Interstate",
    "operationClasses": ["Authorized For Hire"],
    "isForHire": true,
    "phone": "+18046108790",
    "email": "owner@example.com",
    "companyOfficer1": "Ismail Jan Sadozai",
    "physicalAddress": { "street": "6606 De Moss Dr Apt 304", "city": "Houston", "state": "TX", "zip": "77074", "country": "US" },
    "powerUnits": 1,
    "totalDrivers": 1,
    "cdlDrivers": 1,
    "hazmat": false,
    "cargoTypes": ["General Freight"],
    "safetyRating": null,
    "saferUrl": "https://safer.fmcsa.dot.gov/query.asp?searchtype=ANY&query_type=queryCarrierSnapshot&query_param=USDOT&query_string=7499976"
}
```

The **Carrier leads** dataset view shows company, USDOT, MC, registration date, officer, phone, email, city, state, trucks and drivers in one table.

### How much does it cost?

Pay-per-event pricing: a fixed price per carrier returned (see the **Pricing** tab), currently **about $1.60 per 1,000 carriers**. There is no start fee and no compute charge on top. A daily run that returns 200 new carriers costs about $0.32. You can cap any run with `maxItems`.

### Tips

- **Hottest leads:** `registeredFrom = "7 days"`, `forHireOnly = true`, `requirePhone = true`.
- **Owner-operators only:** `maxPowerUnits = 1`.
- **Mid-size fleets for TMS/ELD sales:** `minPowerUnits = 10`, `minDrivers = 10`.
- **Reefer carriers:** `cargoTypes = ["coldfood"]`.
- **Clean before dialing:** chain with our [US Phone Number Validator](https://apify.com/waags/us-phone-number-validator) to get line type and time zone, and with the [Bulk Email Validator](https://apify.com/waags/bulk-email-validator) to remove bad emails.

### FAQ

**Where does the data come from?** The FMCSA Motor Carrier Census (Company Census File) published on the official U.S. Department of Transportation open-data portal. Carriers self-report this information on their MCS-150 registration.

**How fresh is it?** FMCSA updates the dataset daily, and each run queries it live.

**Why do some carriers have no email or MC number?** Email is optional on the MCS-150 form, and MC numbers exist only for carriers with operating authority (for-hire interstate). Use the `requireEmail` filter if you need emails.

**Is this legal?** Yes. It is public government data published for reuse. When you contact carriers, follow telemarketing and email laws (TCPA, CAN-SPAM, DNC).

**How many carriers are there?** About 2.2 million active USDOT registrations, with several thousand new ones every week.

**Need another field or found a bug?** Use the **Issues** tab. This actor is monitored daily.

### Related actors by WAAGS

- [SAM.gov Contract Opportunities Scraper](https://apify.com/waags/sam-gov-contract-opportunities): federal RFPs with contracting officer contacts
- [SEC Form D Funding Leads](https://apify.com/waags/sec-form-d-funding-leads): newly funded US companies with executives
- [Bulk Email Validator](https://apify.com/waags/bulk-email-validator) · [US Phone Number Validator](https://apify.com/waags/us-phone-number-validator)

*Not affiliated with or endorsed by the U.S. Department of Transportation or FMCSA.*

# Actor input Schema

## `states` (type: `array`):

2-letter state codes of the carrier's physical address, e.g. TX, CA, FL. Leave empty for all US states.

## `registeredFrom` (type: `string`):

Only carriers that obtained their USDOT number on or after this date. Use YYYY-MM-DD or a relative value such as "30 days" (30 days ago). Perfect for daily new-carrier lead schedules.

## `registeredTo` (type: `string`):

Only carriers registered on or before this date (YYYY-MM-DD or relative such as "1 day").

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

Exclude inactive and pending USDOT registrations.

## `carrierOperations` (type: `array`):

Interstate, intrastate hazmat or intrastate non-hazmat. Leave empty for all.

## `forHireOnly` (type: `boolean`):

Only carriers authorized for hire (they haul freight for others), the main buyers of insurance, factoring and dispatch services.

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

Only carriers flagged as hazardous materials carriers.

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

Minimum number of power units (tractors/trucks) in the fleet.

## `maxPowerUnits` (type: `integer`):

Maximum number of power units, e.g. 1 for owner-operators only.

## `minDrivers` (type: `integer`):

Minimum total number of drivers.

## `cargoTypes` (type: `array`):

Only carriers hauling at least one of these cargo types.

## `requirePhone` (type: `boolean`):

Skip carriers without a phone number on file.

## `requireEmail` (type: `boolean`):

Skip carriers without an email address on file.

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

Case-insensitive match on the legal or DBA name, e.g. "logistics".

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

Look up specific carriers by USDOT number (other filters still apply; clear the registration date to look up older carriers).

## `socrataAppToken` (type: `string`):

Optional free app token from data.transportation.gov for higher rate limits on very large exports. Not needed for normal use.

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

Maximum number of carriers to return. You are charged per result, so this also caps your cost.

## Actor input object example

```json
{
  "states": [
    "TX"
  ],
  "registeredFrom": "30 days",
  "activeOnly": true,
  "forHireOnly": false,
  "hazmatOnly": false,
  "requirePhone": true,
  "requireEmail": false,
  "maxItems": 100
}
```

# Actor output Schema

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

No description

# 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 = {
    "states": [
        "TX"
    ],
    "registeredFrom": "30 days",
    "requirePhone": true,
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("waags/fmcsa-trucking-carrier-leads").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 = {
    "states": ["TX"],
    "registeredFrom": "30 days",
    "requirePhone": True,
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("waags/fmcsa-trucking-carrier-leads").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 '{
  "states": [
    "TX"
  ],
  "registeredFrom": "30 days",
  "requirePhone": true,
  "maxItems": 100
}' |
apify call waags/fmcsa-trucking-carrier-leads --silent --output-dataset

```

## MCP server setup

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

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/lwZY5aqa5msrxbV61/builds/OmKbZBsQO31qgGv4p/openapi.json
