# FMCSA New Trucking Carrier Leads: daily USDOT with email (`johnveds15/fmcsa-new-carrier-leads`) Actor

Every new USDOT motor-carrier registration from FMCSA's official census: owner names, phone, cell, validated email, fleet size, drivers, for-hire/interstate/hazmat, decoded cargo. onlyNew mode never charges twice for the same carrier. No browser, no proxy, $2.50 per 1,000 leads.

- **URL**: https://apify.com/johnveds15/fmcsa-new-carrier-leads.md
- **Developed by:** [John Vedovino II](https://apify.com/johnveds15) (community)
- **Categories:** Lead generation, Business
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.50 / 1,000 carrier leads

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 New Trucking Carrier Leads: daily new USDOT registrations with email

**Every motor carrier that registered a new USDOT number in your window, read from FMCSA's official Company Census File.** Each record carries the owner or officer names, phone, cell, email (junk values removed), address, fleet size, drivers, interstate or intrastate operation, for-hire class, hazmat flag and a decoded cargo list. Turn on `onlyNew` and a daily schedule never charges you twice for the same carrier. No browser, no proxy, no API key. **$2.50 per 1,000 leads.**

### Who buys new-carrier lists

A brand-new trucking company needs, within its first 30–90 days: **commercial truck insurance**, **factoring**, an **ELD**, a **dispatcher**, **fuel cards**, **drug and alcohol consortium enrollment**, **IFTA/IRP and BOC-3 filings**, and often a **load board** and **truck financing**. FMCSA registers about 400–500 new USDOT numbers on a typical weekday (measured from the census, late September 2026). Getting to those carriers first is what this list is for.

### A real record (contact fields masked here, delivered in full)

From a live run on 2026-10-04, using filters for-hire only and email required:

```json
{
  "dotNumber": "5505792",
  "legalName": "ALL THINGS TOWING",
  "registeredDate": "2026-10-02",
  "status": "active",
  "officers": ["J•••• A•••••"],
  "phone": "806•••••••",
  "email": "j•••••@allthingstowing.com",
  "city": "LUBBOCK", "state": "TX", "zip": "79423",
  "operation": "intrastate non-hazmat",
  "isForHire": true,
  "powerUnits": 3, "drivers": 2,
  "cargo": ["Drive/Tow away"],
  "safetyUrl": "https://safer.fmcsa.dot.gov/query.asp?searchtype=ANY&query_type=queryCarrierSnapshot&query_param=USDOT&query_string=5505792"
}
```

That run scanned 270 registrations from 3 days and returned 200 for-hire carriers with a valid email (it hit the cap). Run again with `onlyNew`, it skipped those 200 and delivered the next 200.

### What makes it different

| | |
|---|---|
| **Junk emails removed** | The census email field often holds a company name, `NONE` or a typo. Anything that isn't a syntactically valid address comes back as `null`, so `requireEmail` means a usable address. |
| **Decoded cargo** | The 30 FMCSA cargo checkboxes become readable classes (`Refrigerated Food`, `Building Materials`, `Household Goods`...). Filter on them with `cargo`. |
| **`onlyNew` for schedules** | Delivered USDOT numbers are remembered for 120 days in a named key-value store in **your** account. Daily runs pay only for carriers you haven't seen. |
| **Normalized** | Phones are reduced to digits, dates are ISO, and operation, status and for-hire are plain words and booleans. |
| **Linked** | Every row links to the carrier's FMCSA SAFER snapshot. |

### Input

| Field | Default | What it does |
|---|---|---|
| `lookbackDays` | 3 | USDOT registration dates in the window ending at `endDate`. The census lags about a day. |
| `states` | all | Physical-address states. |
| `requireEmail`, `requirePhone` | false | Keep only reachable carriers. |
| `forHireOnly`, `interstateOnly`, `hazmatOnly` | false | Narrow to your buyer. |
| `minPowerUnits`, `maxPowerUnits` | 0 / 100000 | Fleet size. |
| `cargo` | any | Substring of a cargo class, e.g. `Refrigerated`. |
| `includeInactive` | false | Include inactive or pending registrations. |
| `onlyNew` | false | Skip carriers already delivered to you. |
| `maxResults` | 500 | Hard cap on leads, and so on cost. |

### Pricing

Pay per event: **$0.0025 per carrier lead delivered.** Rows you filter out, and carriers already delivered in `onlyNew` mode, are free. A daily run of all new for-hire carriers with email (about 150–250 a weekday) costs about $0.40–$0.60.

### Data source and limits

- The source is the **FMCSA Company Census File**, published by US DOT on data.transportation.gov (dataset `az4n-8mr2`, updated daily). Fields are as the carrier filed them on its MCS-150.
- **MC numbers** (operating authority dockets) are usually still empty on a brand-new registration. They appear once authority is granted, and `dockets` fills when they do.
- Insurance filings and out-of-service orders aren't included. Use the SAFER link for those.
- Respect the CAN-SPAM and TCPA rules that apply to how you contact these carriers.

### More Actors by johnveds15

Same pay-per-result pricing, same JSON/CSV output, no login needed:

- [SEC Form D funding rounds](https://apify.com/johnveds15/sec-form-d-funding-rounds)
- [US building permit leads, 6 cities](https://apify.com/johnveds15/us-building-permit-leads)
- [Competitor ad library scraper (Google Ads + LinkedIn)](https://apify.com/johnveds15/ad-library-competitor-ads)
- [Google Flights fares and price history](https://apify.com/johnveds15/google-flights-fares)

# Actor input Schema

## `lookbackDays` (type: `integer`):

Window of USDOT registration (add) dates, ending at End date. FMCSA's census lags about one day, so the newest day is often thin.

## `endDate` (type: `string`):

Defaults to today.

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

Two-letter physical-address states, e.g. TX, FL. Empty = all.

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

Keep only carriers that list an email address in the FMCSA census.

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

Keep only carriers that list a phone or cell number.

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

Classification includes AUTHORIZED FOR HIRE (excludes private fleets hauling their own goods).

## `interstateOnly` (type: `boolean`):

Keep only carriers registered for interstate operation.

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

Keep only carriers flagged as hazardous-materials carriers.

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

Smallest fleet to include, counted in power units (trucks/tractors). 0 = no minimum.

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

Largest fleet to include, counted in power units. Leave empty for no maximum.

## `cargo` (type: `array`):

Substring of a decoded cargo class, e.g. 'Refrigerated', 'Building', 'Household', 'Livestock'. Empty = any.

## `includeInactive` (type: `boolean`):

Also include registrations whose status is not active (inactive or pending). Off = active carriers only.

## `onlyNew` (type: `boolean`):

Remembers delivered USDOT numbers (120 days) in a named key-value store in YOUR account, so a daily schedule never pays twice for one carrier.

## `maxResults` (type: `integer`):

Hard cap on leads pushed (and charged) this run.

## Actor input object example

```json
{
  "lookbackDays": 3,
  "states": [],
  "requireEmail": false,
  "requirePhone": false,
  "forHireOnly": false,
  "interstateOnly": false,
  "hazmatOnly": false,
  "minPowerUnits": 0,
  "maxPowerUnits": 100000,
  "cargo": [],
  "includeInactive": false,
  "onlyNew": false,
  "maxResults": 200
}
```

# Actor output Schema

## `leads` (type: `string`):

One row per new carrier kept by the filters.

## `summary` (type: `string`):

Rows scanned, leads pushed, already-seen skips and events charged.

# 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 = {
    "lookbackDays": 3,
    "maxResults": 200
};

// Run the Actor and wait for it to finish
const run = await client.actor("johnveds15/fmcsa-new-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 = {
    "lookbackDays": 3,
    "maxResults": 200,
}

# Run the Actor and wait for it to finish
run = client.actor("johnveds15/fmcsa-new-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 '{
  "lookbackDays": 3,
  "maxResults": 200
}' |
apify call johnveds15/fmcsa-new-carrier-leads --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,johnveds15/fmcsa-new-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/tb09QKvK8X0e3jbSW/builds/T79WjGOcMiGgNVz0I/openapi.json
