Water Hardness in Iowa
Across 30 measured cities — with 363 more covered by labeled county-level estimates — Iowa's median tap water hardness is 128.0 mg/L (7.5 gpg): hard on the USGS scale. Below: every covered city, the state's hardest and softest water, and the geology that explains it.
Data updated July 6, 2026. Sources: utility-reported water quality data and USGS/EPA Water Quality Portal samples.
Iowa Cities by Hardness Category
Measured cities only — labeled county estimates never enter the category counts or the median.
| Category | Range | Measured cities | Share |
|---|---|---|---|
| Soft | 0-60 mg/L | 1 | 3.3% |
| Moderately hard | 60-120 mg/L | 8 | 26.7% |
| Hard | 120-180 mg/L | 19 | 63.3% |
| Very hard | >180 mg/L | 2 | 6.7% |
Hardest and Softest Water in Iowa
Measured values only; labeled county estimates and values under active dispute never rank.
Hardest water in Iowa
- Ventura — 340.0 mg/L (19.9 gpg), very hard
- Sioux City — 183.0 mg/L (10.7 gpg), very hard
- Guthrie Center — 179.0 mg/L (10.5 gpg), hard
- Polk City — 151.0 mg/L (8.8 gpg), hard
- Ames — 150.4 mg/L (8.8 gpg), hard
Softest water in Iowa
- North Liberty — 49.0 mg/L (2.9 gpg), soft
- Clive — 68.3 mg/L (4.0 gpg), moderately hard
- Iowa City — 75.6 mg/L (4.4 gpg), moderately hard
- University Heights — 75.6 mg/L (4.4 gpg), moderately hard
- Urbandale — 99.0 mg/L (5.8 gpg), moderately hard
Every Covered City in Iowa
All 393 covered Iowa cities, sorted by population served. "County estimate" rows are labeled context values from USGS/EPA Water Quality Portal county sampling — they never enter the median above. City names link to each city's full water quality page.
| City | Hardness (mg/L) | gpg | Category | Data |
|---|---|---|---|---|
| Council Bluffs | 149.0 | 8.7 | Hard | Utility-reported |
| Carter Lake | 148.9 | 8.7 | Hard | Utility-reported |
| Crescent | 149.0 | 8.7 | Hard | Utility-reported |
| Ankeny | 120.0 | 7.0 | Moderately hard | Utility-reported |
| West Des Moines | 135.0 | 7.9 | Hard | Utility-reported |
| Saylorville | 120.0 | 7.0 | Moderately hard | Utility-reported |
| Urbandale | 99.0 | 5.8 | Moderately hard | Utility-reported |
| Altoona | 296.0 | 17.3 | Very hard | County estimate |
| Johnston | 126.0 | 7.4 | Hard | Utility-reported |
| Waukee | 302.0 | 17.7 | Very hard | County estimate |
| Clive | 68.3 | 4.0 | Moderately hard | Utility-reported |
| Norwalk | 132.0 | 7.7 | Hard | Utility-reported |
| Bondurant | 296.0 | 17.3 | Very hard | County estimate |
| Polk City | 151.0 | 8.8 | Hard | Utility-reported |
| Mitchellville | 296.0 | 17.3 | Very hard | County estimate |
| Elkhart | 296.0 | 17.3 | Very hard | County estimate |
| Pleasant Hill | 296.0 | 17.3 | Very hard | County estimate |
| Cumming | 283.0 | 16.6 | Very hard | County estimate |
| Alleman | 296.0 | 17.3 | Very hard | County estimate |
| Des Moines | 296.0 | 17.3 | Very hard | County estimate |
| Runnells | 296.0 | 17.3 | Very hard | County estimate |
| Windsor Heights | 296.0 | 17.3 | Very hard | County estimate |
| Marion | 128.0 | 7.5 | Hard | Utility-reported |
| Cedar Rapids | 128.0 | 7.5 | Hard | Utility-reported |
| Hiawatha | 125.1 | 7.3 | Hard | Utility-reported |
| Davenport | 196.0 | 11.5 | Very hard | County estimate |
| Bertram | 128.0 | 7.5 | Hard | Utility-reported |
| Fairfax | 128.0 | 7.5 | Hard | Utility-reported |
| Robins | 128.0 | 7.5 | Hard | Utility-reported |
| Shueyville | 128.0 | 7.5 | Hard | Utility-reported |
| Iowa City | 75.6 | 4.4 | Moderately hard | Utility-reported |
| Ames | 150.4 | 8.8 | Hard | Utility-reported |
| Sioux City | 183.0 | 10.7 | Very hard | Utility-reported |
| Evansdale | 263.5 | 15.4 | Very hard | County estimate |
| Waterloo | 263.5 | 15.4 | Very hard | County estimate |
| University Heights | 75.6 | 4.4 | Moderately hard | Utility-reported |
| Dubuque | 195.0 | 11.4 | Very hard | County estimate |
| Cedar Falls | 263.5 | 15.4 | Very hard | County estimate |
| Indianola | 300.0 | 17.5 | Very hard | County estimate |
| Centerville | 118.5 | 6.9 | Moderately hard | County estimate |
| Creston | 105.7 | 6.2 | Moderately hard | County estimate |
| Burlington | 349.5 | 20.4 | Very hard | County estimate |
| Muscatine | 240.0 | 14.0 | Very hard | County estimate |
| Coralville | 337.0 | 19.7 | Very hard | County estimate |
| Fort Madison | 210.0 | 12.3 | Very hard | County estimate |
| North Liberty | 49.0 | 2.9 | Soft | Utility-reported |
| Oskaloosa | 110.0 | 6.4 | Moderately hard | Utility-reported |
| Spencer | 345.0 | 20.2 | Very hard | County estimate |
| Grimes | 296.0 | 17.3 | Very hard | County estimate |
| Webster City | 450.0 | 26.3 | Very hard | County estimate |
| Knoxville | 266.0 | 15.6 | Very hard | County estimate |
| Brooklyn | 375.0 | 21.9 | Very hard | County estimate |
| Boone | 314.0 | 18.4 | Very hard | County estimate |
| Bouton | 302.0 | 17.7 | Very hard | County estimate |
| Storm Lake | 660.0 | 38.6 | Very hard | County estimate |
| Denison | 400.0 | 23.4 | Very hard | County estimate |
| Mount Pleasant | 432.0 | 25.3 | Very hard | County estimate |
| Le Mars | 455.0 | 26.6 | Very hard | County estimate |
| Pella | 266.0 | 15.6 | Very hard | County estimate |
| Waverly | 207.5 | 12.1 | Very hard | County estimate |
| Carroll | 325.0 | 19.0 | Very hard | County estimate |
| Keokuk | 210.0 | 12.3 | Very hard | County estimate |
| Grinnell | 375.0 | 21.9 | Very hard | County estimate |
| Fairfield | 315.0 | 18.4 | Very hard | County estimate |
| Sioux Center | 483.0 | 28.3 | Very hard | County estimate |
| Beacon | 110.0 | 6.4 | Moderately hard | Utility-reported |
| Perry | 302.0 | 17.7 | Very hard | County estimate |
| Clear Lake | 306.0 | 17.9 | Very hard | County estimate |
| Charles City | 290.5 | 17.0 | Very hard | County estimate |
| Nevada | 310.0 | 18.1 | Very hard | County estimate |
| Eldridge | 196.0 | 11.5 | Very hard | County estimate |
| Orange City | 483.0 | 28.3 | Very hard | County estimate |
| Spirit Lake | 295.5 | 17.3 | Very hard | County estimate |
| Sheldon | 483.0 | 28.3 | Very hard | County estimate |
| Glenwood | 470.0 | 27.5 | Very hard | County estimate |
| Tiffin | 337.0 | 19.7 | Very hard | County estimate |
| Tama | 290.0 | 17.0 | Very hard | County estimate |
| Manning | 325.0 | 19.0 | Very hard | County estimate |
| Sergeant Bluff | 405.0 | 23.7 | Very hard | County estimate |
| Madrid | 314.0 | 18.4 | Very hard | County estimate |
| Luther | 314.0 | 18.4 | Very hard | County estimate |
| Huxley | 310.0 | 18.1 | Very hard | County estimate |
| Lisbon | 450.0 | 26.3 | Very hard | County estimate |
| Forest City | 380.0 | 22.2 | Very hard | County estimate |
| Carlisle | 300.0 | 17.5 | Very hard | County estimate |
| West Liberty | 240.0 | 14.0 | Very hard | County estimate |
| Solon | 337.0 | 19.7 | Very hard | County estimate |
| Waukon | 326.0 | 19.1 | Very hard | County estimate |
| Eagle Grove | 360.0 | 21.1 | Very hard | County estimate |
| Emmetsburg | 406.0 | 23.7 | Very hard | County estimate |
| Greenfield | 220.0 | 12.9 | Very hard | County estimate |
| Osage | 286.0 | 16.7 | Very hard | County estimate |
| New Hampton | 231.0 | 13.5 | Very hard | County estimate |
| Tipton | 450.0 | 26.3 | Very hard | County estimate |
| Story City | 310.0 | 18.1 | Very hard | County estimate |
| Williamsburg | 330.0 | 19.3 | Very hard | County estimate |
| Milford | 295.5 | 17.3 | Very hard | County estimate |
| Montezuma | 375.0 | 21.9 | Very hard | County estimate |
| Newton | 365.0 | 21.4 | Very hard | County estimate |
| West Burlington | 349.5 | 20.4 | Very hard | County estimate |
| Garner | 400.0 | 23.4 | Very hard | County estimate |
| Wilton | 450.0 | 26.3 | Very hard | County estimate |
| Onawa | 295.8 | 17.3 | Very hard | County estimate |
| Clarion | 360.0 | 21.1 | Very hard | County estimate |
| Grundy Center | 360.0 | 21.1 | Very hard | County estimate |
| Hawarden | 483.0 | 28.3 | Very hard | County estimate |
| Bloomfield | 198.8 | 11.6 | Very hard | County estimate |
| Missouri Valley | 560.0 | 32.8 | Very hard | County estimate |
| Eldora | 356.0 | 20.8 | Very hard | County estimate |
| Center Point | 266.0 | 15.6 | Very hard | County estimate |
| Hudson | 263.5 | 15.4 | Very hard | County estimate |
| West Branch | 450.0 | 26.3 | Very hard | County estimate |
| Postville | 326.0 | 19.1 | Very hard | County estimate |
| West Union | 350.0 | 20.5 | Very hard | County estimate |
| Marengo | 330.0 | 19.3 | Very hard | County estimate |
| Belmond | 360.0 | 21.1 | Very hard | County estimate |
| Ogden | 314.0 | 18.4 | Very hard | County estimate |
| Cascade | 308.0 | 18.0 | Very hard | County estimate |
| Hull | 483.0 | 28.3 | Very hard | County estimate |
| Belle Plaine | 273.0 | 16.0 | Very hard | County estimate |
| Toledo | 290.0 | 17.0 | Very hard | County estimate |
| Bellevue | 310.0 | 18.1 | Very hard | County estimate |
| Ely | 266.0 | 15.6 | Very hard | County estimate |
| Colfax | 365.0 | 21.4 | Very hard | County estimate |
| Rockwell City | 306.0 | 17.9 | Very hard | County estimate |
| Lake Mills | 380.0 | 22.2 | Very hard | County estimate |
| Alta | 660.0 | 38.6 | Very hard | County estimate |
| Wapello | 233.5 | 13.7 | Very hard | County estimate |
| Northwood | 320.0 | 18.7 | Very hard | County estimate |
| Atkins | 273.0 | 16.0 | Very hard | County estimate |
| Audubon | 405.0 | 23.7 | Very hard | County estimate |
| Ida Grove | 410.0 | 24.0 | Very hard | County estimate |
| Woodward | 314.0 | 18.4 | Very hard | County estimate |
| Britt | 400.0 | 23.4 | Very hard | County estimate |
| Sumner | 207.5 | 12.1 | Very hard | County estimate |
| Parkersburg | 254.0 | 14.8 | Very hard | County estimate |
| Sigourney | 450.0 | 26.3 | Very hard | County estimate |
| Lamoni | 211.6 | 12.4 | Very hard | County estimate |
| Monroe | 365.0 | 21.4 | Very hard | County estimate |
| Denver | 207.5 | 12.1 | Very hard | County estimate |
| New London | 432.0 | 25.3 | Very hard | County estimate |
| Dallas Center | 302.0 | 17.7 | Very hard | County estimate |
| Durant | 240.0 | 14.0 | Very hard | County estimate |
| Pocahontas | 800.0 | 46.8 | Very hard | County estimate |
| Columbus Junction | 233.5 | 13.7 | Very hard | County estimate |
| Leon | 211.6 | 12.4 | Very hard | County estimate |
| Guttenberg | 237.0 | 13.9 | Very hard | County estimate |
| Mount Ayr | 146.0 | 8.5 | Hard | County estimate |
| Stuart | 220.0 | 12.9 | Very hard | County estimate |
| Farley | 195.0 | 11.4 | Very hard | County estimate |
| Lake City | 685.0 | 40.1 | Very hard | County estimate |
| Manson | 685.0 | 40.1 | Very hard | County estimate |
| Prairie City | 365.0 | 21.4 | Very hard | County estimate |
| Mediapolis | 349.5 | 20.4 | Very hard | County estimate |
| Moville | 405.0 | 23.7 | Very hard | County estimate |
| Remsen | 455.0 | 26.6 | Very hard | County estimate |
| Pleasantville | 266.0 | 15.6 | Very hard | County estimate |
| Reinbeck | 360.0 | 21.1 | Very hard | County estimate |
| Granger | 296.0 | 17.3 | Very hard | County estimate |
| Woodbine | 560.0 | 32.8 | Very hard | County estimate |
| Hartley | 440.0 | 25.7 | Very hard | County estimate |
| Guthrie Center | 179.0 | 10.5 | Hard | Utility-reported |
| Traer | 290.0 | 17.0 | Very hard | County estimate |
| Corning | 240.0 | 14.0 | Very hard | County estimate |
| Akron | 455.0 | 26.6 | Very hard | County estimate |
| Urbana | 273.0 | 16.0 | Very hard | County estimate |
| Nashua | 231.0 | 13.5 | Very hard | County estimate |
| Walcott | 196.0 | 11.5 | Very hard | County estimate |
| Slater | 296.0 | 17.3 | Very hard | County estimate |
| Oakland | 385.0 | 22.5 | Very hard | County estimate |
| Wellman | 314.5 | 18.4 | Very hard | County estimate |
| Avoca | 385.0 | 22.5 | Very hard | County estimate |
| Bedford | 150.0 | 8.8 | Hard | County estimate |
| Holstein | 410.0 | 24.0 | Very hard | County estimate |
| Van Meter | 283.0 | 16.6 | Very hard | County estimate |
| Monona | 326.0 | 19.1 | Very hard | County estimate |
| Earlham | 283.0 | 16.6 | Very hard | County estimate |
| Palo | 266.0 | 15.6 | Very hard | County estimate |
| Logan | 560.0 | 32.8 | Very hard | County estimate |
| Kingsley | 455.0 | 26.6 | Very hard | County estimate |
| Sanborn | 440.0 | 25.7 | Very hard | County estimate |
| Nora Springs | 290.5 | 17.0 | Very hard | County estimate |
| Roland | 310.0 | 18.1 | Very hard | County estimate |
| Lone Tree | 337.0 | 19.7 | Very hard | County estimate |
| Lenox | 150.0 | 8.8 | Hard | County estimate |
| New Sharon | 297.5 | 17.4 | Very hard | County estimate |
| Dike | 360.0 | 21.1 | Very hard | County estimate |
| Coon Rapids | 277.0 | 16.2 | Very hard | County estimate |
| Oxford | 337.0 | 19.7 | Very hard | County estimate |
| Dysart | 273.0 | 16.0 | Very hard | County estimate |
| Shell Rock | 254.0 | 14.8 | Very hard | County estimate |
| Central City | 266.0 | 15.6 | Very hard | County estimate |
| Laurens | 800.0 | 46.8 | Very hard | County estimate |
| Fayette | 350.0 | 20.5 | Very hard | County estimate |
| Clarksville | 254.0 | 14.8 | Very hard | County estimate |
| Alton | 483.0 | 28.3 | Very hard | County estimate |
| Middle Amana | 330.0 | 19.3 | Very hard | County estimate |
| Dunlap | 560.0 | 32.8 | Very hard | County estimate |
| Jewell | 339.0 | 19.8 | Very hard | County estimate |
| Gilbert | 310.0 | 18.1 | Very hard | County estimate |
| Elkader | 237.0 | 13.9 | Very hard | County estimate |
| Tripoli | 207.5 | 12.1 | Very hard | County estimate |
| Buffalo | 196.0 | 11.5 | Very hard | County estimate |
| Lake Park | 295.5 | 17.3 | Very hard | County estimate |
| Mapleton | 295.8 | 17.3 | Very hard | County estimate |
| Springville | 266.0 | 15.6 | Very hard | County estimate |
| St. Ansgar | 286.0 | 16.7 | Very hard | County estimate |
| St. Ansgar | 286.0 | 16.7 | Very hard | County estimate |
| Strawberry Point | 237.0 | 13.9 | Very hard | County estimate |
| Paullina | 440.0 | 25.7 | Very hard | County estimate |
| Glidden | 325.0 | 19.0 | Very hard | County estimate |
| Villisca | 260.0 | 15.2 | Very hard | County estimate |
| Sheffield | 305.0 | 17.8 | Very hard | County estimate |
| Aplington | 254.0 | 14.8 | Very hard | County estimate |
| Calmar | 340.0 | 19.9 | Very hard | County estimate |
| Lake View | 420.0 | 24.6 | Very hard | County estimate |
| Arnolds Park | 295.5 | 17.3 | Very hard | County estimate |
| Panora | 277.0 | 16.2 | Very hard | County estimate |
| George | 483.5 | 28.3 | Very hard | County estimate |
| Rockwell | 306.0 | 17.9 | Very hard | County estimate |
| Sidney | 280.6 | 16.4 | Very hard | County estimate |
| Brighton | 315.0 | 18.4 | Very hard | County estimate |
| North English | 330.0 | 19.3 | Very hard | County estimate |
| Riverside | 314.5 | 18.4 | Very hard | County estimate |
| Sloan | 405.0 | 23.7 | Very hard | County estimate |
| Clarence | 450.0 | 26.3 | Very hard | County estimate |
| Janesville | 207.5 | 12.1 | Very hard | County estimate |
| Winfield | 432.0 | 25.3 | Very hard | County estimate |
| Treynor | 385.0 | 22.5 | Very hard | County estimate |
| Mechanicsville | 450.0 | 26.3 | Very hard | County estimate |
| Griswold | 200.0 | 11.7 | Very hard | County estimate |
| Tabor | 280.6 | 16.4 | Very hard | County estimate |
| Baxter | 365.0 | 21.4 | Very hard | County estimate |
| Fredericksburg | 231.0 | 13.5 | Very hard | County estimate |
| Eddyville | 425.0 | 24.9 | Very hard | County estimate |
| Aurelia | 585.0 | 34.2 | Very hard | County estimate |
| Lawton | 405.0 | 23.7 | Very hard | County estimate |
| Hinton | 455.0 | 26.6 | Very hard | County estimate |
| Epworth | 195.0 | 11.4 | Very hard | County estimate |
| Danville | 349.5 | 20.4 | Very hard | County estimate |
| Eldon | 425.0 | 24.9 | Very hard | County estimate |
| West Point | 210.0 | 12.3 | Very hard | County estimate |
| Neola | 385.0 | 22.5 | Very hard | County estimate |
| Newell | 660.0 | 38.6 | Very hard | County estimate |
| Le Grand | 360.0 | 21.1 | Very hard | County estimate |
| Graettinger | 406.0 | 23.7 | Very hard | County estimate |
| Donnellson | 210.0 | 12.3 | Very hard | County estimate |
| Sully | 365.0 | 21.4 | Very hard | County estimate |
| Schleswig | 400.0 | 23.4 | Very hard | County estimate |
| Cambridge | 310.0 | 18.1 | Very hard | County estimate |
| Gilbertville | 263.5 | 15.4 | Very hard | County estimate |
| Milo | 300.0 | 17.5 | Very hard | County estimate |
| Manilla | 400.0 | 23.4 | Very hard | County estimate |
| Okoboji | 295.5 | 17.3 | Very hard | County estimate |
| Whiting | 295.8 | 17.3 | Very hard | County estimate |
| Montrose | 210.0 | 12.3 | Very hard | County estimate |
| Redfield | 302.0 | 17.7 | Very hard | County estimate |
| Schaller | 420.0 | 24.6 | Very hard | County estimate |
| Ruthven | 406.0 | 23.7 | Very hard | County estimate |
| Hospers | 483.0 | 28.3 | Very hard | County estimate |
| Merrill | 455.0 | 26.6 | Very hard | County estimate |
| Ventura | 340.0 | 19.9 | Very hard | Utility-reported |
| Boyden | 483.0 | 28.3 | Very hard | County estimate |
| Fontanelle | 220.0 | 12.9 | Very hard | County estimate |
| Dexter | 283.0 | 16.6 | Very hard | County estimate |
| Moravia | 118.5 | 6.9 | Moderately hard | County estimate |
| Stanwood | 450.0 | 26.3 | Very hard | County estimate |
| Goldfield | 360.0 | 21.1 | Very hard | County estimate |
| Kellogg | 365.0 | 21.4 | Very hard | County estimate |
| Early | 420.0 | 24.6 | Very hard | County estimate |
| Farmington | 210.0 | 12.3 | Very hard | County estimate |
| Everly | 345.0 | 20.2 | Very hard | County estimate |
| Badger | 440.0 | 25.7 | Very hard | County estimate |
| Gilman | 360.0 | 21.1 | Very hard | County estimate |
| Richland | 450.0 | 26.3 | Very hard | County estimate |
| Charter Oak | 400.0 | 23.4 | Very hard | County estimate |
| Arcadia | 325.0 | 19.0 | Very hard | County estimate |
| Ellsworth | 339.0 | 19.8 | Very hard | County estimate |
| Elma | 255.0 | 14.9 | Very hard | County estimate |
| Breda | 325.0 | 19.0 | Very hard | County estimate |
| Whittemore | 366.0 | 21.4 | Very hard | County estimate |
| Dow City | 400.0 | 23.4 | Very hard | County estimate |
| Stacyville | 286.0 | 16.7 | Very hard | County estimate |
| Royal | 345.0 | 20.2 | Very hard | County estimate |
| Klemme | 400.0 | 23.4 | Very hard | County estimate |
| Batavia | 315.0 | 18.4 | Very hard | County estimate |
| Martensdale | 300.0 | 17.5 | Very hard | County estimate |
| Lawler | 231.0 | 13.5 | Very hard | County estimate |
| Salem | 432.0 | 25.3 | Very hard | County estimate |
| Vail | 400.0 | 23.4 | Very hard | County estimate |
| Plainfield | 207.5 | 12.1 | Very hard | County estimate |
| Bussey | 266.0 | 15.6 | Very hard | County estimate |
| Casey | 277.0 | 16.2 | Very hard | County estimate |
| Duncombe | 440.0 | 25.7 | Very hard | County estimate |
| Orient | 220.0 | 12.9 | Very hard | County estimate |
| Birmingham | 265.5 | 15.5 | Very hard | County estimate |
| Ringsted | 545.0 | 31.9 | Very hard | County estimate |
| Middletown | 349.5 | 20.4 | Very hard | County estimate |
| Rudd | 290.5 | 17.0 | Very hard | County estimate |
| Washington | 314.5 | 18.4 | Very hard | County estimate |
| Templeton | 325.0 | 19.0 | Very hard | County estimate |
| Bennett | 450.0 | 26.3 | Very hard | County estimate |
| Diagonal | 146.0 | 8.5 | Hard | County estimate |
| Minburn | 302.0 | 17.7 | Very hard | County estimate |
| Mystic | 118.5 | 6.9 | Moderately hard | County estimate |
| Irwin | 230.0 | 13.4 | Very hard | County estimate |
| Floyd | 290.5 | 17.0 | Very hard | County estimate |
| Granville | 440.0 | 25.7 | Very hard | County estimate |
| Kelley | 310.0 | 18.1 | Very hard | County estimate |
| Amana | 330.0 | 19.3 | Very hard | County estimate |
| Atalissa | 240.0 | 14.0 | Very hard | County estimate |
| Salix | 405.0 | 23.7 | Very hard | County estimate |
| Bronson | 405.0 | 23.7 | Very hard | County estimate |
| Manly | 320.0 | 18.7 | Very hard | County estimate |
| Westside | 400.0 | 23.4 | Very hard | County estimate |
| Blakesburg | 425.0 | 24.9 | Very hard | County estimate |
| Libertyville | 315.0 | 18.4 | Very hard | County estimate |
| Stockport | 265.5 | 15.5 | Very hard | County estimate |
| Fenton | 366.0 | 21.4 | Very hard | County estimate |
| Malcom | 375.0 | 21.9 | Very hard | County estimate |
| Protivin | 255.0 | 14.9 | Very hard | County estimate |
| Kiron | 400.0 | 23.4 | Very hard | County estimate |
| Yale | 277.0 | 16.2 | Very hard | County estimate |
| Auburn | 420.0 | 24.6 | Very hard | County estimate |
| Mallard | 406.0 | 23.7 | Very hard | County estimate |
| Hornick | 405.0 | 23.7 | Very hard | County estimate |
| Crystal Lake | 400.0 | 23.4 | Very hard | County estimate |
| Leland | 380.0 | 22.2 | Very hard | County estimate |
| Deloit | 400.0 | 23.4 | Very hard | County estimate |
| Pisgah | 560.0 | 32.8 | Very hard | County estimate |
| Defiance | 230.0 | 13.4 | Very hard | County estimate |
| Lockridge | 315.0 | 18.4 | Very hard | County estimate |
| Halbur | 325.0 | 19.0 | Very hard | County estimate |
| Harvey | 266.0 | 15.6 | Very hard | County estimate |
| Renwick | 410.0 | 24.0 | Very hard | County estimate |
| Blencoe | 295.8 | 17.3 | Very hard | County estimate |
| Fostoria | 345.0 | 20.2 | Very hard | County estimate |
| Ladora | 330.0 | 19.3 | Very hard | County estimate |
| Moorhead | 295.8 | 17.3 | Very hard | County estimate |
| Spillville | 340.0 | 19.9 | Very hard | County estimate |
| Waucoma | 350.0 | 20.5 | Very hard | County estimate |
| Alta Vista | 231.0 | 13.5 | Very hard | County estimate |
| Ionia | 231.0 | 13.5 | Very hard | County estimate |
| Dedham | 325.0 | 19.0 | Very hard | County estimate |
| Meservey | 400.0 | 23.4 | Very hard | County estimate |
| Bettendorf | 121.0 | 7.1 | Hard | Utility-reported |
| Panorama Park | 121.0 | 7.1 | Hard | Utility-reported |
| Riverdale | 121.0 | 7.1 | Hard | Utility-reported |
| Grafton | 320.0 | 18.7 | Very hard | County estimate |
| Clutier | 290.0 | 17.0 | Very hard | County estimate |
| Blue Grass | 196.0 | 11.5 | Very hard | County estimate |
| Rembrandt | 660.0 | 38.6 | Very hard | County estimate |
| Montour | 290.0 | 17.0 | Very hard | County estimate |
| Jamaica | 277.0 | 16.2 | Very hard | County estimate |
| Sac City | 420.0 | 24.6 | Very hard | County estimate |
| Olds | 432.0 | 25.3 | Very hard | County estimate |
| Hartford | 300.0 | 17.5 | Very hard | County estimate |
| Smithland | 405.0 | 23.7 | Very hard | County estimate |
| Thor | 410.0 | 24.0 | Very hard | County estimate |
| Calamus | 185.0 | 10.8 | Very hard | County estimate |
| Stockton | 196.0 | 11.5 | Very hard | County estimate |
| Jesup | 263.5 | 15.4 | Very hard | County estimate |
| Ottumwa | 425.0 | 24.9 | Very hard | County estimate |
| Lidderdale | 325.0 | 19.0 | Very hard | County estimate |
| Little Sioux | 560.0 | 32.8 | Very hard | County estimate |
| Wallingford | 545.0 | 31.9 | Very hard | County estimate |
| Pilot Mound | 314.0 | 18.4 | Very hard | County estimate |
| Randall | 339.0 | 19.8 | Very hard | County estimate |
| Dickens | 345.0 | 20.2 | Very hard | County estimate |
| Woolstock | 360.0 | 21.1 | Very hard | County estimate |
| Goodell | 400.0 | 23.4 | Very hard | County estimate |
| Millersburg | 330.0 | 19.3 | Very hard | County estimate |
| Vincent | 440.0 | 25.7 | Very hard | County estimate |
| Pacific Junction | 470.0 | 27.5 | Very hard | County estimate |
| Fort Dodge | 440.0 | 25.7 | Very hard | County estimate |
| Lanesboro | 325.0 | 19.0 | Very hard | County estimate |
| Dawson | 302.0 | 17.7 | Very hard | County estimate |
| Castana | 295.8 | 17.3 | Very hard | County estimate |
| State Center | 360.0 | 21.1 | Very hard | County estimate |
| Sibley | 358.0 | 20.9 | Very hard | County estimate |
| Peosta | 195.0 | 11.4 | Very hard | County estimate |
| Matlock | 483.0 | 28.3 | Very hard | County estimate |
| Rock Rapids | 483.5 | 28.3 | Very hard | County estimate |
| Truesdale | 660.0 | 38.6 | Very hard | County estimate |
| Orchard | 286.0 | 16.7 | Very hard | County estimate |
| Colwell | 290.5 | 17.0 | Very hard | County estimate |
| Plover | 800.0 | 46.8 | Very hard | County estimate |
| Le Claire | 196.0 | 11.5 | Very hard | County estimate |
| West Bend | 406.0 | 23.7 | Very hard | County estimate |
| Kalona | 337.0 | 19.7 | Very hard | County estimate |
| Greene | 254.0 | 14.8 | Very hard | County estimate |
| Lansing | 326.0 | 19.1 | Very hard | County estimate |
| Odebolt | 420.0 | 24.6 | Very hard | County estimate |
Above 120 mg/L (7 gpg), scale is usually worth treating — see our water softener guide, or size a system with the hardness calculator & converter.
The Geology Behind Iowa's Water Hardness
Iowa sits in the Midwestern glacial-drift and carbonate bedrock region.
Ice-age glaciers ground up limestone and dolomite bedrock and spread it across the Midwest as thick, carbonate-rich drift. Groundwater percolating through that drift - and through the shallow carbonate bedrock beneath it - dissolves calcium and magnesium readily, which is why the USGS maps the region hard to very hard almost everywhere. Cities drawing Great Lakes surface water tend to run somewhat softer than their groundwater-supplied neighbors.
Iowa Water Hardness FAQ
Does Iowa have hard water?
Yes — across Iowa's measured cities, typical tap water is hard. The median is 128.0 mg/L (7.5 gpg) — hard on the USGS scale, where anything above 120 mg/L (7 gpg) counts as hard. 21 of Iowa's 30 measured cities fall in the hard or very hard bands (70%), so check your own city rather than the state average.
How hard is tap water in Iowa?
Across the 30 Iowa cities with measured values in our index, the median hardness is 128.0 mg/L (7.5 gpg) — hard on the USGS scale. Individual cities range from 49.0 to 340.0 mg/L, so check your own city rather than assuming the state number.
Which city in Iowa has the hardest water?
Ventura has the hardest measured tap water in our Iowa index at 340.0 mg/L (19.9 gpg) — very hard on the USGS scale. Rankings use measured utility values only; labeled county estimates and values under active dispute are excluded.
Do I need a water softener in Iowa?
21 of Iowa's 30 measured cities (70%) fall in the hard or very hard bands — above 120 mg/L (7 gpg), the level where most water treatment professionals suggest considering an ion-exchange softener. Hardness varies utility to utility, so look up your own city's value before sizing equipment.
How do I find my city's exact water hardness?
Enter your ZIP code in our free lookup at tapwaterdata.com/zip to see the value we hold for your Iowa city from utility-reported water quality data, check your water utility's annual Consumer Confidence Report (CCR), or use a home test-strip kit.
Stay Informed About Your Water Quality
Get EPA reports, filter recommendations, and safety alerts for your area.
Join 10,000+ people protecting their families. Unsubscribe anytime.