Skip to main content
💧 TapWaterData

Download the Military PFAS Dataset

The full join — 723 U.S. Department of Defense PFAS-assessed installations, the 2,762 nearby community and on-base federal water systems joined to them, and each system's latest EPA UCMR5 PFAS monitoring against the current federal limits — as a plain CSV, a nested JSON, and a documented README. Free to republish, chart, or build on under CC BY 4.0.

By TapWaterData EditorialData updated 2026-07-11Schema version 1.0.0
CC BY 4.0

Get the files

Three formats, one dataset. The CSV has 110 columns and one row per (installation, water system); an installation with no joined system has no CSV row but is kept in the JSON index, counted honestly rather than dropped.

  • Download CSV

    One row per (installation, water system), with flat per-compound columns and a plain header row for strict CSV parsers.

  • Download JSON

    The full nested dataset with per-installation flags plus a _meta block carrying the license, citation, and regulatory status.

  • Download README

    The license, citation, the full column dictionary, and the regulatory disclaimer in one plain-text file.

License & citation

This dataset is published under a Creative Commons Attribution 4.0 (CC BY 4.0) license — free to republish, chart, or build on with attribution to TapWaterData Editorial. Suggested citation:

TapWaterData Editorial. "Military PFAS Dataset: U.S. Department of Defense PFAS-assessed installations joined to nearby community water systems and federal PFAS drinking-water monitoring (UCMR5)." Data updated 2026-07-11. Licensed under CC BY 4.0. https://tapwaterdata.com/military-pfas

Column dictionary

Every one of the 110 CSV columns, in file order. The same dictionary ships inside the README. A value below the reporting level is a non-detect; a system never sampled under UCMR5 is a distinct “not tested” state, never presented as a clean result.

Swipe to see full descriptions →
ColumnDescription
base_idDeterministic installation id (slug + state).
base_nameInstallation name as published by DoD.
branchMilitary branch / owning organization.
componentInstallation component/type (Active, National Guard, BRAC, FUDS).
stateState/territory name.
state_codeTwo-letter state/territory code.
latInstallation centroid latitude (blank when no geometry was resolved).
lngInstallation centroid longitude (blank when no geometry was resolved).
dod_cleanup_statusDoD PA/SI disposition: no_further_action or proceeding.
base_any_system_exceeds_4pptTrue if any associated system's latest PFOA or PFOS exceeds 4 ppt.
base_any_system_in_dod_gapTrue if any associated system's latest PFOA/PFOS is in the 4-12 ppt DoD interim-action gap.
base_any_system_rescission_affectedTrue if any associated system has a PFHxS/PFNA/HFPO-DA/PFBS detection whose limit EPA proposes to rescind.
base_has_on_base_federal_systemTrue if any associated system is an on-base federal water system.
pwsidEPA Public Water System ID.
system_nameWater system name (EPA ECHO SDWA).
population_servedPopulation served (EPA ECHO SDWA).
owner_typeEPA owner-type code (F=federal, L=local, P=private, S=state, ...).
federal_on_base_systemTrue when this is an on-base federal water system (attached separately, never merged).
join_basisHow the system was associated: overlap, within_3mi, or county_zip_fallback (geographic only).
distance_milesApproximate boundary-to-boundary miles (0 for overlap; blank for county/ZIP fallback).
city_slugLink into the corresponding city page, or blank.
hazard_index_computedRecomputed PFAS-mixture Hazard Index (sum of latest/HBWC over PFHxS,PFNA,HFPO-DA,PFBS); blank when no component was tested. HI MCL = 1.
health_based_violationsCount of health-based SDWA violations (EPA ECHO); blank when none recorded. Not a PFAS violation determination.
latest_violation_dateLatest health-based SDWA violation date (EPA ECHO), or blank.
lead_utility_reported_ppbUtility-reported lead value in ppb, or blank.
lead_reported_dateDate of the utility-reported lead value, or blank.
pfoa_ucmr5_tested[PFOA] True if the system was sampled for this analyte under UCMR5. False is NOT a clean result.
pfoa_ucmr5_latest_ppt[PFOA] Latest UCMR5 result in ppt (blank when not tested or non-detect).
pfoa_ucmr5_max_ppt[PFOA] Maximum UCMR5 result in ppt over the window (context only; blank when not tested or non-detect).
pfoa_ucmr5_latest_sample_date[PFOA] Date of the latest UCMR5 sample, or blank.
pfoa_ucmr5_sample_count[PFOA] Number of UCMR5 sample rows (0 when not tested).
pfoa_ucmr5_non_detect[PFOA] True only if sampled with every result below the reporting level (distinct from not tested).
pfoa_ucmr5_mrl_ppt[PFOA] UCMR5 minimum reporting level in ppt (blank when not tested); UCMR5 cannot see below this.
pfoa_utility_reported_ppt[PFOA] Utility-reported value for this compound in ppt, or blank.
pfoa_utility_reported_date[PFOA] Date of the utility-reported value, or blank.
pfoa_mcl_ppt[PFOA] Codified April-2024 EPA MCL in ppt (blank for PFBS, which has no individual MCL).
pfoa_exceeds_mcl[PFOA] True when the latest result exceeds this compound's MCL.
pfoa_exceeds_4ppt[PFOA] True when the latest PFOA/PFOS result exceeds 4 ppt (false for other compounds).
pfoa_in_dod_gap_4to12[PFOA] True when the latest PFOA/PFOS result is in the 4-12 ppt DoD interim-action gap.
pfoa_rescission_affected[PFOA] True when this compound (PFHxS/PFNA/HFPO-DA/PFBS) has any UCMR5 detection and its limit is among those EPA proposes to rescind (a proposal, not final).
pfos_ucmr5_tested[PFOS] True if the system was sampled for this analyte under UCMR5. False is NOT a clean result.
pfos_ucmr5_latest_ppt[PFOS] Latest UCMR5 result in ppt (blank when not tested or non-detect).
pfos_ucmr5_max_ppt[PFOS] Maximum UCMR5 result in ppt over the window (context only; blank when not tested or non-detect).
pfos_ucmr5_latest_sample_date[PFOS] Date of the latest UCMR5 sample, or blank.
pfos_ucmr5_sample_count[PFOS] Number of UCMR5 sample rows (0 when not tested).
pfos_ucmr5_non_detect[PFOS] True only if sampled with every result below the reporting level (distinct from not tested).
pfos_ucmr5_mrl_ppt[PFOS] UCMR5 minimum reporting level in ppt (blank when not tested); UCMR5 cannot see below this.
pfos_utility_reported_ppt[PFOS] Utility-reported value for this compound in ppt, or blank.
pfos_utility_reported_date[PFOS] Date of the utility-reported value, or blank.
pfos_mcl_ppt[PFOS] Codified April-2024 EPA MCL in ppt (blank for PFBS, which has no individual MCL).
pfos_exceeds_mcl[PFOS] True when the latest result exceeds this compound's MCL.
pfos_exceeds_4ppt[PFOS] True when the latest PFOA/PFOS result exceeds 4 ppt (false for other compounds).
pfos_in_dod_gap_4to12[PFOS] True when the latest PFOA/PFOS result is in the 4-12 ppt DoD interim-action gap.
pfos_rescission_affected[PFOS] True when this compound (PFHxS/PFNA/HFPO-DA/PFBS) has any UCMR5 detection and its limit is among those EPA proposes to rescind (a proposal, not final).
pfhxs_ucmr5_tested[PFHxS] True if the system was sampled for this analyte under UCMR5. False is NOT a clean result.
pfhxs_ucmr5_latest_ppt[PFHxS] Latest UCMR5 result in ppt (blank when not tested or non-detect).
pfhxs_ucmr5_max_ppt[PFHxS] Maximum UCMR5 result in ppt over the window (context only; blank when not tested or non-detect).
pfhxs_ucmr5_latest_sample_date[PFHxS] Date of the latest UCMR5 sample, or blank.
pfhxs_ucmr5_sample_count[PFHxS] Number of UCMR5 sample rows (0 when not tested).
pfhxs_ucmr5_non_detect[PFHxS] True only if sampled with every result below the reporting level (distinct from not tested).
pfhxs_ucmr5_mrl_ppt[PFHxS] UCMR5 minimum reporting level in ppt (blank when not tested); UCMR5 cannot see below this.
pfhxs_utility_reported_ppt[PFHxS] Utility-reported value for this compound in ppt, or blank.
pfhxs_utility_reported_date[PFHxS] Date of the utility-reported value, or blank.
pfhxs_mcl_ppt[PFHxS] Codified April-2024 EPA MCL in ppt (blank for PFBS, which has no individual MCL).
pfhxs_exceeds_mcl[PFHxS] True when the latest result exceeds this compound's MCL.
pfhxs_exceeds_4ppt[PFHxS] True when the latest PFOA/PFOS result exceeds 4 ppt (false for other compounds).
pfhxs_in_dod_gap_4to12[PFHxS] True when the latest PFOA/PFOS result is in the 4-12 ppt DoD interim-action gap.
pfhxs_rescission_affected[PFHxS] True when this compound (PFHxS/PFNA/HFPO-DA/PFBS) has any UCMR5 detection and its limit is among those EPA proposes to rescind (a proposal, not final).
pfna_ucmr5_tested[PFNA] True if the system was sampled for this analyte under UCMR5. False is NOT a clean result.
pfna_ucmr5_latest_ppt[PFNA] Latest UCMR5 result in ppt (blank when not tested or non-detect).
pfna_ucmr5_max_ppt[PFNA] Maximum UCMR5 result in ppt over the window (context only; blank when not tested or non-detect).
pfna_ucmr5_latest_sample_date[PFNA] Date of the latest UCMR5 sample, or blank.
pfna_ucmr5_sample_count[PFNA] Number of UCMR5 sample rows (0 when not tested).
pfna_ucmr5_non_detect[PFNA] True only if sampled with every result below the reporting level (distinct from not tested).
pfna_ucmr5_mrl_ppt[PFNA] UCMR5 minimum reporting level in ppt (blank when not tested); UCMR5 cannot see below this.
pfna_utility_reported_ppt[PFNA] Utility-reported value for this compound in ppt, or blank.
pfna_utility_reported_date[PFNA] Date of the utility-reported value, or blank.
pfna_mcl_ppt[PFNA] Codified April-2024 EPA MCL in ppt (blank for PFBS, which has no individual MCL).
pfna_exceeds_mcl[PFNA] True when the latest result exceeds this compound's MCL.
pfna_exceeds_4ppt[PFNA] True when the latest PFOA/PFOS result exceeds 4 ppt (false for other compounds).
pfna_in_dod_gap_4to12[PFNA] True when the latest PFOA/PFOS result is in the 4-12 ppt DoD interim-action gap.
pfna_rescission_affected[PFNA] True when this compound (PFHxS/PFNA/HFPO-DA/PFBS) has any UCMR5 detection and its limit is among those EPA proposes to rescind (a proposal, not final).
hfpo_da_ucmr5_tested[HFPO-DA] True if the system was sampled for this analyte under UCMR5. False is NOT a clean result.
hfpo_da_ucmr5_latest_ppt[HFPO-DA] Latest UCMR5 result in ppt (blank when not tested or non-detect).
hfpo_da_ucmr5_max_ppt[HFPO-DA] Maximum UCMR5 result in ppt over the window (context only; blank when not tested or non-detect).
hfpo_da_ucmr5_latest_sample_date[HFPO-DA] Date of the latest UCMR5 sample, or blank.
hfpo_da_ucmr5_sample_count[HFPO-DA] Number of UCMR5 sample rows (0 when not tested).
hfpo_da_ucmr5_non_detect[HFPO-DA] True only if sampled with every result below the reporting level (distinct from not tested).
hfpo_da_ucmr5_mrl_ppt[HFPO-DA] UCMR5 minimum reporting level in ppt (blank when not tested); UCMR5 cannot see below this.
hfpo_da_utility_reported_ppt[HFPO-DA] Utility-reported value for this compound in ppt, or blank.
hfpo_da_utility_reported_date[HFPO-DA] Date of the utility-reported value, or blank.
hfpo_da_mcl_ppt[HFPO-DA] Codified April-2024 EPA MCL in ppt (blank for PFBS, which has no individual MCL).
hfpo_da_exceeds_mcl[HFPO-DA] True when the latest result exceeds this compound's MCL.
hfpo_da_exceeds_4ppt[HFPO-DA] True when the latest PFOA/PFOS result exceeds 4 ppt (false for other compounds).
hfpo_da_in_dod_gap_4to12[HFPO-DA] True when the latest PFOA/PFOS result is in the 4-12 ppt DoD interim-action gap.
hfpo_da_rescission_affected[HFPO-DA] True when this compound (PFHxS/PFNA/HFPO-DA/PFBS) has any UCMR5 detection and its limit is among those EPA proposes to rescind (a proposal, not final).
pfbs_ucmr5_tested[PFBS] True if the system was sampled for this analyte under UCMR5. False is NOT a clean result.
pfbs_ucmr5_latest_ppt[PFBS] Latest UCMR5 result in ppt (blank when not tested or non-detect).
pfbs_ucmr5_max_ppt[PFBS] Maximum UCMR5 result in ppt over the window (context only; blank when not tested or non-detect).
pfbs_ucmr5_latest_sample_date[PFBS] Date of the latest UCMR5 sample, or blank.
pfbs_ucmr5_sample_count[PFBS] Number of UCMR5 sample rows (0 when not tested).
pfbs_ucmr5_non_detect[PFBS] True only if sampled with every result below the reporting level (distinct from not tested).
pfbs_ucmr5_mrl_ppt[PFBS] UCMR5 minimum reporting level in ppt (blank when not tested); UCMR5 cannot see below this.
pfbs_utility_reported_ppt[PFBS] Utility-reported value for this compound in ppt, or blank.
pfbs_utility_reported_date[PFBS] Date of the utility-reported value, or blank.
pfbs_mcl_ppt[PFBS] Codified April-2024 EPA MCL in ppt (blank for PFBS, which has no individual MCL).
pfbs_exceeds_mcl[PFBS] True when the latest result exceeds this compound's MCL.
pfbs_exceeds_4ppt[PFBS] True when the latest PFOA/PFOS result exceeds 4 ppt (false for other compounds).
pfbs_in_dod_gap_4to12[PFBS] True when the latest PFOA/PFOS result is in the 4-12 ppt DoD interim-action gap.
pfbs_rescission_affected[PFBS] True when this compound (PFHxS/PFNA/HFPO-DA/PFBS) has any UCMR5 detection and its limit is among those EPA proposes to rescind (a proposal, not final).

Regulatory status

Working with the data?

Read the methodology for how the geographic join and the UCMR5 comparison were built, or browse the full installation study. Need a same-day custom extract or spotted something wrong? Email hello@tapwaterdata.com.

Stay Informed About Your Water Quality

Get EPA reports, filter recommendations, and safety alerts for your area.

Join 10,000+ people protecting their families. Unsubscribe anytime.