Minnesota Water Quality Report (2026)

By Echo Water Research Team 25 min read
Minnesota Water Quality Report (2026)

Minnesota Tap Water Quality Report

735 cities analyzed • 4,105,422 people served

Updated September 2026 • Data from EWG & EPA SDWIS

735
Cities Analyzed
7.0
Avg Above Guidelines
4,105,422
Total Population Served
Best Water Quality
Lindstrom (0 above guidelines)
Most Concerns
Waite Park (19 above guidelines)

Most Common Contaminants in Minnesota

Contaminant Found In % of Cities
Fluoride 601 of 735 82%
Total trihalomethanes (TTHMs) carcinogen 574 of 735 78%
Chloroform carcinogen 559 of 735 76%
Haloacetic acids (HAA5) carcinogen 515 of 735 70%
Dichloroacetic acid carcinogen 490 of 735 67%
Bromodichloromethane carcinogen 463 of 735 63%
Dibromochloromethane carcinogen 395 of 735 54%
Nitrate carcinogen 370 of 735 50%
Trichloroacetic acid carcinogen 345 of 735 47%
Radium, combined (-226 and -228) 328 of 735 45%

City-by-City Water Quality Rankings

Ranked by number of contaminants above EWG health guidelines (most to fewest).

# City Detected Above Guidelines Above Legal People Served
1 Waite Park 26 19 3 8,341
2 Cloquet 29 18 0 11,295
3 Oakdale 32 17 3 28,303
4 Alexandria 26 17 2 13,554
5 Brooklyn Park 30 16 0 89,995
6 Woodbury 27 15 2 82,643
7 Apple Valley 28 15 0 50,300
8 Shakopee 26 15 0 40,610
9 Brooklyn Center 25 15 0 33,782
10 Hastings 31 15 1 23,222
11 Rosemount 28 15 0 22,445
12 Stillwater 26 15 0 19,389
13 Sauk Rapids 27 15 0 13,083
14 St. Paul 25 14 0 365,136
15 Plymouth 27 14 0 81,026
16 Burnsville 25 14 0 61,747
17 Cottage Grove 29 14 2 39,712
18 Roseville 27 14 0 33,660
19 Robbinsdale 27 14 0 14,300
20 Arden Hills 25 14 0 9,637
21 Bigelow 26 14 0 235
22 Becker 21 14 0 0
23 Mankato 19 13 0 42,803
24 Savage 23 13 0 30,285
25 Chaska 20 13 0 26,016
26 Farmington 28 13 0 23,534
27 Anoka 28 13 0 18,000
28 Bemidji 19 13 2 15,147
29 Monticello 19 13 0 15,087
30 North Mankato 18 13 0 14,448
31 Lake Benton 18 13 0 13,644
32 Big Lake 18 13 0 11,686
33 Fairmont 25 13 0 10,328
34 Wayzata 19 13 0 4,592
35 Sauk Centre 19 13 0 4,573
36 Crosby 19 13 0 2,386
37 Richmond 20 13 0 1,457
38 Minneota 18 13 0 1,380
39 Tyler 18 13 0 1,122
40 Holdingford 19 13 0 770
41 Hendricks 18 13 0 713
42 Brewster 18 13 0 473
43 Lynd 18 13 0 448
44 Round Lake 18 13 0 376
45 Ghent 18 13 0 364
46 Wilmont 18 13 0 344
47 Russell 18 13 0 338
48 Vesta 18 13 0 319
49 Lismore 18 13 0 232
50 Leota 18 13 0 209
51 Taunton 18 13 0 135
52 Woodstock 18 13 0 108
53 St. Leo 18 13 0 97
54 Trosky 18 13 0 86
55 Reading 18 13 0 75
56 Arco 18 13 0 74
57 Ihlen 18 13 0 63
58 Hazel Run 18 13 0 61
59 Kenneth 18 13 0 56
60 Hatfield 18 13 0 54
61 Verdi 18 13 0 32
62 Holland 18 13 0 0
63 Hardwick 18 13 0 0
64 Jasper 18 13 0 0
65 Ivanhoe 18 13 0 0
66 Boyd 18 13 0 0
67 Echo 18 13 0 0
68 Porter 18 13 0 0
69 Upsala 20 13 0 0
70 Maple Grove 26 12 0 75,000
71 Coon Rapids 23 12 0 64,000
72 Edina 35 12 0 53,494
73 New Brighton 21 12 0 22,902
74 Andover 20 12 1 21,455
75 Northfield 22 12 0 20,515
76 Sartell 20 12 0 19,107
77 Ramsey 24 12 0 16,888
78 Brainerd 22 12 0 13,590
79 Worthington 18 12 0 13,288
80 Windom 21 12 0 4,646
81 Cold Spring 16 12 0 4,201
82 Osseo 26 12 0 2,850
83 Corcoran 26 12 0 2,688
84 Walker 20 12 0 980
85 Rushmore 18 12 0 342
86 Grey Eagle 17 12 0 330
87 Kinney 18 12 0 152
88 Bingham Lake 21 12 0 128
89 Plainview 20 12 0 0
90 Lesueur 14 12 0 0
91 Pipestone 15 12 0 0
92 Atwater 14 12 0 0
93 Foley 21 12 0 0
94 Rochester 26 11 0 121,395
95 Bloomington 20 11 0 89,987
96 Eagan 18 11 0 68,223
97 Eden Prairie 19 11 0 63,726
98 Inver Grove Heights 22 11 0 34,189
99 Chanhassen 19 11 0 24,951
100 Champlin 18 11 0 24,007
101 New Ulm 17 11 0 14,052
102 Waconia 13 11 0 13,277
103 St. Peter 15 11 0 11,784
104 Baxter 20 11 0 8,538
105 Oak Park Heights 19 11 0 4,849
106 Melrose 15 11 0 3,677
107 Perham 17 11 0 3,421
108 Lake Elmo 18 11 0 2,400
109 Spring Park 18 11 0 1,743
110 Fulda 12 11 0 1,318
111 Adrian 13 11 0 1,211
112 Truman 12 11 0 1,115
113 St. Clair 13 11 0 846
114 Minnetonka Beach 16 11 0 547
115 Comfrey 12 11 0 402
116 Morton 14 11 0 374
117 Swanville 17 11 1 351
118 Oslo 13 11 0 237
119 Mckinley 16 11 0 110
120 Lakeland 15 11 0 0
121 Wabasha 19 11 0 0
122 Lafayette 14 11 0 0
123 Hills 15 11 0 0
124 Alberta 16 11 0 0
125 Montevideo 13 11 0 0
126 Olivia 13 11 0 0
127 Ortonville 13 11 0 0
128 Climax 13 11 1 0
129 Cologne 12 11 0 0
130 Alvarado 13 11 0 0
131 St. Francis 12 11 0 0
132 Mora 16 11 0 0
133 Minneapolis 19 10 0 425,300
134 Duluth 16 10 0 86,859
135 Blaine 23 10 0 70,220
136 St. Cloud 21 10 0 67,344
137 Lakeville 16 10 0 67,300
138 Minnetonka 29 10 0 54,474
139 St. Louis Park 23 10 0 50,010
140 Moorhead 22 10 0 44,583
141 Winona 18 10 0 27,782
142 Austin 19 10 0 26,174
143 Golden Valley 20 10 0 23,000
144 Crystal 19 10 0 22,937
145 New Hope 19 10 0 20,963
146 Columbia Heights 20 10 0 20,000
147 Elk River 18 10 0 19,080
148 Otsego 13 10 1 18,493
149 Albert Lea 14 10 0 18,492
150 Buffalo 14 10 0 17,108
151 Hibbing 18 10 0 16,093
152 Hugo 14 10 0 12,047
153 Byron 12 10 0 6,312
154 Hermantown 16 10 0 5,055
155 Blue Earth 11 10 0 3,174
156 Proctor 16 10 0 3,088
157 Luverne 15 10 0 2,919
158 Roseau 11 10 0 2,729
159 Glenwood 15 10 0 2,657
160 Gilbert 14 10 0 1,799
161 Osakis 13 10 0 1,780
162 Starbuck 12 10 0 1,440
163 St. Augusta 22 10 0 1,425
164 Winthrop 12 10 0 1,330
165 Rice 17 10 0 1,279
166 Babbitt 18 10 0 1,200
167 Hilltop 19 10 0 780
168 Rockville 15 10 0 751
169 Orem 18 10 0 750
170 Balaton 17 10 0 639
171 Ironton 17 10 0 572
172 Badger 14 10 0 425
173 Magnolia 15 10 0 214
174 Palisade 14 10 0 166
175 Iona 11 10 0 162
176 Garvin 13 10 0 135
177 Lasalle 13 10 0 90
178 Darfur 13 10 0 87
179 Brownsdale 12 10 0 0
180 Steen 15 10 0 0
181 Bellingham 11 10 0 0
182 Carlton 15 10 0 0
183 Hancock 12 10 0 0
184 Milan 13 10 0 0
185 Wheaton 10 10 0 0
186 Watkins 12 10 0 0
187 Evansville 12 10 0 0
188 Norwood Young America 12 10 0 0
189 Hector 14 10 0 0
190 Fairfax 11 10 0 0
191 Eden Valley 12 10 0 0
192 Delano 15 10 0 0
193 Dassel 12 10 0 0
194 Cokato 11 10 0 0
195 Clearbrook 16 10 0 0
196 Clear Lake 13 10 0 0
197 Annandale 14 10 0 0
198 Cambridge 13 10 0 0
199 Prior Lake 14 9 0 25,282
200 Faribault 19 9 0 23,718
201 Albertville 15 9 0 22,820
202 Fergus Falls 20 9 0 14,194
203 Vadnais Heights 17 9 0 13,270
204 Mounds View 19 9 0 13,250
205 Forest Lake 11 9 0 11,404
206 Victoria 12 9 0 10,546
207 Detroit Lakes 12 9 0 10,038
208 Virginia 13 9 0 8,523
209 St. Joseph 18 9 0 7,100
210 Belle Plaine 12 9 0 6,901
211 Zimmerman 12 9 0 6,750
212 Dilworth 22 9 0 4,918
213 St. James 11 9 0 4,611
214 Two Harbors 15 9 0 3,613
215 Sleepy Eye 14 9 0 3,599
216 Milaca 11 9 0 3,063
217 Collegeville 10 9 0 2,500
218 St. Bonifacius 11 9 0 2,374
219 Madelia 10 9 0 2,319
220 Maple Lake 11 9 0 2,177
221 Mountain Lake 11 9 0 2,018
222 Coleraine 13 9 0 2,014
223 Silver Bay 11 9 0 1,868
224 Oronoco 13 9 0 1,800
225 Aurora 14 9 0 1,764
226 Mapleton 10 9 0 1,756
227 Spicer 10 9 0 1,335
228 Renville 13 9 0 1,287
229 Medford 11 9 0 1,200
230 Sherburn 12 9 0 1,058
231 Madison Lake 14 9 0 1,017
232 Biwabik 17 9 0 969
233 Birchwood 17 9 0 864
234 Henning 11 9 0 850
235 Lamberton 10 9 0 828
236 Wabasso 10 9 0 693
237 Heron Lake 13 9 0 691
238 Rollingstone 12 9 0 664
239 Ottertail 11 9 0 643
240 Butterfield 13 9 0 586
241 Verndale 11 9 0 559
242 Amboy 13 9 0 535
243 New Auburn 11 9 0 456
244 Jeffers 12 9 0 369
245 Chandler 11 9 0 270
246 Orr 14 9 0 249
247 Pemberton 10 9 0 247
248 Currie 11 9 0 226
249 Lewisville 12 9 0 225
250 Storden 12 9 0 215
251 Northrop 10 9 0 211
252 Lucan 11 9 0 188
253 Beaver Bay 12 9 0 181
254 Lansing Township 11 9 0 180
255 Ormsby 12 9 0 129
256 Wolverton 11 9 0 124
257 Odin 12 9 0 109
258 Revere 12 9 0 95
259 Dundee 12 9 0 68
260 Dovray 12 9 0 61
261 Wilder 12 9 0 60
262 Lacrescent 10 9 0 0
263 Rose Creek 15 9 0 0
264 Alden 11 9 0 0
265 Adams 11 9 0 0
266 Montgomery 12 9 0 0
267 New Prague 11 9 0 0
268 Nicollet 11 9 0 0
269 Appleton 12 9 0 0
270 Clarkfield 11 9 0 0
271 Dawson 10 9 0 0
272 New London 10 9 0 0
273 Raymond 11 9 0 0
274 Sacred Heart 11 9 0 0
275 Watertown 13 9 0 0
276 Ashby 10 9 0 0
277 Stewart 13 9 0 0
278 Kimball 12 9 0 0
279 Barnesville 11 9 0 0
280 Dayton 11 9 0 0
281 Clearwater 12 9 0 0
282 Carver 13 9 0 0
283 Bird Island 10 9 0 0
284 Arlington 11 9 0 0
285 Oak Grove 14 9 0 0
286 Fridley 25 8 1 27,476
287 Shoreview 13 8 0 27,200
288 White Bear Lake 17 8 0 25,634
289 Hutchinson 13 8 0 14,590
290 East Grand Forks 16 8 0 9,206
291 Stewartville 10 8 0 6,850
292 Isanti 14 8 0 5,600
293 Minnetrista 14 8 0 5,374
294 Redwood Falls 9 8 0 5,254
295 Circle Pines 11 8 0 5,023
296 Chisholm 12 8 0 4,940
297 Hamel 11 8 0 4,430
298 Wadena 10 8 0 4,103
299 Newport 19 8 0 4,000
300 Wyoming 9 8 0 3,990
301 Eveleth 17 8 0 3,770
302 Ely 13 8 0 3,616
303 Warren 10 8 0 3,295
304 Crystal Bay 10 8 0 3,062
305 Pelican Rapids 10 8 0 2,577
306 Excelsior 10 8 0 2,483
307 Lexington 9 8 0 2,400
308 Bayport 8 8 0 2,150
309 Hoyt Lakes 15 8 0 2,017
310 Lakefield 10 8 0 1,694
311 Sandstone 8 8 0 1,587
312 Pierz 12 8 0 1,500
313 Winnebago 11 8 0 1,391
314 Red Lake Falls 9 8 0 1,339
315 New York Mills 11 8 0 1,287
316 Royalton 13 8 0 1,236
317 East Bethel 10 8 0 950
318 Trimont 10 8 0 734
319 Minnesota Lake 10 8 0 683
320 Randall 12 8 0 650
321 Breezy Point 13 8 0 600
322 Good Thunder 11 8 0 583
323 Cook 10 8 0 574
324 Browns Valley 10 8 0 566
325 Eagle Bend 12 8 0 535
326 Ulen 11 8 0 500
327 Tower 12 8 0 500
328 Fisher 10 8 0 419
329 Wrenshall 10 8 0 399
330 Askov 13 8 0 364
331 St. Martin 11 8 0 343
332 Lowry 9 8 0 333
333 New Munich 11 8 0 320
334 Greenfield 10 8 0 313
335 Pease 17 8 1 242
336 Ruthton 9 8 0 241
337 Northome 9 8 0 162
338 Mapleview 10 8 0 135
339 Grand Meadow 9 8 0 0
340 Hayfield 10 8 0 0
341 Houston 11 8 0 0
342 Kasson 12 8 0 0
343 Leroy 9 8 0 0
344 Racine 9 8 0 0
345 Spring Valley 9 8 0 0
346 Waltham 11 8 0 0
347 Courtland 12 8 0 0
348 Easton 9 8 0 0
349 Le Center 9 8 0 0
350 Wells 9 8 0 0
351 Grove City 10 8 0 0
352 Madison 10 8 0 0
353 Hoffman 12 8 0 0
354 Long Prairie 12 8 0 0
355 Parkers Prairie 10 8 0 0
356 Akeley 11 8 0 0
357 Ada 10 8 0 0
358 Erskine 11 8 0 0
359 Fosston 10 8 0 0
360 Big Falls 11 8 0 0
361 Bagley 13 8 0 0
362 Buffalo Lake 9 8 0 0
363 Argyle 11 8 0 0
364 Nerstrand 11 8 0 0
365 Hinckley 11 8 0 0
366 Cannon Falls 11 8 0 0
367 Brook Park 11 8 0 0
368 Thief River Falls 12 7 0 9,058
369 St. Charles 9 7 0 3,825
370 Staples 15 7 0 2,981
371 Mountain Iron 12 7 0 2,869
372 Lake Bronson 11 7 0 2,752
373 Paynesville 11 7 0 2,530
374 Maple Plain 9 7 0 2,174
375 Canby 8 7 0 1,769
376 Cottonwood 10 7 0 1,212
377 Pequot Lakes 9 7 0 1,200
378 Edgerton 10 7 0 1,171
379 Deer River 9 7 0 942
380 Hallock 11 7 0 892
381 Onamia 12 7 0 875
382 Kerkhoven 8 7 0 806
383 Ham Lake 9 7 0 804
384 Browerville 10 7 0 790
385 Clarissa 11 7 0 681
386 Sabin 11 7 0 629
387 Stephen 11 7 0 588
388 Hokah 10 7 1 555
389 Willernie 10 7 0 525
390 Vermillion 10 7 0 451
391 Waubun 8 7 0 413
392 Nevis 10 7 0 384
393 Remer 14 7 0 369
394 Lancaster 11 7 0 361
395 Buckman 11 7 0 270
396 Rushford Village 8 7 0 265
397 Kettle River 12 7 0 180
398 Kennedy 11 7 0 173
399 Dunnell 9 7 0 167
400 Columbus 10 7 0 155
401 Laporte 9 7 0 140
402 Marietta 11 7 0 135
403 Twin Lakes 9 7 0 134
404 Wanda 8 7 0 84
405 Dumont 8 7 0 75
406 Nassau 11 7 0 60
407 Claremont 10 7 0 0
408 Harmony 10 7 0 0
409 Mantorville 9 7 0 0
410 Ostrander 17 7 0 0
411 Spring Grove 15 7 0 0
412 West Concord 11 7 0 0
413 Henderson 9 7 0 0
414 Benson 8 7 0 0
415 Chokio 8 7 0 0
416 Cosmos 10 7 1 0
417 Granite Falls 8 7 0 0
418 Herman 8 7 0 0
419 Winsted 9 7 0 0
420 Bowlus 8 7 0 0
421 Foreston 9 7 0 0
422 Mayer 10 7 0 0
423 Lester Prairie 8 7 0 0
424 Gaylord 8 7 0 0
425 North Branch 10 7 0 0
426 Braham 11 7 0 0
427 Dodge Center 9 7 0 0
428 Willmar 15 6 0 21,045
429 South St. Paul 20 6 0 20,400
430 Hopkins 12 6 0 18,998
431 Red Wing 11 6 0 16,459
432 North St. Paul 15 6 0 13,134
433 Little Falls 8 6 0 9,094
434 International Falls 10 6 0 5,737
435 St. Paul Park 12 6 1 5,427
436 Centerville 10 6 0 3,912
437 Shorewood 10 6 0 3,854
438 Zumbrota 8 6 0 3,172
439 Eagle Lake 9 6 0 2,520
440 Tracy 7 6 0 2,154
441 Eyota 7 6 0 2,043
442 Warroad 8 6 0 1,857
443 Morgan 7 6 0 896
444 Belgrade 7 6 0 722
445 Karlstad 8 6 0 699
446 Brooten 8 6 0 646
447 Ranier 10 6 0 568
448 New Germany 8 6 0 422
449 Underwood 7 6 0 380
450 Belview 7 6 0 377
451 Hackensack 11 6 0 300
452 Kensington 8 6 0 264
453 Zumbro Falls 10 6 0 181
454 Evan 7 6 0 86
455 Caledonia 9 6 0 0
456 Elkton 7 6 0 0
457 Fountain 7 6 0 0
458 Rushford 9 6 0 0
459 Clarks Grove 8 6 0 0
460 Emmons 8 6 0 0
461 Frost 8 6 0 0
462 Hayward 8 6 0 0
463 Janesville 7 6 0 0
464 New Richland 8 6 0 0
465 Waldorf 10 6 1 0
466 Waseca 8 6 0 0
467 Mcgregor 9 6 0 0
468 Hill City 10 6 0 0
469 Cromwell 10 6 0 0
470 Correll 9 6 0 0
471 Danube 8 6 0 0
472 Maynard 7 6 0 0
473 Pennock 7 6 0 0
474 Silver Lake 7 6 0 0
475 Montrose 8 6 0 0
476 Howard Lake 8 6 0 0
477 Hamburg 8 6 0 0
478 Glyndon 7 6 0 0
479 Hitterdal 7 6 0 0
480 Mcintosh 8 6 0 0
481 Twin Valley 8 6 0 0
482 Kelliher 9 6 0 0
483 Mahtomedi 8 6 0 0
484 Stacy 10 6 0 0
485 Goodhue 9 6 0 0
486 Marshall 19 5 0 13,680
487 Mound 6 5 0 9,447
488 Park Rapids 9 5 0 4,247
489 Chatfield 6 5 0 2,997
490 Springfield 7 5 0 2,070
491 Shafer 8 5 0 1,165
492 Wanamingo 6 5 0 1,113
493 Westbrook 8 5 0 785
494 Stockton 8 5 0 697
495 Freeport 7 5 0 685
496 Greenbush 6 5 0 680
497 Elmore 6 5 0 663
498 Loretto 6 5 0 637
499 Kandiyohi 6 5 0 560
500 Geneva 7 5 0 538
501 Minnesota City 7 5 0 464
502 Sturgeon Lake 7 5 0 406
503 Hanska 7 5 0 393
504 Ceylon 6 5 0 369
505 Murdock 6 5 0 306
506 St. Hilaire 7 5 0 264
507 Watson 7 5 0 205
508 Alpha 6 5 0 112
509 Eitzen 7 5 0 0
510 Mabel 6 5 0 0
511 Lyle 8 5 0 0
512 Elysian 7 5 0 0
513 Huntley 5 5 0 0
514 Norcross 7 5 0 0
515 Barrett 7 5 0 0
516 Plato 6 5 0 0
517 Green Isle 7 5 0 0
518 Battle Lake 12 5 0 0
519 Breckenridge 6 5 0 0
520 Fertile 7 5 0 0
521 Frazee 7 5 0 0
522 Halstad 8 5 0 0
523 Winger 6 5 0 0
524 Blackduck 7 5 0 0
525 Gonvick 8 5 0 0
526 Darwin 8 5 0 0
527 Brownton 11 5 0 0
528 Elko-new Market 8 5 0 0
529 Gary 8 5 0 0
530 Richfield 14 4 0 37,154
531 Owatonna 10 4 0 26,430
532 Lino Lakes 13 4 0 17,360
533 Crookston 11 4 0 7,450
534 Spring Lake Park 5 4 0 7,200
535 Jackson 6 4 0 3,299
536 Waverly 5 4 0 1,884
537 Buhl 12 4 0 1,000
538 Gibbon 6 4 0 790
539 Cass Lake 6 4 0 687
540 Sebeka 6 4 0 676
541 Motley 6 4 0 671
542 Rothsay 5 4 0 503
543 Ellsworth 6 4 0 462
544 Bigfork 6 4 0 446
545 Oklee 5 4 0 417
546 Vergas 7 4 0 335
547 Little Canada 12 4 0 266
548 Backus 6 4 0 250
549 Ogema 5 4 0 206
550 South Haven 6 4 0 194
551 Wendell 7 4 0 167
552 Clements 5 4 0 153
553 Elba 5 4 0 146
554 Meadowlands 6 4 0 135
555 Degraff 6 4 0 110
556 Holloway 6 4 0 86
557 Cobden 7 4 0 33
558 Millville 6 4 0 0
559 Clara City 6 4 0 0
560 Brandon 5 4 0 0
561 Carlos 7 4 0 0
562 Cyrus 6 4 0 0
563 Beltrami 7 4 0 0
564 Bejou 7 4 0 0
565 Deer Creek 6 4 0 0
566 Dennison 5 4 0 0
567 Grand Rapids 7 3 0 11,220
568 Lake Crystal 5 3 0 2,554
569 Aitkin 6 3 0 2,165
570 Long Lake 5 3 0 1,934
571 Menahga 5 3 0 1,347
572 Bovey 14 3 0 825
573 Welcome 4 3 0 653
574 Littlefork 6 3 0 553
575 Deerwood 5 3 0 532
576 Laprairie 7 3 0 520
577 Vernon Center 5 3 0 323
578 Finlayson 5 3 0 315
579 Okabena 4 3 0 188
580 Winton 9 3 0 173
581 Riverton 9 3 0 117
582 Warsaw 4 3 0 110
583 Goodridge 6 3 0 102
584 Fort Worth 8 3 0 100
585 Crosslake 9 3 0 84
586 Ogilvie 6 3 0 70
587 Elgin 6 3 0 0
588 Wykoff 4 3 0 0
589 Bricelyn 4 3 0 0
590 Cleveland 5 3 0 0
591 Delavan 5 3 0 0
592 Kiester 4 3 0 0
593 Cohasset 4 3 0 0
594 Lake Lillian 5 3 1 0
595 Elbow Lake 6 3 0 0
596 Flom 4 3 0 0
597 Georgetown 4 3 0 0
598 Nielsville 4 3 0 0
599 Rogers 7 2 0 12,000
600 Chisago City 6 2 0 3,563
601 Avon 4 2 0 1,667
602 Lewiston 6 2 0 1,520
603 Pine River 5 2 0 941
604 Hampton 4 2 0 691
605 Audubon 4 2 0 560
606 Pillager 4 2 0 507
607 Franklin 3 2 0 496
608 Newfolden 5 2 0 351
609 Taconite 4 2 0 329
610 Granada 3 2 0 297
611 Hewitt 3 2 0 266
612 Freeborn 4 2 0 259
613 Warba 3 2 0 162
614 Conger 4 2 0 137
615 Glencoe 5 2 0 113
616 Albany 4 2 0 104
617 Baudette 5 2 0 100
618 Fargo 2 2 0 80
619 East Gull Lake 4 2 0 75
620 Walters 5 2 0 71
621 Longville 5 2 0 64
622 Mclean 4 2 0 60
623 Morris 5 2 1 32
624 Grasston 3 2 0 25
625 Isle 4 2 0 25
626 Peterson 4 2 0 0
627 Canton 4 2 0 0
628 Glenville 3 2 0 0
629 Hartland 4 2 0 0
630 Kilkenny 5 2 0 0
631 Blooming Prairie 3 2 0 0
632 Waterville 3 2 0 0
633 Graceville 3 2 0 0
634 Donnelly 3 2 0 0
635 Barnum 5 2 0 0
636 Borup 4 2 0 0
637 Hendrum 4 2 0 0
638 Mahnomen 3 2 0 0
639 Shelly 3 2 0 0
640 Taylors Falls 5 2 0 0
641 Lonsdale 4 2 0 0
642 Pine Island 3 1 0 3,324
643 Slayton 2 1 0 2,136
644 Kenyon 3 1 0 1,817
645 Tonka Bay 2 1 0 1,442
646 Moose Lake 3 1 0 1,259
647 Keewatin 6 1 0 1,068
648 Walnut Grove 2 1 0 825
649 Dover 2 1 0 792
650 Center City 2 1 0 629
651 Chicago 2 1 0 505
652 Floodwood 3 1 0 501
653 Bertha 3 1 0 479
654 Cocoran 2 1 0 460
655 Skokie 2 1 0 458
656 Wood Lake 3 1 0 423
657 Willow River 2 1 0 410
658 Cedar 1 1 0 406
659 Sanborn 2 1 0 339
660 Calumet 3 1 0 332
661 Middle River 2 1 0 310
662 Utica 2 1 0 293
663 Milroy 2 1 0 252
664 Lake Wilson 3 1 0 247
665 Callaway 4 1 0 234
666 Princeton 1 1 0 200
667 Mazeppa 2 1 0 170
668 Hammond 3 1 0 110
669 Bloomfield Hills 1 1 0 100
670 Garfield 3 1 0 95
671 Salol 1 1 0 90
672 New Port Richey 1 1 0 90
673 Iron Junction 3 1 0 87
674 Viking 2 1 0 82
675 Rush City 1 1 1 80
676 Togo 3 1 0 75
677 Blomkest 2 1 0 70
678 Puposky 2 1 0 70
679 Salem 4 1 0 70
680 Strandquist 4 1 0 68
681 Kent 2 1 0 63
682 Morristown 2 1 0 60
683 Altura 2 1 0 60
684 Manchester 2 1 0 54
685 Ellendale 1 1 0 51
686 Dexter 4 1 0 50
687 Preston 1 1 0 50
688 Dundas 3 1 0 49
689 Myrtle 3 1 0 48
690 Miltona 3 1 0 40
691 Garrison 3 1 0 40
692 Litchfield 1 1 0 36
693 Kasota 2 1 0 34
694 Kellogg 4 1 0 0
695 Lanesboro 3 1 0 0
696 Sargeant 2 1 0 0
697 Hollandale 2 1 0 0
698 Beaver Creek 3 1 0 0
699 Beardsley 4 1 0 0
700 Hanley Falls 2 1 0 0
701 Marble 2 1 0 0
702 Dalton 2 1 0 0
703 Campbell 3 1 0 0
704 Comstock 2 1 0 0
705 Felton 2 1 0 0
706 Lake Park 2 1 0 0
707 Perley 3 1 0 0
708 Grygla 2 1 0 0
709 Webster 1 1 0 0
710 Lake City 5 1 0 0
711 Las Vegas 1 1 0 0
712 Lindstrom 1 0 0 4,888
713 Nashwauk 5 0 0 971
714 Scandia 0 0 0 388
715 Randolph 3 0 0 355
716 Maplewood 2 0 0 315
717 Plummer 2 0 0 281
718 Hawley 0 0 0 200
719 Bellechester 1 0 0 169
720 Pine City 1 0 0 150
721 Avoca 1 0 0 142
722 Irvine 0 0 0 125
723 Clinton 1 0 0 118
724 Jordan 1 0 0 110
725 Pinewood 2 0 0 90
726 Grand Marais 0 0 0 60
727 Harris 0 0 0 50
728 Nisswa 1 0 0 42
729 Sherman Oaks 1 0 0 33
730 Marine On St. Croix 0 0 0 28
731 Johnson 2 0 0 25
732 Odessa 4 0 0 0
733 Prinsburg 1 0 0 0
734 Bock 1 0 0 0
735 Tintah 2 0 0 0

Live in Minnesota?

Get a free personalized water quality report for your address.

Check Your Water

Recommended Filtration for Minnesota

Based on the most common contaminants found across Minnesota (Fluoride, Total trihalomethanes (TTHMs), Chloroform), we recommend a reverse osmosis system or high-quality carbon block filter to remove disinfection byproducts and their precursors.

Echo RO System

Removes up to 99.9% of contaminants. The gold standard for drinking water in Minnesota homes.

View RO Systems

Echo Whole-Home Filter

Protect every tap in your home from chlorine, VOCs, and disinfection byproducts.

View Whole-Home Filters

Echo Hydrogen Water Flask

Once your water is clean, supercharge it with molecular hydrogen for antioxidant and anti-inflammatory benefits.

Shop Hydrogen Flask

Frequently Asked Questions

Is Minnesota tap water safe to drink?

Water quality varies significantly across Minnesota. Of the 735 cities analyzed, the average city has 7.0 contaminants above EWG health guidelines. The best water quality was found in Lindstrom. We recommend checking your specific city's report for detailed information.

What city has the best water in Minnesota?

Based on our analysis, Lindstrom has the fewest contaminants above EWG health guidelines in Minnesota, with 0 above guideline levels.

What city has the worst water in Minnesota?

Based on our analysis, Waite Park has the most contaminants above EWG health guidelines in Minnesota, with 19 above guideline levels.

What's the best water filter for Minnesota residents?

For most Minnesota households, we recommend a reverse osmosis (RO) system for drinking water and a whole-home filter for showers and baths. The specific recommendation depends on your city's contaminant profile — check your city's report for personalized guidance.

Data sources: Environmental Working Group (EWG) Tap Water Database, U.S. EPA Safe Drinking Water Information System (SDWIS)

Last updated: September 2026

Methodology: Contaminant levels are compared against both EPA legal limits (Maximum Contaminant Levels) and EWG health guidelines, which are often stricter and based on the latest scientific research.

Share
Leave a comment

This site is protected by hCaptcha and the hCaptcha Privacy Policy and Terms of Service apply.