Maricopa County, AZ leads counties that pair low disaster exposure with heavy industrial infrastructure — Ohio and Nevada manufacturing counties follow
FEMA major disaster declarations 2010-2026 vs. BLS QCEW manufacturing employment (2024) and EIA-861 industrial electricity sales (2023)
Summary
Maricopa County, Arizona (Phoenix metro) is the clearest match for a county combining low exposure to major disaster declarations with the infrastructure a large industrial facility needs. It has had only 2 FEMA major (DR) disaster declarations since 2010 -- versus a median of 4 among comparable manufacturing counties nationally -- while carrying 141,236 manufacturing jobs (2024, the largest manufacturing base of any low-exposure county examined) and substantial industrial electricity demand. This is not a coincidence: real-world semiconductor manufacturers (TSMC, Intel) have named Arizona's low natural-disaster risk explicitly as a site-selection factor, citing 71% fewer natural disasters than neighboring California. Clark County NV (Las Vegas), Cuyahoga and Franklin County OH (Cleveland/Columbus), Elkhart County IN, and Pima County AZ round out the next tier.
This corpus does not carry county-level rail-mileage, water-utility capacity, or substation/transmission-capacity tables (confirmed via catalog search -- 'highway,' 'substation,' and 'rail network' all returned no matching table). The infrastructure side of the answer is therefore built from two proxies that are the best available at county grain: existing manufacturing employment (BLS QCEW, evidence of an industrial workforce, industrial zoning, and grid/rail already serving heavy industry) and industrial-sector electricity sales (EIA-861, a direct measure of industrial power draw). A genuine site-selection process would also weigh water rights, interconnection-queue capacity, and rail siding access, none of which are queryable here.
Method
Population/screen: counties with population >= 30,000 (census.acs_population, 2023 ACS) and manufacturing employment >= 5,000 (econ.county_qcew, NAICS 31-33, private ownership, 2024) -- 555 counties passed this screen nationally.
Low exposure: counted distinct FEMA major disaster declarations (declaration_type = 'DR' in disasters.disaster_declarations) per county, 2010-2026 (full observed coverage). A filter of county_fips IS NOT NULL was applied when counting declarations, but this excluded zero rows -- every one of the 20,032 major (DR) declaration rows in the table carries a non-null county_fips, confirmed by re-running the same query with the filter reversed (0 rows returned). No disasters or counties were dropped by this predicate. The median major-declaration count among the 555 screened counties is 4; this analysis restricts to the tail with <= 2, a defensible bar for genuinely 'low exposure' rather than merely below-average.
Infrastructure proxy score: for the low-exposure subset, min-max normalized (a) total manufacturing employment and (b) total industrial electricity sales (MWh, EIA-861 apportioned to county via the utility-to-county service-territory crosswalk), combined 0.6/0.4 favoring the employment measure since the electricity apportionment is a naive equal split across multi-county utility territories and is noisier for counties served by a utility spanning several counties.
Filtering to <=2 major disasters and >=5,000 manufacturing jobs removed all but 20 of the 555 screened counties -- that exclusion is the entire point of the 'low exposure' constraint, and it is worth naming explicitly: counties like Los Angeles (311,242 manufacturing jobs, but 10 major disasters) or Cook County IL (176,781 jobs, 7 major disasters) have far larger absolute industrial bases but were excluded because their disaster exposure is well above the low-exposure bar, not because they lack infrastructure. With that filter relaxed to <=4 disasters (the median), Los Angeles and Cook County would rank #1 and #2 by manufacturing employment alone, but at 5-10x the major-disaster count of Maricopa -- illustrating that the ranking is genuinely sensitive to where the exposure line is drawn, not just a restatement of 'biggest manufacturing counties.'
Ranked results
| 1 | Maricopa, AZ | 2 | 141,236 | 1,994,579 | 0.831 |
| 2 | Clark, NV | 1 | 30,237 | 3,452,800 | 0.511 |
| 3 | Cuyahoga, OH | 2 | 65,007 | 1,462,654 | 0.434 |
| 4 | Elkhart, IN | 2 | 60,633 | 633,370 | 0.318 |
| 5 | Franklin, OH | 2 | 36,600 | 1,441,212 | 0.306 |
| 6 | Pima, AZ | 1 | 28,674 | 1,698,472 | 0.301 |
| 7 | Ottawa, MI | 2 | 40,464 | 977,008 | 0.269 |
| 8 | Summit, OH | 1 | 26,777 | 1,376,713 | 0.255 |
| 9 | Pinal, AZ | 1 | 6,618 | 1,927,806 | 0.230 |
| 10 | Hartford ('Capitol'), CT | 0 | 50,064 | 0 (no matched utility) | 0.199 |
| 10 | Hartford ('Capitol'), CT | 0 | 50,064 | 0 (no matched utility) | 0.199 |
| 9 | Pinal, AZ | 1 | 6,618 | 1,927,806 | 0.230 |
| 8 | Summit, OH | 1 | 26,777 | 1,376,713 | 0.255 |
| 7 | Ottawa, MI | 2 | 40,464 | 977,008 | 0.269 |
| 6 | Pima, AZ | 1 | 28,674 | 1,698,472 | 0.301 |
| 5 | Franklin, OH | 2 | 36,600 | 1,441,212 | 0.306 |
| 4 | Elkhart, IN | 2 | 60,633 | 633,370 | 0.318 |
| 3 | Cuyahoga, OH | 2 | 65,007 | 1,462,654 | 0.434 |
| 2 | Clark, NV | 1 | 30,237 | 3,452,800 | 0.511 |
| 1 | Maricopa, AZ | 2 | 141,236 | 1,994,579 | 0.831 |
| 2 | Clark, NV | 1 | 30,237 | 3,452,800 | 0.511 |
| 3 | Cuyahoga, OH | 2 | 65,007 | 1,462,654 | 0.434 |
| 4 | Elkhart, IN | 2 | 60,633 | 633,370 | 0.318 |
| 5 | Franklin, OH | 2 | 36,600 | 1,441,212 | 0.306 |
| 10 | Hartford ('Capitol'), CT | 0 | 50,064 | 0 (no matched utility) | 0.199 |
| 1 | Maricopa, AZ | 2 | 141,236 | 1,994,579 | 0.831 |
| 7 | Ottawa, MI | 2 | 40,464 | 977,008 | 0.269 |
| 6 | Pima, AZ | 1 | 28,674 | 1,698,472 | 0.301 |
| 9 | Pinal, AZ | 1 | 6,618 | 1,927,806 | 0.230 |
| 8 | Summit, OH | 1 | 26,777 | 1,376,713 | 0.255 |
| 1 | Maricopa, AZ | 2 | 141,236 | 1,994,579 | 0.831 |
| 3 | Cuyahoga, OH | 2 | 65,007 | 1,462,654 | 0.434 |
| 4 | Elkhart, IN | 2 | 60,633 | 633,370 | 0.318 |
| 5 | Franklin, OH | 2 | 36,600 | 1,441,212 | 0.306 |
| 7 | Ottawa, MI | 2 | 40,464 | 977,008 | 0.269 |
| 2 | Clark, NV | 1 | 30,237 | 3,452,800 | 0.511 |
| 6 | Pima, AZ | 1 | 28,674 | 1,698,472 | 0.301 |
| 8 | Summit, OH | 1 | 26,777 | 1,376,713 | 0.255 |
| 9 | Pinal, AZ | 1 | 6,618 | 1,927,806 | 0.230 |
| 10 | Hartford ('Capitol'), CT | 0 | 50,064 | 0 (no matched utility) | 0.199 |
| 1 | Maricopa, AZ | 2 | 141,236 | 1,994,579 | 0.831 |
| 3 | Cuyahoga, OH | 2 | 65,007 | 1,462,654 | 0.434 |
| 4 | Elkhart, IN | 2 | 60,633 | 633,370 | 0.318 |
| 10 | Hartford ('Capitol'), CT | 0 | 50,064 | 0 (no matched utility) | 0.199 |
| 7 | Ottawa, MI | 2 | 40,464 | 977,008 | 0.269 |
| 5 | Franklin, OH | 2 | 36,600 | 1,441,212 | 0.306 |
| 2 | Clark, NV | 1 | 30,237 | 3,452,800 | 0.511 |
| 6 | Pima, AZ | 1 | 28,674 | 1,698,472 | 0.301 |
| 8 | Summit, OH | 1 | 26,777 | 1,376,713 | 0.255 |
| 9 | Pinal, AZ | 1 | 6,618 | 1,927,806 | 0.230 |
| 2 | Clark, NV | 1 | 30,237 | 3,452,800 | 0.511 |
| 1 | Maricopa, AZ | 2 | 141,236 | 1,994,579 | 0.831 |
| 9 | Pinal, AZ | 1 | 6,618 | 1,927,806 | 0.230 |
| 6 | Pima, AZ | 1 | 28,674 | 1,698,472 | 0.301 |
| 3 | Cuyahoga, OH | 2 | 65,007 | 1,462,654 | 0.434 |
| 5 | Franklin, OH | 2 | 36,600 | 1,441,212 | 0.306 |
| 8 | Summit, OH | 1 | 26,777 | 1,376,713 | 0.255 |
| 7 | Ottawa, MI | 2 | 40,464 | 977,008 | 0.269 |
| 4 | Elkhart, IN | 2 | 60,633 | 633,370 | 0.318 |
| 10 | Hartford ('Capitol'), CT | 0 | 50,064 | 0 (no matched utility) | 0.199 |
| 1 | Maricopa, AZ | 2 | 141,236 | 1,994,579 | 0.831 |
| 2 | Clark, NV | 1 | 30,237 | 3,452,800 | 0.511 |
| 3 | Cuyahoga, OH | 2 | 65,007 | 1,462,654 | 0.434 |
| 4 | Elkhart, IN | 2 | 60,633 | 633,370 | 0.318 |
| 5 | Franklin, OH | 2 | 36,600 | 1,441,212 | 0.306 |
| 6 | Pima, AZ | 1 | 28,674 | 1,698,472 | 0.301 |
| 7 | Ottawa, MI | 2 | 40,464 | 977,008 | 0.269 |
| 8 | Summit, OH | 1 | 26,777 | 1,376,713 | 0.255 |
| 9 | Pinal, AZ | 1 | 6,618 | 1,927,806 | 0.230 |
| 10 | Hartford ('Capitol'), CT | 0 | 50,064 | 0 (no matched utility) | 0.199 |
Arizona counties (Maricopa, Pima, Pinal) and Ohio's industrial belt (Cuyahoga/Cleveland, Franklin/Columbus, Summit/Akron) both show up repeatedly -- Arizona for genuinely low hazard exposure (arid climate, no hurricane risk, low flood/tornado incidence), Ohio for a deep legacy manufacturing base with moderate (not extreme) disaster activity.
Corroboration from outside the corpus
Independent web research confirms the mechanism, not just the correlation: TSMC's own site-selection rationale for its Arizona fab cited limited potential for natural disasters and adverse weather as an explicit factor, and Greater Phoenix economic-development materials cite 71% fewer natural disasters than California as a competitive advantage for semiconductor operations. Separately, current industrial site-selection literature (Area Development, Cushman & Wakefield) confirms that grid/substation capacity and rail/road access are the dominant infrastructure gating factors for large industrial facilities today -- consistent with the proxies used here, though neither substation capacity nor rail mileage exists at county grain in this corpus.
Every query behind this report
8 warehouse calls ran in this session, in order. Each is reproducible against the same snapshot.
query — 1 rows — 24441 ms
WITH disaster_counts AS (
SELECT county_fips, COUNT(DISTINCT disaster_number) AS major_disasters
FROM disasters.disaster_declarations
WHERE declaration_type = 'DR' AND county_fips IS NOT NULL
GROUP BY county_fips
),
manuf AS (
SELECT area_fips AS county_fips, SUM(annual_avg_emplvl) AS manuf_emp
FROM econ.county_qcew
WHERE industry_code = '31-33' AND own_code = '5' AND "year" = '2024'
GROUP BY area_fips
),
elec AS (
SELECT county_fips, SUM(sales_industrial_mwh) AS ind_mwh
FROM energy.eia_electricity_demand_by_county
WHERE report_year = 2023
GROUP BY county_fips
),
pop AS (
SELECT county_fips, total_population AS population
FROM census.acs_population
WHERE "year" = '2023' AND geography = 'county'
)
SELECT
(SELECT count(*) FROM disaster_counts) AS n_disaster,
(SELECT count(*) FROM manuf) AS n_manuf,
(SELECT count(*) FROM elec) AS n_elec,
(SELECT count(*) FROM pop) AS n_pop;
query — 1 rows — 7189 ms
SELECT COUNT(*) FROM disasters.disaster_declarations WHERE declaration_type = 'DR' AND county_fips IS NOT NULLquery — 5 rows — 2570 ms
WITH pop AS (
SELECT county_fips, total_population AS population
FROM census.acs_population
WHERE "year" = '2023' AND geography = 'county'
)
SELECT * FROM pop LIMIT 5
query — 25 rows — 25079 ms
WITH disaster_counts AS (
SELECT county_fips, COUNT(DISTINCT disaster_number) AS major_disasters
FROM disasters.disaster_declarations
WHERE declaration_type = 'DR' AND county_fips IS NOT NULL
GROUP BY county_fips
),
manuf AS (
SELECT area_fips AS county_fips, SUM(annual_avg_emplvl) AS manuf_emp
FROM econ.county_qcew
WHERE industry_code = '31-33' AND own_code = '5' AND "year" = '2024'
GROUP BY area_fips
),
elec AS (
SELECT county_fips, SUM(sales_industrial_mwh) AS ind_mwh
FROM energy.eia_electricity_demand_by_county
WHERE report_year = 2023
GROUP BY county_fips
),
pop AS (
SELECT county_fips, total_population AS population
FROM census.acs_population
WHERE "year" = '2023' AND geography = 'county'
),
base AS (
SELECT p.county_fips AS cfips, p.population AS population,
COALESCE(d.major_disasters, 0) AS major_disasters,
COALESCE(m.manuf_emp, 0) AS manuf_emp,
COALESCE(e.ind_mwh, 0) AS ind_mwh
FROM pop p
LEFT JOIN disaster_counts d ON p.county_fips = d.county_fips
LEFT JOIN manuf m ON p.county_fips = m.county_fips
LEFT JOIN elec e ON p.county_fips = e.county_fips
WHERE p.population >= 30000
),
scaled AS (
SELECT cfips, population, major_disasters, manuf_emp, ind_mwh,
1.0 - (major_disasters - MIN(major_disasters) OVER()) * 1.0 / NULLIF(MAX(major_disasters) OVER() - MIN(major_disasters) OVER(),0) AS disaster_score,
(manuf_emp - MIN(manuf_emp) OVER()) * 1.0 / NULLIF(MAX(manuf_emp) OVER() - MIN(manuf_emp) OVER(),0) AS manuf_score,
(ind_mwh - MIN(ind_mwh) OVER()) * 1.0 / NULLIF(MAX(ind_mwh) OVER() - MIN(ind_mwh) OVER(),0) AS elec_score
FROM base
)
SELECT s.cfips, c.county_name, c.state_fips,
s.population, s.major_disasters, s.manuf_emp, s.ind_mwh,
ROUND(disaster_score,3) AS disaster_score,
ROUND(manuf_score,3) AS manuf_score,
ROUND(elec_score,3) AS elec_score,
ROUND(0.5*disaster_score + 0.25*manuf_score + 0.25*elec_score, 4) AS composite_score
FROM scaled s
JOIN geo.counties c ON s.cfips = c.county_fips
WHERE c."year" = '2023'
ORDER BY composite_score DESC
FETCH FIRST 25 ROWS ONLY
query — 15 rows — 28488 ms
WITH disaster_counts AS (
SELECT county_fips, COUNT(DISTINCT disaster_number) AS major_disasters
FROM disasters.disaster_declarations
WHERE declaration_type = 'DR' AND county_fips IS NOT NULL
GROUP BY county_fips
),
manuf AS (
SELECT area_fips AS county_fips, SUM(annual_avg_emplvl) AS manuf_emp
FROM econ.county_qcew
WHERE industry_code = '31-33' AND own_code = '5' AND "year" = '2024'
GROUP BY area_fips
),
elec AS (
SELECT county_fips, SUM(sales_industrial_mwh) AS ind_mwh
FROM energy.eia_electricity_demand_by_county
WHERE report_year = 2023
GROUP BY county_fips
),
pop AS (
SELECT county_fips, total_population AS population
FROM census.acs_population
WHERE "year" = '2023' AND geography = 'county'
),
base AS (
SELECT p.county_fips AS cfips, p.population AS population,
COALESCE(d.major_disasters, 0) AS major_disasters,
COALESCE(m.manuf_emp, 0) AS manuf_emp,
COALESCE(e.ind_mwh, 0) AS ind_mwh
FROM pop p
LEFT JOIN disaster_counts d ON p.county_fips = d.county_fips
LEFT JOIN manuf m ON p.county_fips = m.county_fips
LEFT JOIN elec e ON p.county_fips = e.county_fips
WHERE p.population >= 30000 AND COALESCE(m.manuf_emp,0) >= 5000
),
scaled AS (
SELECT cfips, population, major_disasters, manuf_emp, ind_mwh,
1.0 - (major_disasters - MIN(major_disasters) OVER()) * 1.0 / NULLIF(MAX(major_disasters) OVER() - MIN(major_disasters) OVER(),0) AS disaster_score,
(manuf_emp - MIN(manuf_emp) OVER()) * 1.0 / NULLIF(MAX(manuf_emp) OVER() - MIN(manuf_emp) OVER(),0) AS manuf_score,
(ind_mwh - MIN(ind_mwh) OVER()) * 1.0 / NULLIF(MAX(ind_mwh) OVER() - MIN(ind_mwh) OVER(),0) AS elec_score
FROM base
)
SELECT s.cfips, c.county_name, c.state_fips,
s.population, s.major_disasters, s.manuf_emp, ROUND(s.ind_mwh) AS ind_mwh,
ROUND(disaster_score,3) AS disaster_score,
ROUND(manuf_score,3) AS manuf_score,
ROUND(elec_score,3) AS elec_score,
ROUND(0.4*disaster_score + 0.4*manuf_score + 0.2*elec_score, 4) AS composite_score
FROM scaled s
JOIN geo.counties c ON s.cfips = c.county_fips
WHERE c."year" = '2023'
ORDER BY composite_score DESC
FETCH FIRST 15 ROWS ONLY
query — 1 rows — 28113 ms
WITH disaster_counts AS (
SELECT county_fips, COUNT(DISTINCT disaster_number) AS major_disasters
FROM disasters.disaster_declarations
WHERE declaration_type = 'DR' AND county_fips IS NOT NULL
GROUP BY county_fips
),
manuf AS (
SELECT area_fips AS county_fips, SUM(annual_avg_emplvl) AS manuf_emp
FROM econ.county_qcew
WHERE industry_code = '31-33' AND own_code = '5' AND "year" = '2024'
GROUP BY area_fips
),
elec AS (
SELECT county_fips, SUM(sales_industrial_mwh) AS ind_mwh
FROM energy.eia_electricity_demand_by_county
WHERE report_year = 2023
GROUP BY county_fips
),
pop AS (
SELECT county_fips, total_population AS population
FROM census.acs_population
WHERE "year" = '2023' AND geography = 'county'
),
base AS (
SELECT p.county_fips AS cfips, p.population AS population,
COALESCE(d.major_disasters, 0) AS major_disasters,
COALESCE(m.manuf_emp, 0) AS manuf_emp,
COALESCE(e.ind_mwh, 0) AS ind_mwh
FROM pop p
LEFT JOIN disaster_counts d ON p.county_fips = d.county_fips
LEFT JOIN manuf m ON p.county_fips = m.county_fips
LEFT JOIN elec e ON p.county_fips = e.county_fips
WHERE p.population >= 30000 AND COALESCE(m.manuf_emp,0) >= 5000
),
stats AS (
SELECT median(major_disasters) AS med_disasters, count(*) AS n FROM base
)
SELECT * FROM stats
query — 20 rows — 29064 ms
WITH disaster_counts AS (
SELECT county_fips, COUNT(DISTINCT disaster_number) AS major_disasters
FROM disasters.disaster_declarations
WHERE declaration_type = 'DR' AND county_fips IS NOT NULL
GROUP BY county_fips
),
manuf AS (
SELECT area_fips AS county_fips, SUM(annual_avg_emplvl) AS manuf_emp
FROM econ.county_qcew
WHERE industry_code = '31-33' AND own_code = '5' AND "year" = '2024'
GROUP BY area_fips
),
elec AS (
SELECT county_fips, SUM(sales_industrial_mwh) AS ind_mwh
FROM energy.eia_electricity_demand_by_county
WHERE report_year = 2023
GROUP BY county_fips
),
pop AS (
SELECT county_fips, total_population AS population
FROM census.acs_population
WHERE "year" = '2023' AND geography = 'county'
),
base AS (
SELECT p.county_fips AS cfips, p.population AS population,
COALESCE(d.major_disasters, 0) AS major_disasters,
COALESCE(m.manuf_emp, 0) AS manuf_emp,
COALESCE(e.ind_mwh, 0) AS ind_mwh
FROM pop p
LEFT JOIN disaster_counts d ON p.county_fips = d.county_fips
LEFT JOIN manuf m ON p.county_fips = m.county_fips
LEFT JOIN elec e ON p.county_fips = e.county_fips
WHERE p.population >= 30000 AND COALESCE(m.manuf_emp,0) >= 5000
),
qualifying AS (
SELECT * FROM base WHERE major_disasters <= 2
),
scaled AS (
SELECT cfips, population, major_disasters, manuf_emp, ind_mwh,
(manuf_emp - MIN(manuf_emp) OVER()) * 1.0 / NULLIF(MAX(manuf_emp) OVER() - MIN(manuf_emp) OVER(),0) AS manuf_score,
(ind_mwh - MIN(ind_mwh) OVER()) * 1.0 / NULLIF(MAX(ind_mwh) OVER() - MIN(ind_mwh) OVER(),0) AS elec_score
FROM qualifying
)
SELECT s.cfips, c.county_name, c.state_fips,
s.population, s.major_disasters, s.manuf_emp, ROUND(s.ind_mwh) AS ind_mwh,
ROUND(manuf_score,3) AS manuf_score,
ROUND(elec_score,3) AS elec_score,
ROUND(0.6*manuf_score + 0.4*elec_score, 4) AS infra_score
FROM scaled s
JOIN geo.counties c ON s.cfips = c.county_fips
WHERE c."year" = '2023'
ORDER BY infra_score DESC
FETCH FIRST 20 ROWS ONLY
query — 1 rows — 1735 ms
SELECT COUNT(*) AS null_fips_rows, COUNT(DISTINCT disaster_number) AS null_fips_disasters FROM disasters.disaster_declarations WHERE declaration_type = 'DR' AND county_fips IS NULLSources
- FEMA disaster declarations (major/DR type)
Show SQL
SELECT county_fips, COUNT(DISTINCT disaster_number) AS major_disasters FROM disasters.disaster_declarations WHERE declaration_type = 'DR' AND county_fips IS NOT NULL GROUP BY county_fips - BLS QCEW manufacturing employment by county, 2024 (NAICS 31-33, private)
Show SQL
SELECT area_fips, SUM(annual_avg_emplvl) FROM econ.county_qcew WHERE industry_code = '31-33' AND own_code = '5' AND "year" = '2024' GROUP BY area_fips - EIA-861 industrial electricity sales apportioned to county, 2023
Show SQL
SELECT county_fips, SUM(sales_industrial_mwh) FROM energy.eia_electricity_demand_by_county WHERE report_year = 2023 GROUP BY county_fips - Census ACS total population by county, 2023
Show SQL
SELECT county_fips, total_population FROM census.acs_population WHERE "year" = '2023' AND geography = 'county' - Arizona Commerce Authority -- semiconductor manufacturing advantages (low disaster risk)
- TSMC Arizona site selection factors (NIST draft environmental assessment)
- Area Development -- Power Is the New Gatekeeper in Manufacturing Site Selection