new-site/docs/fmcsa-trucking-plan.md
justin 3325259af7 fix(email): drop @TrackLink from per-subscriber CTAs (404 + collapse bug)
Listmonk @TrackLink registers ONE static URL per tracked link and points
every recipient's /link/<uuid> redirect at it. On per-subscriber hrefs
({{ lp_link }}, ?dot=, ?npi=, ?clia=) this is doubly broken:
 - the registered links.url was captured before the {{ lp_link }} token
   rendered, yielding /order/slug&utm_source=... (first &, no ?) -> 404
 - even when valid it collapses every carrier/provider onto the first
   subscriber's dot/npi/clia value

Real human clicks are already tracked via Umami campaign-click (bot
filtered), so Listmonk link tracking here is redundant and destructive.

Stripped @TrackLink from per-subscriber CTAs:
 - scripts/create_deficiency_source_campaigns.py (_cta, _dot_check_cta)
 - data/trucking_campaigns/{ucr,ifta}_*.html
 - data/hc_campaigns/*.html (10 templates)

Static CTAs (e.g. CRTC ?code= order link) keep @TrackLink (safe).
Live fix to the 10 broken registered links.url rows applied separately
(first & -> ?), backup in listmonk.pw_links_dkim_fix_bak_20260622.

Docs: new runbook incident section + corrected the disproven
'use @TrackLink on all CTAs' guidance in fmcsa/hc plans.
2026-06-22 17:01:39 -05:00

213 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# FMCSA / Trucking Compliance Services — Product Plan
## Market Overview
- **2,077,308** total motor carriers in FMCSA census
- **1,584,234** with email addresses (76%)
- **29,113** with overdue MCS-150 (biennial update >2 years old) and email
- 97% of carriers have fewer than 20 trucks — small operators who can't be bothered with paperwork
## Phase 1: Compliance Checker + Data Pipeline (DONE)
### Completed
- [x] `fmcsa_carriers` table (migration 078)
- [x] Socrata data downloader (`scripts/workers/fmcsa_census_downloader.py`)
- [x] FMCSA QCMobile API integration (web key registered)
- [x] API route: `GET /api/v1/dot/lookup?dot=XXXXXX` — 7 compliance checks
- [x] API route: `GET /api/v1/dot/search?name=Acme` — name search
- [x] Frontend: `/tools/dot-compliance-check` — full site chrome, orange theme
- [x] Homepage: orange banner + "Five areas" with Trucking/DOT card
- [x] API access restricted (nginx — public endpoints only, admin blocked)
### Current Checks (from FMCSA QCMobile API)
| Check | Source | Status |
|-------|--------|--------|
| Operating status (allowed to operate Y/N) | FMCSA API | ✅ Live |
| MCS-150 biennial update (overdue detection) | Census + API | ✅ Live |
| Insurance filing (BIPD, cargo, bond) | FMCSA API | ✅ Live |
| Safety rating (S/C/U) | FMCSA API | ✅ Live |
| Operating authority (common/contract/broker) | FMCSA API | ✅ Live |
| Out-of-service rate vs national average | FMCSA API | ✅ Live |
| Crash record (fatal/injury/total) | FMCSA API | ✅ Live |
## Phase 2: Additional Compliance Checks
### UCR (Unified Carrier Registration) — HIGH PRIORITY
- **What:** Annual registration + fee ($59$7,511 based on fleet size)
- **Who:** All interstate for-hire carriers, brokers, freight forwarders
- **Penalty:** Vehicles placed out of service at roadside inspection
- **Data source:** ucr.gov — no public API, requires scraping individual lookups
- **Implementation:** Playwright scraper to check UCR status by DOT#, add as check in the compliance checker
- **Revenue opportunity:** UCR filing service ($4999 per carrier per year)
### IFTA (International Fuel Tax Agreement) — MEDIUM
- **What:** Quarterly fuel tax returns + decals for multi-jurisdiction carriers
- **Who:** Carriers operating in 2+ IFTA jurisdictions
- **Penalty:** Fines + inability to operate in non-base jurisdictions
- **Data source:** State-level — no central database. Would need to ask during intake.
- **Implementation:** Informational check based on carrier operation type (interstate = likely needs IFTA)
- **Revenue opportunity:** IFTA quarterly filing service ($99199/quarter)
### IRP (International Registration Plan) — MEDIUM
- **What:** Apportioned plates/registration for multi-state CMV operation
- **Who:** Interstate carriers (vehicles >26,000 lbs or 3+ axles)
- **Data source:** State-level — no central database
- **Implementation:** Informational check based on carrier type
- **Revenue opportunity:** IRP registration service ($149299)
### Drug & Alcohol Testing Program — HIGH VALUE
- **What:** DOT-mandated random drug/alcohol testing pool, written policy, MRO, DER
- **Who:** Every carrier with CDL drivers (basically everyone)
- **Penalty:** Driver disqualification, carrier placed out of service, fines up to $16,000/violation
- **Data source:** No public database — self-certified compliance
- **Implementation:** Not a "check" — this is a service offering. Sell enrollment in a testing consortium + written policy + compliance binder.
- **Revenue opportunity:** $199/year per carrier (consortium enrollment + policy) — RECURRING
- **Partners needed:** Third-party testing consortium (e.g., DISA, US Drug Testing Labs, National Drug Screening)
### New Entrant Safety Audit Prep — MEDIUM VALUE
- **What:** New carriers must pass an FMCSA safety audit within 18 months
- **Who:** Carriers with DOT authority issued in the last 18 months
- **Data source:** SAFER shows `add_date` in census — can filter for recent registrations
- **Implementation:** Filter census for `add_date` within last 18 months, target with audit prep service
- **Revenue opportunity:** Safety audit prep package ($299499)
### ELD (Electronic Logging Device) — LOW PRIORITY
- **What:** Must use FMCSA-registered ELD for hours of service tracking
- **Who:** Nearly all CMV operators (exemptions for short-haul, older vehicles)
- **Data source:** FMCSA publishes registered ELD device list, but no per-carrier compliance data
- **Implementation:** Informational only — cannot verify compliance externally
- **Revenue opportunity:** Low — ELD compliance is mostly handled by device vendors
### Hazmat (HM-232 / PHMSA) — NICHE
- **What:** PHMSA registration + security plan for hazmat carriers
- **Who:** Carriers hauling hazardous materials (hm_flag=true in census)
- **Data source:** PHMSA has lookup, not in FMCSA API. Census has `hm_flag` field.
- **Implementation:** Flag hazmat carriers and offer PHMSA registration check
- **Revenue opportunity:** Hazmat compliance package ($399799)
### State-Level Permits & Registrations
| State Filing | States | Data Available | Priority |
|-------------|--------|---------------|----------|
| Overweight/oversize permits | All 50 | State DOT websites | Low — too fragmented |
| State motor carrier tax | ~12 states (CA, OR, NM, NY, KY, etc.) | State comptroller sites | Medium — target high-volume states |
| State DOT registration | Varies | State DMV/DOT systems | Low |
| Unified Carrier Registration (state enforcement) | 41 participating states | ucr.gov | High — covered in UCR above |
| CARB (California Air Resources Board) | CA only | CARB TRU lookup | Medium — big market, one state |
| Oregon weight-mile tax | OR only | ODOT system | Low |
| New York HUT (Highway Use Tax) | NY only | NY DTF system | Low |
| Kentucky KYU / weight distance tax | KY only | KY DOR system | Low |
| New Mexico weight distance tax | NM only | NM MVD system | Low |
**Recommended state-level focus:** California (CARB) — largest market, real enforcement, public lookup available.
## Phase 3: Service Catalog & Pricing
### Services to Add to compliance-orders.ts
| Service | Slug | Price | Gov Fee | Notes |
|---------|------|-------|---------|-------|
| MCS-150 Biennial Update | `mcs150-update` | $79 | $0 | Filed online via SAFER |
| BOC-3 Process Agent Filing | `boc3-filing` | $149 | $0 | Designate PW as process agent in all 50 states |
| UCR Annual Registration | `ucr-registration` | $79 | $59$7,511 | Fee based on fleet size |
| New Operating Authority (MC#) | `mc-authority` | $499 | $300 | FMCSA application fee |
| DOT Number Registration | `dot-registration` | $149 | $0 | New USDOT number |
| Drug & Alcohol Program Setup | `dot-drug-alcohol` | $199/yr | $0 | Consortium + policy + DER — RECURRING |
| Safety Audit Preparation | `safety-audit-prep` | $399 | $0 | New entrant audit prep package |
| DOT Full Compliance Bundle | `dot-full-compliance` | $599 | varies | MCS-150 + BOC-3 + UCR + D&A program |
| IFTA Quarterly Filing | `ifta-quarterly` | $99/qtr | varies | State fuel tax return |
| Hazmat/PHMSA Registration | `phmsa-registration` | $499 | $0$2,575 | HM-232 registration |
### Pricing Strategy
- MCS-150 at $79 is the loss leader / entry point (like CPNI for telecom)
- BOC-3 at $149 is recurring — carrier needs it as long as they operate
- Drug & Alcohol at $199/yr is the real recurring revenue play
- Full bundle at $599 is the upsell for carriers with multiple deficiencies
## Phase 4: Email Campaign
### Target Segmentation
| Segment | Count | Criteria | Message |
|---------|-------|----------|---------|
| Severely overdue (4+ years) | ~21,000 | mcs150_parsed < 2022, has email | "Your USDOT may be deactivated" |
| Overdue (2-4 years) | ~8,000 | mcs150_parsed 2022-2024, has email | "MCS-150 biennial update is past due" |
| Due soon (expiring 2026) | ~hundreds of thousands | mcs150_parsed in 2024 | "Your MCS-150 update is coming due" |
| New entrants (first 18 months) | ~50,000 | add_date > 18 months ago | "Safety audit deadline approaching" |
| Hazmat carriers | ~100,000+ | hm_flag=true | "PHMSA registration compliance check" |
### Campaign Approach
- Same Listmonk infrastructure as FCC campaigns
- Warmup schedule (200/day → ramp up)
- Link to DOT compliance checker with `?dot={DOT#}&email={email}` pre-filled
- Use `@TrackLink` ONLY on **static** CTAs (same URL for all recipients). NEVER on
a per-subscriber href such as `{{ lp_link }}` / `?dot={DOT#}` — Listmonk registers
one static URL per tracked link and would 404 + collapse every carrier onto one
DOT (see runbook "Jun 22 2026 — @TrackLink on per-subscriber CTAs"). Per-subscriber
links render directly; human clicks are tracked via Umami `campaign-click`.
- Free compliance check as the CTA (not direct sell)
## Phase 5: Automation (Future)
### Playwright Filing Automation
- MCS-150 updates via SAFER web portal
- UCR registration via ucr.gov
- BOC-3 filing via FMCSA L&I system
- MC authority application via FMCSA URS
### Recurring Revenue
- Annual UCR registration reminders + filing
- Biennial MCS-150 update reminders + filing
- Drug & alcohol consortium annual renewal
- BOC-3 process agent renewal
## Technical Architecture
### Data Flow
```
Socrata API (census) → fmcsa_carriers table (2M records)
FMCSA QCMobile API ← /api/v1/dot/lookup (real-time per carrier)
/tools/dot-compliance-check (frontend)
Listmonk campaigns (email outreach)
Order flow → worker handlers → filing
```
### Cron Jobs Needed
- Daily: FMCSA census delta download (Socrata API)
- Weekly: UCR status scrape for flagged carriers
- Monthly: New entrant identification (recent DOT registrations)
### Database Tables
- `fmcsa_carriers` — census data (migration 078) ✅
- `fmcsa_compliance_check_log` — search analytics (TBD)
- `dot_compliance_orders` — or reuse `compliance_orders` with new service slugs (TBD)
## Competitive Landscape
### Existing DOT compliance service providers
- **DOT Compliance Group** (dotcompliancegroup.com) — full service, unknown pricing
- **J.J. Keller** (jjkeller.com) — established, enterprise-focused, expensive
- **Foley Carrier Services** (foleyservices.com) — insurance + compliance, big players
- **FMCSA Registration** (fmcsaregistration.com) — direct competitor, $149499 per service
- **Moving Authority** (movingauthority.com) — MC authority specialists
- **DOT Registrations** (dotregistrations.org) — similar pricing model
### Our Differentiator
- **Free compliance checker tool** — nobody else offers this as a lead magnet
- **AI-powered deficiency detection** at scale (same as FCC model)
- **Email outreach to 1.5M+ carriers** with specific deficiency data
- **Lower pricing** through automation (no manual data entry)
- **Bundled services** (telecom + trucking for carriers that do both)
## IRP filing — known follow-ups (2026-06)
- **POA signer name/title on auto-signed orders**: dot-compliance-remediation
orders auto-sign the state-trucking authorization without capturing the
signer's printed name/title, so the POA PDF attached to IRP submissions has a
blank printed-name/title (the date IS rendered). We are sending these as-is to
see if base states accept them; if a state rejects for an incomplete POA,
capture signer_name/signer_title in the remediation auth flow (or re-issue the
POA for signature) before submitting. Code: state_trucking_authorization.py
(template has name/title/date fields + a date anchor), esign_stamp.py (stamps
signature + date).