North Dakota Water Quality Rankings
103 cities ranked · Data from EPA SDWIS
North Dakota water quality overview
North Dakota's drinking water quality is excellent overall, with a state average score of 85.4 out of 100 — 11.2 points above the national average of 74.2. The median city score is 87, reflecting how water quality is distributed across the state's 103 ranked cities. 95% of North Dakota cities earned an A or B grade, indicating broadly strong water quality infrastructure. Only 0 cities received a failing grade. PFAS "forever chemicals" were detected in 23 of 103 cities (22%). All detected levels remain within current EPA limits, though any PFAS detection warrants attention. 2 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. 71 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 North Dakota cities scored
Score distribution by range
State vs national average
Water quality across North Dakota
Each dot is a city, colored by grade. Size reflects population served. Click any city to view its full report.
Top & bottom cities in North Dakota
Best 10 cities
All 103 cities in North Dakota
| # | City | Grade | Score | Score | Population | Violations | Issues |
|---|---|---|---|---|---|---|---|
| 1 | Minto | A+ | 97 | 604 | 0 | Zero violations | |
| 2 | Enderlin | A+ | 96.4 | 911 | 6 | ||
| 3 | Surrey | A+ | 95.4 | 1K | 5 | Health | |
| 4 | Beulah | A | 95 | 3K | 5 | Health Unresolved | |
| 5 | Wishek | A | 94.5 | 952 | 6 | Unresolved | |
| 6 | Thompson | A | 94.4 | 6K | 3 | Unresolved | |
| 7 | Mayville | A | 94.2 | 2K | 8 | Health Unresolved | |
| 8 | Mohall | A | 94.2 | 783 | 6 | Health Unresolved | |
| 9 | Steele | A | 94.2 | 715 | 5 | Health Unresolved | |
| 10 | Cavalier | A | 94.1 | 5K | 8 | Unresolved | |
| 11 | Mott | A | 93.3 | 721 | 6 | Health Unresolved | |
| 12 | Oakes | A | 93.1 | 2K | 9 | Health Unresolved | |
| 13 | Walhalla | A | 93.1 | 996 | 13 | Health Unresolved | |
| 14 | Dickinson | A | 93 | 39K | 14 | Health Unresolved | |
| 15 | New Rockford | A | 92.8 | 1K | 7 | Health Unresolved | |
| 16 | Lidgerwood | A | 92.7 | 652 | 9 | Health Unresolved | |
| 17 | Beach | A | 92.5 | 981 | 9 | Health | |
| 18 | Pembina | A | 92.3 | 592 | 14 | Health Unresolved | |
| 19 | West Fargo | A | 92.2 | 35K | 1 | Health | |
| 20 | Valley City | A | 92.2 | 12K | 7 | Health | |
| 21 | Burlington | A | 92.2 | 1K | 20 | Health Unresolved | |
| 22 | New Salem | A | 92 | 946 | 0 | Zero violations | |
| 23 | Glen Ullin | A | 91.9 | 807 | 4 | Health Unresolved | |
| 24 | Langdon | A | 91.6 | 4K | 18 | Health Unresolved | |
| 25 | Cooperstown | A | 91.6 | 984 | 4 | Unresolved | |
| 26 | Fargo | A | 91.5 | 121K | 9 | Health Unresolved | |
| 27 | Elgin | A | 91.5 | 642 | 6 | Health Unresolved | |
| 28 | Grand Forks | A | 91.3 | 57K | 9 | Health | |
| 29 | Trenton | A | 91 | 840 | 16 | Health Unresolved | |
| 30 | Hebron | A | 90.7 | 747 | 11 | Health Unresolved | |
| 31 | Ellendale | A | 90.6 | 1K | 5 | Health | |
| 32 | Tioga | A | 90.4 | 3K | 7 | Unresolved | |
| 33 | Hettinger | A | 90.3 | 1K | 5 | Health Unresolved | |
| 34 | Washburn | A | 90 | 1K | 30 | Health Unresolved | |
| 35 | Parshall | A- | 89.9 | 903 | 13 | Health | |
| 36 | Park River | A- | 89.7 | 1K | 2 | Unresolved | |
| 37 | Mapleton | A- | 89.7 | 1K | 2 | Unresolved | |
| 38 | Hatton | A- | 89.2 | 777 | 7 | Unresolved | |
| 39 | Turtle Lake | A- | 88.9 | 3K | 14 | Health Unresolved | |
| 40 | Devils Lake | A- | 88.7 | 13K | 12 | Health Unresolved | |
| 41 | Napoleon | A- | 88.7 | 792 | 3 | Unresolved | |
| 42 | Garrison | A- | 88.6 | 3K | 14 | Health Unresolved | |
| 43 | Larimore | A- | 88.6 | 1K | 3 | Unresolved | |
| 44 | Hillsboro | A- | 88.5 | 4K | 9 | Health Unresolved | |
| 45 | Northwood | A- | 88.1 | 945 | 10 | Health Unresolved | |
| 46 | Rolla | A- | 87.9 | 1K | 7 | Health Unresolved | |
| 47 | Ray | A- | 87.8 | 2K | 7 | Unresolved | |
| 48 | Gilby | A- | 87.6 | 3K | 3 | Health Unresolved | |
| 49 | Kindred | A- | 87.2 | 12K | 5 | Health Unresolved | |
| 50 | Lincoln | A- | 87.2 | 4K | 5 | Health Unresolved | |
| 51 | Wahpeton | A- | 87 | 12K | 4 | Unresolved | |
| 52 | Sharon | A- | 87 | 1K | 7 | Unresolved | |
| 53 | Forman | A- | 87 | 504 | 8 | Health Unresolved | |
| 54 | Rugby | A- | 86.9 | 3K | 4 | Unresolved | |
| 55 | Casselton | A- | 86.9 | 3K | 3 | ||
| 56 | Lisbon | A- | 86.7 | 4K | 3 | Health Unresolved | |
| 57 | Gwinner | A- | 86.7 | 753 | 1 | Unresolved | |
| 58 | St. Michael | A- | 86.5 | 4K | 39 | Health Unresolved | |
| 59 | Linton | A- | 86.4 | 1K | 3 | Health Unresolved | |
| 60 | La Moure | A- | 86.3 | 889 | 3 | Unresolved | |
| 61 | Fessenden | A- | 86 | 4K | 9 | Health Unresolved | |
| 62 | Stanley | A- | 86 | 1K | 10 | Unresolved | |
| 63 | Bowman | A- | 85.9 | 1K | 3 | Unresolved | |
| 64 | Underwood | A- | 85.9 | 778 | 7 | Health Unresolved | |
| 65 | Bismarck | A- | 85.7 | 91K | 33 | Health Unresolved | |
| 66 | Harvey | A- | 85.7 | 2K | 2 | Unresolved | |
| 67 | Crosby | A- | 85.7 | 1K | 1 | Unresolved | |
| 68 | Drayton | A- | 85.7 | 824 | 14 | Health Unresolved | |
| 69 | Ashley | A- | 85.2 | 749 | 3 | Unresolved | |
| 70 | Finley | B+ | 84.6 | 2K | 4 | Health Unresolved | |
| 71 | Alexander | B+ | 84.4 | 1K | 5 | Health Unresolved | |
| 72 | Belfield | B+ | 83.6 | 1K | 3 | Health Unresolved | |
| 73 | Portland | B+ | 83.6 | 606 | 4 | Unresolved | |
| 74 | Minot | B+ | 83.2 | 60K | 24 | Health Unresolved | |
| 75 | Center | B+ | 83.2 | 588 | 6 | Unresolved | |
| 76 | Grafton | B+ | 82.5 | 7K | 4 | Health Unresolved | |
| 77 | Bottineau | B+ | 82.3 | 6K | 9 | Health Unresolved | |
| 78 | Dunseith | B+ | 81.9 | 773 | 14 | Health Unresolved | |
| 79 | Kenmare | B+ | 81.7 | 2K | 36 | Health Unresolved | |
| 80 | Fullerton | B+ | 81.7 | 1K | 32 | Unresolved | |
| 81 | Richardton | B+ | 81.7 | 529 | 1 | Unresolved | |
| 82 | Velva | B+ | 81.3 | 1K | 12 | Health Unresolved | |
| 83 | Carrington | B+ | 81 | 2K | 3 | Health Unresolved | |
| 84 | Harwood | B+ | 80.3 | 718 | 17 | Health Unresolved | |
| 85 | New England | B+ | 80.3 | 600 | 2 | Health Unresolved | |
| 86 | Jamestown | B+ | 80.2 | 21K | 6 | Health Unresolved | |
| 87 | Hazen | B | 79.6 | 2K | 2 | Unresolved | |
| 88 | Killdeer | B | 79.6 | 939 | 3 | Unresolved | |
| 89 | Edgeley | B | 79.6 | 658 | 101 | Health Unresolved | |
| 90 | Mandan | B | 78.7 | 27K | 48 | Health Unresolved | |
| 91 | Milnor | B | 78.2 | 763 | 27 | Health Unresolved | |
| 92 | Fort Yates | B | 77.5 | 7K | 53 | Health Unresolved | |
| 93 | Cando | B | 76.9 | 1K | 8 | Lead Unresolved | |
| 94 | Strasburg | B | 76.9 | 814 | 21 | Health Unresolved | |
| 95 | Abercrombie | B | 76.5 | 4K | 46 | Health Unresolved | |
| 96 | Wilton | B | 75.9 | 711 | 6 | Health Unresolved | |
| 97 | Lakota | B- | 73.9 | 3K | 11 | Health Lead Unresolved | |
| 98 | Williston | B- | 71 | 32K | 50 | Health Unresolved | |
| 99 | Watford City | C+ | 66.3 | 10K | 44 | Health Unresolved | |
| 100 | Belcourt | C- | 55.5 | 14K | 78 | Health Unresolved | |
| 101 | Horace | D+ | 54.5 | 2K | 126 | Health Unresolved | |
| 102 | Hankinson | D | 48 | 3K | 312 | Health Unresolved | |
| 103 | New Town | D | 45.3 | 9K | 350 | Health Unresolved |