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