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 |
|---|---|---|
state | TX, ca, fl… | Optional. 2-letter US state code. Case-insensitive. |
line | workers-comp, commercial-auto, general-liability, bop, commercial-property, inland-marine, product-liability, liquor-liability, commercial-crime, equipment-breakdown | Optional. 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)ETagon/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).
