Haulflare
Haulflare API · v1

API docs

Every morning Haulflare flags the U.S. trucking companies that have to buy or switch commercial auto insurance, from public FMCSA filings. The API gives you that list as JSON, as CSV, or straight into a Google Sheet.

The API comes with every paid plan. Get your key on the API & Sheets page of your account; we show it once, there.

Quick start

Google Sheets

Paste this into cell A1 of a new sheet. It refreshes about once an hour.

=IMPORTDATA("https://haulflare.com/v1/triggers?format=csv&state=TX&api_key=YOUR_API_KEY")

curl

curl -H "x-api-key: YOUR_API_KEY" \
  "https://haulflare.com/v1/triggers?state=TX&sort=deadline&limit=50"

JavaScript

const res = await fetch('https://haulflare.com/v1/triggers?state=TX&trigger=CANCELLATION_PENDING', {
  headers: { 'x-api-key': process.env.HAULFLARE_KEY },
});
const { total, data } = await res.json();

Python

import requests
r = requests.get("https://haulflare.com/v1/triggers",
                 params={"state": "TX", "min_trucks": 5, "sort": "deadline"},
                 headers={"x-api-key": HAULFLARE_KEY})
leads = r.json()["data"]

Authentication

Send your key in the x-api-key header. Spreadsheets can't send headers, so the key also works as an api_key query parameter; use that only where you have to.

A key only returns the states and data your plan covers. Keep it private: anyone with it can pull your list. If it leaks, replace it on the API & Sheets page; the old key stops working at once.

Limits & freshness

The daily list

GET/v1/triggersProducer, Agency, National

Active triggers in your states, newest first unless you choose a sort. A carrier can appear once per signal.

ParameterDescription
stateTwo-letter codes, comma-separated: TX,OK. Defaults to all of your plan's states.
triggerOne or more signal types, comma-separated: CANCELLATION_PENDING,UNINSURED_DEADLINE.
qSearch: carrier name, DBA or city contains this, or an exact USDOT or MC number.
sorturgent (most urgent signal, then soonest deadline), deadline (days left, soonest first), trucks (largest fleet first), newest. Default: newest, then urgency.
min_trucks
max_trucks
Fleet size by power units.
sinceYYYY-MM-DD: only triggers first flagged on or after this day (Eastern). Use today's date for "new today".
confidencehigh, medium, estimated, low, comma-separated. See confidence.
limitRows per page, 1–10,000. Default 500 for JSON, 10,000 for CSV.
offsetRows to skip, for paging.
formatcsv for a CSV file with the same columns as the JSON fields. Default JSON.

Response

{
  "total": 1284,
  "limit": 500,
  "offset": 0,
  "count": 500,
  "data": [
    {
      "id": 48211,
      "trigger": "CANCELLATION_PENDING",
      "trigger_label": "Policy cancellation pending",
      "dot_number": "3456789",
      "mc_number": "MC1234567",
      "legal_name": "LONE STAR HAULING LLC",
      "dba_name": null,
      "city": "DALLAS",
      "state": "TX",
      "zip": "75201",
      "phone": "(214) 555-0193",
      "cell_phone": null,
      "email": "[email protected]",
      "officer_name": "DAVID MILLER",
      "power_units": 8,
      "total_drivers": 9,
      "is_hazmat": false,
      "current_insurer": "ACME MUTUAL",
      "policy_number": "CA-55120",
      "policy_effective_date": "2025-11-14",
      "target_action_date": "2026-11-14",
      "confidence": "high",
      "details": { "days_left": 19, "coverage_amount": 750, "form": "91X" },
      "detected_at": "2026-10-26T10:04:12.000Z"
    }
  ]
}

Insurer exit watchlist

GET/v1/insurersAgency, National

Per-insurer cancellation rates for trucking liability policies, from the latest daily snapshot. Insurers cancelling far faster than the market are flagged; their policyholders show up in the list as INSURER_EXIT_RISK.

ParameterDescription
flaggedtrue to return only flagged insurers.
{
  "snapshot_date": "2026-10-26",
  "data": [
    {
      "insurer": "BADCO INSURANCE",
      "book_size": 1840,
      "cancels_30d": 212,
      "baseline_monthly_cancels": 61,
      "cancel_rate_30d": 0.115,
      "market_cancel_rate_30d": 0.031,
      "trend_ratio": 3.5,
      "flagged": true,
      "flag_reason": "cancelling 11.5% of its book in 30 days vs 3.1% market-wide"
    }
  ]
}

Fields

FieldMeaning
trigger, trigger_labelThe signal and its plain-English name.
dot_number, mc_numberUSDOT number and MC docket, as filed with FMCSA.
legal_name, dba_nameThe carrier's legal and doing-business-as names.
city, state, zipPhysical address location.
phone, cell_phone, emailContacts from the carrier's MCS-150 filing. Many are cell phones: follow TCPA and do-not-call rules.
officer_nameCompany officer from the MCS-150, usually the owner.
power_units, total_driversFleet size: trucks and drivers.
is_hazmatCarries hazardous materials.
current_insurer, policy_number, policy_effective_dateThe live auto liability (BIPD) filing on record, when there is one.
target_action_dateThe date that makes the lead urgent: cancellation date, deadline or renewal. See each signal.
confidenceHow sure the date is. See confidence.
detailsSignal-specific extras, such as days_left or crash counts.
detected_atWhen Haulflare first flagged this trigger.

Signals

triggerWhat happenedtarget_action_date
CANCELLATION_PENDINGThe insurer filed to cancel the carrier's liability coverage.The day the cancellation takes effect.
SUSPENDED_NO_INSURANCEFMCSA suspended or revoked the authority for missing insurance.The deadline to file insurance and reinstate.
NEW_PENDING_AUTHORITYA new authority application with no insurance on file yet.When the application lapses without a filing.
UNINSURED_DEADLINEA published authority still without insurance as its deadline nears.The estimated lapse date.
RECENT_CRASHA recent reportable crash: likely shopping at renewal.The current policy's next renewal.
INSURER_EXIT_RISKThe carrier's insurer is shedding trucking policies (see watchlist).The current policy's next renewal.
RENEWAL_WINDOWThe liability policy renews soon.The renewal date.

Confidence

ValueMeaning
highThe date comes straight from an FMCSA filing.
mediumDerived from a filing, such as a renewal computed from the policy start date.
estimatedWorked out from a publication date because the exact date isn't filed.
lowOlder or incomplete filings; check before you rely on it.

Errors

Errors come back as JSON with a message that says what to fix.

StatusWhen
400A parameter is invalid, such as an unknown signal or a bad date.
401The key is missing, wrong or was replaced.
403The request is outside your plan: a state you don't have, the insurer watchlist on Producer, or a key with no states yet.
429Too many requests; wait a minute.
{ "statusCode": 403, "message": "Your plan does not include state(s): CA", "error": "Forbidden" }

Questions or something missing? Email [email protected].