Gulf Coast flood losses: Ivan, not Katrina.
Every paid National Flood Insurance Program claim filed in Mobile and Baldwin County, Alabama, since 1978 — 34,861 of them, $1,026,362,717 in net payments. The federal record disagrees with the local memory on one specific point, and it is the first thing below. Every figure here is recomputed from FEMA's own endpoint at build time, and the aggregate data is a download away.
34,861 claims · $1,026,362,717 net paid · 1978-01-15 to 2026-06-18 · FEMA asOfDate 2026-08-03 · aggregate data CSV
Ivan produced 19% more claims here than Katrina.
Katrina is the storm the country reaches for whenever Gulf Coast flooding comes up. In the federal claims record for these two Alabama counties it is second. Hurricane Ivan accounts for 6,699 paid NFIP claims and $351,938,152; Katrina accounts for 5,629 claims and $287,940,155. Ivan leads on both measures — 19% more claims and 22.2% more paid.
That is a local fact, not a national one. Katrina's catastrophic losses landed to the west, in Louisiana and Mississippi. Ivan came ashore on the Alabama coast, and the claims follow the landfall: its dates of loss here run 2004-09-15 to 2004-09-18. Anyone writing about flood risk on this stretch of coast using Katrina as the reference storm is using the wrong one, and the correction is a single API query away.
| FEMA-named event | Dates of loss | Claims | Net paid (nominal) |
|---|---|---|---|
| Hurricane Ivan | 2004-09-15 to 2004-09-18 | 6,699 | $351,938,152 |
| Hurricane Katrina | 2005-08-28 to 2005-08-30 | 5,629 | $287,940,155 |
| Hurricane Georges | 1998-09-27 to 1998-10-02 | 4,468 | $67,402,497 |
| Hurricane Sally | 2020-09-14 to 2020-09-18 | 3,262 | $121,678,990 |
| Hurricane Frederic | 1979-09-12 to 1979-09-13 | 2,354 | $31,744,273 |
| Flooding | 1980-05-16 to 1998-03-13 | 1,887 | $24,107,215 |
| Hurricane Opal | 1995-10-03 to 1995-10-05 | 1,615 | $15,555,109 |
| Hurricane Danny | 1997-07-18 to 1997-07-21 | 1,075 | $10,196,455 |
| Mid-spring storms | 2014-04-28 to 2014-05-01 | 1,063 | $46,437,576 |
| Tropical Storm Isidore | 2002-09-24 to 2002-09-29 | 951 | $5,536,235 |
| Hurricane Elena | 1985-08-29 to 1985-09-03 | 827 | $2,597,195 |
| Hurricane Zeta | 2020-10-28 to 2020-10-30 | 241 | $3,928,114 |
| Hurricane Ike | 2008-09-11 to 2008-09-15 | 229 | $1,740,963 |
| Hurricane Isaac | 2012-08-27 to 2012-09-04 | 197 | $1,190,007 |
| Hurricane Gustav | 2008-08-30 to 2008-09-03 | 162 | $1,488,557 |
| Not a named storm | 1979-03-03 | 128 | $343,330 |
Events with at least 100 claims. All 27 labeled events are in the CSV. Dates are the observed minimum and maximum date of loss among the claims FEMA itself labeled with that name — not an inferred window.
Not every row in that table is a storm
“Flooding” is a generic FEMA bucket, not a named system. It holds 1,887 claims spread across 1980 to 1998 — nearly two decades of unrelated events sharing one label. It cannot be read as an event the way Ivan or Sally can, so it is printed as what it is rather than quietly dropped to make the table tidier. “Not a named storm” (128 claims, all dated 1979-03-03) is FEMA's explicit label for the same idea.
“Mid-spring storms” (1,063 claims, $46,437,576) is the late-April 2014 rainfall event. It is the fifth costliest labeled event in this dataset by dollars paid, and it has no name anybody remembers, because it was not a hurricane.
11.1% of claims carry no event label at all
30,987 of 34,861 claims (88.9%) carry a FEMA-assigned floodEvent name. The remaining 3,874 — 11.1% — carry none, and they are reported as unlabeled rather than assigned to whichever storm happened to be near their date of loss. Date-window guessing would inflate every event in the table above by an unknown amount, and there would be no way to tell which figures had been inflated.
Three ZIP Codes hold 55.1% of every claim.
36542 — Gulf Shores — carries 9,444 claims on its own, 27.1% of the two-county total. Add 36528 (Dauphin Island) and 36561 (Orange Beach) and three ZIP Codes account for 55.1% of the claims and 56.8% of the dollars. The rest of the record is a long tail.
Paid NFIP claims since 1978
- 0–7
- 7–47.6
- 47.6–218.6
- 218.6–551.8
- 551.8–9,444
- No data
View the full ZIP code data table (63 ZIP codes)
| ZIP code | County | Paid NFIP claims since 1978 |
|---|---|---|
| 36502 (Baldwin Co.) | Baldwin County | 7 |
| 36505 (Mobile Co.) | Mobile County | 3 |
| 36507 (Baldwin Co.) | Baldwin County | 41 |
| 36509 (Mobile Co.) | Mobile County | 644 |
| 36511 (Baldwin Co.) | Baldwin County | 82 |
| 36512 (Mobile Co.) | Mobile County | 4 |
| 36513 (Mobile Co.) | Mobile County | 0 |
| 36521 (Mobile Co.) | Mobile County | 12 |
| 36522 (Mobile Co.) | Mobile County | 7 |
| 36523 (Mobile Co.) | Mobile County | 656 |
| 36525 (Mobile Co.) | Mobile County | 16 |
| 36526 (Baldwin Co.) | Baldwin County | 265 |
| 36527 (Baldwin Co.) | Baldwin County | 103 |
| 36528 (Mobile Co.) | Mobile County | 5,003 |
| 36530 (Baldwin Co.) | Baldwin County | 690 |
| 36532 (Baldwin Co.) | Baldwin County | 1,291 |
| 36535 (Baldwin Co.) | Baldwin County | 705 |
| 36541 (Mobile Co.) | Mobile County | 42 |
| 36542 (Baldwin Co.) | Baldwin County | 9,444 |
| 36544 (Mobile Co.) | Mobile County | 37 |
| 36547 (Baldwin Co.) | Baldwin County | 295 |
| 36549 (Baldwin Co.) | Baldwin County | 175 |
| 36550 (Baldwin Co.) | Baldwin County | 5 |
| 36551 (Baldwin Co.) | Baldwin County | 27 |
| 36555 (Baldwin Co.) | Baldwin County | 245 |
| 36559 (Baldwin Co.) | Baldwin County | 57 |
| 36560 (Mobile Co.) | Mobile County | 4 |
| 36561 (Baldwin Co.) | Baldwin County | 4,770 |
| 36562 (Baldwin Co.) | Baldwin County | 9 |
| 36564 (Baldwin Co.) | Baldwin County | 509 |
| 36567 (Baldwin Co.) | Baldwin County | 49 |
| 36568 (Mobile Co.) | Mobile County | 0 |
| 36571 (Mobile Co.) | Mobile County | 461 |
| 36572 (Mobile Co.) | Mobile County | 107 |
| 36574 (Baldwin Co.) | Baldwin County | 145 |
| 36575 (Mobile Co.) | Mobile County | 25 |
| 36576 (Baldwin Co.) | Baldwin County | 89 |
| 36578 (Baldwin Co.) | Baldwin County | 3 |
| 36579 (Baldwin Co.) | Baldwin County | 7 |
| 36580 (Baldwin Co.) | Baldwin County | 277 |
| 36582 (Mobile Co.) | Mobile County | 883 |
| 36587 (Mobile Co.) | Mobile County | 7 |
| 36602 (Mobile Co.) | Mobile County | 179 |
| 36603 (Mobile Co.) | Mobile County | 618 |
| 36604 (Mobile Co.) | Mobile County | 123 |
| 36605 (Mobile Co.) | Mobile County | 1,976 |
| 36606 (Mobile Co.) | Mobile County | 561 |
| 36607 (Mobile Co.) | Mobile County | 538 |
| 36608 (Mobile Co.) | Mobile County | 579 |
| 36609 (Mobile Co.) | Mobile County | 247 |
| 36610 (Mobile Co.) | Mobile County | 221 |
| 36611 (Mobile Co.) | Mobile County | 218 |
| 36612 (Mobile Co.) | Mobile County | 26 |
| 36613 (Mobile Co.) | Mobile County | 31 |
| 36615 (Mobile Co.) | Mobile County | 5 |
| 36617 (Mobile Co.) | Mobile County | 348 |
| 36618 (Mobile Co.) | Mobile County | 58 |
| 36619 (Mobile Co.) | Mobile County | 484 |
| 36652 (Mobile Co.) | Mobile County | 39 |
| 36663 (Mobile Co.) | Mobile County | 0 |
| 36688 (Mobile Co.) | Mobile County | 0 |
| 36693 (Mobile Co.) | Mobile County | 329 |
| 36695 (Mobile Co.) | Mobile County | 91 |
Buckets are quantiles, not equal intervals — this distribution is severely right-skewed, and equal intervals would render every ZIP but the top three in a single shade. Boundaries are 2020 Census ZIP Code Tabulation Areas. The legend keeps a “no data” swatch for the encoding's sake; no polygon uses it here, because every ZCTA in frame has a counted value, including the 4 that counted to zero.
| ZIP | County | Claims | Share of all claims | Net paid (nominal) |
|---|---|---|---|---|
| 36542 | Baldwin | 9,444 | 27.1% | $217,664,074 |
| 36528 | Mobile | 5,003 | 14.4% | $111,677,099 |
| 36561 | Baldwin | 4,770 | 13.7% | $254,028,067 |
| 36605 | Mobile | 1,976 | 5.7% | $55,087,254 |
| 36532 | Baldwin | 1,291 | 3.7% | $35,957,457 |
| 36582 | Baldwin and Mobile | 883 | 2.5% | $25,359,666 |
| 36535 | Baldwin | 705 | 2% | $30,918,057 |
| 36530 | Baldwin | 690 | 2% | $32,091,648 |
| 36523 | Baldwin and Mobile | 656 | 1.9% | $15,861,456 |
| 36509 | Baldwin and Mobile | 644 | 1.8% | $32,549,397 |
Ten ZIPs shown of 117 in the record. Claims are summed across counties where a ZIP carries both; the CSV keeps the per-county split.
What the map is not showing
The shading is claim volume, not flood risk and not damage severity. A ZIP with more NFIP policies in force will generate more claims than a ZIP with fewer, independently of how badly either one flooded. FEMA does not publish a policies-in-force count at this granularity in the claims dataset, so there is no denominator here and no per-policy or per-capita normalisation is available. A dark polygon means many paid claims. It does not mean a house there is more likely to flood than a house in a pale one.
989 claims (2.8%) are not on the map at all. They sit on 58 reported ZIP keys with no ZCTA polygon in these two counties — 502 with no ZIP recorded, some on post-office-box ZIPs that have no tabulation area, and a handful on ZIPs belonging to other parts of Alabama entirely. 4 of the 63 ZCTAs in frame have no claims in this dataset and are drawn as a measured zero.
25 of the 49 years on record had fewer than fifty claims.
Flood loss on this coast is not a steady annual cost with occasional spikes. It is a flat line interrupted by a handful of days. 2004 and 2005 — Ivan and Katrina — hold 13,082 claims between them, which is 37.5% of everything filed across 48 years. Meanwhile 25 separate years produced fewer than fifty claims each.
| Year | Claims | Net paid (nominal) | Share of all claims |
|---|---|---|---|
| 2004 | 6,862 | $357,567,493 | 19.7% |
| 2005 | 6,220 | $302,004,201 | 17.8% |
| 1998 | 5,085 | $72,816,856 | 14.6% |
| 2020 | 3,600 | $127,510,215 | 10.3% |
| 1979 | 2,596 | $32,326,963 | 7.4% |
| 1995 | 1,689 | $15,908,278 | 4.8% |
| 1981 | 1,166 | $17,931,849 | 3.3% |
| 1997 | 1,149 | $10,892,158 | 3.3% |
| 2014 | 1,112 | $46,800,861 | 3.2% |
| 2002 | 1,040 | $5,795,163 | 3% |
Ten years shown of 49 (1978 to 2026). Every year is in the CSV.
| Decade | Claims | Net paid (nominal) |
|---|---|---|
| 1970s | 2,683 | $32,566,748 |
| 1980s | 3,342 | $28,867,659 |
| 1990s | 8,226 | $101,488,109 |
| 2000s | 14,970 | $674,122,984 |
| 2010s | 1,886 | $58,149,660 |
| 2020s | 3,754 | $131,167,558 |
The 1970s row covers 1978-01-15 onward; the 2020s row is incomplete and runs to 2026-06-18. Dollars are nominal and not comparable across decades — see section 06.
The 2010s are the quiet decade in this record — 1,886 claims across ten years, less than a seventh of the 2000s. Read that as the absence of a landfalling storm in the window, not as a change in exposure. Sally arrived in September 2020 and the 2020s row passed the entire 2010s in a single event.
16.9% of claims came from policies rated outside the high-risk zone.
Zones B, C and X are FEMA's codes for areas outside the Special Flood Hazard Area — moderate or minimal risk on the rating map, the places where flood insurance is usually optional rather than required by a lender. Those three zones account for 5,890 paid claims and $229,402,201 in this record.
| Rated zone | Claims | Share | Net paid (nominal) |
|---|---|---|---|
| AE | 11,652 | 33.4% | $363,345,095 |
| VE | 4,580 | 13.1% | $124,232,258 |
| X | 2,897 | 8.3% | $106,997,089 |
| C | 2,145 | 6.2% | $95,481,381 |
| A08 | 1,818 | 5.2% | $75,589,263 |
| A10 | 1,699 | 4.9% | $30,774,940 |
| V09 | 1,414 | 4.1% | $41,441,876 |
| A09 | 1,060 | 3% | $31,570,161 |
| B | 848 | 2.4% | $26,923,730 |
| A07 | 769 | 2.2% | $21,472,313 |
Ten zones shown of 37 distinct codes. AE and VE are the modern high-risk codes; the numbered zones (A08, A10, V09 and the rest) come from older Flood Insurance Rate Maps and appear mostly on older losses. 239 claims carry no zone code and are grouped as UNKNOWN.
The zone is the rating, not the geography
ratedFloodZone is the zone the policywas rated in at the time of loss. It is not a statement about where the property sits on today's map. Flood Insurance Rate Maps in these counties have been revised repeatedly since 1978, and a 1979 claim rated A08 tells you what the 1979 map said, not what the current one says. Reading this table as “X-zone properties flood at this rate” would be wrong twice over — wrong on the map vintage, and wrong for the denominator reason in section 02.
Two more distributions worth having, both in full in the CSV. Tidal water overflow is the single largest recorded cause at 15,992 claims (45.9%), which is what storm surge looks like once it has been written down as an insurance code. And 28,165 claims — 80.8% — are on single-family homes. This is a residential loss record, not a commercial one.
20 ZIP Codes carried the wrong county label until this run.
The first version of this aggregation grouped claims by ZIP Code alone and stamped each ZIP with a county name. That is a bug, because a reported ZIP is not constrained to lie inside the county the claim was filed under. The two counties are fetched in sequence, Baldwin first, so every ZIP with claims under both counties inherited the Baldwin label — and both counties' claims were merged into that one mislabeled row.
The worst case was ZIP 36582. It has 882 claims filed under Mobile County and 1 filed under Baldwin County. The old aggregation emitted a single row reading 883 claims, county Baldwin — a figure a local reader would have caught on sight.
| ZIP | Old row (wrong) | Corrected rows |
|---|---|---|
| 36582 | 883 claims, Baldwin County | 882 Mobile · 1 Baldwin |
| 36523 | 656 claims, Baldwin County | 655 Mobile · 1 Baldwin |
| 36509 | 644 claims, Baldwin County | 643 Mobile · 1 Baldwin |
The fix is to key the aggregation on the (ZIP, county) pair, so a shared ZIP produces one row per county with its own honest count. 20ZIPs do that here, plus the bucket of claims with no ZIP recorded at all. Every other aggregation on this page — the totals, the years, the events, the zones, the causes, the occupancy types — was unaffected, and the script's assertion that each grouping sums back to the fetched claim count passes before and after.
What the splits actually look like
Nearly all of them are lopsided: hundreds of claims under one county and one or two under the other. Some of that is genuine — ZIP Code delivery areas cross county lines. Some of it is data entry on a form filled out during a flood. Either way, the honest shape is two rows with their real counts, not one row with a label picked by fetch order.
A related caveat rides along with it: a handful of reported ZIPs in this record are Montgomery and Anniston ZIPs, both well inland of these two counties. reportedZipCode is a field on a claim form, and it is not validated against the county the claim was filed under. Those claims are kept, counted, and left visible in the CSV rather than silently dropped.
$1,026,362,717 is not the flood damage in these counties.
These are insured NFIP losses, and only those
Every dollar in this dataset was paid by the National Flood Insurance Program on an NFIP policy. Uninsured losses are absent. Losses covered by private flood carriers are absent. Losses in communities that do not participate in the NFIP are absent, and so is every property whose owner let the policy lapse or never bought one. Flood insurance take-up in coastal counties is well under universal, so the true damage figure is larger than $1,026,362,717 by an amount this data cannot measure. If you need one sentence: this is what the federal flood insurer paid, not what the water cost.
Claim counts are not damage severity
The number of claims in a ZIP is a function of how many policies were in force there as much as of how badly it flooded. A ZIP covering a densely built stretch of insured beachfront will out-claim a thinly settled inland one before the question of severity is even reached. FEMA publishes policies-in-force separately from claims, and not at a granularity that joins cleanly to these groupings, so no per-policy or per-capita rate appears anywhere on this page. Ranking places by claim count is a ranking of insured exposure, and it should be read that way.
The dollars are nominal, and they are not adjusted
Every dollar figure here is the amount paid at the time, in that year's dollars, with no inflation adjustment applied. A 1979 payment on Frederic and a 2020 payment on Sally are added together in the totals as if they were the same unit, and they are not. I have not published an adjusted series because doing it properly means choosing a price index and a base year and defending both, and the headline finding does not depend on it: Ivan against Katrina is a comparison of claim counts, one year apart, and no deflator changes it. Treat every cross-decade dollar comparison on this page as unreliable, and use the counts.
11.1% of claims belong to no named event
3,874 claims carry no FEMA floodEvent label. They are counted in every total, every year, every zone and every ZIP on this page, and they appear in none of the event rows. The event table therefore describes 88.9% of the record, not all of it, and the sum of the event rows is deliberately less than the two-county total.
A closed claim is a settlement, not an assessment
The net paid amount is what NFIP paid after adjustment, deductible and policy limits. A total loss on a home insured below its replacement cost shows up here as the policy limit, not the loss. Coverage limits compress the top of this distribution in a way that no field in the dataset lets you measure.
Why this is a ZIP map and not a pin map.
The claims dataset does carry latitude and longitude. Both are rounded to one decimal degree — roughly 11 kilometers, about seven miles — as deliberate privacy protection, because each row is one household's insurance claim on one address. At that resolution a coordinate does not identify a property, a street or a neighborhood. It identifies a rectangle large enough to hold most of Mobile Bay.
Plotting those coordinates as dots would produce a map that looks precise and is not. Points would stack into a lattice at every tenth of a degree, and a reader would reasonably infer that a dot marks a house. So this pipeline does not fetch the coordinate fields at all. The spatial unit is the 5-digit ZIP Code FEMA already reports, drawn on 2020 Census ZCTA boundaries, and the map claims exactly the resolution the source supports.
The same rule applied to everything downstream
No individual claim record leaves the fetch script. Rows are pulled, aggregated in memory, and discarded; the generated data module and the published CSV contain only counts, sums and medians. There is no claim identifier, no date of loss on a single claim, no coordinate and no address anywhere in the shipped artifacts. That is checkable rather than promised — the module is a plain TypeScript file, and the CSV is the module re-serialized.
Everything needed to run it again.
The source is public domain and needs no account, no key and no approval. Two filtered queries against one federal endpoint reproduce the entire dataset.
| Parameter | Value |
|---|---|
| Source | FEMA OpenFEMA, NfipClaims v3https://www.fema.gov/api/open/v3/NfipClaims |
| Filter | $filter=countyCode eq '01097' (Mobile) and $filter=countyCode eq '01003' (Baldwin) |
| Paging | $top=1000, $orderby=id, $skip advanced per pageStable ordering so a re-fetch pages identically. Throttled under two requests per second with exponential backoff on 429 and 5xx. |
| Record count | 19,745 Baldwin + 15,116 Mobile = 34,861 Reconciled against the endpoint's own metadata.count per county at fetch time; a mismatch throws rather than publishing a partial pull. |
| Dollar fields | netBuildingPaymentAmount + netContentsPaymentAmount + netIccPaymentAmountFEMA's amount-actually-paid fields. The parallel amountPaidOn* family is fetched too and reconciled every run; the two agree to within about 0.15%, differing only on a small number of voided or reissued-check cases. |
| Grouping key for ZIP | (reportedZipCode, county) pairSee section 05 for why the ZIP alone is wrong. |
| Code decoding | FEMA's published v3 data dictionarycauseOfDamage and occupancyTypeare numeric or alpha codes. Anything not in FEMA's table is emitted as Unknown code rather than guessed. |
| Data freshness | FEMA asOfDate 2026-08-03FEMA's own freshness field, carried on the records. Losses run 1978-01-15 to 2026-06-18. |
| Boundaries | 2020 Census ZIP Code Tabulation Areas Census TIGERweb, simplified with Douglas-Peucker and projected to a planar frame. 63 ZCTAs across the two counties. |
One endpoint detail matters for anyone reproducing this after October. FEMA froze the older v2 FimaNfipClaims endpoint on 1 June 2026 and removes it on 15 October 2026. This dataset is built on the successor, v3 NfipClaims, whose response envelope key is NfipClaims rather than FimaNfipClaimsand which carries 84 fields against v2's 73. All seventeen fields this pipeline selects exist on both. The two endpoints do not return identical counts — v3 is live rather than frozen — so a v2 replication will land a few claims short and that is expected, not an error.
The fetch script is a single Node file in this site's repository, and the generated data module it writes is what this page and the CSV both read. Re-running it is the whole refresh procedure. If a figure here does not match what FEMA returns for you, tell me and the page gets corrected and re-dated.
Take the data.
One CSV holds every aggregate on this page: the overall totals, all 138 ZIP-and-county rows, all 49 years, all 27 FEMA-labeled events, all 37 rated zones, all 12 cause codes and all 14 occupancy codes. It is generated from the same constants this page renders from, so the published numbers and the downloadable numbers cannot drift apart.
Download cds-gulf-coast-flood-losses.csv
Cite this
Campbell, Peyton. “Gulf Coast Flood Losses: NFIP Paid Claims in Mobile and Baldwin County, Alabama, 1978 to 2026.” Campbell Digital Studio, 2026-08-15. Data as of 2026-08-03. www.campbelldigitalstudio.com/research/gulf-coast-flood-losses.
Article and aggregate dataset licensed CC BY 4.0. Reuse the numbers, the tables and the map with attribution — and carry the limits in section 06 with them, because a figure from this page quoted without them says something it does not support.
Underlying claims data: FEMA, OpenFEMA NFIP Claims v3, a US federal government work in the public domain. Boundaries: US Census Bureau, 2020 ZIP Code Tabulation Areas. FEMA does not endorse this analysis and had no part in it.
Published 2026-08-15 against FEMA data as of 2026-08-03. Corrections welcome — section 05 is what one looks like when it lands.
The same rule about what a number is allowed to claim.
The other study on this site, the public grading rubric behind the rankings, and the sourced statistics pages that carry their limits alongside their headlines.
Want this run on your county?
The pipeline is two county codes and a filter. Any county in the United States has the same record sitting in the same federal endpoint, and the same caveats apply to all of them. If you want this built for your market — or you have found something wrong in the numbers above — send the details. The second one is more useful to me.