FEMA NRI County Risk Profile — Asset Hazard Join avatar

FEMA NRI County Risk Profile — Asset Hazard Join

Pricing

from $3.30 / 1,000 results

Go to Apify Store
FEMA NRI County Risk Profile — Asset Hazard Join

FEMA NRI County Risk Profile — Asset Hazard Join

Join any asset (address, lat/lon, or county FIPS) to FEMA's National Risk Index hazard profile at county or census-tract resolution: composite risk score, expected annual loss, social vulnerability, resilience, and ranked top-3 hazards across all 18 FEMA perils.

Pricing

from $3.30 / 1,000 results

Rating

0.0

(0)

Developer

Kyle Maloney

Kyle Maloney

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Join any list of assets — street addresses (via state+county), GPS coordinates, or county FIPS codes — to FEMA's National Risk Index (NRI) hazard profile: composite risk score, expected annual loss ($) split by buildings, population and agriculture, annualized loss ratios, social vulnerability, community resilience, and two different top-3 hazard rankings across all 18 FEMA perils (wildfire, hurricane, earthquake, tornado, inland flooding, drought, and more). Resolve at county resolution (default, ~3,232 areas) or census-tract resolution (~85,154 areas, finer-grained).

Source: FEMA National Risk Index Counties and Census Tracts FeatureServers (ArcGIS, keyless). County/tract geocoding for lat/lon assets uses the keyless FCC Census Block API. No API keys required.

What changed in 1.1 (2026-08)

  • Every record now says who answered. 1.0 rendered a failed NRI query as match_status: "not_found" — literally "no area matched the input" — and pushed it, and billed for it. A buyer could not tell an outage from a genuine miss. There are now nri_lookup_status, geocode_status, tract_lookup_status and verified_no_match on every row, a new match_status value source_unavailable, and the run fails and bills nothing when not one record resolved.
  • A live drift probe runs before any billable row. The layer must resolve (a retired ArcGIS service answers HTTP 200 with an embedded error, not a 404), every requested field must still exist (an unknown outFields name returns zero features, not an error), the row count must sit in a band, a positive canary must return exactly Denver County, a negative control must return exactly zero, and every rating must be inside FEMA's published vocabulary.
  • The NRI release is now reported. nri_version comes straight off the record (NRI_VER, currently December 2025). FEMA republishes the NRI under the same service alias, so without this a superseded vintage answers silently.
  • Stable tract paging. 1.0 ordered every page by STCOFIPS, which is not unique on the tract layer — Denver County alone holds 178 tracts — and resultOffset paging over a non-unique sort is not stable in ArcGIS. Tract queries now order by TRACTFIPS.
  • Inventory truncation is visible via result_truncated and source_records_available (the service's own count).
  • 40 new fields from columns the layer has always published. The county layer carries 467 fields; 1.0 read 48 of them.

Who this is for

  • Insurers & reinsurers scoring a book of business by county- or tract-level hazard exposure.
  • Real estate & REITs screening acquisition targets for climate/hazard risk down to the neighborhood.
  • Corporate risk / business continuity teams profiling facility and supply-chain locations.
  • Lenders & underwriters adding a hazard-risk data point to due diligence.
  • AI agents (via MCP) that need a quick "how risky is this location" tool call.

Two top-hazard rankings, and why they differ

  • top_hazards ranks by FEMA's national percentile hazard-type risk score.
  • top_hazards_by_expected_annual_loss ranks by modelled dollars.

For Denver County these give different answers. By percentile: Hail, Lightning, Tornado. By dollars: Inland Flooding $93.6M, Hail $72.4M, Tornado $28.0M. An underwriter usually wants the dollars; a comparative-risk map usually wants the percentile. Both ship on every row.

Hazards FEMA marks Not Applicable, No Rating or Insufficient Data are excluded from both rankings.

County vs. census-tract resolution

Set the resolution input to "county" (default) or "tract":

  • County — FEMA's county-level NRI roll-up, ~3,232 areas nationwide. Works with any of the three asset input types (fips, state+county, or lat/lon).
  • Tract — FEMA's finer-grained census-tract NRI, ~85,154 areas nationwide. Only applies precisely to lat/lon assets: the point is geocoded to a 15-digit Census block FIPS via the FCC API, and the tract FIPS (its first 11 digits) is joined against the NRI tract layer. fips and state+county assets carry no tract-level signal, so they resolve at county level and say so (tract_lookup_status: "no_tract_signal"). If a tract lookup misses, the record falls back to its county profile with tract_lookup_status: "no_tract_match". If the tract service fails, the run fails rather than silently substituting a coarser answer for the one you asked for.

Honesty note on tract-level precision: FEMA's National Risk Index tract data is a finer-grained cut of the same underlying hazard/loss/vulnerability models, not an independently-collected dataset — smaller geographic areas mean smaller underlying sample sizes for some inputs, so treat tract-level scores as directionally useful rather than as statistically tight as the county aggregate, and expect more Not Applicable ratings for geographically-gated hazards (e.g. avalanche, coastal flooding, tsunami) in small inland tracts. When precision matters, cross-check the tract score against its parent county's score (both are always included via stcofips/county).

Two modes

1. Asset mode (default) — join your locations to NRI

Provide an assets array. Each item can be any one of:

  • { "fips": "08031" } — 5-digit county FIPS code (always resolves at county level)
  • { "state": "Colorado", "county": "Denver" } — state + county name (always resolves at county level)
  • { "lat": 39.7392, "lon": -104.9903 } — geocoded via the FCC Census Block API (resolves at tract level when resolution: "tract")

Add an optional "label" to identify each asset in the output.

{
"resolution": "tract",
"assets": [
{ "lat": 39.7392, "lon": -104.9903, "label": "Denver HQ" },
{ "lat": 29.9511, "lon": -90.0715, "label": "New Orleans warehouse" },
{ "fips": "06037", "label": "LA County DC (county-level, no lat/lon)" }
]
}

2. Inventory mode — full NRI dumps by state/county

Leave assets empty and set states and/or counties to pull full NRI profiles for those areas, at the resolution set by resolution (all counties or tracts if left fully empty, bounded by maxResults).

{ "resolution": "tract", "states": ["CO"], "counties": ["Denver"] }

Output fields (per record)

Identity & input echo

FieldMeaning
asset_labelLabel identifying the input asset. Null in inventory mode
input_typefips, state_county, lat_lon, or invalid
input_fipsThe 5-digit county FIPS supplied in the input
input_stateThe normalized state name supplied in the input
input_countyThe normalized county name supplied in the input
input_latThe latitude supplied in the input
input_lonThe longitude supplied in the input
geocoded_stateState name returned by the FCC Census Block geocoder
geocoded_countyCounty name returned by the FCC geocoder
geocoded_tract_fipsThe 11-digit tract FIPS derived from the FCC block FIPS

Did anyone actually check? (read these before the numbers)

FieldMeaning
match_statusmatched / not_found / source_unavailable / geocode_failed / invalid_input
nri_lookup_statusok / unavailable / not_queried
nri_lookup_errorNull when the NRI service answered; the failure message otherwise
geocode_statusok / failed / not_applicable
geocode_errorNull when the geocode succeeded or was not needed
tract_lookup_statusok / no_tract_match / no_tract_signal / unavailable / not_requested
tract_lookup_errorNull when the tract layer answered or was not queried
verified_no_matchtrue only when the service answered and genuinely holds no area. null means nobody checked — not "no risk"
resolution_usedtract or county, whichever actually produced this profile
result_truncatedInventory mode: true when the filter matched more rows than maxResults
source_records_availableThe FeatureServer's own count for the inventory filter
nri_serviceWhich FEMA NRI FeatureServer(s) answered
nri_versionThe NRI release stamp on the record itself (e.g. December 2025)
checked_atISO timestamp of the run

Area identity

FieldMeaning
stateMatched area's full state name
state_abbrevTwo-letter postal abbreviation
state_fipsTwo-digit state FIPS
countyMatched area's parent county name
county_fipsThree-digit county FIPS
county_typeCounty / Parish / Borough / Census Area / Municipio / City
stcofips5-digit state+county FIPS
tract_fips11-digit census tract FIPS (tract resolution only)
tractBare 6-digit tract number (tract resolution only)
nri_idFEMA NRI identifier (C-prefixed county, T-prefixed tract)
area_sq_miLand area in square miles
populationResident population used in the NRI exposure model
building_value_usdTotal building replacement value
agriculture_value_usdTotal agriculture value

Composite risk

FieldMeaning
risk_scoreComposite Risk Index score (national percentile)
risk_ratingComposite risk category
risk_valueThe raw composite Risk Index value the percentile derives from
risk_percentileNational percentile of the composite Risk Index

Expected annual loss

FieldMeaning
expected_annual_loss_usdComposite modelled $ loss/year, all hazards
expected_annual_loss_scoreComposite EAL percentile score
expected_annual_loss_ratingComposite EAL rating category
expected_annual_loss_percentileNational percentile of composite EAL
eal_building_usdEAL attributable to buildings
eal_population_equivalent_usdEAL to population, in dollar equivalence
eal_population_countEAL to population, in population-equivalence units
eal_agriculture_usdEAL attributable to agriculture
annualized_loss_ratio_buildingBuilding EAL ÷ building value (scale-free)
annualized_loss_ratio_populationPopulation EAL ÷ population
annualized_loss_ratio_agricultureAgriculture EAL ÷ agriculture value
annualized_loss_ratio_percentileNational percentile of the composite loss ratio

Vulnerability & resilience

FieldMeaning
social_vulnerability_scoreCDC/ATSDR SVI-based percentile score
social_vulnerability_ratingSocial vulnerability category
social_vulnerability_percentileNational percentile of the SVI input
resilience_scoreCommunity resilience percentile score
resilience_ratingCommunity resilience category
resilience_percentileNational percentile of the resilience input
resilience_valueRaw community resilience value
community_resilience_factorThe factor actually applied to the risk equation (<1 reduces risk, >1 increases it)

Hazards

FieldMeaning
top_hazardsTop 3 of 18 by national percentile: {code, hazard, score, rating}
top_hazards_by_expected_annual_lossTop 3 of 18 by modelled dollars
hazardsAll 18, each with code, hazard, score, rating, expected_annual_loss_usd, expected_annual_loss_rating, annualized_frequency, historic_event_count, exposure_usd
hazards_rated_countHow many of the 18 carry a real rating here
hazards_not_applicable_countHow many FEMA marks Not Applicable

Inputs that populate the optional columns

  • Everything above is populated for any matched county — e.g. {"assets": [{"state": "Colorado", "county": "Denver"}]}.
  • tract_fips, tract, geocoded_tract_fips:
    {"resolution": "tract", "assets": [{"lat": 39.7392, "lon": -104.9903}]}
    .
  • result_truncated: true, source_records_available: {"states": ["Texas"], "maxResults": 10} (Texas has 254 counties).
  • verified_no_match: true: {"assets": [{"fips": "99999"}]}.
  • geocode_status: "failed": a coordinate outside US Census coverage, e.g. {"assets": [{"lat": 0, "lon": 0}]}.

Use as an MCP tool

This actor is discoverable to AI agents (Claude, Cursor, etc.) via mcp.apify.com. Field-level output descriptions make it a clean, chainable tool: an agent can pass a {state, county} or {lat, lon} (optionally with resolution: "tract") and get back a structured hazard profile it can reason over directly. Agents should read nri_lookup_status and verified_no_match before trusting any figure, and must treat verified_no_match: null as "unknown", never as "no risk".

Pricing

$6 per 1,000 results (single automatic Result/dataset-item event — one billed record per asset in asset mode, or per county/tract in inventory mode). Records are buffered and the billing gate runs before anything is pushed: if not one location resolved against a source that answered, the run fails and nothing is billed.

FAQ

Does this need an API key? No — the FEMA NRI FeatureServers and the FCC Census Block geocoder are all keyless public APIs.

What if my county name doesn't match? The join strips common suffixes ("County", "Parish", "Borough") and matches case-insensitively. If a county still doesn't resolve, the record comes back with match_status: "not_found" and verified_no_match: true — the service answered and genuinely has no such area. If instead the service was unreachable you get match_status: "source_unavailable" and verified_no_match: null.

Why did my run fail instead of returning empty profiles? Because an all-null profile reads like "this location has no measured hazard risk". If the NRI layer fails its live drift check, or not one record resolves, the run fails loudly and bills nothing.

Can I get census-tract-level risk for a street address without lat/lon? Not directly — tract resolution requires a coordinate (geocode the address to lat/lon first, then pass it in). fips and state+county inputs only carry county-level precision.

What does "Inland Flooding" mean vs "Coastal Flooding"? FEMA NRI's 18 hazard types split flood risk into IFLD (Inland/riverine flooding) and CFLD (coastal flooding, Not Applicable for landlocked areas) — both are in the hazards array. Note the column prefix is IFLD, never RFLD.

How current is the data? FEMA NRI is a static, periodically-republished dataset. This actor always queries the live FeatureServers and reports the release stamp on every row as nri_version (currently December 2025), so a new FEMA release can never change your numbers silently.

  • NFIP Flood Loss Risk Screener — the backward-looking counterpart: actual historical NFIP paid claims near a coordinate, to pair with NRI's forward-looking modelled risk.
  • FHWA NBI Bridge Risk Monitor, EPA Contaminated Site Screener, Site Due Diligence Bundle — the rest of a site-diligence stack.

Each is a screening tool, not a determination.