Arborlook
Risk & Response by Arborlook Insights

Methodology

How department, county, and state pages are built, from spatial analysis to color scales to peer matching.

Department Coverage

Last updated: March 2026

We generate pages for all departments in the NERIS Public dataset that have a valid boundary polygon, approximately 22,000 departments across all 50 states and the District of Columbia. Departments in NERIS without a recorded boundary (roughly 8,000) are excluded because all analysis depends on geography: tract assignment, population calculation, spatial maps, and infrastructure counts all require a department boundary to exist.

Each department's boundary, name, department type, and station locations come directly from NERIS Public and are not modified. Boundaries are self-reported by departments and may not reflect current service areas.

Census Tracts as the Unit of Analysis

All sub-department analysis uses 2020 Census tracts as the geographic unit, with demographic data from the 2020-2024 American Community Survey (ACS) 5-year estimates. Census tracts are small, relatively stable statistical areas with populations typically between 1,200 and 8,000 people. They are the primary unit for American Community Survey (ACS) data release, which is the source for all demographic metrics.

Using tracts (rather than ZIP codes or counties) provides a balance of geographic precision and data reliability. ACS 5-year estimates at the tract level have acceptable margins of error for the metrics we report. Counties are too coarse to reveal within-jurisdiction variation, while finer geographies carry much higher sampling uncertainty.

Tract-to-Department Assignment

Census tract boundaries do not align with fire department jurisdictional boundaries. To determine which tracts a department serves, we use a two-step spatial process:

Step 1: Boundary Buffer

Department boundaries from NERIS are shrunk inward by 250 feet before computing tract intersections. This removes false overlaps caused by digitization artifacts, specifically situations where two adjacent jurisdictions share a road-centerline boundary and technically "intersect" tracts on the other side of the road. The buffer ensures that only genuinely overlapping territory counts.

Step 2: Minimum Overlap Filter

After intersection, tracts with negligible overlap are excluded. A tract is kept if either of the following is true:

  • The overlap covers at least 1% of the tract's total area, or
  • The overlap covers at least 0.5 square kilometers (~124 acres) of absolute area

The percentage threshold catches small slivers on urban and suburban tracts. The absolute area floor protects large rural tracts, where even a fraction of a percent can represent meaningful service territory.

Population Apportionment (NFPA 1750 Density Classification)

How a tract's population contributes to a department's profile depends on the tract's population density, classified using NFPA 1750 demand-zone thresholds (legacy NFPA 1720):

  • Urban and suburban tracts (500 or more people per square mile): population is scaled by the fraction of the tract's area that overlaps the department boundary. For example, if a suburban tract with 5,000 residents has 60% of its area inside the department's boundary, it contributes 3,000 to the department's estimated population. This area-based apportionment produces accurate estimates because population in dense tracts is distributed relatively uniformly.
  • Rural tracts (fewer than 500 people per square mile): the full tract population is included without scaling. Rural tracts cover large geographic areas where population clusters in small towns surrounded by undeveloped land. Area-based scaling would severely undercount these communities because a department might cover only 10% of the tract's land area while serving most of its residents.

The same apportionment factor applies to all demographic and housing counts (age groups, vulnerability metrics, housing units). Risk scores and economic indicators are population-weighted averages and use the apportioned population as weights.

Example: A suburban department's boundary fully contains 9 census tracts and partially overlaps 5 more along its edges. The 9 fully contained tracts contribute 100% of their populations. The 5 edge tracts contribute population proportional to the overlap area. A rural tract on the boundary contributes its full population regardless of overlap fraction.

Because tracts on jurisdictional boundaries may be included in more than one department's profile, a department's reported "population served" reflects the community it touches rather than an exclusive count.

Departments with zero assigned tracts (typically covering very small or largely unpopulated areas) are flagged and excluded from metrics that require population data.

Natural Hazard Risk Scores

Hazard scores come directly from FEMA's National Risk Index (NRI), version 1.20. The NRI provides scores for 18 hazard types at the census tract level. Scores range from 0 to 100 and represent relative risk nationally. A score of 80 means the tract is in the top 20% of risk for that hazard across all U.S. tracts.

National Fixed Color Scale

Hazard map colors use a fixed national scale so they mean the same thing on every department page:

Very Low
0-20
Low
20-40
Medium
40-60
High
60-80
Very High
80-100

This allows meaningful national comparison: a department with a red earthquake tract knows it is in the top 20% of earthquake risk nationally, regardless of where it's located.

Department-Level Score

The single hazard score displayed for a department is a population-weighted average across all assigned tracts: each tract's score is multiplied by its population, summed, then divided by total department population. This weights high-population tracts more heavily than low-population tracts.

Life-Safety Loss

Hazards are sorted by Life-Safety Loss (EALPE in the NRI) rather than the 0-100 risk score. EALPE is the Expected Annual Loss to Population Equivalence, which uses FEMA's Value of Statistical Life ($13.7M per expected fatality) to convert expected annual deaths and injuries into a dollar figure. This reflects which hazards pose the greatest risk to human life, not just which have the highest relative score.

A hazard with a moderate risk score but high expected fatalities will rank above a hazard with a high risk score but minimal life-safety impact. The risk score is still displayed for each hazard (bar width and rating label); only the sort order uses Life-Safety Loss.

18 Hazard Types

HazardNRI Code
AvalancheAVLN
Coastal FloodingCFLD
Cold WaveCWAV
DroughtDRGT
EarthquakeERQK
HailHAIL
Heat WaveHWAV
HurricaneHRCN
Ice StormISTM
LandslideLNDS
LightningLTNG
Riverine FloodingRFLD
Strong WindSWND
TornadoTRND
TsunamiTSUN
Volcanic ActivityVLCN
WildfireWFIR
Winter WeatherWNTW

Demographic & Risk Maps

For demographic, fire risk, and EMS demand maps, we use a different approach than the hazard maps: percentile ranks within the department's own tracts. This answers a different question than the national scale. Not "how do we compare nationally?" but "which of my tracts should I prioritize?"

Quintile Breakpoints

For each metric and each department, we calculate the 20th, 40th, 60th, and 80th percentile values across that department's tracts. These become the color breakpoints:

Bottom 20%
Lowest need
20-40th
Below median
40-60th
Median
60-80th
Above median
Top 20%
Highest need

This means the color legend is unique to each department and each metric. A department where every tract has 5-10% mobile home density will still show variation. The tracts at 10% show orange or red, the tracts at 5% show green. This helps chiefs identify which tracts deserve attention first given their specific conditions.

Zero-Inflation Handling

Some metrics have many tracts with a zero value. For example, a dense urban department might have 80% of tracts with zero wood/fuel oil heating. In this case, a naive percentile approach would make those zero-value tracts show as amber or red (because they land in the 60th percentile by rank) even though zero is objectively low risk.

We apply a zero-inflation correction: if 60% or more of a department's tracts have a zero value for a metric, all zero-value tracts are colored green regardless of their rank. Only tracts with a value above zero use the percentile scale. This prevents misleading coloring for metrics that genuinely don't apply to a jurisdiction.

How the Department Profile Is Organized

The department profile groups factors into three operational buckets:

  • Fire Risk Factors: factors with a documented elevation in fire incidence or fire-fatality rates (housing age, vacancy, mobile homes).
  • EMS Risk Factors: factors with documented elevation in EMS demand or care-access barriers (age 65+, disability, no vehicle, uninsured, poverty, below 150% of poverty, group quarters, limited English).
  • CRR Outreach Profile: factors that shape your outreach approach (heating fuels, renter share, overcrowding, no internet access) without necessarily indicating elevated fire or EMS risk. These factors call for different prevention messaging, communication channels, and inspection cadence rather than higher run volume.

Each descriptor row on the department profile links to its primary source. Citations come from federal agencies (Census Bureau, USFA/FEMA, CDC, HUD), HHS Healthy People 2030, NFPA fire-statistical reports, the CDC/ATSDR Social Vulnerability Index, and peer-reviewed PMC/PubMed studies. Hover any [Source] tag for the publication title; click to open the source in a new tab.

Map Layers Included

Maps are provided for the Fire Risk and EMS Risk sections only. The CRR Outreach Profile uses table comparisons rather than choropleths because outreach factors aren't typically actionable at the tract-hot-spot level.

MapLayerSource
Fire Risk% housing built before 1980ACS
% housing built before 1960ACS
% vacant housing unitsACS
% mobile homesACS
EMS Risk% population age 65+ACS
% with a disabilityACS
% households with no vehicleACS
% below the federal poverty lineACS
% below 150% of the federal poverty lineACS
% uninsuredACS
% in group quartersACS
% limited-English householdsACS

Peer Matching

Each department is matched to up to 15 peer departments from the full NERIS Public set. The goal is to identify departments that face similar community conditions, not just similar size, so that comparisons are meaningful.

Step 1: Hard Filters

Candidates must pass all four hard filters to be considered as a peer. Departments that don't match on these dimensions aren't meaningfully comparable:

FilterHow It's Applied
Department typeMust be the same: career, combination, or volunteer (from NERIS)
Community classMust be the same: Urban (≥1,000 people/sq mi), Suburban (500-1,000), or Rural (<500). Based on NFPA 1750 demand-zone thresholds (legacy NFPA 1720).
Census divisionMust be in the same of the 9 U.S. Census divisions (e.g., New England, East North Central, Mountain). Keeps peers geographically relevant since a rural New England department and a rural Mountain department face very different conditions.
PopulationMust be within +/-50% of the target department's population

Step 2: Similarity Scoring

Among candidates that pass the hard filters, we compute a weighted similarity score. Each dimension is normalized 0-1 before weighting, so no single variable dominates due to scale differences:

DimensionWeightHow It's Measured
Population served25%Log-scaled total population (log scale compresses differences at large populations)
Population density20%Log-scaled people per square mile of service area
Hazard risk profile15%Population-weighted NRI RISK_SCORE
Elderly population10%% of population age 65+
Poverty rate10%% of population below the federal poverty line
Older housing stock10%% of housing units built before 1970

The 15 candidates with the lowest total distance (highest similarity) become the peer group. Departments with fewer than 15 candidates passing the hard filters will have fewer peers displayed.

Peer comparisons displayed on department pages use department-level averages, not tract-level data. Each peer metric is the population-weighted average across all tracts assigned to that peer department.

Disaster Declarations

Federal disaster declarations come from OpenFEMA. Declarations are matched to departments by county FIPS code. A department is associated with all declarations for the county or counties its boundary overlaps.

Statewide declarations (where the county code is "000") are excluded, as these cover entire states and don't indicate localized impact. All remaining declarations from 1959 through the current year are included in the count; the most recent 10 years are highlighted on the department page.

Because matching is county-based, a declaration appears on a department's page if it covers that county, not necessarily the specific jurisdiction. For most departments this is a reasonable approximation; for very large counties with many departments, the same declarations will appear across all departments in that county.

Aggregation: How Tract Metrics Become Department Metrics

For percentage metrics (e.g., % poverty, % uninsured), we aggregate by summing raw numerators and denominators across all assigned tracts, then dividing:

dept_pct_poverty = sum(tract_pov_below) / sum(tract_pov_universe)

This is equivalent to asking "what percentage of the people in this department's service area are below the poverty line?" We do not use weighted averages of percentages, which can produce misleading results when tract population sizes vary widely.

For continuous metrics (e.g., NRI scores), we use population-weighted averages: multiply each tract's value by its population, sum, then divide by total population.

County & State Pages

Added: March 2026

County and state risk profiles aggregate tract-level data directly from census tracts to county and state geographies. Every census tract belongs to exactly one county (identified by the first 5 digits of its GEOID), so county-level aggregation is clean and unambiguous.

What We Aggregate from Tracts

County and state metrics use the same aggregation methods as department pages:

  • NRI risk scores: Population-weighted average of tract-level RISK_SCORE. Each tract's score is multiplied by its population, summed, then divided by total county/state population.
  • Life-Safety Loss (EALPE): Direct sum of tract-level EALPE values. Expected annual losses are additive across geographies, so summing is appropriate.
  • Percentage metrics (poverty, disability, uninsured, etc.): Sum of numerators divided by sum of denominators across all tracts in the county/state.
  • Disaster declarations: Matched by county FIPS code from OpenFEMA, same as department pages.

NRI Rating on County Pages

The NRI rating displayed on county pages (Very High, Relatively High, Relatively Moderate, Relatively Low, Very Low) uses the same quintile thresholds as the FEMA NRI, applied to the population-weighted average risk score:

Score RangeRating
80+Very High
60-79Relatively High
40-59Relatively Moderate
20-39Relatively Low
Below 20Very Low

These thresholds match the FEMA NRI quintile boundaries (80/60/40/20) and are applied to our computed population-weighted score. FEMA publishes its own county-level NRI scores using a different methodology. Our approach aggregates from the same underlying tract data but weights by population, which means densely populated tracts have more influence on the county score than sparsely populated ones.

Economic Metrics (Approximation)

Median household income, median home value, and per capita income on county and state pages are population-weighted averages of tract-level medians. This is a standard approximation but is not the true county median, which would require individual-level data. The approximation is reasonable when tract populations are similar in size but may overweight high-population urban tracts in counties with a mix of urban and rural areas.

Department Counts and Multi-County Departments

Department and station counts on county pages are derived from NERIS Public boundary data. A department appears on a county page if any of its assigned census tracts fall within that county. Because many departments serve areas spanning multiple counties, the same department may appear on more than one county page.

When a department appears on a county page, its population, Life-Safety Loss, and other metrics reflect the department's full jurisdiction, not just the portion within that county. Splitting metrics by county would produce misleadingly small numbers and is not supported by the underlying data.

What County/State Pages Do NOT Include

  • Tract-level maps (these are only on department pages)
  • Peer matching (county/state peers are not computed)
  • NERIS incident data or response time analytics (these require a Response tier subscription)

Risk-Response Gap Tracts (Response Tier)

The Response tier dashboard surfaces “gap tracts” — census tracts where your community risk is high and your actual response time is missing the target. The classification is split into two domains, fire and EMS, because they call for different prevention work and use different demand patterns.

Domain Definitions

A tract is a fire-gap tract when all three of the following are true (same logic for an EMS-gap tract, with the EMS factor list and EMS target):

  1. Slow: the tract’s median monthly fire-call p90 exceeds the department’s configured fire response target. Default target is NFPA 1750’s 6 min 20 sec for career departments (legacy NFPA 1710); chiefs can override per their own demand-zone analysis.
  2. High-risk: the tract’s fire-risk composite percentile is at or above the configured threshold (default 80, which corresponds to the top 20% of tracts in the chosen reference frame).
  3. Enough volume: the tract has at least gap_min_calls_yr annualized fire calls (default 3). This is a noise filter so a single 12-minute outlier doesn’t paint a tract red.

Risk Composite Construction

Each tract’s domain composite is computed in two steps. First, every fire (or EMS) factor is converted to a percentile rank against either all U.S. tracts (about 85,000), or all tracts in the same state, or just this department’s own coverage area. Second, those per-factor percentile ranks are averaged and re-ranked, so the final composite is uniform 0–100. A tract with composite = 80 is in the top 20% of its reference frame for that domain.

The factors that drive each composite are:

  • Fire risk: share of housing built before 1980, share built before 1960, vacancy rate, share of mobile homes
  • EMS risk: share age 65+, disability rate, share of households without a vehicle, uninsured rate, poverty rate, share below 150% of the federal poverty line, share in group quarters, share of limited-English households

Each of these factors has independent peer-reviewed or federal-agency support as a contributor to fire or EMS demand — the mean-of-percentiles construction simply combines them into a single, comparable signal.

Reference Frame

The gap_ranking_scope setting picks one of three reference frames:

  • National (default): percentile rank against all 85,000+ U.S. tracts. Useful for benchmarking against the country.
  • State: percentile rank against tracts in the same state. Useful for departments that want to compare against a more uniform peer set.
  • District: percentile rank against only this department’s own tracts. Computed at the dashboard. Useful for low-risk departments that have few or no nationally-high tracts but still want to focus prevention work on the highest-risk tracts in their own coverage area.

For very small districts (< 5 tracts) the “top 20%” semantic gets noisy — with two tracts, percentile ranking returns 0 and 100 at the extremes, so the threshold catches one tract regardless of where the actual values fall. The math is honest above about five tracts.

Medium-Risk Inclusion

The gap_include_medium_risk setting widens the threshold from 80 to 60 (top 40% rather than top 20%). Useful for low-risk departments that have very few or no high-risk tracts but still want a meaningful set of priority tracts to work on.

Always Show SOMEthing: 3-Level Fallback Cascade

The dashboard and weekly digest run a three-step cascade per domain so that every department always has actionable tracts to look at, even when the strict definition produces an empty set:

  1. Strict: the department’s saved settings (slow + composite at or above threshold + minimum calls). If the result is non-empty, stop here.
  2. District fallback: same slowness gate as level 1, but the risk gate uses the district-relative composite at threshold 80. Triggers when the strict pass returns nothing because the department’s slow tracts don’t rank high in the chosen reference frame — common for low-risk departments. The dashboard and PDF label this as “top 20% within district fallback.”
  3. Compliance fallback: when every tract is meeting target (no slow tracts at all), show the top 20% by p90 in the domain — the relatively-slowest tracts. Triggers for departments that are crushing their response targets but still want a focused list to monitor. Labeled “top 20% by p90 fallback.”

The cascade is display-only — the department’s saved settings are unchanged. Fire and EMS cascade independently, so a department can show strict fire-gap tracts alongside a compliance-fallback EMS list.

Headline Metric: Calls in Gap Tracts

The dashboard’s headline KPI is the share of fire and EMS calls that land in domain gap tracts, not the count of gap tracts. A department might have 12 gap tracts, but if 38% of its structure fires happen in those tracts, that’s a much more compelling number for grant narratives, board reports, and CRR program prioritization than the count alone.

What This Definition Is Not

  • Not a substitute for FEMA NRI hazard exposure. Hazard exposure (flood, wildfire, earthquake, etc.) is reported separately on the Risk Profile section. Gap tracts are about response performance against community vulnerability, not against natural-hazard probability.
  • Not a regulatory measure. NFPA 1750 compliance (which consolidates the former NFPA 1710 and 1720) is reported separately. Gap classification borrows the response-time targets from that standard but combines them with vulnerability factors that the standard does not address.
  • Not static. The domain composite, p90 by domain, and call volume are recomputed nightly from raw NERIS incident data; the classification is also recomputed live in the dashboard whenever a chief saves new gap settings.