# New Trucking Company Leads: FMCSA New Carriers & Insurance (`nerolabs/new-trucking-company-leads`) Actor

New US trucking companies from official FMCSA data, scored 0 to 100 as leads with phone, email, fleet, cargo, MC authority status, liability insurance required vs filed, insurer and suspension notices. Filter by state, fleet, cargo; monitor mode. $0.015 per carrier. Agent-ready: x402, MCP.

- **URL**: https://apify.com/nerolabs/new-trucking-company-leads.md
- **Developed by:** [Adam Pearce](https://apify.com/nerolabs) (community)
- **Categories:** Lead generation, Business, Automation
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.50 / 1,000 scored 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## New Trucking Company Leads: FMCSA New Carriers & Insurance

**Which new trucking companies need you right now?** This actor reads the official FMCSA open data files (US DOT, data.transportation.gov) and returns new and changing US motor carriers as **scored sales leads**, each with phone, email, address, fleet size, cargo, MC authority status and, the part other lists leave out, **whether their required liability insurance is filed yet and who insures them today**.

Truck insurance agents, freight factoring companies, ELD and fuel card sellers, dispatch services, load boards, truck dealers and compliance consultants all chase the same carriers in the same first weeks. The first one to call wins. Raw FMCSA dumps give you thousands of rows; this gives you the carriers worth calling, ranked 0 to 100 with the reason.

### Four lead lists in one actor

| `leadType` | Who you get | Best for |
|---|---|---|
| `new_carriers` | USDOT numbers registered in the last N days (about 2,500 a week across the US) | Everyone selling to new trucking companies |
| `needs_insurance` | Carriers whose operating authority (MC) application is **pending** and whose required liability (BIPD) insurance is **not filed yet**. FMCSA will not grant the authority until it is. | Truck insurance agents and brokers |
| `authority_granted` | Carriers whose authority was **granted** in the last N days, so they can now haul for hire | Factoring, dispatch, ELD, fuel cards, load boards |
| `insurance_lapsing` | Active carriers with an FMCSA **suspension notice** taking effect in the next N days, usually because their insurance was cancelled, with the ending insurer. Carriers that already filed a replacement policy are skipped. | Insurance agents (rewrite the policy before the authority is lost), factoring risk teams |

### What you get for each carrier

- **Lead score 0 to 100** and plain reasons: insurance not filed, days since registration, power units, interstate, hazmat, phone and email on file, inactive or undeliverable flags.
- **Contact**: phone, cell phone and email as published on the FMCSA registration, business and mailing address. Company officer names only if you switch them on.
- **Fleet**: power units, trucks, tractors and trailers owned, drivers, CDL drivers, annual miles, interstate or intrastate, hazmat, cargo types (general freight, refrigerated food, building materials and 27 more).
- **Authority**: MC or docket number, authority type, status (Pending, Active, Inactive), other authorities (broker, freight forwarder), the last 12 status changes with dates.
- **Insurance**: liability insurance required vs on file (in USD), cargo insurance required and filed, current insurer, coverage and effective date; for suspensions, the ending insurer, the cancel date and whether a replacement is filed.
- **Links**: the carrier's FMCSA SAFER snapshot.

#### Sample row (shortened)

```json
{
  "leadType": "needs_insurance",
  "leadScore": 100,
  "leadReasons": "Authority applied for, required liability insurance not filed yet. Registered or changed in the last 7 days. Has an email on file. 6 power units. Interstate operation.",
  "eventDate": "2026-11-02",
  "usdotNumber": "7934615",
  "docketNumber": "MC77167742",
  "legalName": "EXAMPLE HAULING LLC",
  "phone": "+1 430-555-0151",
  "email": "dispatch@example.com",
  "state": "TX",
  "usdotRegisteredOn": "2026-10-27",
  "powerUnits": 6,
  "drivers": 3,
  "cargoTypes": ["General freight", "Building materials"],
  "authorityType": "Motor Carrier of Property (Except Household Goods)",
  "authorityStatus": "Pending",
  "liabilityInsuranceRequiredUsd": 1000000,
  "liabilityInsuranceOnFileUsd": 0,
  "needsLiabilityInsurance": true,
  "currentInsurer": null,
  "saferUrl": "https://safer.fmcsa.dot.gov/query.asp?searchtype=ANY&query_type=queryCarrierSnapshot&query_param=USDOT&query_string=7934615"
}
```

### How to use it

1. Pick a `leadType` and how many days to look back (or ahead, for suspensions).
2. Narrow it: states, minimum or maximum power units, cargo types, interstate only, hazmat only.
3. Choose the contact you need (`requireContact`): carriers without it are skipped and never charged.
4. Upload your CRM export as a CSV or Google Sheet with a USDOT column (`excludeListUrl`) so you never pay twice for carriers you already work.
5. Turn on **monitor mode** and schedule it daily: each run returns only carriers you have not seen, a fresh lead feed every morning. Add a webhook to push the summary into Zapier, Make, n8n or Slack.

Examples:

- Insurance agent in Texas: `{"leadType": "needs_insurance", "withinDays": 3, "states": ["TX"], "minPowerUnits": 2, "monitorMode": true}`
- Factoring company: `{"leadType": "authority_granted", "withinDays": 7, "interstateOnly": true}`
- Reefer insurance specialist: `{"leadType": "insurance_lapsing", "withinDays": 21, "cargoTypes": ["refrigerated food"]}`

### Pricing

Pay per event: **$0.015 per scored carrier returned** (lower on higher Apify plans), plus a tiny actor start fee. You are charged only for carriers that pass your filters and contact rule; carriers skipped by your CRM list, monitor mode or filters cost nothing. 1,000 fresh insurance leads cost about $15. Set a maximum charge per run in Apify to cap spend.

### Data source and limits

- Data comes from FMCSA's official files on data.transportation.gov: the Company Census File and the Motus licensing files (Carrier, AuthHist, Insur, InsHist, RevokeSuspend). FMCSA publishes them as public data and refreshes them daily; nothing is scraped.
- FMCSA moved registrations to its new Motus system in 2026, so new MC numbers have 8 digits. That is normal.
- Contact details are what the carrier gave FMCSA. Use them for business outreach only and follow the rules where you sell (TCPA for calls and texts, CAN-SPAM for email, do-not-call lists).
- A suspension notice is not a final suspension: a carrier can still file new insurance. `replacementInsuranceFiled` shows when one is on file.
- Every row says `source` and links to the SAFER snapshot so you can check it.

### For AI agents

Call it through the Apify MCP server (`nerolabs/new-trucking-company-leads`) or pay per call with x402. Inputs are plain fields (`leadType`, `withinDays`, `states`, `maxLeads`); output is one JSON row per carrier with the fields above and a `SUMMARY` record in the default key-value store.

### Related Nero Labs actors

- [Federal Contract Winner Lead Scorer](https://apify.com/nerolabs/federal-contract-winner-leads): companies that just won US federal contracts, scored as leads.
- [Google Sheets Export & Import](https://apify.com/nerolabs/google-sheets-export): send these leads straight into a Sheet.
- [Phone Number Validator & Cleaner](https://apify.com/nerolabs/phone-number-validator): check the phone numbers before a dialer campaign.

# Actor input Schema

## `leadType` (type: `string`):

new_carriers: USDOT numbers registered in the window. needs_insurance: carriers whose operating authority (MC) application is pending and whose required liability (BIPD) insurance is not filed yet, the hottest list for truck insurance agents. authority_granted: authority granted in the window, for factoring, ELD, fuel card and dispatch sellers. insurance_lapsing: active carriers with an FMCSA suspension notice taking effect in the next N days, usually because their insurance was cancelled.

## `withinDays` (type: `integer`):

How many days back to look for registrations, applications and grants. For insurance_lapsing, how many days ahead the suspension takes effect.

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

Only carriers whose physical address is in these US states, 2 letter codes: TX, CA, FL, GA. Empty means all states.

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

Skip carriers with fewer power units than this, e.g. 2 to skip one-truck owner operators.

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

Skip carriers bigger than this. Empty or 0 means no limit.

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

Keep carriers that haul any of these, matched on the FMCSA cargo list: general freight, refrigerated food, building materials, machinery, motor vehicles, livestock, chemicals, intermodal, dry bulk, construction, household goods.

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

For new_carriers: keep only companies registered as authorized for hire (they haul other people's freight and need authority, insurance, factoring and loads). Off includes private fleets.

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

Keep only carriers that cross state lines.

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

Keep only carriers registered to haul hazardous materials.

## `skipReplacedInsurance` (type: `boolean`):

For insurance_lapsing: skip carriers that have filed a newer insurance policy since the suspension notice (about 4 in 10), so you only get carriers still about to lose authority. Off returns them too, marked replacementInsuranceFiled true and scored lower.

## `requireContact` (type: `string`):

Skip carriers without this contact on file, so you only pay for leads you can reach.

## `includeOfficerNames` (type: `boolean`):

Add the officer names listed on the FMCSA registration. Off by default; turn on only if your use of personal names is lawful where you work.

## `minLeadScore` (type: `integer`):

Return only carriers scoring at least this (0 to 100).

## `maxLeads` (type: `integer`):

The best scored carriers up to this number are returned and charged.

## `excludeDotNumbers` (type: `array`):

Carriers you already work, by USDOT number.

## `excludeListUrl` (type: `string`):

Link to a CSV or a Google Sheet (shared as anyone with the link can view) with a USDOT column, e.g. your CRM export. Those carriers are skipped and not charged.

## `monitorMode` (type: `boolean`):

Remember carriers already returned and give only new ones next time. Schedule it daily for a fresh lead feed.

## `watchName` (type: `string`):

Keeps separate memories for separate lists, e.g. 'tx-insurance' and 'ga-factoring'.

## `webhookUrl` (type: `string`):

We POST the run summary here when the run ends (in monitor mode only when there are new leads). Works with Zapier, Make, n8n or Slack workflows.

## Actor input object example

```json
{
  "leadType": "new_carriers",
  "withinDays": 7,
  "states": [
    "TX"
  ],
  "minPowerUnits": 0,
  "forHireOnly": true,
  "interstateOnly": false,
  "hazmatOnly": false,
  "skipReplacedInsurance": true,
  "requireContact": "phone_or_email",
  "includeOfficerNames": false,
  "minLeadScore": 0,
  "maxLeads": 20,
  "monitorMode": false
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "leadType": "new_carriers",
    "withinDays": 7,
    "states": [
        "TX"
    ],
    "maxLeads": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("nerolabs/new-trucking-company-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 = {
    "leadType": "new_carriers",
    "withinDays": 7,
    "states": ["TX"],
    "maxLeads": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("nerolabs/new-trucking-company-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 '{
  "leadType": "new_carriers",
  "withinDays": 7,
  "states": [
    "TX"
  ],
  "maxLeads": 20
}' |
apify call nerolabs/new-trucking-company-leads --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nerolabs/new-trucking-company-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/4CS5OTnMOBsocRBpu/builds/O9yETtQOK5Rkdx7mT/openapi.json
