Virginia Water Quality Rankings
230 cities ranked · Data from EPA SDWIS
Virginia water quality overview
Virginia's drinking water quality is good overall, with a state average score of 78.9 out of 100 — 4.7 points above the national average of 74.2. The median city score is 84.5, reflecting how water quality is distributed across the state's 230 ranked cities. 77% of Virginia cities earned an A or B grade, indicating broadly strong water quality infrastructure. Only 13 cities received a failing grade. PFAS "forever chemicals" were detected in 52 of 230 cities (23%). Of those, 16 cities exceed the 2024 EPA maximum contaminant levels — a health concern requiring action. 1 city has 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. 198 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 Virginia cities scored
Score distribution by range
State vs national average
Water quality across 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 Virginia
Best 10 cities
All 230 cities in Virginia
| # | City | Grade | Score | Score | Population | Violations | Issues |
|---|---|---|---|---|---|---|---|
| 1 | Fredericksburg City | A+ | 98.8 | 28K | 1 | Health | |
| 2 | Lynchburg City | A+ | 98.3 | 81K | 0 | Zero violations | |
| 3 | Collinsville | A+ | 97.2 | 30K | 4 | Health | |
| 4 | Mitchells | A+ | 97 | 2K | 0 | Zero violations | |
| 5 | Colonial Heights City | A+ | 96.6 | 18K | 3 | Health | |
| 6 | Salem City | A+ | 96.1 | 26K | 15 | ||
| 7 | Tysons | A+ | 95.9 | 828 | 1 | ||
| 8 | Radford City | A+ | 95.4 | 17K | 14 | Health | |
| 9 | State Farm | A+ | 95.4 | 2K | 12 | Health Unresolved | |
| 10 | Troy | A+ | 95.4 | 2K | 3 | Health | |
| 11 | Gloucester | A+ | 95.1 | 11K | 14 | Health Unresolved | |
| 12 | Emporia | A+ | 95.1 | 7K | 3 | Health | |
| 13 | Williamsburg City | A | 95 | 16K | 11 | ||
| 14 | Amelia | A+ | 95 | 3K | 12 | Health Unresolved | |
| 15 | New Market | A | 94.8 | 2K | 15 | ||
| 16 | La Crosse | A | 94.8 | 850 | 6 | Health | |
| 17 | Winchester City | A | 94.7 | 28K | 20 | Health Unresolved | |
| 18 | Galax City | A | 94.7 | 7K | 38 | Unresolved | |
| 19 | King William | A | 94.7 | 2K | 6 | Unresolved | |
| 20 | Lovettsville | A | 94.5 | 3K | 36 | Unresolved | |
| 21 | Woodberry Forest | A | 94.5 | 739 | 6 | Unresolved | |
| 22 | Appalachia | A | 94.3 | 3K | 27 | Health Unresolved | |
| 23 | Quinby | A | 94.1 | 975 | 35 | Health Unresolved | |
| 24 | Waynesboro City | A | 94 | 23K | 10 | Health Unresolved | |
| 25 | Richmond City | A | 93.8 | 229K | 25 | Health | |
| 26 | Lexington City | A | 93.6 | 8K | 20 | Health Unresolved | |
| 27 | Farmville | A | 93.4 | 8K | 3 | Unresolved | |
| 28 | Richlands | A | 93.3 | 5K | 24 | Health Unresolved | |
| 29 | Quantico | A | 93.3 | 650 | 6 | Unresolved | |
| 30 | South Hill | A | 93.2 | 5K | 13 | Health Unresolved | |
| 31 | Shenandoah | A | 93.2 | 2K | 24 | Health Unresolved | |
| 32 | Lexington | A | 93.1 | 6K | 52 | Health Unresolved | |
| 33 | Middletown | A | 93.1 | 1K | 12 | Unresolved | |
| 34 | Cedar Bluff | A | 93 | 1K | 16 | Unresolved | |
| 35 | Henrico | A | 92.8 | 330K | 4 | Health Unresolved | |
| 36 | Dayton | A | 92.7 | 2K | 14 | Health Unresolved | |
| 37 | Suffolk City | A | 92.5 | 70K | 43 | Health Unresolved | |
| 38 | Appomattox | A | 92.4 | 2K | 16 | Health Unresolved | |
| 39 | Warm Springs | A | 92.2 | 3K | 28 | Health Unresolved | |
| 40 | Craigsville | A | 92 | 2K | 5 | ||
| 41 | Victoria | A | 91.8 | 2K | 13 | Health Unresolved | |
| 42 | Dryden | A | 91.7 | 2K | 10 | Health Unresolved | |
| 43 | Bristol City | A | 91.5 | 20K | 18 | Unresolved | |
| 44 | Coeburn | A | 91.4 | 5K | 25 | Health Unresolved | |
| 45 | Wakefield | A | 91.4 | 1K | 15 | Health Unresolved | |
| 46 | Hanover | A | 91.3 | 59K | 8 | Health Unresolved | |
| 47 | Manassas City | A | 91.1 | 43K | 15 | Health | |
| 48 | Rural Retreat | A | 91.1 | 3K | 26 | Health Unresolved | |
| 49 | Montross | A | 91.1 | 2K | 35 | Health Unresolved | |
| 50 | Manassas Park City | A | 91 | 14K | 23 | Health Unresolved | |
| 51 | Stuart | A | 91 | 2K | 16 | Unresolved | |
| 52 | Virginia Beach City | A | 90.8 | 461K | 37 | Health Unresolved | |
| 53 | Chilhowie | A | 90.8 | 5K | 13 | Health Unresolved | |
| 54 | Staunton City | A | 90.6 | 26K | 34 | Health Unresolved | |
| 55 | Portsmouth City | A | 90.3 | 121K | 35 | Health Unresolved | |
| 56 | Harrisonburg City | A | 90.3 | 53K | 34 | Unresolved | |
| 57 | Charlottesville City | A | 90.3 | 48K | 5 | Unresolved | |
| 58 | St. Paul | A | 90.2 | 1K | 30 | Health Unresolved | |
| 59 | Alexandria City | A | 90.1 | 159K | 4 | Unresolved | |
| 60 | Vint Hill | A | 90.1 | 2K | 7 | Unresolved | |
| 61 | Bracey | A | 90 | 4K | 6 | Health Unresolved | |
| 62 | Radford | A | 90 | 2K | 21 | Health Unresolved | |
| 63 | Blacksburg | A- | 89.9 | 35K | 2 | Health Unresolved | |
| 64 | Norton City | A- | 89.9 | 4K | 22 | ||
| 65 | Martinsville City | A- | 89.8 | 14K | 11 | Health Unresolved | |
| 66 | Orange | A- | 89.8 | 5K | 27 | Health Unresolved | |
| 67 | Hampden-Sydney | A- | 89.8 | 1K | 15 | Health Unresolved | |
| 68 | Hopewell City | A- | 89.5 | 30K | 30 | Health Unresolved | |
| 69 | Ruther Glen | A- | 89.5 | 5K | 26 | Health Unresolved | |
| 70 | Altavista | A- | 89.5 | 4K | 19 | Health Unresolved | |
| 71 | West Point | A- | 89.5 | 3K | 8 | Health Unresolved | |
| 72 | Dilwyn | A- | 89.4 | 890 | 34 | Health Unresolved | |
| 73 | Franklin City | A- | 89.3 | 9K | 52 | Health Unresolved | |
| 74 | Fincastle | A- | 89.3 | 2K | 28 | Unresolved | |
| 75 | Big Stone Gap | A- | 89 | 9K | 28 | Health Unresolved | |
| 76 | Tappahannock | A- | 88.8 | 2K | 21 | Health Unresolved | |
| 77 | New Castle | A- | 88.8 | 1K | 6 | Health Unresolved | |
| 78 | Hamilton | A- | 88.7 | 2K | 10 | PFAS Unresolved | |
| 79 | Danville City | A- | 88.5 | 43K | 4 | Health PFAS | |
| 80 | Petersburg City | A- | 88.5 | 33K | 9 | Health Unresolved | |
| 81 | Franklin | A- | 88.4 | 570 | 97 | Health Unresolved | |
| 82 | Purcellville | A- | 88.3 | 9K | 13 | PFAS Unresolved | |
| 83 | Newport News | A- | 88.3 | 529 | 32 | Health Unresolved | |
| 84 | Chincoteague | A- | 88.1 | 3K | 6 | Health Unresolved | |
| 85 | Mcgaheysville | A- | 88.1 | 560 | 6 | Health Unresolved | |
| 86 | Bluefield | A- | 88 | 6K | 56 | Health Unresolved | |
| 87 | Warsaw | A- | 88 | 2K | 17 | Health Unresolved | |
| 88 | Urbanna | A- | 88 | 924 | 20 | Health Unresolved | |
| 89 | Buena Vista City | A- | 87.9 | 7K | 12 | Health Unresolved | |
| 90 | Surry | A- | 87.8 | 850 | 29 | Health Unresolved | |
| 91 | Round Hill | A- | 87.5 | 5K | 16 | Health PFAS Unresolved | |
| 92 | Strasburg | A- | 87.3 | 7K | 23 | Health Unresolved | |
| 93 | Hot Springs | A- | 87.3 | 2K | 7 | Health Unresolved | |
| 94 | Gate City | A- | 87.1 | 2K | 47 | Health Unresolved | |
| 95 | Ashburn | A- | 87 | 335K | 14 | Health Unresolved | |
| 96 | Blackstone | A- | 87 | 6K | 29 | Health Unresolved | |
| 97 | Leesburg | A- | 86.9 | 69K | 37 | Health Unresolved | |
| 98 | Remington | A- | 86.9 | 2K | 74 | Health Unresolved | |
| 99 | Saltville | A- | 86.7 | 2K | 8 | Unresolved | |
| 100 | Onancock | A- | 86.2 | 2K | 50 | Health Unresolved | |
| 101 | Easvtille | A- | 86 | 1K | 22 | Health Unresolved | |
| 102 | Covington | A- | 85.7 | 9K | 18 | Health Unresolved | |
| 103 | Newport News City | A- | 85.6 | 424K | 38 | Health PFAS Unresolved | |
| 104 | Winchester | A- | 85.6 | 47K | 38 | Health Unresolved | |
| 105 | Saluda | A- | 85.6 | 2K | 1 | Unresolved | |
| 106 | Kenbridge | A- | 85.6 | 1K | 11 | Health Unresolved | |
| 107 | Waverly | A- | 85.5 | 4K | 27 | Health Unresolved | |
| 108 | Stephens City | A- | 85.1 | 2K | 17 | Unresolved | |
| 109 | Windsor | B+ | 84.6 | 3K | 45 | Health Unresolved | |
| 110 | Cumberland | B+ | 84.6 | 2K | 3 | Unresolved | |
| 111 | Buchanan | B+ | 84.6 | 1K | 9 | Health Unresolved | |
| 112 | Hurt | B+ | 84.6 | 1K | 25 | Health Unresolved | |
| 113 | Rich Creek | B+ | 84.6 | 960 | 83 | Health Unresolved | |
| 114 | Abingdon | B+ | 84.5 | 48K | 28 | Health Unresolved | |
| 115 | Fort Belvoir | B+ | 84.5 | 39K | 10 | Health PFAS Unresolved | |
| 116 | Irvington | B+ | 84.5 | 583 | 36 | Health Unresolved | |
| 117 | Honaker | B+ | 84.4 | 2K | 14 | Health Unresolved | |
| 118 | Brookneal | B+ | 84.3 | 2K | 54 | Health Unresolved | |
| 119 | Elkton | B+ | 84.2 | 3K | 7 | Health Unresolved | |
| 120 | Kilmarnock | B+ | 84.2 | 2K | 21 | Health Unresolved | |
| 121 | Vienna | B+ | 84 | 30K | 5 | Health Unresolved | |
| 122 | Clarksville | B+ | 83.9 | 1K | 56 | Health Unresolved | |
| 123 | Parksley | B+ | 83.7 | 1K | 100 | Health Unresolved | |
| 124 | Harrisonburg | B+ | 83.5 | 23K | 38 | Health Unresolved | |
| 125 | Tazewell | B+ | 83.4 | 5K | 39 | Health Unresolved | |
| 126 | Colonial Beach | B+ | 83.3 | 5K | 33 | Health Unresolved | |
| 127 | Chase City | B+ | 83.2 | 2K | 46 | Health Unresolved | |
| 128 | Verona | B+ | 83 | 40K | 72 | Health Unresolved | |
| 129 | Yorktown | B+ | 83 | 5K | 85 | Health Unresolved | |
| 130 | Petersburg | B+ | 82.8 | 9K | 34 | Health Unresolved | |
| 131 | Alexandria | B+ | 82.6 | 3K | 45 | Health Unresolved | |
| 132 | Bland | B+ | 82.6 | 2K | 48 | Health Unresolved | |
| 133 | Rocky Mount | B+ | 82.5 | 6K | 50 | Health Unresolved | |
| 134 | Charlotte Courthouse | B+ | 82.5 | 2K | 31 | Health Unresolved | |
| 135 | Bremo Bluff | B+ | 82.4 | 2K | 25 | Health Unresolved | |
| 136 | Ivor | B+ | 82.4 | 766 | 15 | Health Unresolved | |
| 137 | Roanoke City | B+ | 82.2 | 183K | 4 | Health PFAS Unresolved | |
| 138 | Floyd | B+ | 81.6 | 2K | 32 | Health Unresolved | |
| 139 | Amherst | B+ | 81.5 | 2K | 60 | Health Unresolved | |
| 140 | Woodbridge | B+ | 81.2 | 307K | 4 | Health PFAS Unresolved | |
| 141 | Knott'S Island | B+ | 81 | 559 | 117 | Health Unresolved | |
| 142 | Knott'S Island | B+ | 81 | 559 | 117 | Health Unresolved | |
| 143 | Norfolk City | B+ | 80.9 | 291K | 19 | Health PFAS Unresolved | |
| 144 | Brunswick | B+ | 80.8 | 731 | 52 | Health Unresolved | |
| 145 | Chesterfield | B+ | 80.7 | 390K | 52 | Health Unresolved | |
| 146 | Wallops Island | B+ | 80.6 | 2K | 22 | Health Unresolved | |
| 147 | Hampton City | B+ | 80.3 | 11K | 28 | Health PFAS Unresolved | |
| 148 | Rappahannock Academy | B+ | 80.3 | 2K | 102 | Health Unresolved | |
| 149 | Timberville | B+ | 80.1 | 4K | 48 | Health Unresolved | |
| 150 | Goochland | B | 79.5 | 9K | 56 | Health Unresolved | |
| 151 | New Kent | B | 79.4 | 16K | 39 | Health Unresolved | |
| 152 | Stanley | B | 79.3 | 4K | 23 | Health Unresolved | |
| 153 | Independence | B | 79.2 | 2K | 63 | Health Unresolved | |
| 154 | Hillsville | B | 79 | 13K | 111 | Health Unresolved | |
| 155 | Arlington | B | 78.2 | 216K | 88 | Health Unresolved | |
| 156 | Troutville | B | 78.1 | 577 | 38 | Health Unresolved | |
| 157 | Marion | B | 77.9 | 17K | 103 | Health Unresolved | |
| 158 | Grottoes | B | 77.5 | 4K | 63 | Health Unresolved | |
| 159 | Wytheville | B | 77.2 | 14K | 61 | Health Unresolved | |
| 160 | Drakes Branch | B | 76.7 | 530 | 18 | Health Unresolved | |
| 161 | Wise | B | 76.5 | 21K | 76 | Health Unresolved | |
| 162 | South Boston | B | 76.4 | 10K | 147 | Health Unresolved | |
| 163 | Bridgewater | B | 76.1 | 6K | 54 | Unresolved | |
| 164 | Keysville | B | 76.1 | 800 | 40 | Health Unresolved | |
| 165 | Montvale | B | 76 | 773 | 64 | Health Unresolved | |
| 166 | Herndon | B | 75.5 | 1.1M | 23 | Health PFAS Unresolved | |
| 167 | Pennington Gap | B | 75.5 | 6K | 43 | Health Unresolved | |
| 168 | Broadway | B | 75.2 | 4K | 51 | Health | |
| 169 | Ruckersville | B | 75 | 9K | 48 | Health Unresolved | |
| 170 | Mineral | B | 75 | 503 | 36 | Health Unresolved | |
| 171 | Stafford | B- | 74.8 | 124K | 108 | Health PFAS Unresolved | |
| 172 | Madison Heights | B- | 74.6 | 15K | 48 | Health Unresolved | |
| 173 | Clifton Forge | B- | 74.3 | 4K | 80 | Health Unresolved | |
| 174 | Gretna | B- | 72.4 | 3K | 23 | Health Unresolved | |
| 175 | Bedford | B- | 71.8 | 40K | 177 | Health Unresolved | |
| 176 | Buckingham | B- | 71.7 | 6K | 26 | Health Unresolved | |
| 177 | Culpeper | B- | 71.2 | 24K | 84 | Health Unresolved | |
| 178 | Crewe | C+ | 69.7 | 2K | 21 | Health Unresolved | |
| 179 | North Tazewell | C+ | 69.5 | 15K | 152 | Health Unresolved | |
| 180 | Emporia City | C+ | 69.4 | 8K | 37 | Health Unresolved | |
| 181 | Gordonsville | C+ | 69.2 | 3K | 82 | Health Unresolved | |
| 182 | Jonesville | C+ | 67.1 | 11K | 177 | Health Unresolved | |
| 183 | Prince George | C+ | 66.6 | 11K | 194 | Health Unresolved | |
| 184 | Courtland | C+ | 66.5 | 4K | 144 | Health Unresolved | |
| 185 | Berryville | C+ | 66.3 | 6K | 42 | Health Unresolved | |
| 186 | Pembroke | C+ | 65.9 | 1K | 85 | Health Unresolved | |
| 187 | Fredericksburg | C | 64.5 | 97K | 163 | Health Unresolved | |
| 188 | Exmore | C | 64.4 | 2K | 233 | Health Unresolved | |
| 189 | Narrows | C | 64.2 | 2K | 88 | Unresolved | |
| 190 | Dahlgren | C | 63.2 | 11K | 162 | Health Unresolved | |
| 191 | Suffolk | C | 63 | 872 | 116 | Health Unresolved | |
| 192 | Vansant | C | 62.7 | 20K | 52 | Health Unresolved | |
| 193 | Pooler | C | 62.1 | 1K | 65 | Lead Unresolved | |
| 194 | Edinburg | C | 61.6 | 3K | 122 | Health Unresolved | |
| 195 | Mcincr, Mcb Quantico | C | 61.4 | 28K | 69 | Health PFAS Unresolved | |
| 196 | Lynchburg | C | 60.9 | 25K | 161 | Health Unresolved | |
| 197 | Moneta | C | 60.8 | 1K | 182 | Health Unresolved | |
| 198 | Charles City | C- | 59.7 | 611 | 103 | Health Unresolved | |
| 199 | Isle Of Wight | C- | 59.3 | 11K | 183 | Health Unresolved | |
| 200 | Covington City | C- | 58.8 | 6K | 54 | Health Unresolved | |
| 201 | Sugar Grove | D+ | 51.9 | 1K | 74 | Health Unresolved | |
| 202 | Woodstock | D+ | 50.4 | 10K | 40 | Health Unresolved | |
| 203 | Bowling Green | D+ | 50 | 1K | 50 | Health Unresolved | |
| 204 | Cleveland | D+ | 50 | 563 | 151 | Health Unresolved | |
| 205 | Richmond | D | 49 | 3K | 282 | Health Unresolved | |
| 206 | Madison | D | 47.9 | 15K | 180 | Health Unresolved | |
| 207 | Luray | D | 47.5 | 5K | 581 | Health Unresolved | |
| 208 | Williamsburg | D | 47.4 | 60K | 119 | Health Unresolved | |
| 209 | Pearisburg | D | 47 | 5K | 411 | Health Unresolved | |
| 210 | Pulaski | D | 46 | 20K | 207 | Health Unresolved | |
| 211 | Mount Jackson | D | 46 | 4K | 644 | Health Unresolved | |
| 212 | Stanardsville | D | 46 | 2K | 307 | Health Unresolved | |
| 213 | Dublin | D | 45.6 | 7K | 52 | Health Unresolved | |
| 214 | Lawrenceville | D | 45.4 | 9K | 103 | Health Unresolved | |
| 215 | Clintwood | D | 45.2 | 16K | 73 | Health Unresolved | |
| 216 | Louisa | D | 45 | 10K | 138 | Health Unresolved | |
| 217 | King George | D | 45 | 885 | 223 | Health Unresolved | |
| 218 | Charlottesville | F | 43.9 | 92K | 405 | Health Unresolved | |
| 219 | Weber City | F | 43.5 | 13K | 172 | Health Unresolved | |
| 220 | Smithfield | F | 43.3 | 9K | 158 | Health Unresolved | |
| 221 | Front Royal | F | 42.9 | 18K | 161 | Health Unresolved | |
| 222 | Lebanon | F | 42.7 | 16K | 126 | Health Unresolved | |
| 223 | Chatham | F | 42.5 | 11K | 157 | Health Unresolved | |
| 224 | Roanoke | F | 42.2 | 12K | 785 | Health Unresolved | |
| 225 | Chesapeake City | F | 42 | 201K | 360 | Health Unresolved | |
| 226 | Rockville | F | 39.7 | 72K | 1898 | Health Unresolved | |
| 227 | Hopewell | F | 38.6 | 124K | 421 | Health PFAS Unresolved | |
| 228 | Christiansburg | F | 38.3 | 36K | 179 | Health Unresolved | |
| 229 | Warrenton | F | 36 | 30K | 273 | Health PFAS Unresolved | |
| 230 | Lovingston | F | 35 | 10K | 462 | Health PFAS Unresolved |