How the numbers were made

Updated September 8, 2026

How every flood figure on this site was computed — and what I threw out.

This site publishes original analysis of federal claim data rather than repeating someone else's summary of it. That is only worth something if you can check it. So here is the endpoint, the filter, the record count at each step, every judgement call that changes a number, and the two analyses that were computed and then deliberately discarded.

Source

One dataset, one endpoint, one filter.

Every flood figure on this site comes from a single public source: the National Flood Insurance Program claims dataset, published by FEMA through its OpenFEMA API. No vendor data, no licensed database, no scraped third party.

DatasetOpenFEMA — NFIP Claims, version 3
Endpointhttps://www.fema.gov/api/open/v3/NfipClaims
Filter$filter=countyCode eq '48201'
CountyHarris County, Texas — FIPS 48201
RetrievedSeptember 8, 2026
Records returned170,843 claim records
Pagination$top=10000 with $skip, ordered by id, until exhausted

The Woodlands sits in Montgomery County and is computed separately from FIPS 48339. Every other figure on this site is Harris County only.

Definitions

Five choices that change the numbers.

Each of these is a judgement call. Made differently, the headline figures move — so each is stated once and applied everywhere.

  1. A “paid” claim is one that paid more than $0

    30,753 of the county's 170,843 claims paid nothing at all. Averaging over filed claims mixes those zeroes in and understates what a paying claim actually cost, so every average and median on this site is computed across paying claims only.

  2. Medians, not averages, wherever one number has to stand alone

    A small number of catastrophic losses drag the mean far above the typical claim. The median — the middle claim — answers “what does this usually cost” more honestly. Both are published in the ZIP table so the gap is visible.

  3. “Outside the high-risk zone” means the rated zone did not start with A or V

    That is FEMA's own definition of a property outside a Special Flood Hazard Area — the zones where a federally backed mortgage requires flood coverage. It is taken from the claim's rated flood zone, not from the current map, because the rated zone is what applied when the claim was paid.

  4. “Not a named storm” means the recorded flood event was not a hurricane or tropical storm

    The event label is matched case-insensitively for “hurricane” or “tropical storm”. Everything else counts as unnamed: seasonal storms, heavy rain, and records where FEMA logged no event name at all. Those no-event records are counted as unnamed rather than dropped, which is the conservative choice — dropping them would raise the named-storm share.

  5. “Residential” means occupancy types 1, 2, 3 and 11-15

    The study is written for households, so commercial and warehouse losses are excluded from it — 128,809 paying residential claims remain. The ZIP lookup does not apply this filter, because a reader looking up their ZIP wants everything that happened there.

Inclusion

Which ZIP codes appear, and which do not.

A ZIP code appears in the lookup only if it has at least 25 claims that paid more than $0. Below that, a median is a coin-flip on a handful of records and should not be published. 136 ZIP codes clear the bar. Three that cleared it were still removed: two are PO-box-only ranges with no residential meaning (77052, 77205) and one is an out-of-region mis-key (76051, which is Grapevine, several hundred miles away).

Only aggregates, never a property.

OpenFEMA's terms prohibit republishing anything that could identify an individual property, and the redacted dataset is built so that it cannot be de-anonymised. Nothing on this site publishes a row. The smallest group published anywhere is a ZIP code with at least 25 paying claims, and no address, coordinate, or policy identifier appears on any page.

Discarded

Two analyses that were computed and then thrown out.

Both would have produced better headlines than anything published. Publishing the discards is how you can tell the surviving findings were not selected for being flattering.

Water depth against payment

The dataset carries a water-depth field, and the obvious question is what a foot of water costs. The field is not usable: it contains negative values, the units are inconsistent between records, and the resulting curve is not monotonic — the 7-to-12-inch band pays out below the 4-to-6-inch band. No depth figure is published anywhere on this site.

Construction decade as a risk ranking

Grouping claims by the decade the home was built produces a clean-looking chart in which newer homes look worse. It is measuring house size and replacement value, not flood risk: a larger, costlier home costs more to repair from the same flood. Payment size is not a risk rate. It is referenced once, in the study, only to show that the pre-FIRM finding survives the confound — never as a finding of its own.

Limits

Three things this data structurally cannot support.

No probabilities, ever

OpenFEMA publishes claims, not policies-in-force. With no denominator there is no rate. Nothing on this site states a chance of flooding, and any figure elsewhere that does — derived from this dataset — is unsupported.

No address-level claims

A ZIP code spans thousands of properties and a great deal of elevation. These aggregates are the right tool for deciding whether to carry coverage and the wrong tool for a statement about one house.

No pricing

Flood premiums under FEMA's current rating method are set from the individual building's characteristics — elevation, foundation, replacement cost, distance to water — not from ZIP-level claim history. Nothing here is a quote, a rate, or an eligibility decision.

Reproduce it

The whole pull, in one request shape.

The API is public and needs no key. This is the request the analysis is built on; page it with $skip until the array comes back empty.

GET https://www.fema.gov/api/open/v3/NfipClaims
  ?$filter=countyCode eq '48201'
  &$select=reportedZipCode,yearOfLoss,floodEvent,ratedFloodZone,
           amountPaidOnBuildingClaim,amountPaidOnContentsClaim,
           buildingDamageAmount,totalBuildingInsuranceCoverage,
           preFirmIndicator,elevatedBuildingIndicator,occupancyType
  &$top=10000&$skip=0&$orderby=id&$format=json

One practical note for anyone reproducing this: the dataset is NfipClaims at v3. The older name FimaNfipClaims returns HTTP 400 on v2 and 404 on v3, which is a common dead end. The dataset catalogue at /api/open/v1/DataSets lists the current name.

Currency

How current this is, and what drifts.

FEMA updates the dataset continuously as claims close and are audited. Figures on this site are stamped with the retrieval date they were computed from. Between retrievals a ZIP's counts can move by a claim or two, and the site does not restate any figure with more precision than that supports. Where a page's prose quotes a number, the number in its stats block comes from the same retrieval, so the two never disagree.

Who made this, and what it is not.

This analysis was computed by Ricardo Barcelo at Barcelo & Associates Insurance, an Allstate exclusive agency in Houston. This product uses the Federal Emergency Management Agency's OpenFEMA API but is not endorsed by FEMA. FEMA publishes the underlying records; the aggregation, the choices behind it, and any errors in it are the agency's own. None of it is legal advice, and none of it is a quote or an offer of coverage.

Questions

Questions about the method

Can I reproduce these numbers myself?

Yes, and that is the point of this page. The endpoint is public and needs no key. Apply the county filter, page through with $skip, then apply the definitions in the section above — paying claims only, rated zone for the A/V test, the event-name match for named storms. You should land on the same figures, allowing for the claims FEMA has closed since the retrieval date.

Why not just cite FEMA's published statistics?

Because FEMA publishes national and state summaries, not the cuts that answer a Houston household's questions. The share of local claims that came from something other than a named storm, and the difference between pre-FIRM and post-FIRM homes at county level, are not in any FEMA summary. They have to be computed from the records.

Is the dataset complete?

It is FEMA's redacted public release, which covers NFIP claims — the federal flood program. It does not include private-market flood policies, and it does not include losses where no claim was filed. Both of those make it an undercount of flooding, not an overcount.

Why publish the analyses you discarded?

Because otherwise you have no way to tell whether the published findings were selected for being true or for being useful. Two of the analyses run for this study produced more quotable results than the three that were kept. They are not published as findings because they do not survive scrutiny, and saying so is the only thing that makes the rest credible.

Contact

Questions about any of this?

If a figure on this site looks wrong, I would rather hear about it than not. Ricardo Barcelo, Insurance Consultant, 1235 North Loop W, Houston — English or Spanish.