Public Rate-Filing API — Get Business Coverage

Public Rate-Filing API

Get Business Coverage exposes a small, free, read-only JSON API over its commercial-insurance rate-filing dataset. Every row links to its public SERFF tracking record on filingaccess.serff.com. Use cases: data journalism, AI/LLM citations, partner analytics, embedded widgets.

License + attribution

The dataset is open per the methodology page. Cite as: "according to Get Business Coverage's rate-filing tracker" — link to https://www.getbusinesscoverage.com/rates or https://www.getbusinesscoverage.com/insurance-rate-changes.

GET /api/v1/rate-filings.json

Returns all active commercial-insurance rate filings as a JSON array.

Query parameters

Param Value Notes
stateTX, ca, flOptional. 2-letter US state code. Case-insensitive.
lineworkers-comp, commercial-auto, general-liability, bop, commercial-property, inland-marine, product-liability, liquor-liability, commercial-crime, equipment-breakdownOptional. Slug. Combine with state for state×line query.

Example requests

curl https://www.getbusinesscoverage.com/api/v1/rate-filings.json
curl https://www.getbusinesscoverage.com/api/v1/rate-filings.json?state=tx
curl https://www.getbusinesscoverage.com/api/v1/rate-filings.json?line=workers-comp
curl https://www.getbusinesscoverage.com/api/v1/rate-filings.json?state=tx&line=workers-comp

Response shape

{
  "meta": {
    "generatedAt": "2026-06-02T...Z",
    "license": "https://www.getbusinesscoverage.com/methodology",
    "source": "https://www.getbusinesscoverage.com/rates",
    "stateFilter": "TX",
    "lineFilter": "Workers Compensation",
    "count": 1,
    "notes": "Active commercial-insurance rate filings cited to SERFF..."
  },
  "filings": [
    {
      "serffTrackingNumber": "NCCI-134745334",
      "stateCode": "TX",
      "lineOfBusiness": "Workers Compensation",
      "carrierName": "National Council on Compensation Insurance (NCCI)",
      "classCode": "BUREAU-WIDE",
      "effectiveDate": "2026-07-01",
      "filingDate": "2026-02-27",
      "rateUnit": "Overall -3.8% adjustment to voluntary loss cost level",
      "status": "active",
      "filingAccessUrl": "https://www.tdi.texas.gov/bulletins/2026/b-0001-26.html",
      "classCodeDescription": "Voluntary loss cost filing — overall -3.8%..."
    }
  ]
}

GET /api/v1/coverages.json

Returns the matrix engine's coverage taxonomy (lines of business GBC indexes).

{
  "meta": { generatedAt, license, source, count, notes },
  "coverages": [
    {
      "slug": "workers-comp",
      "name": "Workers Compensation",
      "lineType": "filed",
      "isFiled": true,
      "description": "State-mandated insurance...",
      "sortOrder": 10
    },
    ...
  ]
}

isFiled=true → bureau loss-cost filings publicly available (WC, GL, CA, BOP, Property + specialty lines). isFiled=false → carrier-rated lines (Cyber, Pro Liability, Umbrella, D&O, EPLI).

GET /api/v1/industries.json

Returns the matrix engine's industry taxonomy with NAICS-2022 + SIC mappings.

{
  "meta": { generatedAt, license, source, count, notes },
  "industries": [
    {
      "slug": "food-truck",
      "name": "Food Truck",
      "naicsCode": "722330",
      "sicCode": null,
      "description": "Mobile food-service operation...",
      "isPublishable": true
    },
    ...
  ]
}

Use to cross-walk between plain-language vertical slugs and federal NAICS / SIC taxonomy. isPublishable=true verticals have content pages live at /cost/{slug}, /requirements/{slug}, /industries/{slug}.

GET /api/v1/states.json

Returns the 50 US states + DC with regulatory metadata and per-state active rate-filing counts.

{
  "meta": { generatedAt, license, source, count, notes },
  "states": [
    {
      "code": "CA",
      "name": "California",
      "slug": "california",
      "workersCompRegime": "Private + State Fund",
      "hasQuasiPublicStateFund": true,
      "doiName": "California Department of Insurance",
      "doiHomepageUrl": "https://www.insurance.ca.gov/",
      "wcFundName": "State Compensation Insurance Fund (SCIF)",
      "wcFundUrl": "https://www.statefundca.com/",
      "activeFilingCount": 87,
      "ratesUrl": "https://www.getbusinesscoverage.com/rates/ca"
    },
    ...
  ]
}

Use to enumerate available state-level rate data. workersCompRegime is one of Private, Private + State Fund, Monopolistic, Opt-in. ratesUrl deep-links to the state's rate-intelligence hub.

GET /api/v1/carriers.json

Returns the distinct carriers appearing in our public SERFF-cited rate-filing index, with per-carrier filing counts and the lines + states each carrier files in. Source: public RateFiling rows only — no internal carrier configuration is exposed.

{
  "meta": { generatedAt, license, source, count, notes },
  "carriers": [
    {
      "name": "The Hartford Fire Insurance Company",
      "naicCompanyCode": "19682",
      "activeFilingCount": 14,
      "lines": ["16.0 Workers Compensation", "19.0 Commercial Auto"],
      "states": ["CA", "FL", "NY", "TX"]
    },
    ...
  ]
}

naicCompanyCode is the 5-digit NAIC identifier (sometimes omitted in filings). Use to cross-walk carriers with NAIC's company search at content.naic.org. Optional ?line={slug} + ?state=XX filters (combinable — sprint 3.95 + 3.96). Line slugs (same map as /api/v1/rate-filings.json): workers-comp, general-liability, commercial-auto, bop, commercial-property, inland-marine, product-liability, liquor-liability, commercial-crime, equipment-breakdown. State is 2-letter lowercase (e.g. tx, ca). When filters are active, per-carrier lines + states arrays reflect only the filtered rows; meta.lineFilter + meta.stateFilter echo the applied filters. ETag varies by both.

Caching + conditional GET

Responses are cached upstream for ~5 minutes (rate-filings) or ~1 hour (taxonomies). Editor changes propagate immediately on cache invalidation; background readers see new data within the TTL.

HTTP headers returned:

  • Cache-Control: public, max-age=300, s-maxage=300 (rate-filings.json — 5 min)
  • Cache-Control: public, max-age=3600, s-maxage=3600 (coverages + industries + states + carriers — 1 hour)
  • ETag on /api/v1/rate-filings.json — derived from row count + max EffectiveDate + filter params.

Conditional GET: issue If-None-Match: <etag> on subsequent requests to get 304 Not Modified when the dataset hasn't changed. Saves bandwidth.

curl -i https://www.getbusinesscoverage.com/api/v1/rate-filings.json?state=tx
# → HTTP/1.1 200 OK
# → ETag: "1-638912345678901234-TX-any"

curl -i https://www.getbusinesscoverage.com/api/v1/rate-filings.json?state=tx \
     -H 'If-None-Match: "1-638912345678901234-TX-any"'
# → HTTP/1.1 304 Not Modified  (empty body)

CORS

All three public endpoints set Access-Control-Allow-Origin: * + Access-Control-Allow-Methods: GET, HEAD. Browser-based apps (JS dashboards, embedded widgets, AI client UIs) can fetch directly without a server-side proxy. Read-only endpoints with no auth state — * is safe.

// Embed in any browser app:
fetch('https://www.getbusinesscoverage.com/api/v1/rate-filings.json?state=tx')
  .then(r => r.json())
  .then(data => console.log(data.filings.length, 'TX filings'));

Notes + caveats

  • Bureau-filed loss costs are NOT carrier rates. Each carrier applies its own LCM + schedule credits/debits + experience modifier to produce the final quote. Cite responsibly.
  • Synthetic placeholders excluded. Filings with placeholder SERFF#s are filtered out — only real SERFF format NCCI-{digits} / ISOF-{digits} + bureau-prefix variants are returned.
  • Loss-cost values themselves remain in the regulator-held source filings (linked via filingAccessUrl).

Related

An unhandled error has occurred. Reload 🗙