Insurer Scorecard.

Methodology

Everything on this site is derived from one public dataset, aggregated. This page says exactly what is counted, what is excluded, and how every derived field is produced. Tokens in {{ }} are filled in by the data pipeline at deploy time.

What is counted

A notice of intent to initiate litigation (NOI, sometimes “notice of intent to sue”) is a pre-suit notice required by Florida law (§627.70152, created by SB 76 in 2021) before a policyholder may sue their property insurer over a claim. An NOI is a dispute record: a policyholder asserting that an insurer denied, underpaid, or delayed handling a claim. It is not a finding of wrongdoing, and nothing on this site should be read as one.

This site counts NOIs filed against Florida property insurers from 2021-07-01 through 2026-09-07 (data as of 2026-09-07). Headline total: 277,081 notices.

Source and refresh

Source: Florida Department of Financial Services, Property Insurance Intent to Litigate portal (piitil.myfloridacfo.gov). Retrieved 2026-09-08.

The portal is re-read daily and the site is regenerated automatically (last run 2026-09-08T23:54:29Z). Fresh filings can take roughly 1 days to appear in the portal itself, so the most recent days are always provisional. Numbers move only when the source moves; nothing on this site is estimated or projected.

What is excluded

How insurers are ranked

Insurers are ranked by raw count of NOIs, and share is each insurer’s count as a percentage of all notices. Raw volume correlates with insurer size: a large carrier will accumulate more notices than a small one even with identical claims behavior. Counts are not adjusted for policies in force; we publish share-of-notices alongside every count so volume is always read in context. If we later add per-policy normalization, it will use Florida OIR policies-in-force data, verifiably sourced, and this page will say so.

Every insurer with at least 100 notices, or with policies currently in force (latest FLOIR quarter) and at least one notice, gets an individual series — currently 180 insurers, so new and small active carriers are visible rather than buried in an aggregate. The remaining, mostly inactive or negligible-volume entities are aggregated into a single “All other insurers” row (4,973 notices, all insurers outside the top 180). County, damage-type and category filters operate on the same basis.

Derived fields

The portal does not publish county, damage type, or dispute category as structured fields. We derive them, deterministically, as follows:

Classification rules version 2026-09-08.1: the complete, current rule set:

### Dispute category
Priority order, first match wins, case-insensitive, word-boundary regexes
applied to `raw_row->>'Alleged Acts or Omissions of the Insurer'`:

1. **denial** — `denied|denial|deny(ing)?|refus(ed|al) to (pay|cover)|declin(ed|ing) (the )?claim|wrongful(ly)? deni`
2. **underpayment** — `underpaid|underpayment|under-?paid|failed to (properly|fully|adequately|correctly)? ?(pay|indemnify|issue proper payment)|partial(ly)? (payment|paid)|failed to compensate`
3. **delay** — `delay|failed to acknowledge|failed to act promptly|failed to (timely )?respond|failure to communicate`
4. **other** — no rule matched (never forced into a bucket)

### Damage type
Priority order, first match wins, case-insensitive, same source text:

1. **mold** — `mold`
2. **fire** — `fire|smoke|lightning`
3. **theft** — `theft|vandal`
4. **hurricane-wind** — `hurricane|windstorm|wind |hail|named storm|ian|irma|michael|milton|idalia|nicole`
5. **roof** — `roof`
6. **water** — `water|pipe|plumbing|leak|supply line`
7. **other** — no rule matched

### Match-rate table
Run against the live dataset after the 2026-09-08 catch-up ingest
(`insurer.noi_filings`, 288,057 rows, filing_date 2021-07-01 -> 2026-09-07).
Percentages are of **active** (non-withdrawn) rows. `classify.py`'s report
counts all 288,057 rows (active=277,087); `aggregate.py` additionally
requires a non-null `filing_date` to place a row in a month bucket, which
drops exactly the 6 corrupted legacy rows below (all have `filing_date IS
NULL`), giving the shipped `total_notices=277,081`. Re-run
`python3 classify.py` to refresh these numbers after any data or rules change.

```
rules_version=2026-09-08.1
total_rows=288057 withdrawn=10970 active=277087
zip_county map entries loaded=993
county unknown (active rows)=1804 (0.65%)
category match rates (active rows):
  denial          110099 39.73%
  underpayment     59422 21.45%
  delay             1986  0.72%
  other           105580 38.10%
damage match rates (active rows):
  hurricane-wind   54945 19.83%
  water            15276  5.51%
  roof              5367  1.94%
  mold              3434  1.24%
  fire              1183  0.43%
  theft              245  0.09%
  other           196637 70.97%
```

Current totals by derived field

Dispute category:

BucketNoticesShare
Claim denied110,09939.7%
Underpaid claim59,42221.4%
Delay / no response1,9860.7%
Other / unclassified105,57438.1%

Damage type:

BucketNoticesShare
Hurricane / Wind / Hail54,94519.8%
Water15,2765.5%
Roof5,3671.9%
Mold3,4341.2%
Fire1,1830.4%
Theft2450.1%
Other / unclassified196,63171.0%

Policies in force

Every insurer row on the site carries a current policy count, so notice volume can be read against carrier size instead of being mistaken for it. The policies_in_force, pif_period, pif_source and noi_per_1k_pif_12mo fields in summary.json are produced by the rules below.

Source

Florida Office of Insurance Regulation, Market Intelligence Report (MIR, formerly QUASR), workbook statewide summary by company and policy type, published on OIR's Residential Market Share Reports page (floir.gov). The workbooks are loaded into insurer.mir_statewide on florida-vm by insurer_intel/ingest/mir_ingest.py, which stores the originating OIR URL on every row. Nothing is fetched at site build time: aggregate.py reads the database, and the published figures are traceable back to a specific OIR workbook file.

Period

2026-06-01, the 2026 Q2 workbook. Its own column header reads "Total number of policies in force as of June 30, 2026", so the figure is a point-in-time count on that date, not an average or a total over the quarter. This is the most recent period OIR has published. An insurer with no policy count carries null for the period and the source as well as the count, so a missing figure can never be read as a zero attributed to OIR.

Dedup rule

A naive query of insurer.mir_statewide for period 2026-06-01 returns 880 rows and doubles every carrier's policy count. The reason is not a double ingest. OIR publishes two separate workbook series that share a period-end month: a quarterly workbook (2026 Q2) and a monthly one (2026 M6). Both report policies in force as of June 30, 2026, and mir_ingest.py stores the period-end month as the row's period, so both land on 2026-06-01: 446 quarterly rows plus 434 monthly rows.

The two series are not copies of each other. Compared across the 434 (naic, policy_type) keys they share:

So the rule is take exactly one series, never sum across both. The pipeline takes the quarterly workbook when the latest period has one, because it is a strict superset (446 rows against 434, and all 12 quarterly-only rows carry a null policy count), and falls back to the monthly workbook when the latest period is a month with no quarter end. Within the chosen series (naic, policy_type) is unique, so no further deduplication is possible or needed. Because the stock columns are identical between the series, a "deduplicate and sum distinct rows" rule would produce the same policy counts; picking one series is the rule stated here because it is also correct for the flow columns, and because it does not silently depend on the two workbooks agreeing.

Effect of the rule, at period 2026-06-01:

carrier                                  raw rows  raw sum      deduped rows  published
CITIZENS PROPERTY INSURANCE CORPORATION        36  551,284                18    275,642
AMERICAN INTEGRITY INSURANCE COMPANY           18  837,952                 9    418,976
SLIDE INSURANCE COMPANY                         8  970,542                 4    485,271

Statewide, the deduped 2026 Q2 series carries 7,635,278 policies in force across 166 companies.

Inclusion rule

An insurer's policy count is the sum of policies_in_force over all policy types the carrier reports in that workbook, personal and commercial residential, wind-only lines included. The pre-suit notice statute (§627.70152) applies to residential and commercial property insurance, so the denominator is not narrowed to owner-occupied homeowners policies while the numerator counts every property notice.

This inclusion rule does leave one asymmetry, stated here rather than hidden: the MIR is a residential market report. It covers commercial residential lines (condominium associations, homeowners associations, apartment buildings), but it does not cover non-residential commercial property. Where a carrier writes non-residential commercial property in Florida and receives notices on it, the denominator is understated by those policies and the notices-per-1,000 figure is correspondingly overstated. There is no OIR-published residential-plus-commercial policy count to use instead, and nothing here is estimated to fill that gap.

How a policy count is matched to an insurer

The join is on NAIC company code and nothing else. Names are never matched across the two datasets. An insurer gets null (never an estimate, never a neighbouring company's figure) when:

A carrier that reports zero policies in force keeps the honest 0 as its policy count and gets null for the ratio, because a rate per zero policies is not a number.

Trade-secret caveat

OIR's interactive market-share report (qsrng.floir.gov) suppresses every company that filed its s.624.424(10) data-call submission as a trade secret. OIR publishes the dated suppression list on the same page as the workbooks; it currently names 84 companies, and most of the largest Florida writers are on it, State Farm Florida (suppressed since 2014 Q1), Universal Property & Casualty (2021 Q2), Slide and Tower Hill Insurance Exchange (2022 Q1), Homeowners Choice, TypTap and Olympus (2023 Q1) among them.

The XLSX series used here is not suppressed and carries every filer, which is precisely why it is the source for this field rather than the interactive report. The suppression is visible in the data: State Farm Florida has been suppressed from the interactive report for over a decade and still reports 665,341 policies in force in the 2026 Q2 workbook. No insurer on this site is missing a policy count because of trade-secret suppression; the nulls are the cases listed above.

What the ratio does and does not mean

noi_per_1k_pif_12mo is notices filed in the last 12 months divided by policies in force, per 1,000 policies. Read it with these limits:

Verification

Both the deduplication and the published figures were re-derived independently before shipping: from the archived OIR workbooks themselves, parsed without the loader's code path, and cross-checked against OIR's separately published county-level report. See STATUS.md for the side-by-side derivations.

Insurer identity

The portal's insurer_name is free text and its NAIC code is not always present, so the site has one explicit rule for what counts as one insurer.

Limitations

Version

Data pipeline run 2026-09-08T23:54:29Z · classification rules 2026-09-08.1 · data contract v1. Corrections or questions: see the site footer for source attribution; we publish only what the portal supports.