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 March 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 602 of 735 82%
Total trihalomethanes (TTHMs) carcinogen 574 of 735 78%
Chloroform carcinogen 559 of 735 76%
Haloacetic acids (HAA5) carcinogen 516 of 735 70%
Dichloroacetic acid carcinogen 491 of 735 67%
Bromodichloromethane carcinogen 464 of 735 63%
Dibromochloromethane carcinogen 396 of 735 54%
Nitrate carcinogen 371 of 735 50%
Trichloroacetic acid carcinogen 345 of 735 47%
Radium, combined (-226 and -228) 327 of 735 44%

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 Ivanhoe 18 13 0 0
63 Boyd 18 13 0 0
64 Echo 18 13 0 0
65 Jasper 18 13 0 0
66 Upsala 20 13 0 0
67 Holland 18 13 0 0
68 Porter 18 13 0 0
69 Hardwick 18 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 Lesueur 14 12 0 0
90 Plainview 20 12 0 0
91 Foley 21 12 0 0
92 Pipestone 15 12 0 0
93 Atwater 14 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 Montevideo 13 11 0 0
121 Lafayette 14 11 0 0
122 Wabasha 19 11 0 0
123 Climax 13 11 1 0
124 Cologne 12 11 0 0
125 St. Francis 12 11 0 0
126 Mora 16 11 0 0
127 Lakeland 15 11 0 0
128 Hills 15 11 0 0
129 Alvarado 13 11 0 0
130 Olivia 13 11 0 0
131 Alberta 16 11 0 0
132 Ortonville 13 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 Evansville 12 10 0 0
180 Milan 13 10 0 0
181 Hancock 12 10 0 0
182 Brownsdale 12 10 0 0
183 Carlton 15 10 0 0
184 Watkins 12 10 0 0
185 Norwood Young America 12 10 0 0
186 Eden Valley 12 10 0 0
187 Fairfax 11 10 0 0
188 Dassel 12 10 0 0
189 Clear Lake 13 10 0 0
190 Cokato 11 10 0 0
191 Annandale 14 10 0 0
192 Delano 15 10 0 0
193 Hector 14 10 0 0
194 Clearbrook 16 10 0 0
195 Cambridge 13 10 0 0
196 Steen 15 10 0 0
197 Wheaton 10 10 0 0
198 Bellingham 11 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 Clarkfield 11 9 0 0
264 Appleton 12 9 0 0
265 Graceville 12 9 0 0
266 Nicollet 11 9 0 0
267 Sacred Heart 11 9 0 0
268 New London 10 9 0 0
269 Rose Creek 15 9 0 0
270 Barnesville 11 9 0 0
271 New Prague 11 9 0 0
272 Watertown 13 9 0 0
273 Dayton 11 9 0 0
274 Clearwater 12 9 0 0
275 Ashby 10 9 0 0
276 Bird Island 10 9 0 0
277 Stewart 13 9 0 0
278 Carver 13 9 0 0
279 Kimball 12 9 0 0
280 Adams 11 9 0 0
281 Arlington 11 9 0 0
282 Oak Grove 14 9 0 0
283 Montgomery 12 9 0 0
284 Dawson 10 9 0 0
285 Raymond 11 9 0 0
286 Alden 11 9 0 0
287 Fridley 25 8 1 27,476
288 Shoreview 13 8 0 27,200
289 White Bear Lake 17 8 0 25,634
290 Hutchinson 13 8 0 14,590
291 East Grand Forks 16 8 0 9,206
292 Stewartville 10 8 0 6,850
293 Isanti 14 8 0 5,600
294 Minnetrista 14 8 0 5,374
295 Redwood Falls 9 8 0 5,254
296 Circle Pines 11 8 0 5,023
297 Chisholm 12 8 0 4,940
298 Hamel 11 8 0 4,430
299 Wadena 10 8 0 4,103
300 Newport 19 8 0 4,000
301 Wyoming 9 8 0 3,990
302 Eveleth 17 8 0 3,770
303 Ely 13 8 0 3,616
304 Warren 10 8 0 3,295
305 Crystal Bay 10 8 0 3,062
306 Pelican Rapids 10 8 0 2,577
307 Excelsior 10 8 0 2,483
308 Lexington 9 8 0 2,400
309 Bayport 8 8 0 2,150
310 Hoyt Lakes 15 8 0 2,017
311 Lakefield 10 8 0 1,694
312 Sandstone 8 8 0 1,587
313 Pierz 12 8 0 1,500
314 Winnebago 11 8 0 1,391
315 Red Lake Falls 9 8 0 1,339
316 New York Mills 11 8 0 1,287
317 Royalton 13 8 0 1,236
318 East Bethel 10 8 0 950
319 Trimont 10 8 0 734
320 Minnesota Lake 10 8 0 683
321 Randall 12 8 0 650
322 Breezy Point 13 8 0 600
323 Good Thunder 11 8 0 583
324 Cook 10 8 0 574
325 Browns Valley 10 8 0 566
326 Eagle Bend 12 8 0 535
327 Ulen 11 8 0 500
328 Tower 12 8 0 500
329 Fisher 10 8 0 419
330 Wrenshall 10 8 0 399
331 Askov 13 8 0 364
332 St. Martin 11 8 0 343
333 Lowry 9 8 0 333
334 New Munich 11 8 0 320
335 Greenfield 10 8 0 313
336 Pease 17 8 1 242
337 Ruthton 9 8 0 241
338 Northome 9 8 0 162
339 Mapleview 10 8 0 135
340 Courtland 12 8 0 0
341 Hayfield 10 8 0 0
342 Leroy 9 8 0 0
343 Argyle 11 8 0 0
344 Houston 11 8 0 0
345 Grand Meadow 9 8 0 0
346 Hoffman 12 8 0 0
347 Long Prairie 12 8 0 0
348 Fosston 10 8 0 0
349 Parkers Prairie 10 8 0 0
350 Buffalo Lake 9 8 0 0
351 Kasson 12 8 0 0
352 Akeley 11 8 0 0
353 Ada 10 8 0 0
354 Big Falls 11 8 0 0
355 Hinckley 11 8 0 0
356 Nerstrand 11 8 0 0
357 Erskine 11 8 0 0
358 Bagley 13 8 0 0
359 Cannon Falls 11 8 0 0
360 Brook Park 11 8 0 0
361 Wells 9 8 0 0
362 Grove City 10 8 0 0
363 Spring Valley 9 8 0 0
364 Easton 9 8 0 0
365 Madison 10 8 0 0
366 Le Center 9 8 0 0
367 Waltham 11 8 0 0
368 Racine 9 8 0 0
369 Thief River Falls 12 7 0 9,058
370 St. Charles 9 7 0 3,825
371 Staples 15 7 0 2,981
372 Mountain Iron 12 7 0 2,869
373 Lake Bronson 11 7 0 2,752
374 Paynesville 11 7 0 2,530
375 Maple Plain 9 7 0 2,174
376 Canby 8 7 0 1,769
377 Cottonwood 10 7 0 1,212
378 Pequot Lakes 9 7 0 1,200
379 Edgerton 10 7 0 1,171
380 Deer River 9 7 0 942
381 Hallock 11 7 0 892
382 Onamia 12 7 0 875
383 Kerkhoven 8 7 0 806
384 Ham Lake 9 7 0 804
385 Browerville 10 7 0 790
386 Clarissa 11 7 0 681
387 Sabin 11 7 0 629
388 Stephen 11 7 0 588
389 Hokah 10 7 1 555
390 Willernie 10 7 0 525
391 Vermillion 10 7 0 451
392 Waubun 8 7 0 413
393 Nevis 10 7 0 384
394 Remer 14 7 0 369
395 Lancaster 11 7 0 361
396 Buckman 11 7 0 270
397 Rushford Village 8 7 0 265
398 Kettle River 12 7 0 180
399 Kennedy 11 7 0 173
400 Dunnell 9 7 0 167
401 Columbus 10 7 0 155
402 Laporte 9 7 0 140
403 Marietta 11 7 0 135
404 Twin Lakes 9 7 0 134
405 Wanda 8 7 0 84
406 Dumont 8 7 0 75
407 Nassau 11 7 0 60
408 Mantorville 9 7 0 0
409 Granite Falls 8 7 0 0
410 Benson 8 7 0 0
411 Herman 8 7 0 0
412 Dodge Center 9 7 0 0
413 Foreston 9 7 0 0
414 Claremont 10 7 0 0
415 Mayer 10 7 0 0
416 Winsted 9 7 0 0
417 Gaylord 8 7 0 0
418 Bowlus 8 7 0 0
419 Ostrander 17 7 0 0
420 Harmony 10 7 0 0
421 Lester Prairie 8 7 0 0
422 North Branch 10 7 0 0
423 Braham 11 7 0 0
424 Chokio 8 7 0 0
425 Henderson 9 7 0 0
426 Cosmos 10 7 1 0
427 Spring Grove 15 7 0 0
428 West Concord 11 7 0 0
429 Willmar 15 6 0 21,045
430 South St. Paul 20 6 0 20,400
431 Hopkins 12 6 0 18,998
432 Red Wing 11 6 0 16,459
433 North St. Paul 15 6 0 13,134
434 Little Falls 8 6 0 9,094
435 International Falls 10 6 0 5,737
436 St. Paul Park 12 6 1 5,427
437 Centerville 10 6 0 3,912
438 Shorewood 10 6 0 3,854
439 Zumbrota 8 6 0 3,172
440 Eagle Lake 9 6 0 2,520
441 Tracy 7 6 0 2,154
442 Eyota 7 6 0 2,043
443 Warroad 8 6 0 1,857
444 Morgan 7 6 0 896
445 Belgrade 7 6 0 722
446 Karlstad 8 6 0 699
447 Brooten 8 6 0 646
448 Ranier 10 6 0 568
449 New Germany 8 6 0 422
450 Underwood 7 6 0 380
451 Belview 7 6 0 377
452 Hackensack 11 6 0 300
453 Kensington 8 6 0 264
454 Zumbro Falls 10 6 0 181
455 Evan 7 6 0 86
456 Elkton 7 6 0 0
457 Waldorf 10 6 1 0
458 Danube 8 6 0 0
459 Maynard 7 6 0 0
460 Correll 9 6 0 0
461 Fountain 7 6 0 0
462 Caledonia 9 6 0 0
463 New Richland 8 6 0 0
464 Pennock 7 6 0 0
465 Hayward 8 6 0 0
466 Hitterdal 7 6 0 0
467 Janesville 7 6 0 0
468 Kelliher 9 6 0 0
469 Cromwell 10 6 0 0
470 Hill City 10 6 0 0
471 Rushford 9 6 0 0
472 Howard Lake 8 6 0 0
473 Mcgregor 9 6 0 0
474 Silver Lake 7 6 0 0
475 Hamburg 8 6 0 0
476 Montrose 8 6 0 0
477 Mcintosh 8 6 0 0
478 Glyndon 7 6 0 0
479 Twin Valley 8 6 0 0
480 Mahtomedi 8 6 0 0
481 Goodhue 9 6 0 0
482 Stacy 10 6 0 0
483 Frost 8 6 0 0
484 Clarks Grove 8 6 0 0
485 Emmons 8 6 0 0
486 Waseca 8 6 0 0
487 Marshall 19 5 0 13,680
488 Mound 6 5 0 9,447
489 Park Rapids 9 5 0 4,247
490 Chatfield 6 5 0 2,997
491 Springfield 7 5 0 2,070
492 Shafer 8 5 0 1,165
493 Wanamingo 6 5 0 1,113
494 Westbrook 8 5 0 785
495 Stockton 8 5 0 697
496 Freeport 7 5 0 685
497 Greenbush 6 5 0 680
498 Elmore 6 5 0 663
499 Loretto 6 5 0 637
500 Kandiyohi 6 5 0 560
501 Geneva 7 5 0 538
502 Minnesota City 7 5 0 464
503 Sturgeon Lake 7 5 0 406
504 Hanska 7 5 0 393
505 Ceylon 6 5 0 369
506 Murdock 6 5 0 306
507 St. Hilaire 7 5 0 264
508 Watson 7 5 0 205
509 Alpha 6 5 0 112
510 Lyle 8 5 0 0
511 Norcross 7 5 0 0
512 Mabel 6 5 0 0
513 Eitzen 7 5 0 0
514 Breckenridge 6 5 0 0
515 Fertile 7 5 0 0
516 Barrett 7 5 0 0
517 Plato 6 5 0 0
518 Green Isle 7 5 0 0
519 Halstad 8 5 0 0
520 Brownton 11 5 0 0
521 Blackduck 7 5 0 0
522 Battle Lake 12 5 0 0
523 Winger 6 5 0 0
524 Gonvick 8 5 0 0
525 Gary 8 5 0 0
526 Frazee 7 5 0 0
527 Elko-new Market 8 5 0 0
528 Darwin 8 5 0 0
529 Huntley 5 5 0 0
530 Elysian 7 5 0 0
531 Richfield 14 4 0 37,154
532 Owatonna 10 4 0 26,430
533 Lino Lakes 13 4 0 17,360
534 Crookston 11 4 0 7,450
535 Spring Lake Park 5 4 0 7,200
536 Jackson 6 4 0 3,299
537 Waverly 5 4 0 1,884
538 Buhl 12 4 0 1,000
539 Gibbon 6 4 0 790
540 Cass Lake 6 4 0 687
541 Sebeka 6 4 0 676
542 Motley 6 4 0 671
543 Rothsay 5 4 0 503
544 Ellsworth 6 4 0 462
545 Bigfork 6 4 0 446
546 Oklee 5 4 0 417
547 Vergas 7 4 0 335
548 Little Canada 12 4 0 266
549 Backus 6 4 0 250
550 Ogema 5 4 0 206
551 South Haven 6 4 0 194
552 Wendell 7 4 0 167
553 Clements 5 4 0 153
554 Elba 5 4 0 146
555 Meadowlands 6 4 0 135
556 Degraff 6 4 0 110
557 Holloway 6 4 0 86
558 Cobden 7 4 0 33
559 Cyrus 6 4 0 0
560 Bejou 7 4 0 0
561 Deer Creek 6 4 0 0
562 Millville 6 4 0 0
563 Beltrami 7 4 0 0
564 Brandon 5 4 0 0
565 Carlos 7 4 0 0
566 Dennison 5 4 0 0
567 Clara City 6 4 0 0
568 Grand Rapids 7 3 0 11,220
569 Lake Crystal 5 3 0 2,554
570 Aitkin 6 3 0 2,165
571 Long Lake 5 3 0 1,934
572 Menahga 5 3 0 1,347
573 Bovey 14 3 0 825
574 Welcome 4 3 0 653
575 Littlefork 6 3 0 553
576 Deerwood 5 3 0 532
577 Laprairie 7 3 0 520
578 Vernon Center 5 3 0 323
579 Finlayson 5 3 0 315
580 Okabena 4 3 0 188
581 Winton 9 3 0 173
582 Riverton 9 3 0 117
583 Warsaw 4 3 0 110
584 Goodridge 6 3 0 102
585 Fort Worth 8 3 0 100
586 Crosslake 9 3 0 84
587 Ogilvie 6 3 0 70
588 Bricelyn 4 3 0 0
589 Kiester 4 3 0 0
590 Cleveland 5 3 0 0
591 Wykoff 4 3 0 0
592 Lake Lillian 5 3 1 0
593 Elgin 6 3 0 0
594 Georgetown 4 3 0 0
595 Elbow Lake 6 3 0 0
596 Flom 4 3 0 0
597 Cohasset 4 3 0 0
598 Nielsville 4 3 0 0
599 Delavan 5 3 0 0
600 Rogers 7 2 0 12,000
601 Chisago City 6 2 0 3,563
602 Avon 4 2 0 1,667
603 Lewiston 6 2 0 1,520
604 Pine River 5 2 0 941
605 Hampton 4 2 0 691
606 Audubon 4 2 0 560
607 Pillager 4 2 0 507
608 Franklin 3 2 0 496
609 Newfolden 5 2 0 351
610 Taconite 4 2 0 329
611 Granada 3 2 0 297
612 Hewitt 3 2 0 266
613 Freeborn 4 2 0 259
614 Warba 3 2 0 162
615 Conger 4 2 0 137
616 Glencoe 5 2 0 113
617 Albany 4 2 0 104
618 Baudette 5 2 0 100
619 Fargo 2 2 0 80
620 East Gull Lake 4 2 0 75
621 Walters 5 2 0 71
622 Longville 5 2 0 64
623 Mclean 4 2 0 60
624 Morris 5 2 1 32
625 Grasston 3 2 0 25
626 Isle 4 2 0 25
627 Donnelly 3 2 0 0
628 Peterson 4 2 0 0
629 Waterville 3 2 0 0
630 Hartland 4 2 0 0
631 Hendrum 4 2 0 0
632 Canton 4 2 0 0
633 Glenville 3 2 0 0
634 Barnum 5 2 0 0
635 Blooming Prairie 3 2 0 0
636 Taylors Falls 5 2 0 0
637 Borup 4 2 0 0
638 Mahnomen 3 2 0 0
639 Shelly 3 2 0 0
640 Lonsdale 4 2 0 0
641 Kilkenny 5 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 New Port Richey 1 1 0 90
672 Salol 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 Salem 4 1 0 70
679 Puposky 2 1 0 70
680 Strandquist 4 1 0 68
681 Kent 2 1 0 63
682 Altura 2 1 0 60
683 Morristown 2 1 0 60
684 Manchester 2 1 0 54
685 Ellendale 1 1 0 51
686 Preston 1 1 0 50
687 Dexter 4 1 0 50
688 Dundas 3 1 0 49
689 Myrtle 3 1 0 48
690 Garrison 3 1 0 40
691 Miltona 3 1 0 40
692 Litchfield 1 1 0 36
693 Kasota 2 1 0 34
694 Lanesboro 3 1 0 0
695 Kellogg 4 1 0 0
696 Marble 2 1 0 0
697 Perley 3 1 0 0
698 Grygla 2 1 0 0
699 Dalton 2 1 0 0
700 Felton 2 1 0 0
701 Sargeant 2 1 0 0
702 Lake Park 2 1 0 0
703 Campbell 3 1 0 0
704 Comstock 2 1 0 0
705 Webster 1 1 0 0
706 Lake City 5 1 0 0
707 Las Vegas 1 1 0 0
708 Beardsley 4 1 0 0
709 Beaver Creek 3 1 0 0
710 Hollandale 2 1 0 0
711 Hanley Falls 2 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 Tintah 2 0 0 0
735 Bock 1 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: March 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.