Why use a tool instead of letting the agent browse
An agent browsing SAFER has to read HTML, can miss fields, and may phrase the same result differently each time. A tool that returns one JSON object per carrier with a fixed verdict and flags gives the same answer for the same data, which is what you want before money and freight move.
Steps
- Connect the tool to your agent. Add https://mcp.apify.com/?tools=sourcewire/fmcsa-carrier-verify to your MCP client and sign in to Apify when prompted.
- Ask the agent to check a carrier. Give it a USDOT or MC number, for example: Verify USDOT 63585 and tell me whether I should tender a load.
- Read the verdict first. PASS_BASIC_CHECKS, REVIEW, FAIL or NOT_FOUND. NOT_FOUND means FMCSA has no record and should be treated as high risk.
- Read the flags. Each flag is a plain-English reason such as new authority, missing insurance, a pending revocation or an active out-of-service order.
- Confirm on SAFER before tendering. Use the sourceUrls in the result to open the FMCSA SAFER snapshot and confirm before you move freight.
1. Connect the tool
In any MCP client that supports remote servers, add:
https://mcp.apify.com/?tools=sourcewire/fmcsa-carrier-verify
Client-by-client instructions are in How to add Apify tools to Claude or Cursor via MCP.
2. Give the agent a rule to follow
A short system prompt or project instruction keeps the agent consistent:
You are a freight-broker assistant. Before any load is tendered, call the
fmcsa-carrier-verify tool with the carrier's USDOT or MC number.
- If verdict is FAIL or NOT_FOUND: say "Do not tender" and list the flags.
- If verdict is REVIEW: say "Needs human review" and list the flags.
- If verdict is PASS_BASIC_CHECKS: say "Basic checks passed" and remind me to
confirm on SAFER using the sourceUrls. Never call it an endorsement.
3. Read the result
For each carrier the tool returns a verdict and the reasons behind it. A real example from October 28, 2026:
{
"dotNumber": "4522887",
"legalName": "DIAMOND J TRUCKING LLC",
"usdotStatus": "ACTIVE",
"flags": [
"Active out-of-service order: New Entrant Revoked - Refusal of Audit/No Contact",
"For-hire interstate carrier with no ACTIVE operating authority"
],
"verdict": "FAIL"
}
FAIL- USDOT inactive, active out-of-service order, UNSATISFACTORY rating, pending revocation, BIPD below the required minimum, broker bond missing, or for-hire with no active authority.
REVIEW- CONDITIONAL rating, authority under 180 days old, application pending, required cargo insurance missing, or MCS-150 more than 2 years old.
PASS_BASIC_CHECKS- None of the above. Not an endorsement.
NOT_FOUND- No FMCSA record. Treat as high risk. Not charged.
4. Check a whole carrier list on a schedule
The same tool takes up to 10,000 USDOT or MC numbers per run. From Python:
# Re-check a carrier list and print anything that isn't a clean pass.
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
carriers = ["63585", "4522887", "4574510"] # USDOT numbers
run = client.actor("sourcewire/fmcsa-carrier-verify").call(
run_input={"dotNumbers": carriers, "includeHistory": True, "maxCarriers": 500}
)
for c in client.dataset(run["defaultDatasetId"]).iterate_items():
if c["verdict"] != "PASS_BASIC_CHECKS":
print(c.get("dotNumber") or c.get("query"), c["verdict"])
for flag in c.get("flags", []):
print(" -", flag)
To run it automatically, save the input as a task in Apify Console and add a schedule, or call it from Make, Zapier or n8n, and alert on any carrier whose verdict changes.
What this does not replace
- The data refreshes daily, so a change made on SAFER today may show up tomorrow.
- These are compliance checks, not identity verification. They don't check VINs, ELDs or that the person you're talking to really works for the carrier.
- Always confirm on SAFER before tendering. This is not legal advice.
Cost: $0.008 per carrier found, $8 per 1,000. Numbers FMCSA has no record of are free. Open FMCSA Carrier Verify on the Apify Store.