# New Trucking Companies: FMCSA Leads, DOT & MC Number Lookup (`solidfetch/fmcsa-carriers`) Actor

Find new trucking companies: FMCSA new motor carriers registered in the last N days by state, with phone and e-mail where filed. DOT number lookup (USDOT) and MC number lookup with authority, insurance, fleet size, cargo and hazmat filters. Official Company Census, daily data. Pay per carrier.

- **URL**: https://apify.com/solidfetch/fmcsa-carriers.md
- **Developed by:** [Solid Fetch](https://apify.com/solidfetch) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.80 / 1,000 carriers

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

## FMCSA New Motor Carriers and Trucking Company Leads

Get FMCSA trucking leads and carrier details from the official FMCSA register, as an API or a scraper alternative. Look up US motor carriers by USDOT or MC number, get the new trucking companies registered in the last few days, or search by state, city, fleet size, drivers, cargo and hazmat. Each carrier is one row with legal name, DBA name, MC number, operating authority (active, pending application, revoked, suspended, with the dockets), insurance on file, status, phone, e-mail (when the carrier filed one and it is not hidden for a sole proprietor), address, fleet size, cargo types and the date the record was added. The data is the FMCSA Company Census File and the FMCSA licensing and insurance files, published as open data and refreshed daily. No login, no proxy and no scraping of the FMCSA website.

The actor reads the open dataset through its public API. There is no login, no browser, no proxy and no scraping of the FMCSA website.

### What people use it for

- **Leads for insurance, factoring, ELD and fuel cards.** New trucking companies need insurance, factoring and an ELD in their first weeks. Run `newCarriersSince: "2 days"` every morning and get the carriers added since the day before yesterday, with phone and e-mail. In a run on 4 October 2026, the last 7 days held 2,395 active new carriers, and every one of them that is a business came with an e-mail address. A carrier whose MC application is pending (`pendingApplication: true`) has just filed for operating authority, which is the moment it buys insurance and a process agent.
- **Carrier vetting for brokers and shippers.** Paste a list of USDOT or MC numbers and get status (active or inactive), operating authority per docket (active, pending, revoked, suspended, with the date and the reason), the BI\&PD, cargo and bond insurance on file, operation type, for-hire classification, safety rating, fleet size and the date of the last MCS-150 update for each one. With `includeInsurance` also the insurer, the coverage amount and the cancelled policies with their cancellation dates. Numbers that are not in the register, and values that are not numbers at all, get a free row each (see Output) and are listed in the run summary. They are not charged and do not stop the run.
- **Market lists.** All for-hire carriers in Texas with 20 to 50 trucks, reefer carriers in California, hazmat carriers in Ohio. Filters run inside the FMCSA dataset, so you pay only for carriers that match.
- **Data enrichment.** Add MC number, fleet size and cargo types to a CRM that already holds USDOT numbers.

### How to use it

Search by filters:

```json
{
    "states": ["TX"],
    "minPowerUnits": 20,
    "maxPowerUnits": 50,
    "authorizedForHireOnly": true,
    "cargoTypes": ["generalFreight", "refrigeratedFood"],
    "maxItems": 1000
}
```

Get new carriers, newest first:

```json
{
    "newCarriersSince": "7 days",
    "states": ["FL", "GA"],
    "requireEmail": true,
    "maxItems": 500
}
```

Look carriers up by number:

```json
{
    "dotNumbers": ["53467", "USDOT 80806"],
    "mcNumbers": ["MC-138328", "135797", "MX-231168"]
}
```

Vet a carrier, with the insurers and the cancelled policies:

```json
{
    "dotNumbers": ["80806"],
    "includeInsurance": true
}
```

A lookup cannot be combined with search filters, because the filters would be ignored. A field name the actor does not know stops the run with a hint such as `"state" (did you mean "states"?)`, so a typo cannot turn into a run of unfiltered carriers.

### Input

| Field | What it does |
|---|---|
| `newCarriersSince` | Carriers whose record was added on or after this date. A date (`2026-09-27`) or a period back from today (`7 days`, `2 weeks`, `1 month`). Results come newest first. |
| `states` | Physical address state: `TX`, `CA`, Canadian provinces such as `ON`, or US state names. |
| `cities` | Physical address city, exact name without regard to case. Use it together with a state. |
| `carrierOperations` | `interstate`, `intrastateHazmat`, `intrastateNonHazmat`. |
| `authorizedForHireOnly` | Only carriers that haul freight for others. Private fleets are dropped. |
| `minPowerUnits`, `maxPowerUnits` | Fleet size range (trucks, tractors and buses from the MCS-150 form). |
| `minDrivers`, `maxDrivers` | Driver count range. |
| `cargoTypes` | Any of the 30 FMCSA cargo classes, for example `generalFreight`, `refrigeratedFood`, `householdGoods`, `motorVehicles`, `liquidsGases`, `buildingMaterials`. |
| `hazmat` | `any` (default), `only` or `exclude`. |
| `activeOnly` | Default `true`. Turn it off to include inactive records. Lookups always return the record whatever its status. |
| `requireEmail` | Only carriers with an e-mail in the output. |
| `requireMcNumber` | Only carriers with an MC or MX docket number in the census. Newly added carriers mostly have none there yet, so with `newCarriersSince` this returns few or no rows. Pending MC numbers from the authority file do not count for this filter; to keep only carriers with a pending or active MC, filter the output on `mcNumber`. |
| `dotNumbers` | USDOT numbers to look up, up to 10,000 per run. Returned in the order given. Leading zeros and prefixes such as `USDOT` or `DOT#` are fine. A value that is not a USDOT number (`abc`, more than 8 digits) does not stop the run: it gets a free row with an `error` and the other numbers are looked up. |
| `mcNumbers` | MC, MX or FF docket numbers. Plain digits mean MC, and when no MC docket has those digits, the MX or FF docket with them is returned. A value that is not a docket number gets a free row with an `error`, like a bad USDOT number. A docket can belong to several carriers, and all of them are returned with the active holder first. Dockets are looked up in the census and, with `includeAuthority`, in the FMCSA authority file too, which has the MC dockets the census lacks (J B Hunt's MC-135797) and the pending MC dockets of new carriers. |
| `includeAuthority` | Default `true`. Adds operating authority: every docket with its status, whether an application is pending, whether the authority was revoked or suspended, and the BI\&PD, cargo and bond insurance on file. Also fixes `mcNumber` for new and multi-docket carriers. It costs one extra request per page of up to 800 carriers, and one more when a carrier on the page has an authority that is not active. Nothing extra is charged. |
| `includeInsurance` | Default `false`. Adds the policies on file (insurer, type, primary or excess, coverage amount, effective date) and the five most recent cancelled policies with their cancellation dates. Two more requests per page, which is why it is off by default. Nothing extra is charged. |
| `insuranceFilter` | `any` (default), `leadsOnly` or `insuredOnly`. Keeps only the insurance leads, or only the carriers that have the required insurance on file, see "Leads for insurance agents". Needs `includeAuthority` and `includeInsurance`. Carriers left out are not saved and not charged. |
| `includeContactsForSoleProprietors` | Default `false`. See Personal data below. |
| `maxItems` | Stop after this many carriers, up to 1,000,000. Left empty, a search stops at 100 and a lookup returns every carrier it finds. If a lookup stops at `maxItems` or at your cost limit, the numbers it did not get to are listed in the run summary. |

### Output

One row per carrier. A real row from a lookup on 4 October 2026:

```json
{
    "dotNumber": 1827354,
    "mcNumber": "MC-662914",
    "dockets": [{ "number": "MC-662914", "status": "active" }],
    "legalName": "RCJ TRANSPORT LOGISTICS INC",
    "dbaName": null,
    "status": "active",
    "carrierOperation": "interstate",
    "entityTypes": ["carrier"],
    "classifications": ["AUTHORIZED FOR HIRE"],
    "authorizedForHire": true,
    "safetyRating": null,
    "safetyRatingDate": null,
    "businessType": null,
    "soleProprietor": false,
    "contactsHidden": false,
    "phone": "7133559421",
    "email": "dispatch@rcjtransport.com",
    "physicalStreet": "25511 BUDDE RD STE 102",
    "physicalCity": "THE WOODLANDS",
    "physicalState": "TX",
    "physicalZip": "77380",
    "physicalCountry": "US",
    "mailingStreet": "25511 BUDDE RD STE 102",
    "mailingCity": "THE WOODLANDS",
    "mailingState": "TX",
    "mailingZip": "77380",
    "mailingCountry": "US",
    "powerUnits": 22,
    "trucks": 22,
    "buses": 0,
    "drivers": 25,
    "cdlDrivers": 25,
    "mcs150Date": "2025-12-30",
    "mcs150Mileage": 2278451,
    "mcs150MileageYear": 2023,
    "cargoTypes": ["General Freight", "Metal: Sheets, Coils, Rolls", "Motor Vehicles", "Building Materials", "Refrigerated Food"],
    "cargoOther": null,
    "hazmat": true,
    "addDate": "2008-11-05",
    "saferUrl": "https://safer.fmcsa.dot.gov/query.asp?searchtype=ANY&query_type=queryCarrierSnapshot&query_param=USDOT&query_string=1827354",
    "source": "FMCSA Company Census File, https://data.transportation.gov/d/az4n-8mr2 (az4n-8mr2)",
    "fetchedAt": "2026-10-04T18:53:06.286Z"
}
```

The cargo list is shortened here. The real row lists 24 cargo classes for this carrier. With `includeAuthority` (the default) the row also has the fields below. A real example, USDOT 9411291, a carrier added on 17 October 2026 that has applied for authority (`insurance` only with `includeInsurance`, shortened):

```json
{
    "dotNumber": 9411291,
    "mcNumber": "MC-88169503",
    "dockets": [{ "number": "MC-88169503", "status": "pending" }],
    "authorityStatus": "pending",
    "pendingApplication": true,
    "authorityRevoked": false,
    "authorities": [
        {
            "docket": "MC-88169503",
            "authorityType": "Motor Carrier of Property (Except Household Goods)",
            "role": "carrier",
            "freight": "property",
            "status": "pending",
            "statusDate": "2026-10-19",
            "statusReason": "Published to FMCSA Register",
            "revoked": false,
            "suspended": false
        }
    ],
    "bipdRequired": 750000,
    "bipdOnFile": 0,
    "cargoInsuranceOnFile": false,
    "bondOnFile": false
}
```

And for USDOT 80806 (J B Hunt), a carrier with insurance on file:

```json
{
    "mcNumber": "MC-135797",
    "dockets": [
        { "number": "FF-51075", "status": "active" },
        { "number": "MC-135797", "status": "active" }
    ],
    "authorityStatus": "active",
    "bipdRequired": 1000000,
    "bipdOnFile": 3500000,
    "insurance": {
        "policies": [
            {
                "docket": "MC-135797",
                "type": "BIPD",
                "coverage": "excess",
                "insurer": "Ace American Insurance Company",
                "maxCoverage": 2500000,
                "underlyingLimit": 500000,
                "effectiveDate": "2025-12-31",
                "cancelDate": null
            }
        ],
        "cancelledPolicies": []
    }
}
```

| Field | Meaning |
|---|---|
| `dotNumber`, `mcNumber`, `dockets` | USDOT number, the MC or MX docket, and every docket with its status. With `includeAuthority`, `mcNumber` is the active or pending MC or MX docket from the authority file, and otherwise the census one, and `dockets` holds the census dockets plus the ones only the authority file has, each with its operating authority status (`active`, `pending`, `inactive`, `withdrawn`). Without it, `dockets` shows the census docket status, which is not the operating authority status. |
| `authorityStatus` | `active` when any authority is active, otherwise `pending`, `inactive`, `withdrawn`, or `none` when the carrier has no authority in the current FMCSA licensing file (private fleets, carriers that never applied, and carriers whose authority lapsed long ago). |
| `authorityNote` | `null`, except when `authorityStatus` is `none` and the census lists an MC docket for the carrier. Then it reads "MC on census, no current operating authority on file (lapsed or never granted)": the docket is in the census, but the authority file holds no current authority for it. The census keeps an MC docket after the authority has lapsed, so this is not a missing record. |
| `pendingApplication` | `true` when an application for operating authority is pending. |
| `authorityRevoked` | `true` when no authority is active and at least one was revoked. |
| `authorities` | One entry per docket and authority type: `docket`, `authorityType` (FMCSA's wording), `role` (`carrier`, `broker`, `freight forwarder`), `freight` (`property`, `household goods`, `passengers`), `status`, and for an authority that is not active `statusDate` and `statusReason` (when the application was published, when and why it was revoked or suspended, for example for cancelled insurance), plus the flags `revoked` and `suspended`. FMCSA's new system no longer separates common from contract authority, so this is not in the output. |
| `bipdRequired`, `bipdOnFile`, `cargoInsuranceOnFile`, `bondOnFile` | Liability (BI\&PD) insurance required and on file in dollars, the highest over the carrier's authorities, and whether cargo insurance and a broker bond are on file. `null` when the carrier has no authority. |
| `insurance` | Only with `includeInsurance`. `policies`: each policy on file once, BI\&PD first, with `docket`, `type` (`BIPD`, `cargo`, `bond`, `trust fund`), `coverage` (`primary`, `excess`), `insurer`, `maxCoverage`, `underlyingLimit`, `effectiveDate`. `cancelledPolicies`: up to five, newest first, the same fields with `cancelDate`. Policy numbers are not returned. |
| `insuranceLead`, `insuranceLeadReason` | Only when the run read both authority and insurance (`includeAuthority` and `includeInsurance`). `insuranceLead` is `true` for a carrier that needs insurance and has none on file or is about to lose it, and `insuranceLeadReason` says why in one sentence. The rule is under "Leads for insurance agents". |
| `legalName`, `dbaName` | Legal name and "doing business as" name. |
| `status` | `active`, `inactive` or `pending` (pending is a Mexican carrier whose application is under review). |
| `carrierOperation` | `interstate`, `intrastate hazmat` or `intrastate non-hazmat`. |
| `entityTypes`, `classifications`, `authorizedForHire` | Carrier, broker, shipper and others, and the FMCSA classification text such as AUTHORIZED FOR HIRE or PRIVATE PROPERTY. |
| `safetyRating`, `safetyRatingDate` | `satisfactory`, `conditional` or `unsatisfactory` from the last compliance review, when there was one. |
| `businessType` | `corporation`, `partnership` or `individual`. FMCSA fills it only after a safety review, so most records leave it empty. |
| `soleProprietor`, `contactsHidden` | Whether the record looks like a person, and whether phone, e-mail and street were left out for that reason. |
| `phone`, `email` | Phone and e-mail as the carrier filed them with FMCSA. Small companies often file the owner's own mailbox. |
| `physical*`, `mailing*` | Physical and mailing address. |
| `powerUnits`, `trucks`, `buses`, `drivers`, `cdlDrivers` | Fleet and driver counts from the MCS-150 form. |
| `mcs150Date`, `mcs150Mileage`, `mcs150MileageYear` | Date of the last MCS-150 update and the annual mileage it reported. |
| `cargoTypes`, `cargoOther`, `hazmat` | Cargo classes, the free-text "other" cargo, and the hazmat flag. |
| `addDate` | Date the record was created or reactivated in the FMCSA register. |
| `saferUrl` | The carrier's FMCSA SAFER snapshot page. |

A lookup also saves a free row for every value that gave no carrier, in the same dataset: `outcome` is `invalid` (the value is not a USDOT or docket number) or `not found` (the number is not in the FMCSA data), `query` is the value, `error` says why, and `dotNumber` or `mcNumber` is filled for a number that was not found. `legalName` and `status` are `null` and the other carrier fields are missing. These rows are never charged and do not count against `maxItems`. The status message counts them ("Saved 7 carriers. 3 invalid numbers, 1 not found in FMCSA data (free rows, not charged)"). To keep only carriers in an export, filter on `outcome` being empty.

The run also saves a `SUMMARY` record in the key-value store. It lists the invalid numbers, the numbers that were not found and the numbers the run did not get to, says how many rows had contacts hidden or were skipped (including `filteredByInsurance`, the carriers left out by `insuranceFilter`), counts any values the actor could not read, and shows the query that ran. If a run fails part way, the `SUMMARY` and the status message say how many carriers were saved and charged before the error.

#### How full the fields are

Measured on 4 October 2026 with the actor's own test runs:

| Run | Rows | Phone | E-mail | E-mail for businesses | MC number | Looks like a person |
|---|---|---|---|---|---|---|
| New carriers, last 7 days, all states | 2,395 | 100% | 84.8% | 100% | 0% | 14.2% |
| Texas, for hire, 20 to 50 power units | 1,000 | 99.8% | 91.0% | 96.4% | 79.4% | 4.6% |
| California, active, first 10,000 by USDOT | 10,000 | 99.3% | 48.2% | 86.7% | 64.2% | 43.0% |

The last column was measured again on 20 October 2026 with the name rule described under Personal data, on the data of that day (the new-carriers run held 1,845 rows then). The other columns are from 4 October. The previous rule gave 14.2%, 5.6% and 44.3% on the same rows of 20 October. The rule hides less where a company name carries LLC, Inc or Corp and FMCSA still calls the registrant an individual, and more where a personal name is filed as a corporation or partnership, so the totals move little. On the 479 census rows in the actor's recorded test data the share is 11.1%, down from 12.5%.

Across all 2,244,352 active records in the census, 99.4% have a phone, 76.1% an e-mail and 32.0% an MC or MX number.

With `includeAuthority`, measured on 20 October 2026: of the new carriers added in the last 7 days, 44% had a pending application with an MC docket (54% of the Ohio ones), against 0% with an MC number in the census alone. Of 1,000 Texas for-hire carriers with 20 to 50 power units, 38% had an authority in the current licensing file, while 79% had an MC or MX docket in the census: the licensing file holds current authorities, so a carrier whose authority lapsed long ago has a census docket and `authorityStatus: "none"`. For those carriers `authorityNote` says so.

### Leads for insurance agents

A trucking company cannot get or keep its operating authority without insurance on file with FMCSA, so a carrier that has applied or been granted authority and has no policy on file is someone an insurance agent can call today. Every row of a run with `includeAuthority` (the default) and `includeInsurance` has `insuranceLead` and `insuranceLeadReason`. They are computed from the authority and the policies the run already read, with no extra request and no extra charge.

A carrier is a lead (`insuranceLead: true`) when it has an authority with status `active` (granted) or `pending` (application filed), and at least one of these holds:

- **Nothing on file.** A motor carrier authority (or one of unknown type) needs BI\&PD liability insurance and none is on file. A broker or freight forwarder authority needs a bond or trust fund and none is on file. A carrier with both kinds needs both. When a cancelled policy of that type exists, the reason names its date and insurer.
- **Lapsing.** Every policy of the required type on file has a cancellation in the cancellations file dated today or later, so the cover ends and no other policy replaces it. The reason gives the end date. A cancellation with a replacement policy on file is not a lead.

Everything else is `false`: the required insurance is on file, or the carrier has no granted or pending authority (inactive, withdrawn, none), so nothing is required. The reason says which. Cargo insurance is not checked, because FMCSA requires it only for household goods carriers.

`insuranceFilter` applies the rule before saving. `leadsOnly` keeps the leads. `insuredOnly` keeps carriers with a granted or pending authority whose required insurance is on file, and drops the ones without an authority. Carriers left out are not saved and not charged, they do not use up `maxItems`, and the run summary and log count them in `filteredByInsurance`. The licensing requests for those carriers are still made, which makes a filtered run slower, not dearer.

```json
{
    "newCarriersSince": "7 days",
    "states": ["TX"],
    "includeInsurance": true,
    "insuranceFilter": "leadsOnly",
    "requireEmail": true,
    "maxItems": 200
}
```

Limits. The flag is only as current as the FMCSA files, which are refreshed daily and can lag the real policy by a day or more, and a pending application may get its insurance filed within hours. A carrier that is `false` may still be shopping for a better price. A carrier whose authority was revoked for cancelled insurance has no granted or pending authority, so it is not a lead here until it applies again. The data does not say whether the carrier already has an agent.

### Ready-made searches

Open one of these, change the input and run it:

- [New trucking companies registered in the last 7 days](https://apify.com/solidfetch/fmcsa-carriers/examples/new-trucking-companies-feed)
- [Look up carriers by USDOT or MC number](https://apify.com/solidfetch/fmcsa-carriers/examples/fmcsa-usdot-lookup)
- [For-hire trucking companies by state and fleet size](https://apify.com/solidfetch/fmcsa-carriers/examples/for-hire-carriers-by-fleet-size)

### Send results to Make, Zapier, n8n or a CRM

Long runs do not need to keep a Make or Zapier scenario waiting:

1. Start the actor or one of its saved tasks on a schedule, or from your scenario with the asynchronous "Run Actor" step.
2. Trigger the next step on the finished run. In Make use the Apify module "Watch Actor Runs", in Zapier the Apify trigger for a finished actor run, in n8n the Apify node.
3. Read the rows with "Get Dataset Items" using the run's dataset ID.

For your own endpoint, open the actor's Integrations tab and add an HTTP webhook on "Run succeeded". Apify retries failed deliveries, and the payload contains `resource.defaultDatasetId`, which you can read at `https://api.apify.com/v2/datasets/<datasetId>/items?format=json`. Add `&format=csv` for a spreadsheet, or `&flatten=<field>` to turn nested objects into flat columns.

### Pricing

You pay per carrier saved (event `carrier`), and the price is on the Pricing tab. It is $3.00 per 1,000 carriers on the free plan, $2.70 on Bronze, $2.30 on Silver and $1.80 on Gold and above, plus $0.00005 per run start (per GB of memory). Numbers that are not found, values that are not numbers (both come back as free rows), rows skipped by `requireEmail` and rows past your cost limit are not charged. When a run reaches the maximum cost you set, it stops and keeps what was saved, and it never saves a carrier the remaining budget cannot pay for. If the platform migrates or restarts a run, the run picks up its own record of what it saved (`RUN_STATE` in the key-value store) and does not save or charge those carriers, or the free rows, again.

The 1,000-row Texas search above took about three seconds with operating authority (one second without) and the 10,000-row California run about twenty seconds (four without), because every page of up to 800 carriers adds the authority requests.

### Source and licence

- Dataset: FMCSA Company Census File, `az4n-8mr2`, on the US DOT open data portal: https://data.transportation.gov/d/az4n-8mr2. Publisher: Federal Motor Carrier Safety Administration. 4,512,957 records on 4 October 2026, refreshed daily.
- Operating authority and insurance, from the FMCSA "Motus" files on the same portal, each a full "All With History" snapshot, targeted for a refresh every day by 9:30 US Eastern: Motus Carrier `inys-ebih` (authority per docket and type, status, insurance on file), Motus AuthHist `yu5v-wbh6` (when and why a status changed), Motus Insur `c5y8-a4uz` (policies on file) and Motus InsHist `3uet-3z4i` (cancelled policies). The older Licensing and Insurance files (Carrier, AuthHist, Insur, InsHist) were frozen on 14 May 2026, when FMCSA moved registration to Motus, and are not used. The actor reads only the docket, authority, coverage and insurer columns, not the addresses, process agents (BOC-3) or policy numbers in those files. Data dictionary: "USDOT Motus Operating Authority Data Dictionary" (5/18/2026), attached to the datasets. The dictionary says amounts are in thousands, the data has whole dollars (a $750,000 minimum shows as 750000), and the actor returns dollars.
- Field definitions: the MCMIS Company Census Data Dictionary (Rev 8, 23 January 2026), attached to the dataset page.
- Licence: the same for all five datasets: the dataset metadata marks access as public and gives no licence (`https://project-open-data.cio.gov/unknown-license/`). The records are a work of the US federal government, which US copyright law (17 U.S.C. 105) leaves without copyright. The DOT and FMCSA web policies put no limit on reuse of this dataset. FMCSA's copyright notice covers only CVSA inspection terms, and the census does not contain them.
- Every row carries a `source` field that names the datasets it was built from.

### Personal data

Many carriers are one-person businesses. For them the registered e-mail is often a private mailbox and the address is a home address. The actor decides from the legal name first. A company word in it, such as LLC, Inc, Corp, Co, Company, Ltd or Partnership (also the Mexican S de RL de CV and SA de CV), or a public-body word such as city or county, means a business, even when FMCSA lists the legal form as individual. Two single letters inside a name are read as a person's initials, so "P A JOHNSON" or "L C BROWN" is not taken for P.A. or L.C.; at the end of a name ("SMITH HAULING L.P.") they are a legal form. Without such a word, a record is a person when FMCSA lists the legal form as individual or leaves it empty. When FMCSA lists corporation or partnership, the name still decides: a name that reads as one or two people (first name, middle name or initials, last name, optionally joined by AND or &, as in "DELL PEOPLES", "RICKY D LLAMAS" or "MIKE & BYRON MORGAN") with no business word such as Trucking, Transport, Express, Logistics, Freight, Enterprises, Services or Produce is a person, because sole proprietors often file as a corporation. If the e-mail is a free-mail address (Gmail, Yahoo, Hotmail, AOL, Outlook, iCloud), longer personal names count too. For person records the actor leaves out the phone, the e-mail and both street lines by default. The name, city, state and ZIP stay.

The check reads names, so it makes mistakes in both directions. A trucking company registered as "SMITH TRUCKING" without a suffix is treated as a person unless FMCSA calls it a corporation, and a corporation that FMCSA calls by a two-word name such as "BIG BEAR" is treated as a person. A one-member LLC is treated as a business even though its e-mail may belong to the owner. In a sample of 255 LLCs and corporations registered in the last week of September 2026, about three in four had filed a Gmail, Yahoo or similar address. Business e-mails can also name an employee.

The operating authority files hold no names of people, and the actor leaves out the addresses and process agents in them. One field needs care: when a filer withdraws an application, FMCSA writes the filer's e-mail address into the status reason ("Withdrawn by ..."). That address belongs to a filing agent or a person, so the actor returns the reason as "Withdrawn" and passes no e-mail address from these files on.

Set `includeContactsForSoleProprietors` to `true` only if you have a lawful basis for processing personal data. Under the GDPR (if you are in the EU or UK, or you target people there) and the CCPA and other US state privacy laws, you are the one who decides how the data is used and who must meet those rules. For outreach, US rules such as CAN-SPAM for e-mail and the TCPA for calls and texts apply to you as the sender. The actor provides public register data and does not give legal advice.

When a run fails, an error report with the error message and the shape of the input (which fields are set, how long the lists are), never your input values or your results, is sent to the developer to fix bugs.

### Limits

- When a `newCarriersSince` window finds nothing, the status message gives the window, the filters and the likely reason (the census lags about a day, and `requireMcNumber` removes almost every new carrier).
- `addDate` is the date the record was created, reactivated or updated by the FMCSA system. The new-carrier feed therefore also contains some older carriers that were reactivated.
- The census has no date for when operating authority was granted, and newly added carriers usually have no MC number in it yet. Of the records added in the last two weeks before 4 October 2026, almost none had one. FMCSA moved registration to its new Motus system in 2026, which gives a new applicant an 8-digit MC docket as soon as the application is published. The authority files have it, the census does not, which is why `includeAuthority` is on by default: the new-carriers feed then shows `mcNumber` and `pendingApplication` for the carriers that applied. A pending docket is an application, not a grant of authority. Do not use `requireMcNumber` on the new-carriers feed, because it reads the census only and removes almost every row.
- `statusDate` and `statusReason` are read for authorities that are not active. For an active authority they are `null`, and the date it was granted is not returned.
- The authority files have one row per authority type and docket, FMCSA's new system no longer separates common from contract authority, and the actor does not read the files' revocation and suspension notices apart from the status reason. Cancellation dates come from the insurance history file and can be a date in the future.
- The dataset is refreshed once a day and lags about one day. A carrier registered today shows up tomorrow. For a daily feed, schedule `newCarriersSince: "2 days"` and remove duplicates by `dotNumber`, so that a late refresh does not leave a gap.
- BOC-3 filings, inspections, crashes and out-of-service rates are not returned. The authority and insurance fields come from separate FMCSA files that are refreshed at about the same time as the census, so they can differ from it by a day.
- City matching is exact. `ST LOUIS` and `SAINT LOUIS` are different cities in the data.
- Without a Socrata app token the API may slow down clients that send many requests. The actor retries with growing pauses and follows the server's Retry-After header for waits of up to two minutes. It stops with an error if the server asks for a longer wait, if the dataset changes its columns, or if a column suddenly holds values the actor cannot read.

If this actor saved you time, a short review on the actor page helps other people find it.

# Actor input Schema

## `newCarriersSince` (type: `string`):

Only carriers whose census record was added on or after this date, newest first. Pick a date or a period such as "7 days". FMCSA also re-dates a record when a carrier is reactivated, so a few older companies appear too. The dataset is refreshed once a day and usually lags one day.

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

Physical address state, two-letter codes such as TX, CA or ON, or US state names. Empty means all states.

## `cities` (type: `array`):

Physical address city, matched exactly but without regard to case, for example Dallas. Combine with a state, since many city names repeat.

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

Interstate, or intrastate with or without hazardous materials. Empty means all.

## `authorizedForHireOnly` (type: `boolean`):

Keep carriers classified as Authorized For Hire, which haul other people's freight. Private fleets that only move their own goods are dropped.

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

Fleet size from the MCS-150 form: trucks, tractors and buses. Carriers without a number are dropped when you set a range.

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

Upper end of the fleet size range.

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

Total drivers reported by the carrier.

## `maxDrivers` (type: `integer`):

Upper end of the driver range.

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

Keep carriers that haul any of these cargo types. Empty means all.

## `hazmat` (type: `string`):

Filter on the FMCSA hazmat flag.

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

Skip inactive records. Lookups by number always return the record, active or not.

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

Skip carriers without an e-mail address in the output. Sole proprietors, whose e-mail is hidden by default, are skipped too and not charged.

## `requireMcNumber` (type: `boolean`):

Keep carriers that have an MC or MX docket number in the FMCSA census. Newly added carriers mostly have no MC number there yet, so combined with the new-carriers date filter this returns few or no rows. The pending MC numbers from the operating authority files are not used by this filter.

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

Look up these carriers instead of searching. Forms like 53467, USDOT 53467 or DOT# 53467 work. Up to 10,000 numbers per run, returned in the same order.

## `mcNumbers` (type: `array`):

Look up carriers by docket number: MC-138328, MX-231168, FF-4624, or just the digits. Plain digits mean MC, or the MX or FF docket with those digits when there is no MC one. One docket can belong to several carriers. All of them are returned, the active holder first.

## `includeContactsForSoleProprietors` (type: `boolean`):

Carriers that look like individuals come without phone, e-mail and street address by default, because those are a person's private contacts. Turn this on only if you have a lawful basis to process personal data (see Personal data in the README).

## `includeAuthority` (type: `boolean`):

Add the carrier's operating authority from the FMCSA licensing files: every MC, MX and FF docket with its authority type and status (active, pending application, inactive, withdrawn), since when and why for authorities that are not active (revoked, suspended), and the liability, cargo and bond insurance on file. New carriers get their pending MC number. One extra request per page of up to 800 carriers, plus one when a carrier on the page has an authority that is not active. No extra charge.

## `includeInsurance` (type: `boolean`):

Add the policies on file (insurer, type, primary or excess, coverage amount, effective date) and the carrier's most recent cancelled policies with their cancellation dates. Two more requests per page, so it is off by default. No extra charge.

## `insuranceFilter` (type: `string`):

Keep only carriers that need insurance, or only carriers that have it. Needs Include operating authority and Include insurance policies turned on. Carriers left out are not saved and not charged. The rule is in the README under Leads for insurance agents.

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

Stop after this many carriers. You pay per carrier saved. Empty means 100 for a search and every carrier found for a lookup.

## Actor input object example

```json
{
  "newCarriersSince": "7 days",
  "states": [
    "TX"
  ],
  "authorizedForHireOnly": false,
  "hazmat": "any",
  "activeOnly": true,
  "requireEmail": false,
  "requireMcNumber": false,
  "includeContactsForSoleProprietors": false,
  "includeAuthority": true,
  "includeInsurance": false,
  "insuranceFilter": "any"
}
```

# Actor output Schema

## `carriers` (type: `string`):

No description

## `contacts` (type: `string`):

No description

## `operations` (type: `string`):

No description

## `authority` (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 = {
    "newCarriersSince": "7 days",
    "states": [
        "TX"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidfetch/fmcsa-carriers").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 = {
    "newCarriersSince": "7 days",
    "states": ["TX"],
}

# Run the Actor and wait for it to finish
run = client.actor("solidfetch/fmcsa-carriers").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 '{
  "newCarriersSince": "7 days",
  "states": [
    "TX"
  ]
}' |
apify call solidfetch/fmcsa-carriers --silent --output-dataset

```

## MCP server setup

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

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/DatQO2oQy4nqG1f5V/builds/6aGaZZ3mcSUL5L6J7/openapi.json
