# US Trucking Carrier Leads — FMCSA New Authorities & Carriers (`foxlabs/fmcsa-carrier-leads`) Actor

Fresh US trucking carrier leads from official FMCSA data. Newly granted authorities & new registrations with phone (100%), email (100% on new carriers), officer, fleet size and cargo. Filter 2.2M active carriers by state, cargo, fleet. Daily-updated, no key.

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

## Pricing

$4.00 / 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/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

## US Trucking Carrier Leads — FMCSA New Authorities & Carriers

**Fresh, contact-complete US trucking carrier leads straight from official FMCSA data.** Get carriers whose operating authority was **just granted**, brand-new USDOT registrations, or filtered slices of the full census of **2.2M+ active carriers** — each row with phone, email, officer name, full address, fleet size and cargo types.

Measured on real output (July 2026, n=2,000 newly granted authorities): **email 100%, phone 99.9%, full address 100%**.

### What does this Actor do?

It reads two official FMCSA datasets on [data.transportation.gov](https://data.transportation.gov) (updated daily by the U.S. Department of Transportation):

- **Authority history (Motus)** — every operating-authority event. The Actor filters to *freshly GRANTED* authorities (and optionally *reinstated* ones) and joins each with full carrier contact data.
- **Company census** — 147 columns on every registered carrier: phone, email, officers, address, fleet, cargo, safety data.

Three modes:

1. **Newly granted authorities** *(default)* — the classic "new MC authority" lead feed used by freight factoring, insurance and compliance vendors. Now built on FMCSA's new Motus event stream, so it keeps working after the 2025-26 MC-number retirement that broke docket-based pipelines.
2. **New USDOT registrations** — the earliest possible signal: carriers registered in the last N days. Measured contact fill on this segment: **phone 100%, email 100%**.
3. **Search active carriers** — filter the whole 2.2M-carrier census by state, cargo type, fleet size and contact availability.

### Why use it?

Every month ~15-17K new carriers register and ~2K+ authorities are granted. The first vendor to call a new carrier usually wins the account — that's why subscription services sell this same public data at $49-$497/month. This Actor gives you the identical official-source feed on Apify's pay-per-result pricing, schedulable daily, with API/CSV/Excel export and no lock-in.

**Who buys these leads:** freight factoring companies, truck insurance agencies, ELD & dispatch software vendors, fuel-card providers, compliance services, equipment lessors.

### How to use it

1. Click **Try for free** — the default input already fetches last week's granted authorities.
2. Pick a **mode** and a **date range** (for daily feeds, schedule the Actor with "Last 24 hours").
3. Optionally filter by **state, cargo type, fleet size**, or require email/phone.
4. **Run**, then download from the **Output** tab (JSON, CSV, Excel, XML) or pull via API.

### Input example

```json
{
    "mode": "new_authorities",
    "datePreset": "last_7_days",
    "states": ["TX", "OK"],
    "requireEmail": true,
    "maxResults": 1000
}
```

### Output example

```json
{
    "usdotNumber": "6963412",
    "legalName": "FAST EAGLE TRANSPORT LLC",
    "phone": "4052746804",
    "cellPhone": "4052746804",
    "email": "fasteagletransport***@gmail.com",
    "officer1": "ARGELIO TRUJILLO SANCHEZ",
    "street": "3716 W PARK PL",
    "city": "OKLAHOMA CITY",
    "state": "OK",
    "zip": "73107-5118",
    "powerUnits": 1,
    "totalDrivers": 1,
    "carrierOperation": "Interstate",
    "cargoTypes": ["General Freight"],
    "registrationDate": "2026-07-10",
    "authorityType": "Motor Carrier of Property (Except Household Goods)",
    "authorityReason": "Granted",
    "authorityGrantedDate": "2026-07-26",
    "docketNumber": "MC83157018",
    "source": "FMCSA (data.transportation.gov)"
}
```

### Data fields & measured coverage

Coverage measured on 2,000 real rows (newly granted authorities, July 2026):

| Field | Coverage | Notes |
|---|---|---|
| `legalName`, `usdotNumber` | 100% | Official legal identity |
| `phone` | 99.9% | Business phone from MCS-150 filing |
| `email` | **100%** | Business email (new-carrier segments; ~65% across the full old census) |
| `street`, `city`, `state`, `zip` | 100% | Physical + mailing address |
| `officer1` / `officer2` | 58% / 7% | Fills in as carriers file MCS-150 updates |
| `powerUnits`, `totalDrivers`, `cdlDrivers` | 95-100% | Fleet size for qualification |
| `cargoTypes` | 60-70% | Decoded cargo categories (reefer, tanker, general freight…) |
| `authorityType`, `authorityGrantedDate`, `docketNumber` | 100% | In new-authorities mode |
| `cellPhone` | 33% | When filed |
| `safetyRating` | ~0-3% | New carriers are unrated; fills on older carriers in search mode |

### Pricing & cost

**$0.004 per carrier lead ($4 per 1,000)** — pay only for results. You are charged per lead actually delivered — rows filtered out by your `requireEmail` / `requirePhone` settings are never billed.

Pay per result — a 1,000-lead run costs about what a single lead costs at legacy list vendors. Compute usage is minimal (single HTTP API source, no browser): a 1,000-row run typically finishes in under a minute.

### Tips

- **Daily feed:** schedule mode `new_authorities` + `last_24_hours` every morning — fresh grants land daily (Mon-Fri).
- **Owner-operators:** `maxPowerUnits: 5` targets small fleets; factoring and insurance convert best there.
- **Reefer/tanker verticals:** use `cargoTypes` to sell into specialized segments.
- **Earliest contact:** mode `new_registrations` reaches carriers *before* their authority is granted.

### FAQ & legal

#### Is this data legal to use?

Yes — it is public record published by the U.S. DOT/FMCSA for public access. This Actor only reads the official open-data API (no scraping of protected systems). If you send marketing, comply with applicable laws (e.g. TCPA/CAN-SPAM) — that responsibility sits with the sender.

#### Why do some old carriers lack email?

Email became a standard MCS-150 field over time; new registrants are ~100% covered, the historical census ~65%.

#### Does it use proxies or my credentials?

No credentials, no proxies, no login. An optional free Socrata app token can be added for very large pulls.

#### Something broken or missing?

Open an issue on the Actor's Issues tab — fixes ship fast.

### Changelog

#### 0.1.3 (2026-08-03)

- Fix: duplicate lead rows when the source AuthHist feed carries byte-identical duplicate "Granted" events for the same carrier (measured 2/500 on a weekly run). Dedupe now also runs within a page; key unchanged (`usdot|docket`), so carriers legitimately granted multiple authorities (distinct dockets) still produce one row per authority. Verified on-platform: 500-row rerun → 0 duplicates.

#### 0.1 (2026-07-27)

- Initial release: new-authorities feed (Motus event stream + census contact join), new-registrations feed, census search.
- Filters: state, cargo type, fleet size, carrier operation, email/phone required.
- Semantic guarantees: masked empties ("0" fax/phone) nulled, dates normalized to ISO, granted-only default (Motus baseline noise excluded), inactive carriers excluded from lead joins.

# Actor input Schema

## `mode` (type: `string`):

New authorities = carriers whose operating authority was just GRANTED (the classic factoring/insurance lead feed, joined with full contact data). New registrations = brand-new USDOT numbers (earliest possible signal, 100% phone & email). Search = filter the full census of 2.2M active carriers.

## `authorityEvents` (type: `array`):

Which authority events count as a lead (new-authorities mode). Default: freshly GRANTED authorities only. Reinstated = carriers whose authority just came back (also a strong sales signal). 'All active events' includes Motus baseline/administrative records — noisy, for analysis only.

## `datePreset` (type: `string`):

For 'new authorities' this filters the authority grant date; for 'new registrations' the USDOT creation date; for 'search' it optionally limits by registration date ('All time' recommended). Pick 'Custom' to use From/To below.

## `dateFrom` (type: `string`):

YYYY-MM-DD (e.g. 2026-07-01). Only used when Date range = Custom.

## `dateTo` (type: `string`):

YYYY-MM-DD. Only used when Date range = Custom. Leave empty for 'today'.

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

Filter by physical address state, 2-letter codes (e.g. TX, FL, CA). Leave empty for all states.

## `carrierOperation` (type: `string`):

Interstate carriers cross state lines (the classic freight market). Intrastate operate within one state only.

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

Only carriers hauling at least one of the selected cargo types. Leave empty for all.

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

Minimum number of power units (trucks/tractors). Leave empty for no minimum.

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

Maximum number of power units. Useful to target owner-operators (e.g. 1-5). Leave empty for no maximum.

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

Drop carriers without an email address. New carriers are ~100% covered; the older census is ~65%.

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

Drop carriers without a phone number (~97% have one).

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

Hard cap on dataset rows. Set to 0 for unlimited (full census pulls supported).

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

Optional free token from data.transportation.gov to lift anonymous rate throttling on very large pulls. Not needed for normal runs.

## Actor input object example

```json
{
  "mode": "new_authorities",
  "authorityEvents": [
    "granted"
  ],
  "datePreset": "last_7_days",
  "states": [],
  "carrierOperation": "any",
  "cargoTypes": [],
  "requireEmail": false,
  "requirePhone": false,
  "maxResults": 1000
}
```

# Actor output Schema

## `dataset` (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 = {
    "mode": "new_authorities",
    "authorityEvents": [
        "granted"
    ],
    "datePreset": "last_7_days",
    "states": [],
    "maxResults": 1000
};

// Run the Actor and wait for it to finish
const run = await client.actor("foxlabs/fmcsa-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 = {
    "mode": "new_authorities",
    "authorityEvents": ["granted"],
    "datePreset": "last_7_days",
    "states": [],
    "maxResults": 1000,
}

# Run the Actor and wait for it to finish
run = client.actor("foxlabs/fmcsa-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 '{
  "mode": "new_authorities",
  "authorityEvents": [
    "granted"
  ],
  "datePreset": "last_7_days",
  "states": [],
  "maxResults": 1000
}' |
apify call foxlabs/fmcsa-carrier-leads --silent --output-dataset

```

## MCP server setup

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