Skip to main content

carrier-verify

Open-source carrier identity verification against public FMCSA data — a first line of defense against deceptive pickups and freight fraud.

Cargo theft and freight fraud cost the U.S. supply chain up to $35 billion a year, and the fastest-growing attack is the deceptive pickup: a criminal using a fake or stolen carrier identity walks into a facility and is handed a loaded trailer. The FBI's IC3 advisory recommends independently verifying every carrier before releasing a load — this tool automates the public-data half of that verification in one command.

$ carrier-verify check "USDOT 1234567" --expect-name "ACME TRUCKING LLC"
USDOT 1234567: ACME TRUCKING LLC
  Location: FONTANA, CA
  Power units: 42  Drivers: 55
  Verdict: GREEN — PASS
$ carrier-verify check 7654321 --expect-name "Reliable Haulers"
USDOT 7654321: PF EXPRESS
  Verdict: RED — HOLD
    [RED] NOT_ALLOWED_TO_OPERATE: FMCSA lists this carrier as NOT allowed to operate.
    [RED] OOS_ORDER: Carrier has an out-of-service order dated 2026-02-01.
    [RED] NAME_MISMATCH: Booked carrier 'Reliable Haulers' does not match FMCSA
          record 'PF EXPRESS' (similarity 0.13). Possible deceptive pickup / identity misuse.

What it does

  • Looks up any carrier by USDOT number (or name / MC docket) via FMCSA's public QCMobile API.
  • Runs a red-flag rules engine informed by FBI IC3 guidance: revoked authority, out-of-service orders, safety ratings, stale MCS-150 filings, zero-truck "paper carriers," abnormal out-of-service inspection rates.
  • Matches identity against your booking: pass --expect-name from the rate confirmation and get a RED alert when the truck's USDOT resolves to a different company — the classic deceptive-pickup signature.
  • Accepts raw OCR strings: "US DOT# I23456O" is normalized (confusable characters corrected) before lookup, so it drops directly into camera/OCR pipelines reading numbers off cab doors at yard gates.
  • GREEN / YELLOW / RED verdicts designed for gate workflows: RED is rare and actionable; ambiguity is YELLOW (a 15-second human check), never noise.

Install

pip install carrier-verify        # once published; or:
pip install git+https://github.com/Lym422/carrier-usdot-verify

Get a free FMCSA web key at https://mobile.fmcsa.dot.gov/QCDevsite/ and:

export FMCSA_WEBKEY=your_key_here

Library use

from carrier_verify import QCMobileClient, evaluate, verdict, normalize_usdot

dot = normalize_usdot("USDOT 1234567").value      # OCR-tolerant normalization
client = QCMobileClient()                          # reads FMCSA_WEBKEY
carrier = client.get_carrier(dot)
authority = client.get_authority(dot)

findings = evaluate(carrier, authority=authority, expected_name="ACME TRUCKING LLC")
print(verdict(findings))                           # Severity.RED / YELLOW / INFO
for f in findings:
    print(f.severity, f.code, f.message)

Exit codes: 0 pass/verify, 1 RED hold, 2 input or API error — usable directly in gate automation scripts.

Why this exists

Digital carrier vetting verifies paperwork. Roadside intelligence networks verify that carriers exist somewhere. But at the one moment fraud can actually be stopped — when a trailer is released at a gate — verification is still a clipboard. This project is part of a broader effort to build an open, vendor-neutral physical verification layer for freight custody transfer: carrier identity (this tool), plus camera-based USDOT reading and multi-type cargo-seal recognition (open benchmark and models — roadmap below).

See docs/red_flags.md for the full pickup-fraud checklist, including the physical checks no API can automate.

Roadmap

  • SAFER company-snapshot fallback when QCMobile is unavailable
  • Batch mode (carrier-verify batch loads.csv)
  • FMCSA census-file offline mode (no API key required)
  • Synthetic gate-imagery benchmark for USDOT OCR (separate repo)
  • Multi-type cargo seal detection dataset & baseline models (separate repo)

Data & disclaimers

All data comes from public FMCSA sources; accuracy and freshness are FMCSA's. A GREEN verdict means no public-data red flags, not that a carrier is legitimate — pair with physical checks (see checklist) and commercial vetting where appropriate. Not legal advice; not affiliated with FMCSA or USDOT.

License

Apache-2.0 — see LICENSE.

Metadata

Release files for carrier-verify 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for carrier-verify 0.1.0
File Size Uploaded
carrier_verify-0.1.0.tar.gz 17.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for carrier-verify 0.1.0
File Interpreter ABI Platform
carrier_verify-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 35.0 kB

Release files / carrier_verify-0.1.0.tar.gz

Download URL carrier_verify-0.1.0.tar.gz
Size 17.9 kB
Tags Source
SHA-256 checksum
How to use checksums
c96b8aff0381a0104dd755a3f6d8134fa5705c49e933b2e1699947e34ad03382
BLAKE2b-256 checksum
How to use checksums
54e430433b6568df6e710b45f3067399b3b54dc2d75fb2b802cb492f4ae8e9ec
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Release files / carrier_verify-0.1.0-py3-none-any.whl

Download URL carrier_verify-0.1.0-py3-none-any.whl
Size 17.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
771c2c26408774f8ec25e59e1f579ba9a6e655bed2b7a6201d929a096f738f02
BLAKE2b-256 checksum
How to use checksums
da7c05bea5a9e49d95d6e6259aad1b617be74eb1a4c404d817b3de60ef8f7712
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page