West Virginia Water Quality Rankings
248 cities ranked · Data from EPA SDWIS
West Virginia water quality overview
West Virginia's drinking water quality is fair overall, with a state average score of 61.3 out of 100 — 12.9 points below the national average of 74.2. The median city score is 56.6, reflecting how water quality is distributed across the state's 248 ranked cities. 50% of cities scored a D or F, pointing to significant water quality challenges across much of the state. 96 cities did earn an A or B grade, showing that strong systems do exist. PFAS "forever chemicals" were detected in 43 of 248 cities (17%). Of those, 17 cities exceed the 2024 EPA maximum contaminant levels — a health concern requiring action. 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. 223 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 West Virginia cities scored
Score distribution by range
State vs national average
Water quality across West Virginia
Each dot is a city, colored by grade. Size reflects population served. Click any city to view its full report.
Top & bottom cities in West Virginia
Best 10 cities
All 248 cities in West Virginia
| # | City | Grade | Score | Score | Population | Violations | Issues |
|---|---|---|---|---|---|---|---|
| 1 | Bluefield | A+ | 99 | 12K | 0 | Zero violations | |
| 2 | Spencer | A | 93.6 | 5K | 28 | Health Unresolved | |
| 3 | Volga | A | 90.9 | 3K | 15 | Health Unresolved | |
| 4 | Kingwood | A | 90.5 | 7K | 20 | Health Unresolved | |
| 5 | Pleasant Valley | A | 90.2 | 3K | 15 | Health Unresolved | |
| 6 | Pleasant Valley | A | 90.2 | 3K | 15 | Health Unresolved | |
| 7 | Charleston | A | 90.1 | 209K | 4 | Unresolved | |
| 8 | Beckley | A- | 90 | 47K | 15 | Health Unresolved | |
| 9 | Hurricane | A | 90 | 9K | 6 | Health Unresolved | |
| 10 | French Creek | A | 90 | 5K | 13 | Health Unresolved | |
| 11 | Craigsville | A- | 89.9 | 5K | 26 | Health Unresolved | |
| 12 | Sutton | A- | 89.8 | 4K | 51 | Health Unresolved | |
| 13 | Huntington | A- | 89.7 | 99K | 4 | Health Unresolved | |
| 14 | Letart | A- | 89.4 | 3K | 23 | Unresolved | |
| 15 | Daniels | A- | 88.7 | 2K | 2 | Unresolved | |
| 16 | Alderson | A- | 88.6 | 2K | 19 | Health Unresolved | |
| 17 | Peterstown | A- | 88.5 | 5K | 12 | Health Unresolved | |
| 18 | Newell | A- | 88.4 | 5K | 58 | Health Unresolved | |
| 19 | Oak Hill | A- | 88.2 | 26K | 1 | Unresolved | |
| 20 | Sutton | A- | 88.1 | 5K | 55 | Health Unresolved | |
| 21 | Rupert | A- | 87.9 | 1K | 8 | Unresolved | |
| 22 | Hinton | A- | 87.8 | 21K | 1 | Unresolved | |
| 23 | Glen Dale | A- | 87.6 | 2K | 40 | Health Unresolved | |
| 24 | Petersburg | A- | 87.5 | 5K | 12 | Unresolved | |
| 25 | New Manchester (Pughtown) | A- | 86.9 | 2K | 7 | Unresolved | |
| 26 | Summersville | A- | 86.7 | 6K | 24 | Health Unresolved | |
| 27 | Core | A- | 86.7 | 4K | 2 | Unresolved | |
| 28 | Beech Bottom | A- | 86.6 | 610 | 13 | Health Unresolved | |
| 29 | Weston | A- | 86.5 | 15K | 2 | Unresolved | |
| 30 | Athens | A- | 86.1 | 6K | 13 | Health Unresolved | |
| 31 | Danese | A- | 85.8 | 2K | 14 | Health Unresolved | |
| 32 | Scott Depot (Rr Name Scott) | A- | 85.7 | 24K | 7 | Unresolved | |
| 33 | Junior | A- | 85.2 | 987 | 22 | Unresolved | |
| 34 | Belington | A- | 85.1 | 2K | 5 | Unresolved | |
| 35 | Newburg | A- | 85 | 1K | 11 | Unresolved | |
| 36 | Chestnut Ridge | B+ | 84.8 | 3K | 3 | Health Unresolved | |
| 37 | Ashton | B+ | 84.6 | 4K | 25 | Unresolved | |
| 38 | Sherrard | B+ | 83.5 | 3K | 20 | Health Unresolved | |
| 39 | Benwood | B+ | 83.1 | 2K | 96 | Health Unresolved | |
| 40 | Rachel (Downs) | B+ | 83.1 | 1K | 19 | Health Unresolved | |
| 41 | Amherstdale | B+ | 83 | 4K | 17 | Health Unresolved | |
| 42 | Gassaway | B+ | 83 | 2K | 3 | Unresolved | |
| 43 | Branchland | B+ | 82.9 | 3K | 23 | Health Unresolved | |
| 44 | Birch River | B+ | 82.9 | 1K | 23 | Health Unresolved | |
| 45 | Meadowville | B+ | 82.7 | 615 | 10 | Unresolved | |
| 46 | Reynoldsville | B+ | 82.5 | 3K | 12 | Unresolved | |
| 47 | Star City | B+ | 82.5 | 2K | 28 | Unresolved | |
| 48 | Grant Town | B+ | 82.5 | 506 | 34 | Health Unresolved | |
| 49 | Bethlehem | B+ | 82.4 | 3K | 18 | Health Unresolved | |
| 50 | Hundred | B+ | 82.3 | 638 | 50 | Health Unresolved | |
| 51 | Gerrardstown | B+ | 82.1 | 1K | 53 | Unresolved | |
| 52 | Norton | B+ | 82 | 2K | 13 | Health Unresolved | |
| 53 | Reader | B+ | 82 | 1K | 12 | Health Unresolved | |
| 54 | Bridgeport | B+ | 81.7 | 11K | 12 | Health PFAS Unresolved | |
| 55 | Monongah | B+ | 81.6 | 3K | 25 | Health Unresolved | |
| 56 | Jane Lew | B+ | 81.1 | 1K | 72 | Health Unresolved | |
| 57 | Stonewood | B+ | 80.3 | 2K | 38 | Health Unresolved | |
| 58 | Princeton | B | 79.9 | 7K | 53 | Health Unresolved | |
| 59 | Washington | B | 79.1 | 10K | 27 | Health PFAS Unresolved | |
| 60 | Walton | B | 79 | 2K | 27 | Health Unresolved | |
| 61 | Belmont | B | 79 | 1K | 25 | Unresolved | |
| 62 | Union | B | 78.9 | 758 | 20 | Health Unresolved | |
| 63 | Tunnelton | B | 78.2 | 1K | 27 | Health Unresolved | |
| 64 | Gallipolis Ferry (Rr Name Gall | B | 78.1 | 1K | 23 | Unresolved | |
| 65 | Crum | B | 77.7 | 3K | 21 | Health Unresolved | |
| 66 | Lavalette | B | 77.4 | 10K | 12 | Health PFAS Unresolved | |
| 67 | Clear Creek | B | 77.1 | 1K | 3 | Health Unresolved | |
| 68 | Point Pleasant | B | 76.9 | 4K | 42 | Health Unresolved | |
| 69 | Hepzibah | B | 76.5 | 2K | 36 | Health Unresolved | |
| 70 | New Creek (Newcreek) | B | 76.3 | 3K | 23 | Health Unresolved | |
| 71 | Waverly | B | 76.2 | 8K | 34 | Health PFAS Unresolved | |
| 72 | Flemington | B | 76.1 | 5K | 30 | Health Unresolved | |
| 73 | Inwood | B | 75.8 | 35K | 39 | Health Unresolved | |
| 74 | Petersburg | B | 75.8 | 9K | 47 | Health Unresolved | |
| 75 | Triadelphia | B | 75.6 | 5K | 35 | Health Unresolved | |
| 76 | Coal City | B | 75.2 | 3K | 50 | Health Unresolved | |
| 77 | Brandywine | B | 75.2 | 692 | 98 | Health Unresolved | |
| 78 | Franklin | B | 75.2 | 633 | 92 | Health Unresolved | |
| 79 | West Liberty | B | 75.1 | 10K | 37 | Health Unresolved | |
| 80 | Masontown | B- | 74.8 | 2K | 47 | Health Unresolved | |
| 81 | Anmoore | B- | 74.4 | 1K | 96 | Health Unresolved | |
| 82 | Cool Ridge | B- | 74.2 | 4K | 15 | Health Unresolved | |
| 83 | Mount Nebo | B- | 74 | 6K | 40 | Health Unresolved | |
| 84 | Proctor | B- | 73.5 | 2K | 48 | Health Unresolved | |
| 85 | Slab Fork | B- | 73.4 | 550 | 49 | Health Unresolved | |
| 86 | Ceredo | B- | 73.3 | 1K | 59 | Health Unresolved | |
| 87 | Pruntytown | B- | 72.8 | 2K | 29 | Health Unresolved | |
| 88 | Odd | B- | 72.6 | 575 | 10 | Health Unresolved | |
| 89 | Wheeling | B- | 72 | 30K | 36 | Health Unresolved | |
| 90 | Talcott | B- | 71.8 | 1K | 22 | Health Unresolved | |
| 91 | Capon Bridge | B- | 70.9 | 700 | 45 | Health Unresolved | |
| 92 | Beaver | B- | 70.8 | 5K | 13 | Health Unresolved | |
| 93 | Augusta | B- | 70.7 | 2K | 37 | Health Unresolved | |
| 94 | Burnsville | B- | 70.7 | 1K | 63 | Health Unresolved | |
| 95 | Nettie | B- | 70.2 | 4K | 63 | Health Unresolved | |
| 96 | Mcmechen | B- | 70 | 2K | 79 | Health Unresolved | |
| 97 | Mcgraws | C+ | 68.8 | 4K | 33 | Health Unresolved | |
| 98 | Friendly | C+ | 68.2 | 4K | 173 | Health Unresolved | |
| 99 | Elizabeth | C+ | 66.9 | 2K | 55 | Health Unresolved | |
| 100 | Frank | C+ | 66.1 | 504 | 83 | Health Unresolved | |
| 101 | Frank | C+ | 66.1 | 504 | 83 | Health Unresolved | |
| 102 | St. Marys | C+ | 65.8 | 5K | 29 | Health PFAS Unresolved | |
| 103 | Hillsboro | C+ | 65.4 | 559 | 131 | Health Unresolved | |
| 104 | Kenova | C+ | 65.2 | 11K | 81 | Health Unresolved | |
| 105 | Windsor Heights | C+ | 65.1 | 2K | 83 | Health Unresolved | |
| 106 | Goshen | C | 64.4 | 972 | 139 | Health Unresolved | |
| 107 | Cottageville | C | 64.3 | 3K | 38 | Health Unresolved | |
| 108 | Parsons | C | 64.1 | 1K | 125 | Health Unresolved | |
| 109 | Shepherdstown | C | 63.8 | 4K | 138 | Health Unresolved | |
| 110 | Parkersburg | C | 63.2 | 44K | 151 | Health PFAS Unresolved | |
| 111 | Adamsville | C | 63.1 | 1K | 68 | Health Unresolved | |
| 112 | Adamsville | C | 63.1 | 1K | 68 | Health Unresolved | |
| 113 | Mannington | C | 63 | 4K | 87 | Health Unresolved | |
| 114 | Chester | C | 63 | 3K | 103 | Health Unresolved | |
| 115 | Meadow Bridge | C | 62.5 | 692 | 33 | Health Unresolved | |
| 116 | Mineralwells | C | 62 | 6K | 30 | Health PFAS Unresolved | |
| 117 | Coalwood | C | 61.4 | 2K | 85 | Health Unresolved | |
| 118 | Mount Hope | C | 61.3 | 2K | 26 | Health Unresolved | |
| 119 | Clover | C | 61 | 976 | 60 | Health Unresolved | |
| 120 | Marlinton | C | 60.5 | 2K | 168 | Health Unresolved | |
| 121 | Vienna | C- | 57.9 | 13K | 180 | Health Unresolved | |
| 122 | Beverly | C- | 57.7 | 2K | 85 | Unresolved | |
| 123 | Buckhannon | C- | 57.5 | 17K | 128 | Health Unresolved | |
| 124 | Arnett | C- | 57.1 | 7K | 22 | Health Unresolved | |
| 125 | Williamstown | C- | 56.6 | 3K | 60 | Health PFAS Unresolved | |
| 126 | Mt Storm | D+ | 54.9 | 2K | 88 | Health Unresolved | |
| 127 | Follansbee | D+ | 54.7 | 8K | 96 | Health Unresolved | |
| 128 | Wallace | D+ | 54.1 | 3K | 46 | Health PFAS Unresolved | |
| 129 | Ronceverte | D+ | 54 | 2K | 25 | Health Unresolved | |
| 130 | Maybeury | D+ | 53.1 | 2K | 87 | Health Unresolved | |
| 131 | Burlington | D+ | 52.8 | 793 | 203 | Unresolved | |
| 132 | Snowshoe Resort | D+ | 51.8 | 2K | 63 | Health Unresolved | |
| 133 | Mason (Rr Name Mason City) | D+ | 51.6 | 2K | 153 | Health Unresolved | |
| 134 | Inwood | D+ | 51.1 | 35K | 119 | Health Unresolved | |
| 135 | Reedsville | D+ | 51 | 3K | 160 | Health Unresolved | |
| 136 | Pennsboro | D+ | 51 | 2K | 72 | Health PFAS Unresolved | |
| 137 | Crichton | D+ | 50.7 | 1K | 75 | Health Unresolved | |
| 138 | Keyser | D+ | 50 | 6K | 244 | Health Unresolved | |
| 139 | Cowen | D+ | 50 | 3K | 170 | Health Unresolved | |
| 140 | Griffithsville | D | 49.8 | 2K | 57 | Health Unresolved | |
| 141 | West Hamlin | D | 49.2 | 2K | 232 | Health Unresolved | |
| 142 | Procious (Camp) | D | 49 | 3K | 317 | Health Unresolved | |
| 143 | Harpers Ferry | D | 49 | 3K | 380 | Health Unresolved | |
| 144 | Gauley Bridge | D | 49 | 3K | 224 | Health Unresolved | |
| 145 | Pineville | D | 49 | 2K | 274 | Health Unresolved | |
| 146 | Clay | D | 49 | 2K | 164 | Health Unresolved | |
| 147 | Gilbert | D | 49 | 2K | 256 | Health Unresolved | |
| 148 | Lumberport | D | 49 | 2K | 302 | Health Unresolved | |
| 149 | Middlebourne | D | 49 | 1K | 105 | Health Unresolved | |
| 150 | Cass | D | 49 | 555 | 355 | Health Unresolved | |
| 151 | Justice | D | 48.8 | 504 | 94 | Health Unresolved | |
| 152 | Bluewell | D | 48.5 | 6K | 182 | Health Unresolved | |
| 153 | Green Spring | D | 48.5 | 1K | 589 | Health Unresolved | |
| 154 | Logan | D | 48 | 17K | 128 | Health Unresolved | |
| 155 | Frametown | D | 48 | 2K | 488 | Health Unresolved | |
| 156 | Keyser | D | 48 | 1K | 201 | Health Unresolved | |
| 157 | Williamson | D | 47.8 | 3K | 148 | Health Unresolved | |
| 158 | Belva | D | 47 | 4K | 35 | Health Unresolved | |
| 159 | Hedgesville | D | 47 | 4K | 325 | Health Unresolved | |
| 160 | Sistersville | D | 47 | 2K | 237 | Health Unresolved | |
| 161 | New Haven | D | 47 | 2K | 148 | Health Unresolved | |
| 162 | Normantown | D | 47 | 618 | 86 | Health Unresolved | |
| 163 | Wiley Ford | D | 46.8 | 7K | 956 | Health Unresolved | |
| 164 | Wiley Ford | D | 46.8 | 7K | 956 | Health Unresolved | |
| 165 | Elkins | D | 46 | 15K | 115 | Health Unresolved | |
| 166 | Glenville | D | 46 | 5K | 204 | Health Unresolved | |
| 167 | Oceana | D | 46 | 4K | 196 | Health Unresolved | |
| 168 | Harrisville | D | 46 | 2K | 66 | Health Unresolved | |
| 169 | Matewan | D | 46 | 2K | 58 | Health Unresolved | |
| 170 | Hambleton | D | 46 | 2K | 69 | Health Unresolved | |
| 171 | Hambleton | D | 46 | 2K | 69 | Health Unresolved | |
| 172 | Hambleton | D | 46 | 2K | 69 | Health Unresolved | |
| 173 | Paw Paw | D | 46 | 2K | 179 | Health Unresolved | |
| 174 | Grantsville | D | 46 | 2K | 318 | Health Unresolved | |
| 175 | Fort Gay (Cassville) | D | 46 | 2K | 138 | Health Unresolved | |
| 176 | Kermit | D | 46 | 1K | 198 | Health Unresolved | |
| 177 | Rowlesburg | D | 46 | 680 | 163 | Health Unresolved | |
| 178 | Pine Grove | D | 46 | 620 | 201 | Health Unresolved | |
| 179 | Valley Grove | D | 46 | 610 | 94 | Health Unresolved | |
| 180 | English | D | 45.5 | 2K | 263 | Health Unresolved | |
| 181 | English | D | 45.5 | 2K | 263 | Health Unresolved | |
| 182 | Berwind | D | 45.5 | 692 | 316 | Health Unresolved | |
| 183 | Canaan Valley | D | 45.5 | 577 | 147 | Health Unresolved | |
| 184 | Maidsville | D | 45.4 | 2K | 62 | Health Unresolved | |
| 185 | Albright | D | 45.2 | 9K | 151 | Health Unresolved | |
| 186 | White Sulphur Springs | D | 45.2 | 7K | 129 | Health Unresolved | |
| 187 | Moorefield | D | 45 | 7K | 290 | Health Unresolved | |
| 188 | New Cumberland | D | 45 | 3K | 164 | Health Unresolved | |
| 189 | Franklin | D | 45 | 3K | 329 | Health Unresolved | |
| 190 | War | D | 45 | 1K | 330 | Health Unresolved | |
| 191 | Thomas | D | 45 | 753 | 262 | Health Unresolved | |
| 192 | Clarksburg | F | 44.9 | 19K | 118 | Health Unresolved | |
| 193 | Wiley Ford | F | 44.2 | 8K | 1283 | Health Unresolved | |
| 194 | Mullens | F | 44.2 | 4K | 296 | Health Unresolved | |
| 195 | Worthington | F | 44.2 | 951 | 158 | Health Unresolved | |
| 196 | Logan | F | 44 | 25K | 567 | Health Unresolved | |
| 197 | Shinnston | F | 44 | 6K | 189 | Health Unresolved | |
| 198 | Augusta | F | 44 | 5K | 137 | Health Unresolved | |
| 199 | Nutter Fort | F | 44 | 4K | 85 | Health Unresolved | |
| 200 | Rivesville | F | 44 | 2K | 208 | Health Unresolved | |
| 201 | Chapmanville | F | 44 | 2K | 97 | Health Unresolved | |
| 202 | Salem | F | 44 | 2K | 155 | Health Unresolved | |
| 203 | Farmington | F | 44 | 768 | 133 | Health Unresolved | |
| 204 | Camden-On-Gauley (Corp/Rr Name | F | 44 | 581 | 369 | Health Unresolved | |
| 205 | Fenwick | F | 44 | 554 | 79 | Health Unresolved | |
| 206 | Wayne | F | 43.8 | 6K | 31 | Health Unresolved | |
| 207 | Terra Alta | F | 43.5 | 3K | 85 | Health Unresolved | |
| 208 | Boothsville | F | 43.5 | 2K | 70 | Health Unresolved | |
| 209 | Greenville | F | 43.2 | 4K | 152 | Health Unresolved | |
| 210 | Welch | F | 43 | 3K | 165 | Health Unresolved | |
| 211 | Ridgeley (Rr Name Ridgely) | F | 43 | 2K | 235 | Health Unresolved | |
| 212 | Gary | F | 43 | 2K | 199 | Health Unresolved | |
| 213 | Hartford City (Corporate Name | F | 43 | 745 | 160 | Health Unresolved | |
| 214 | Ragland | F | 43 | 621 | 87 | Health Unresolved | |
| 215 | Arthurdale | F | 43 | 555 | 229 | Health Unresolved | |
| 216 | St. Albans | F | 42.8 | 14K | 100 | Health Unresolved | |
| 217 | Fairview | F | 42.8 | 958 | 86 | Health Unresolved | |
| 218 | Lewisburg | F | 42.4 | 12K | 168 | Health Unresolved | |
| 219 | Ripley | F | 42.2 | 12K | 221 | Health PFAS Unresolved | |
| 220 | Naugatuck | F | 42.2 | 2K | 601 | Health Unresolved | |
| 221 | West Milford | F | 42 | 7K | 129 | Health PFAS Unresolved | |
| 222 | Mill Creek | F | 42 | 5K | 379 | Health Unresolved | |
| 223 | Berkeley Springs | F | 42 | 4K | 709 | Health Unresolved | |
| 224 | West Union | F | 42 | 2K | 134 | Health Unresolved | |
| 225 | Piedmont | F | 42 | 847 | 409 | Health Unresolved | |
| 226 | Pax | F | 42 | 762 | 119 | Health Unresolved | |
| 227 | Grafton | F | 41.8 | 9K | 86 | Health Unresolved | |
| 228 | Wardensville | F | 41.5 | 1K | 87 | Health Unresolved | |
| 229 | Alum Creek | F | 41.2 | 4K | 317 | Health Unresolved | |
| 230 | Charles Town | F | 41 | 23K | 1226 | Health PFAS Unresolved | |
| 231 | Wellsburg | F | 41 | 7K | 72 | Health PFAS Unresolved | |
| 232 | Philippi | F | 41 | 6K | 108 | Health Unresolved | |
| 233 | Paden City | F | 41 | 3K | 284 | Health Unresolved | |
| 234 | Rainelle | F | 41 | 2K | 82 | Health Unresolved | |
| 235 | Martinsburg | F | 40.2 | 54K | 385 | Health Unresolved | |
| 236 | Five Forks | F | 40 | 2K | 134 | Health Unresolved | |
| 237 | Cameron | F | 40 | 962 | 128 | Health Unresolved | |
| 238 | Moundsville | F | 39.5 | 16K | 217 | Health Unresolved | |
| 239 | Morgantown | F | 39.4 | 78K | 1062 | Health Unresolved | |
| 240 | Point Pleasant | F | 39 | 15K | 347 | Health Unresolved | |
| 241 | Weirton | F | 37.9 | 19K | 141 | Health PFAS Unresolved | |
| 242 | Ravenswood | F | 37.5 | 8K | 147 | Health PFAS Unresolved | |
| 243 | New Martinsville | F | 36.5 | 5K | 112 | Health PFAS Unresolved | |
| 244 | Varney | F | 36 | 3K | 76 | Health Unresolved | |
| 245 | Fairmont | F | 35.1 | 40K | 241 | Health Unresolved | |
| 246 | Davis | F | 35 | 977 | 213 | Health Lead Unresolved | |
| 247 | Lester | F | 34 | 665 | 112 | Health Unresolved | |
| 248 | Richwood | F | 32 | 2K | 107 | Health Lead Unresolved |