DEV Community

tmeteor-data
tmeteor-data

Posted on

Finding newly registered trucking companies from the FMCSA census

I built an Apify actor that turns FMCSA's public carrier census into a daily list of new trucking companies, so I'm biased. I also used an AI assistant to help draft this article, and I reviewed and edited it. The free route comes first because for many people it is all you need.

The problem

Anyone who sells to trucking startups (insurance, factoring, fuel cards, ELD and dispatch software, recruiting) wants one list: companies that registered with the Federal Motor Carrier Safety Administration in the last few days. Those companies are choosing vendors right now. FMCSA publishes the census as open data, but the raw file is a wide table with a text date column and no "what is new since yesterday" view.

The free route

The census is dataset az4n-8mr2 on data.transportation.gov, which runs Socrata, so you can query it with SoQL over plain HTTP. No key is needed for light use.

import requests
from datetime import date, timedelta

URL = "https://data.transportation.gov/resource/az4n-8mr2.json"
since = (date.today() - timedelta(days=7)).strftime("%Y%m%d")
params = {
    "$where": f"status_code='A' AND add_date >= '{since}' AND phy_state='TX'",
    "$order": "add_date DESC",
    "$limit": 50,
}
resp = requests.get(URL, params=params, timeout=60)
resp.raise_for_status()
for r in resp.json():
    print(r["add_date"], r["dot_number"], r["legal_name"],
          r.get("power_units"), r.get("email_address"))
Enter fullscreen mode Exit fullscreen mode

Notes from running it against the live dataset: add_date is a text value in YYYYMMDD form, so a string comparison works for date windows. status_code='A' keeps active records. Other columns I saw include phy_state, legal_name, power_units, total_drivers, phone and email_address. Column sets can change, so check the dataset's column list before relying on a name. Socrata caps a single response, so page with $offset if you need more than a few thousand rows.

That is a perfectly good weekly script. Put it in cron, write the rows to a CSV, and you are done.

What the free route does not do

These are the gaps that made me build something instead of keeping a script:

  • Cross-run dedup. Your script returns the same carriers every time the window overlaps. You need your own store of USDOT numbers you have already seen.
  • Authority status. The census file does not tell you whether a carrier's operating authority is pending or granted. That lives in a separate FMCSA authority dataset that you would have to join yourself (the actor uses yu5v-wbh6 for this).
  • Normalized fields. The raw census uses codes such as A for carrier operation. The actor adds labels and ISO dates.
  • Filters people ask for. Fleet size, hazmat, cargo types, for-hire only (USDOT numbers are also issued to contractors and landscapers who move their own goods).
  • Scheduling and delivery. Hosting a cron job, retrying, and pushing rows to a webhook or CRM is your problem.

The actor

The actor reads the same federal dataset, joins the authority history, filters, remembers what it has already delivered, and exports JSON, CSV or Excel. It needs no API key besides your Apify account.

Example input (these are real input fields):

{
  "states": ["TX"],
  "daysBack": 2,
  "requireEmail": true,
  "onlyNewSinceLastRun": true,
  "maxResults": 100
}
Enter fullscreen mode Exit fullscreen mode

A daily schedule with daysBack: 2 overlaps the previous day on purpose, so a late FMCSA update is not missed, while onlyNewSinceLastRun stops repeats.

Excerpt of real output from the sample file (contact fields trimmed here; they are in the actual rows):

{
  "legal_name": "RVRR TRANSPORT LLC",
  "usdot": "9912039",
  "state": "MN",
  "power_units": 1,
  "total_drivers": 4,
  "carrier_operation_label": "Interstate",
  "registered_date_iso": "2026-10-12",
  "census_status": "Active",
  "officer_1": "RAYMOND UDE",
  "authority_status": "Pending",
  "authority_status_reason": "Published to FMCSA Register"
}
Enter fullscreen mode Exit fullscreen mode

In that sample file, the rows I looked at were one- or two-truck operators with authority still Pending, which is typical for brand-new registrations.

Honest limits and pricing

  • US carriers only, and the data is only as fresh as FMCSA's census, which is updated on FMCSA's schedule.
  • Email and phone are whatever the carrier filed. Many are personal inboxes or cell numbers, and carriers that filed no email have none. Follow TCPA and CAN-SPAM rules when you use them.
  • The census file has no insurance filing status.
  • Pricing is pay per result with no subscription, billed per unique new carrier delivered. As I write this (October 23, 2026) the event price is $0.008 per carrier, and I have a price change scheduled for early November, so check the store page for the price in effect before a big run. Apify's free plan credit covers a small test.

If you only need a weekly list for one state, use the script above. If you want a deduped daily feed without maintaining it, the actor is here: https://apify.com/transparent_meteorite/fmcsa-new-carrier-leads

Disclosure again: I built this actor, and an AI assistant helped draft this article. I reviewed the content and ran the free-route snippet against the live dataset.

Top comments (0)