Minnesota Water Quality Report
466 cities tested · Average grade: A- · 4.7M people served
Live Water Alerts for Minnesota →Latest water news in Minnesota
Recent reporting on Minnesota drinking water — boil-water advisories, regulatory action, and infrastructure events.
Minnesota water quality overview
Minnesota's drinking water quality is excellent overall, with an average score of 87.5 out of 100 across 466 cities tested. The median score is 89.5, serving a total population of 4,658,468 residents. 94% of cities earned an A or B grade, indicating broadly strong water quality infrastructure across the state. PFAS "forever chemicals" were detected in 144 of 466 cities tested (31%). 16 cities exceed the 2024 EPA maximum contaminant levels. 6 cities have lead levels exceeding the EPA action level of 15 ppb, often indicating aging infrastructure with lead service lines or lead solder. The state relies on a mix of water sources: 428 cities use groundwater while 38 draw from surface water such as rivers, lakes, and reservoirs.
Issues to watch in Minnesota
Explore contaminants in Minnesota
More contaminants tested in Minnesota
Private-well water in Minnesota
Based on USGS Powell Domestic-Well Database — 3,805 private wells sampled across Minnesota. These wells are not regulated by the EPA; if you draw your tap from a private well, the public-system grade above does not apply to you.
Top industrial water polluters in Minnesota
Industrial polluters nearby
The 10 facilities reporting the most pounds released to surface water in Minnesota, 2023.
Total reported releases to surface water: 1,315,889 lbs
| Facility | Top chemical | To surface water (lbs/yr) |
|---|---|---|
3M CHEMICAL OPERATIONS' COTTAGE GROVE FACILITY COTTAGE GROVE, MN55016 | Nitrate compounds (water dissociable; reportable only when in aqueous solution) | 579,662 |
FLINT HILLS RESOURCES PINE BEND LLC ROSEMOUNT, MN55068 | Nitrate compounds (water dissociable; reportable only when in aqueous solution) | 220,055 |
SOUTHERN MINNESOTA BEET SUGAR COOPERATIVE RENVILLE, MN56284 | Nitrate compounds (water dissociable; reportable only when in aqueous solution) | 166,013 |
ST PAUL PARK REFINING CO LLC SAINT PAUL PARK, MN55071 | Nitrate compounds (water dissociable; reportable only when in aqueous solution) | 120,920 |
M G WALDBAUM GAYLORD, MN55334 | Nitrate compounds (water dissociable; reportable only when in aqueous solution) | 88,060 |
+ 5 more facilities
Source: EPA Toxic Release Inventory (TRI) 2023
How Minnesota cities scored
Best Cities
Worst Cities
Water quality across Minnesota
Each dot is a city, colored by its water quality grade. Size reflects population served. Click any city to view its full water report.
466 cities in Minnesota
| # | City | Grade | Score | Population | Violations |
|---|---|---|---|---|---|
| 1 | St. Francis | A+ | 99.6 | 5K | 5 |
| 2 | Otsego | A+ | 99.4 | 19K | 4 |
| 3 | Floodwood | A+ | 99.3 | 501 | 5 |
| 4 | Isanti | A+ | 99 | 7K | 6 |
| 5 | Hermantown | A+ | 98.5 | 7K | 0 |
| 6 | Elgin | A+ | 98.5 | 1K | 6 |
| 7 | Montevideo | A+ | 98 | 5K | 5 |
| 8 | Ranier | A+ | 97.9 | 565 | 2 |
| 9 | Hugo | A+ | 97.7 | 12K | 0 |
| 10 | St. Peter | A+ | 97.7 | 12K | 4 |
| 11 | Elko-New Market | A+ | 97.2 | 5K | 10 |
| 12 | Ramsey | A+ | 97.1 | 18K | 2 |
| 13 | Lakeland | A+ | 97.1 | 4K | 1 |
| 14 | Corcoran | A+ | 97 | 3K | 0 |
| 15 | Mantorville | A+ | 97 | 1K | 1 |
| 16 | Walnut Grove | A+ | 97 | 825 | 1 |
| 17 | Ottertail | A+ | 97 | 694 | 0 |
| 18 | Adams | A+ | 97 | 672 | 0 |
| 19 | Ivanhoe | A+ | 97 | 559 | 0 |
| 20 | Wyoming | A+ | 96.9 | 4K | 6 |
| 21 | Cohasset | A+ | 96.9 | 1K | 2 |
| 22 | Richfield | A+ | 96.8 | 37K | 1 |
| 23 | Andover | A+ | 96.8 | 21K | 4 |
| 24 | Atwater | A+ | 96.8 | 1K | 4 |
| 25 | Hallock | A+ | 96.7 | 850 | 5 |
| 26 | Cleveland | A+ | 96.7 | 719 | 2 |
| 27 | Brownsdale | A+ | 96.7 | 682 | 4 |
| 28 | Mcintosh | A+ | 96.7 | 584 | 2 |
| 29 | Stephen | A+ | 96.7 | 568 | 7 |
| 30 | East Bethel | A+ | 96.7 | 500 | 2 |
| 31 | Rockville | A+ | 96.6 | 765 | 4 |
| 32 | Rollingstone | A+ | 96.5 | 664 | 1 |
| 33 | Nicollet | A+ | 96.4 | 1K | 4 |
| 34 | Houston | A+ | 96.4 | 997 | 5 |
| 35 | Verndale | A+ | 96.4 | 506 | 3 |
| 36 | Mabel | A+ | 96.3 | 715 | 5 |
| 37 | Marble | A+ | 96.3 | 699 | 5 |
| 38 | Taylors Falls | A+ | 96.2 | 1K | 6 |
| 39 | Kerkhoven | A+ | 96.1 | 806 | 3 |
| 40 | Laprairie | A+ | 96.1 | 520 | 2 |
| 41 | Crystal | A+ | 96 | 23K | 1 |
| 42 | Mounds View | A+ | 96 | 13K | 0 |
| 43 | Belle Plaine | A+ | 95.8 | 7K | 5 |
| 44 | Taconite | A+ | 95.8 | 644 | 7 |
| 45 | Zimmerman | A+ | 95.7 | 7K | 11 |
| 46 | Rogers | A+ | 95.3 | 15K | 6 |
| 47 | Baxter | A+ | 95.3 | 9K | 2 |
| 48 | Wadena | A+ | 95 | 4K | 1 |
| 49 | Carlton | A+ | 95 | 1K | 1 |
| 50 | Leroy | A+ | 95 | 959 | 0 |
| 51 | Browerville | A+ | 95 | 836 | 0 |
| 52 | Dayton | A | 94.9 | 5K | 4 |
| 53 | Oronoco | A | 94.9 | 2K | 6 |
| 54 | Robbinsdale | A | 94.8 | 15K | 0 |
| 55 | Westbrook | A | 94.8 | 785 | 2 |
| 56 | New Brighton | A | 94.6 | 23K | 5 |
| 57 | Elk River | A | 94.6 | 20K | 4 |
| 58 | Stewartville | A | 94.6 | 7K | 4 |
| 59 | Byron | A | 94.6 | 6K | 4 |
| 60 | Cannon Falls | A | 94.6 | 4K | 3 |
| 61 | Red Wing | A | 94.5 | 17K | 7 |
| 62 | Mapleton | A | 94.5 | 2K | 6 |
| 63 | Walker | A | 94.5 | 1K | 6 |
| 64 | Cokato | A | 94.4 | 3K | 7 |
| 65 | Birchwood | A | 94.4 | 864 | 8 |
| 66 | Lacrescent | A | 94.3 | 5K | 4 |
| 67 | Barnesville | A | 94.3 | 3K | 8 |
| 68 | Spring Valley | A | 94.3 | 3K | 6 |
| 69 | Lake Crystal | A | 94.3 | 3K | 5 |
| 70 | Ada | A | 94.3 | 2K | 8 |
| 71 | Dassel | A | 94.3 | 2K | 5 |
| 72 | Deer River | A | 94.2 | 942 | 5 |
| 73 | Dodge Center | A | 94.1 | 3K | 13 |
| 74 | Clara City | A | 94.1 | 1K | 7 |
| 75 | Red Lake Falls | A | 94.1 | 1K | 13 |
| 76 | Adrian | A | 94.1 | 1K | 8 |
| 77 | Browns Valley | A | 94.1 | 566 | 5 |
| 78 | Glencoe | A | 94 | 6K | 2 |
| 79 | Pipestone | A | 94 | 4K | 3 |
| 80 | Two Harbors | A | 94 | 4K | 5 |
| 81 | Sleepy Eye | A | 94 | 4K | 0 |
| 82 | Perham | A | 94 | 3K | 4 |
| 83 | Tyler | A | 94 | 1K | 11 |
| 84 | Norwood Young America | A | 93.9 | 4K | 3 |
| 85 | Hinckley | A | 93.9 | 2K | 13 |
| 86 | Hayfield | A | 93.9 | 1K | 5 |
| 87 | Roseville | A | 93.8 | 36K | 0 |
| 88 | Melrose | A | 93.8 | 4K | 11 |
| 89 | Mountain Iron | A | 93.8 | 3K | 5 |
| 90 | Winsted | A | 93.8 | 2K | 5 |
| 91 | Cottonwood | A | 93.8 | 1K | 9 |
| 92 | Green Isle | A | 93.8 | 599 | 7 |
| 93 | Excelsior | A | 93.7 | 5K | 11 |
| 94 | Richmond | A | 93.7 | 1K | 5 |
| 95 | Bloomington | A | 93.6 | 91K | 5 |
| 96 | Jordan | A | 93.5 | 7K | 10 |
| 97 | Lonsdale | A | 93.5 | 4K | 11 |
| 98 | Sebeka | A | 93.4 | 939 | 16 |
| 99 | Littlefork | A | 93.4 | 542 | 5 |
| 100 | New London | A | 93.3 | 1K | 10 |
| 101 | Oak Park Heights | A | 93.2 | 5K | 5 |
| 102 | Bird Island | A | 93.2 | 1K | 9 |
| 103 | Claremont | A | 93.2 | 773 | 10 |
| 104 | Lake City | A | 93.1 | 5K | 11 |
| 105 | Bayport | A | 93.1 | 3K | 13 |
| 106 | Spring Grove | A | 93.1 | 1K | 3 |
| 107 | Holdingford | A | 93.1 | 770 | 2 |
| 108 | Brooklyn Center | A | 93 | 34K | 0 |
| 109 | Arden Hills | A | 93 | 10K | 14 |
| 110 | Cold Spring | A | 93 | 4K | 15 |
| 111 | Wells | A | 93 | 2K | 1 |
| 112 | Cologne | A | 93 | 2K | 0 |
| 113 | Eden Valley | A | 93 | 1K | 0 |
| 114 | Twin Valley | A | 93 | 707 | 1 |
| 115 | Clarks Grove | A | 93 | 695 | 0 |
| 116 | Minnesota Lake | A | 93 | 683 | 0 |
| 117 | Evansville | A | 93 | 603 | 0 |
| 118 | Waverly | A | 92.9 | 2K | 1 |
| 119 | Menahga | A | 92.9 | 1K | 3 |
| 120 | New Richland | A | 92.9 | 1K | 13 |
| 121 | Watkins | A | 92.9 | 958 | 2 |
| 122 | Fertile | A | 92.9 | 789 | 1 |
| 123 | Freeport | A | 92.9 | 685 | 2 |
| 124 | Hills | A | 92.9 | 685 | 1 |
| 125 | Motley | A | 92.9 | 680 | 1 |
| 126 | Randall | A | 92.9 | 650 | 1 |
| 127 | Kasson | A | 92.8 | 7K | 3 |
| 128 | Chisago City | A | 92.8 | 4K | 8 |
| 129 | Annandale | A | 92.8 | 3K | 3 |
| 130 | New York Mills | A | 92.8 | 1K | 4 |
| 131 | Cambridge | A | 92.7 | 10K | 2 |
| 132 | North Branch | A | 92.7 | 6K | 2 |
| 133 | St. Charles | A | 92.7 | 4K | 2 |
| 134 | Lewiston | A | 92.7 | 2K | 17 |
| 135 | Glyndon | A | 92.7 | 1K | 3 |
| 136 | Anoka | A | 92.5 | 18K | 23 |
| 137 | Hamel | A | 92.5 | 4K | 6 |
| 138 | Kenyon | A | 92.5 | 2K | 5 |
| 139 | Owatonna | A | 92.4 | 26K | 3 |
| 140 | Hutchinson | A | 92.3 | 15K | 6 |
| 141 | Bagley | A | 92.3 | 1K | 10 |
| 142 | Deerwood | A | 92.3 | 805 | 13 |
| 143 | Good Thunder | A | 92.3 | 583 | 6 |
| 144 | Lesueur | A | 92.2 | 4K | 4 |
| 145 | Benson | A | 92.2 | 3K | 3 |
| 146 | Minnetonka | A | 92 | 54K | 0 |
| 147 | Henderson | A | 92 | 886 | 10 |
| 148 | Cosmos | A | 92 | 513 | 5 |
| 149 | Big Lake | A | 91.9 | 12K | 6 |
| 150 | Mahtomedi | A | 91.8 | 8K | 3 |
| 151 | Becker | A | 91.8 | 5K | 4 |
| 152 | Goodhue | A | 91.8 | 1K | 3 |
| 153 | Edgerton | A | 91.7 | 1K | 10 |
| 154 | Forest Lake | A | 91.6 | 12K | 6 |
| 155 | Montrose | A | 91.6 | 4K | 3 |
| 156 | Eyota | A | 91.6 | 2K | 3 |
| 157 | Waterville | A | 91.6 | 2K | 4 |
| 158 | Canby | A | 91.6 | 2K | 4 |
| 159 | Fosston | A | 91.6 | 1K | 3 |
| 160 | Mahnomen | A | 91.6 | 1K | 3 |
| 161 | Blooming Prairie | A | 91.5 | 2K | 3 |
| 162 | Wanamingo | A | 91.5 | 1K | 3 |
| 163 | Lanesboro | A | 91.5 | 727 | 4 |
| 164 | Geneva | A | 91.5 | 538 | 5 |
| 165 | Shoreview | A | 91.4 | 26K | 4 |
| 166 | Maple Lake | A | 91.4 | 2K | 5 |
| 167 | Springfield | A | 91.4 | 2K | 4 |
| 168 | Battle Lake | A | 91.4 | 918 | 4 |
| 169 | Courtland | A | 91.4 | 635 | 3 |
| 170 | Hamburg | A | 91.4 | 530 | 4 |
| 171 | Brewster | A | 91.4 | 506 | 4 |
| 172 | Dundas | A | 91.3 | 2K | 9 |
| 173 | Appleton | A | 91.3 | 1K | 22 |
| 174 | Grand Meadow | A | 91.3 | 1K | 8 |
| 175 | Altura | A | 91.3 | 553 | 5 |
| 176 | Long Prairie | A | 91.2 | 4K | 6 |
| 177 | Long Lake | A | 91.2 | 2K | 7 |
| 178 | Champlin | A | 91.1 | 24K | 2 |
| 179 | Little Falls | A | 91.1 | 9K | 3 |
| 180 | Truman | A | 91.1 | 1K | 8 |
| 181 | Stockton | A | 91.1 | 697 | 3 |
| 182 | Waseca | A | 91 | 9K | 2 |
| 183 | East Grand Forks | A | 91 | 9K | 3 |
| 184 | Delano | A | 91 | 7K | 6 |
| 185 | St. James | A | 91 | 5K | 2 |
| 186 | St. Clair | A | 91 | 846 | 2 |
| 187 | Trimont | A | 91 | 734 | 0 |
| 188 | Osseo | A | 90.9 | 3K | 7 |
| 189 | Keewatin | A | 90.9 | 1K | 2 |
| 190 | Morgan | A | 90.9 | 896 | 4 |
| 191 | Kasota | A | 90.9 | 704 | 18 |
| 192 | Grove City | A | 90.9 | 635 | 1 |
| 193 | Audubon | A | 90.9 | 570 | 3 |
| 194 | Hokah | A | 90.9 | 555 | 3 |
| 195 | Minnetrista | A | 90.8 | 6K | 6 |
| 196 | Park Rapids | A | 90.8 | 4K | 26 |
| 197 | Mountain Lake | A | 90.8 | 2K | 7 |
| 198 | International Falls | A | 90.7 | 6K | 2 |
| 199 | Sherburn | A | 90.7 | 1K | 6 |
| 200 | Brooten | A | 90.6 | 646 | 5 |
| 201 | Caledonia | A | 90.4 | 3K | 5 |
| 202 | Hoyt Lakes | A | 90.4 | 2K | 3 |
| 203 | Pine River | A | 90.4 | 939 | 5 |
| 204 | Bovey | A | 90.4 | 821 | 5 |
| 205 | Cook | A | 90.4 | 574 | 5 |
| 206 | Coon Rapids | A | 90.3 | 64K | 5 |
| 207 | Jeffers | A | 90.3 | 6K | 7 |
| 208 | North St. Paul | A | 90.2 | 13K | 5 |
| 209 | Shafer | A | 90.2 | 1K | 8 |
| 210 | Silver Lake | A | 90.2 | 850 | 8 |
| 211 | Madelia | A | 90.1 | 2K | 6 |
| 212 | Winona | A | 90 | 32K | 25 |
| 213 | New Prague | A- | 90 | 8K | 5 |
| 214 | Blue Earth | A- | 90 | 3K | 2 |
| 215 | Stacy | A | 90 | 2K | 10 |
| 216 | Spring Lake Park | A- | 89.9 | 7K | 9 |
| 217 | Sauk Centre | A- | 89.9 | 5K | 6 |
| 218 | Hampton | A- | 89.9 | 811 | 13 |
| 219 | Balaton | A- | 89.9 | 639 | 2 |
| 220 | Farmington | A- | 89.8 | 27K | 4 |
| 221 | Ortonville | A- | 89.8 | 2K | 12 |
| 222 | Biwabik | A- | 89.8 | 975 | 4 |
| 223 | Plainview | A- | 89.7 | 3K | 1 |
| 224 | Staples | A- | 89.7 | 3K | 2 |
| 225 | Wabasha | A- | 89.7 | 3K | 2 |
| 226 | Collegeville | A- | 89.7 | 3K | 7 |
| 227 | Rice | A- | 89.7 | 2K | 2 |
| 228 | Nashwauk | A- | 89.7 | 971 | 2 |
| 229 | Hancock | A- | 89.7 | 845 | 2 |
| 230 | Dover | A- | 89.7 | 792 | 2 |
| 231 | Minnetonka Beach | A- | 89.7 | 547 | 2 |
| 232 | Harmony | A- | 89.6 | 1K | 3 |
| 233 | Maplewood | A- | 89.6 | 515 | 11 |
| 234 | Aurora | A- | 89.5 | 3K | 7 |
| 235 | Wheaton | A- | 89.5 | 1K | 7 |
| 236 | Hector | A- | 89.5 | 1K | 12 |
| 237 | Warren | A- | 89.4 | 5K | 18 |
| 238 | Sabin | A- | 89.4 | 629 | 7 |
| 239 | Circle Pines | A- | 89.3 | 6K | 4 |
| 240 | Halstad | A- | 89.3 | 550 | 4 |
| 241 | Plymouth | A- | 89.2 | 81K | 6 |
| 242 | North Mankato | A- | 89.2 | 14K | 4 |
| 243 | Aitkin | A- | 89.2 | 2K | 10 |
| 244 | Burnsville | A- | 89.1 | 62K | 2 |
| 245 | Savage | A- | 89 | 30K | 7 |
| 246 | Luverne | A- | 89 | 8K | 11 |
| 247 | Willernie | A- | 89 | 525 | 11 |
| 248 | Minneota | A- | 88.9 | 1K | 4 |
| 249 | Renville | A- | 88.9 | 1K | 2 |
| 250 | Barnum | A- | 88.9 | 621 | 13 |
| 251 | Eagan | A- | 88.8 | 68K | 2 |
| 252 | Fairmont | A- | 88.8 | 10K | 6 |
| 253 | Slayton | A- | 88.8 | 2K | 12 |
| 254 | Silver Bay | A- | 88.8 | 2K | 4 |
| 255 | Northfield | A- | 88.7 | 23K | 13 |
| 256 | New Hope | A- | 88.7 | 21K | 2 |
| 257 | Buffalo | A- | 88.7 | 17K | 2 |
| 258 | Virginia | A- | 88.7 | 8K | 1 |
| 259 | Carver | A- | 88.7 | 7K | 3 |
| 260 | Blackduck | A- | 88.7 | 826 | 4 |
| 261 | Duluth | A- | 88.6 | 88K | 4 |
| 262 | Sartell | A- | 88.6 | 20K | 3 |
| 263 | Lakeville | A- | 88.5 | 68K | 22 |
| 264 | Golden Valley | A- | 88.5 | 23K | 4 |
| 265 | Lakefield | A- | 88.5 | 2K | 7 |
| 266 | Dawson | A- | 88.5 | 2K | 6 |
| 267 | Grand Marais | A- | 88.5 | 1K | 8 |
| 268 | Oak Grove | A- | 88.5 | 623 | 4 |
| 269 | Mazeppa | A- | 88.4 | 937 | 14 |
| 270 | Wabasso | A- | 88.3 | 815 | 14 |
| 271 | Hoffman | A- | 88.3 | 703 | 6 |
| 272 | Fridley | A- | 88.2 | 29K | 7 |
| 273 | Medford | A- | 88.2 | 2K | 13 |
| 274 | Clearwater | A- | 88.1 | 2K | 10 |
| 275 | Starbuck | A- | 88.1 | 1K | 5 |
| 276 | Buhl | A- | 88.1 | 1K | 6 |
| 277 | Mora | A- | 88 | 4K | 6 |
| 278 | Cloquet | A- | 87.9 | 14K | 40 |
| 279 | Clarkfield | A- | 87.9 | 841 | 10 |
| 280 | Blaine | A- | 87.8 | 72K | 13 |
| 281 | Albert Lea | A- | 87.8 | 19K | 3 |
| 282 | Lindstrom | A- | 87.8 | 5K | 22 |
| 283 | Pine Island | A- | 87.8 | 3K | 4 |
| 284 | Braham | A- | 87.8 | 2K | 3 |
| 285 | Pierz | A- | 87.8 | 2K | 10 |
| 286 | St. Cloud | A- | 87.7 | 72K | 15 |
| 287 | Lyle | A- | 87.7 | 521 | 7 |
| 288 | Zumbrota | A- | 87.6 | 3K | 4 |
| 289 | Olivia | A- | 87.6 | 2K | 4 |
| 290 | Lester Prairie | A- | 87.6 | 2K | 3 |
| 291 | Lake Benton | A- | 87.5 | 14K | 22 |
| 292 | Shorewood | A- | 87.5 | 4K | 1 |
| 293 | Chatfield | A- | 87.5 | 3K | 5 |
| 294 | Maple Plain | A- | 87.5 | 2K | 3 |
| 295 | Winnebago | A- | 87.5 | 1K | 3 |
| 296 | Graceville | A- | 87.4 | 653 | 6 |
| 297 | Butterfield | A- | 87.4 | 586 | 3 |
| 298 | Centerville | A- | 87.3 | 4K | 3 |
| 299 | Pequot Lakes | A- | 87.3 | 1K | 10 |
| 300 | Watertown | A- | 87.2 | 5K | 22 |
| 301 | Foley | A- | 87.2 | 3K | 9 |
| 302 | Newport | A- | 87.1 | 4K | 3 |
| 303 | Baudette | A- | 87.1 | 1K | 24 |
| 304 | Clinton | A- | 87.1 | 520 | 8 |
| 305 | Eden Prairie | A- | 87 | 64K | 2 |
| 306 | Princeton | A- | 87 | 5K | 12 |
| 307 | Dilworth | A- | 87 | 5K | 8 |
| 308 | Proctor | A- | 87 | 3K | 3 |
| 309 | Mayer | A- | 87 | 2K | 3 |
| 310 | Madison Lake | A- | 87 | 1K | 7 |
| 311 | Karlstad | A- | 87 | 713 | 6 |
| 312 | St. Augusta | A- | 86.9 | 1K | 2 |
| 313 | Mound | A- | 86.8 | 9K | 7 |
| 314 | Litchfield | A- | 86.8 | 7K | 11 |
| 315 | Sandstone | A- | 86.8 | 3K | 10 |
| 316 | Chisholm | A- | 86.7 | 5K | 1 |
| 317 | Paynesville | A- | 86.7 | 3K | 1 |
| 318 | Brownton | A- | 86.7 | 722 | 1 |
| 319 | Elmore | A- | 86.7 | 663 | 1 |
| 320 | Loretto | A- | 86.7 | 637 | 1 |
| 321 | Roseau | A- | 86.6 | 3K | 14 |
| 322 | Janesville | A- | 86.6 | 2K | 3 |
| 323 | Gilbert | A- | 86.6 | 2K | 3 |
| 324 | Henning | A- | 86.5 | 882 | 18 |
| 325 | Tower | A- | 86.5 | 872 | 11 |
| 326 | Victoria | A- | 86.3 | 11K | 10 |
| 327 | Hawley | A- | 86.3 | 3K | 19 |
| 328 | Welcome | A- | 86.3 | 653 | 3 |
| 329 | Breckenridge | A- | 86.2 | 3K | 3 |
| 330 | Pillager | A- | 86.2 | 523 | 1 |
| 331 | Rothsay | A- | 86.2 | 503 | 1 |
| 332 | Cottage Grove | A- | 86.1 | 40K | 14 |
| 333 | Albertville | A- | 86.1 | 36K | 4 |
| 334 | Eveleth | A- | 86.1 | 4K | 16 |
| 335 | Willmar | A- | 86 | 21K | 8 |
| 336 | Wayzata | A- | 86 | 5K | 2 |
| 337 | Hilltop | A- | 85.9 | 880 | 1 |
| 338 | Hill City | A- | 85.9 | 633 | 2 |
| 339 | Parkers Prairie | A- | 85.8 | 1K | 2 |
| 340 | St. Louis Park | A- | 85.7 | 51K | 26 |
| 341 | White Bear Lake | A- | 85.7 | 37K | 10 |
| 342 | Spicer | A- | 85.7 | 3K | 19 |
| 343 | Gaylord | A- | 85.7 | 2K | 2 |
| 344 | Arlington | A- | 85.7 | 2K | 7 |
| 345 | Madison | A- | 85.7 | 2K | 2 |
| 346 | Babbitt | A- | 85.7 | 1K | 3 |
| 347 | Kimball | A- | 85.7 | 911 | 2 |
| 348 | Belgrade | A- | 85.7 | 745 | 2 |
| 349 | Lake Park | A- | 85.6 | 729 | 2 |
| 350 | Clear Lake | A- | 85.6 | 669 | 14 |
| 351 | Clarissa | A- | 85.6 | 662 | 2 |
| 352 | Jasper | A- | 85.6 | 623 | 2 |
| 353 | St. Joseph | A- | 85.4 | 9K | 17 |
| 354 | St. Paul Park | A- | 85.3 | 5K | 2 |
| 355 | Lamberton | A- | 85.3 | 828 | 8 |
| 356 | Raymond | A- | 85.2 | 765 | 2 |
| 357 | Windom | B+ | 85 | 5K | 8 |
| 358 | St. Bonifacius | A- | 85 | 3K | 14 |
| 359 | Hopkins | B+ | 84.9 | 19K | 2 |
| 360 | Chaska | B+ | 84.8 | 31K | 16 |
| 361 | Vadnais Heights | B+ | 84.8 | 13K | 1 |
| 362 | Redwood Falls | B+ | 84.8 | 5K | 4 |
| 363 | Crosby | B+ | 84.8 | 2K | 15 |
| 364 | Maple Grove | B+ | 84.7 | 75K | 2 |
| 365 | Waconia | B+ | 84.7 | 13K | 3 |
| 366 | Montgomery | B+ | 84.6 | 3K | 4 |
| 367 | Apple Valley | B+ | 84.5 | 50K | 1 |
| 368 | Faribault | B+ | 84.5 | 26K | 16 |
| 369 | Columbia Heights | B+ | 84.5 | 22K | 4 |
| 370 | Coleraine | B+ | 84.4 | 2K | 6 |
| 371 | New Ulm | B+ | 84.2 | 14K | 10 |
| 372 | Pine City | B+ | 84.2 | 4K | 14 |
| 373 | Warroad | B+ | 84.1 | 3K | 69 |
| 374 | Jackson | B+ | 84 | 3K | 2 |
| 375 | Preston | B+ | 84 | 1K | 25 |
| 376 | Buffalo Lake | B+ | 84 | 703 | 10 |
| 377 | Moose Lake | B+ | 83.8 | 3K | 29 |
| 378 | Frazee | B+ | 83.7 | 1K | 2 |
| 379 | Lake Bronson | B+ | 83.5 | 3K | 4 |
| 380 | Edina | B+ | 83.2 | 54K | 23 |
| 381 | Heron Lake | B+ | 83.1 | 691 | 5 |
| 382 | Oakdale | B+ | 83 | 29K | 4 |
| 383 | Lexington | B+ | 82.9 | 3K | 28 |
| 384 | Elysian | B+ | 82.9 | 656 | 8 |
| 385 | Brainerd | B+ | 82.8 | 15K | 50 |
| 386 | Worthington | B+ | 82.8 | 14K | 1 |
| 387 | Marshall | B+ | 82.7 | 14K | 2 |
| 388 | Eagle Lake | B+ | 82.7 | 3K | 1 |
| 389 | Elbow Lake | B+ | 82.7 | 1K | 1 |
| 390 | Hendricks | B+ | 82.7 | 650 | 1 |
| 391 | Kandiyohi | B+ | 82.7 | 560 | 1 |
| 392 | Bertha | B+ | 82.7 | 557 | 3 |
| 393 | Eagle Bend | B+ | 82.7 | 542 | 1 |
| 394 | Milaca | B+ | 82.6 | 3K | 21 |
| 395 | Brandon | B+ | 82.6 | 501 | 2 |
| 396 | Moorhead | B+ | 82.5 | 45K | 1 |
| 397 | Argyle | B+ | 82.5 | 533 | 3 |
| 398 | Grand Rapids | B+ | 82.4 | 12K | 20 |
| 399 | Orono | B+ | 82.4 | 3K | 3 |
| 400 | West Concord | B+ | 82.4 | 773 | 3 |
| 401 | Greenbush | B+ | 82.2 | 680 | 6 |
| 402 | Rosemount | B+ | 82 | 27K | 3 |
| 403 | Waite Park | B+ | 81.7 | 8K | 1 |
| 404 | Brooklyn Park | B+ | 81.5 | 91K | 24 |
| 405 | Prior Lake | B+ | 81.5 | 51K | 83 |
| 406 | Fairfax | B+ | 81.5 | 1K | 6 |
| 407 | South St. Paul | B+ | 81.3 | 21K | 10 |
| 408 | Austin | B+ | 81.2 | 26K | 57 |
| 409 | Rushford | B+ | 81.1 | 2K | 6 |
| 410 | Winthrop | B+ | 81.1 | 1K | 4 |
| 411 | Chanhassen | B+ | 81 | 25K | 2 |
| 412 | Ulen | B+ | 81 | 500 | 1 |
| 413 | Ham Lake | B+ | 80.6 | 1K | 36 |
| 414 | Woodbury | B+ | 80.5 | 83K | 5 |
| 415 | Sauk Rapids | B+ | 80.5 | 14K | 25 |
| 416 | Welch | B+ | 80.5 | 7K | 87 |
| 417 | Albany | B+ | 80.5 | 3K | 12 |
| 418 | Morristown | B+ | 80.5 | 1K | 8 |
| 419 | Isle | B+ | 80.4 | 845 | 26 |
| 420 | Lafayette | B+ | 80.4 | 504 | 5 |
| 421 | Ironton | B+ | 80.1 | 578 | 2 |
| 422 | Tracy | B+ | 80 | 2K | 4 |
| 423 | Lake Elmo | B | 79.8 | 13K | 23 |
| 424 | Alexandria | B | 79 | 15K | 21 |
| 425 | Spring Park | B | 78.4 | 2K | 3 |
| 426 | Shakopee | B | 77 | 48K | 39 |
| 427 | Howard Lake | B | 76.5 | 2K | 9 |
| 428 | Monticello | B | 75.8 | 16K | 25 |
| 429 | Ely | B- | 74.8 | 3K | 8 |
| 430 | Alden | B- | 74.6 | 661 | 6 |
| 431 | Fulda | B- | 74.4 | 1K | 7 |
| 432 | Avon | B- | 73.9 | 2K | 19 |
| 433 | St. Paul | B- | 73.3 | 403K | 37 |
| 434 | Osakis | B- | 73.3 | 2K | 15 |
| 435 | Crookston | B- | 73 | 7K | 1 |
| 436 | Minneapolis | B- | 72.8 | 436K | 43 |
| 437 | Le Center | B- | 72.6 | 3K | 26 |
| 438 | Thief River Falls | B- | 72.2 | 9K | 54 |
| 439 | Granite Falls | B- | 72 | 5K | 63 |
| 440 | Royalton | B- | 70.2 | 1K | 162 |
| 441 | Rochester | C+ | 69.7 | 125K | 44 |
| 442 | Glenville | C+ | 69.7 | 566 | 23 |
| 443 | Hastings | C+ | 69.4 | 24K | 24 |
| 444 | Glenwood | C+ | 68.6 | 3K | 26 |
| 445 | Morton | C+ | 68 | 4K | 138 |
| 446 | Stillwater | C+ | 67.6 | 21K | 34 |
| 447 | Amboy | C+ | 67.2 | 535 | 20 |
| 448 | Lino Lakes | C+ | 66.8 | 19K | 7 |
| 449 | Ellendale | C+ | 66.7 | 737 | 19 |
| 450 | Gibbon | C | 64.9 | 890 | 21 |
| 451 | Fergus Falls | C | 64.2 | 14K | 18 |
| 452 | Hibbing | C | 62.9 | 16K | 11 |
| 453 | Bemidji | C | 62.9 | 16K | 66 |
| 454 | Detroit Lakes | C- | 56.6 | 10K | 75 |
| 455 | Cass Lake | C- | 56.1 | 4K | 142 |
| 456 | Rush City | D+ | 50.8 | 3K | 38 |
| 457 | Pelican Rapids | D+ | 50.8 | 3K | 36 |
| 458 | Red Lake | D+ | 50 | 2K | 219 |
| 459 | Inver Grove Heights | D | 47.2 | 35K | 49 |
| 460 | Lancaster | D | 47 | 511 | 55 |
| 461 | Morris | D | 46 | 5K | 25 |
| 462 | Nett Lake | D | 46 | 3K | 358 |
| 463 | White Earth | D | 46 | 1K | 767 |
| 464 | Onamia | D | 45 | 6K | 211 |
| 465 | Mankato | F | 40.5 | 44K | 83 |
| 466 | Grand Portage | F | 35 | 820 | 513 |
Browse Minnesota counties
Browse Minnesota by ZIP code
Look up water quality by ZIP code to find the systems serving your area.
View all Minnesota ZIP codes →Frequently asked questions about Minnesota's water
Is Minnesota's tap water safe to drink?
Minnesota's water quality varies by city. The statewide average grade is A- (87.5/100). 94% of cities scored an A or B, while 2% received a D or F. Check your specific city for detailed results.
Which Minnesota cities have the best water quality?
The top-rated cities are St. Francis (A+), Otsego (A+), Floodwood (A+). These cities scored highest based on violation history, lead levels, PFAS contamination, and regulatory compliance.
Which Minnesota cities have the worst water quality?
The lowest-rated cities are Grand Portage (F), Mankato (F), Onamia (D). We recommend residents in these areas consider water filtration and review their city's specific contaminant data.
How many Minnesota cities have PFAS in their water?
144 out of 466 cities tested positive for PFAS "forever chemicals" (31%). 16 cities exceed the 2024 EPA maximum contaminant levels. Reverse osmosis or activated carbon filters can help reduce PFAS exposure.
Do any Minnesota cities have dangerous lead levels?
6 cities exceed the EPA lead action level of 15 ppb. Lead contamination typically comes from aging pipes and lead service lines rather than the water source itself. An NSF 53-certified filter can effectively remove lead from tap water.