Methodology & Sources

Everything here comes from public state and federal records. This page explains exactly how the map is built, what it claims, what it does not claim, and how to check it. Figures computed 2026-09-03; page built 2026-09-03.

The finding

The Minnesota Pollution Control Agency has recorded PFAS above a health standard in groundwater monitoring wells at 95 named facilities — mostly county landfills, across the state.

The Minnesota Department of Health has never tested fish for PFAS in 935 lakes (789,089 acres) or 4,305 river miles in or downstream of those same sub-watersheds, across 60 counties.

209 of those lakes and 139 of those river reaches were sampled — fish were caught, tissue was analyzed, a result was published — for mercury or PCBs. Not for PFAS.

Both datasets are public. Neither agency publishes them joined.

What this does not claim

Sources

DatasetAgencyUsed for
Fish consumption guidance (LakeFinder FCA pages)MDH via DNR Per-lake advisories and which contaminants were named
Waterbody-specific guidelines: Rivers (PDF)MDH River advisories by reach
Lake survey reports (LakeFinder API)DNR Fish populations, catch per net, DNR normal ranges
DNR HydrographyDNR / MN Geospatial Commons Lake list, DOW numbers, acreage, coordinates, stream geometry
Groundwater Contamination AtlasMPCA Monitoring wells, exceedances, contamination area polygons
Closed landfills, remediation sites, institutional controlsMPCA Contamination sources and cleanup status
Impaired waters, 303(d), 2024MPCA Fish-tissue impairments for mercury, PCBs, PFOS
Watershed Boundary Dataset (HUC12)USGS Sub-watershed boundaries and downstream links
Toxics Release InventoryEPA Facilities reporting chemical releases
ECHO enforcementEPA Formal actions, penalties, compliance status

Data as retrieved on the dates shown on each record. Agencies revise these datasets; the map is rebuilt weekly.

How the finding is computed

  1. Take every MPCA monitoring well with a recorded exceedance (exceedance_count > 0) whose exceedance names a PFAS compound. 8,543 wells qualify statewide.
  2. Place each well in its USGS HUC12 sub-watershed, then follow the tohuc field up to two steps downstream.
  3. Place every lake and every MPCA-listed stream reach in a sub-watershed the same way.
  4. Keep a waterbody only if MDH has never named a PFAS compound for it and MPCA has not listed it PFOS-impaired — i.e. no one has looked for PFAS there.
  5. Record, for each one, which well, what it exceeded, by how much, and when it was last sampled.

How "tested for PFAS" is decided — and why it favors the agencies

A lake is treated as already tested for PFAS if MDH's guidance page names any PFAS compound at all, or if MPCA has listed it PFOS-impaired. In practice that usually means a single compound — PFOS — while the PFAS family contains thousands. A lake screened only for PFOS is counted here as tested and is excluded from the finding, even though the compounds MPCA is measuring in groundwater at these sites routinely include PFOA, PFHxS, PFHxA, PFBS and PFNA as well.

That choice makes the count smaller and the claim narrower. It is deliberate: every lake in this finding has had no PFAS compound looked for in its fish.

Exclusions applied

How the exceedance figures work

MPCA's well records carry a derived field, exceedance_pct_max. Despite the name it is a multiple of the health value, not a percentage, and it is computed against the most protective value MDH publishes for that compound.

Worked example — Hickory Grove Landfill, well 785553. MPCA reports a PFOA result of 0.143 µg/L and a field value of 18,101.27. MDH's Human Health-Based Water Guidance Table gives two values for PFOA:

MDH value for PFOAµg/L 0.143 ÷ value
Chronic health-based value0.00024596×
Cancer health-based value0.000007918,101×

So MPCA's figure is arithmetically correct and refers to the cancer-based value. A PFOS well at the Lehillier / Mankato site confirms the same pattern: 0.007 µg/L against MDH's chronic PFOS value of 0.0023 µg/L gives 3.04, which is exactly what MPCA reports.

Because a bare multiple does not say which value it is measured against, this site shows the measured concentration first and then both multiples, each labelled. Every figure can be checked against MDH's guidance table without trusting arithmetic in between.

What exceeding a cancer-based value does and does not mean. MDH's cancer health-based value is the concentration in drinking water corresponding to a small additional lifetime cancer risk for someone consuming that water daily over a lifetime. These measurements are from groundwater monitoring wells inside landfill boundaries. They are not drinking water, and they are not measurements of any lake. A well exceeding that value is a statement about contamination at that site — not a statement about anyone's cancer risk, and not a claim that a downstream lake is affected.

An earlier version of this page said MPCA's field was inflated by a factor of 1,000. That was wrong — it came from working backwards to a standard rather than reading MDH's published table — and was corrected on 2026-09-03 before publication. The raw field is retained in the downloadable data as mpca_exceedance_pct_max_RAW_see_methodology.

Exclusions applied

Why this site shows measured concentrations, not "times the standard"

MPCA's wells carry a derived field, exceedance_pct_max. This site does not display it, because for PFAS it is inflated by a factor of 1,000.

The clearest example is Hickory Grove Landfill, well 785553. MPCA reports exceedance_pct_max = 18101.27 alongside a measured PFOA result of 0.143 µg/L. MDH's health-based value for PFOA is 0.0079 µg/L, so the result is about 18 times the standard. The figure 18,101 is 0.143 ÷ 0.0000079 — the standard expressed in mg/L divided into a result reported in µg/L.

For conventional contaminants the same field is computed correctly. At the Lehillier / Mankato site, trichloroethene at 7.6 µg/L against a 0.4 µg/L standard is reported as 19.0, which is right. The field is therefore internally inconsistent, and any PFAS magnitude drawn from it would overstate the exceedance by three orders of magnitude.

So this site reports what MPCA measured — the concentration and its unit, exactly as published in exceedance_value_list — and relies on MPCA's own exceedance_count field for whether a standard was exceeded at all. Anyone can compare a published concentration against MDH's health-based values without trusting arithmetic in between.

This discrepancy was found while checking this project's own numbers before publication. It is reported here rather than quietly worked around. MPCA is welcome to correct the reading; the raw field is retained in the downloadable data as mpca_exceedance_pct_max_RAW_see_methodology so the difference stays auditable.

Exclusions applied

Why this site shows measured concentrations, not "times the standard"

MPCA's field is exceedance_pct_max. Despite the name, its values are the measured concentration divided by the health standard — a multiple, not a percentage. This site displays them as multiples (×).

MPCA publishes no definition for the field, so it was verified arithmetically against its own exceedance_value_list column, using trichloroethene wells at the Lehillier / Mankato site, where the health-based value is 0.4 µg/L:

WellMeasuredMeasured ÷ 0.4 MPCA field value
4D7.6 µg/L19.019.0
W30R1.2 µg/L3.03.0
W28R0.66 µg/L1.651.65
5D0.6 µg/L1.51.5

A PFOS well at the same site confirms it independently: 0.007 µg/L against a field value of 3.04 implies a standard of 0.0023 µg/L, which is MDH's health-based value for PFOS.

So a well listed at 18,101× carries roughly eighteen thousand times the health standard for the compound in question. Large multiples are not errors: PFAS standards are set in parts per trillion, so even a very large multiple can be an ordinary concentration for landfill leachate. If MPCA's own definition of this field differs from the arithmetic above, write to the corrections address and it will be relabelled.

Largest lakes MDH sampled and never tested for PFAS

LakeCountyAcresNearest PFAS exceedance Measured (MPCA)Last sampled
Lake of the Woods (MN)Lake of the Woods305,576Lake of the Woods County Landfill0.085 ug/L; 0.21 ug/L; 0.18 ug/L2020-04-22
Mille LacsMille Lacs128,250Hickory Grove Landfill9.9 ug/L; 110.0 ug/L; 0.143 ug/L; 0.51 ug/L2025-05-08
VermilionSt. Louis39,272Vermillion Modified Sanitary Landfill1200.0 ug/L; 0.00658 ug/L; 0.00234 ug/L2025-10-08
East VermilionSt. Louis25,798Vermillion Modified Sanitary Landfill1200.0 ug/L; 0.00658 ug/L; 0.00234 ug/L2025-10-08
CassBeltrami15,958Leech Lake Landfill0.0122 ug/L2026-06-01
Otter TailOtter Tail14,079Northeast Otter Tail County Landfill2.9 ug/L; 34.8 ug/L; 1090.0 ug/L; 0.036 ug/L; 0.0079 ug/L; 0.16 2025-03-26
West VermilionSt. Louis11,368Vermillion Modified Sanitary Landfill1200.0 ug/L; 0.00658 ug/L; 0.00234 ug/L2025-10-08
GullCass10,010Maple Landfill9.9 ug/L; 812.0 ug/L; 0.0104 ug/L; 0.144 ug/L; 0.00358 ug/L; 0.02025-11-06
WhitefishCrow Wing7,714Fifty Lakes Landfill1290.0 ug/L; 0.008 ug/L2023-11-21
West BattleOtter Tail5,615Battle Lake Landfill45.0 ug/L; 830.0 ug/L; 850.0 ug/L; 0.00524 ug/L; 0.0054 ug/L2025-06-03
WomanCass5,520Walker-Hackensack Landfill180.0 ug/L; 0.0426 ug/L; 0.00288 ug/L2025-05-22
RushOtter Tail5,276Northeast Otter Tail County Landfill2.9 ug/L; 34.8 ug/L; 1090.0 ug/L; 0.036 ug/L; 0.0079 ug/L; 0.16 2025-03-26

Scale of the underlying gap

Minnesota has 8,628 lakes over 25 acres in the DNR hydrography layer. 1,480 have a fish-tissue result of any kind. 7,148 have none. Separately, DNR has published 21,933 fish population surveys covering 3,321 lakes, and MPCA has 19,599 monitoring wells in its contamination atlas.

Known limitations

Corrections

If something here is wrong, I want to fix it. Email mnwaterdata@gmail.com with the record and what is incorrect. Corrections are made within 48 hours and noted here. Agencies, facility operators, and anyone else named in this data are welcome to write.

This is an independent project. It is not affiliated with or endorsed by MDH, MPCA, DNR, EPA, USGS, or any company named in the underlying records.

← Back to the map