Skip to main content
💧 TapWaterData

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.

State Median
128.0
mg/L (7.5 gpg), measured cities
Measured Range
49.0-340.0
mg/L across measured cities
Measured Cities
30
utility-reported or computed values
County Estimates
363
92% of covered cities

Iowa Cities by Hardness Category

Measured cities only — labeled county estimates never enter the category counts or the median.

CategoryRangeMeasured citiesShare
Soft0-60 mg/L13.3%
Moderately hard60-120 mg/L826.7%
Hard120-180 mg/L1963.3%
Very hard>180 mg/L26.7%

Hardest and Softest Water in Iowa

Measured values only; labeled county estimates and values under active dispute never rank.

Hardest water in Iowa

  1. Ventura 340.0 mg/L (19.9 gpg), very hard
  2. Sioux City 183.0 mg/L (10.7 gpg), very hard
  3. Guthrie Center 179.0 mg/L (10.5 gpg), hard
  4. Polk City 151.0 mg/L (8.8 gpg), hard
  5. Ames 150.4 mg/L (8.8 gpg), hard

Softest water in Iowa

  1. North Liberty 49.0 mg/L (2.9 gpg), soft
  2. Clive 68.3 mg/L (4.0 gpg), moderately hard
  3. Iowa City 75.6 mg/L (4.4 gpg), moderately hard
  4. University Heights 75.6 mg/L (4.4 gpg), moderately hard
  5. 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.

CityHardness (mg/L)gpgCategoryData
Council Bluffs149.08.7HardUtility-reported
Carter Lake148.98.7HardUtility-reported
Crescent149.08.7HardUtility-reported
Ankeny120.07.0Moderately hardUtility-reported
West Des Moines135.07.9HardUtility-reported
Saylorville120.07.0Moderately hardUtility-reported
Urbandale99.05.8Moderately hardUtility-reported
Altoona296.017.3Very hardCounty estimate
Johnston126.07.4HardUtility-reported
Waukee302.017.7Very hardCounty estimate
Clive68.34.0Moderately hardUtility-reported
Norwalk132.07.7HardUtility-reported
Bondurant296.017.3Very hardCounty estimate
Polk City151.08.8HardUtility-reported
Mitchellville296.017.3Very hardCounty estimate
Elkhart296.017.3Very hardCounty estimate
Pleasant Hill296.017.3Very hardCounty estimate
Cumming283.016.6Very hardCounty estimate
Alleman296.017.3Very hardCounty estimate
Des Moines296.017.3Very hardCounty estimate
Runnells296.017.3Very hardCounty estimate
Windsor Heights296.017.3Very hardCounty estimate
Marion128.07.5HardUtility-reported
Cedar Rapids128.07.5HardUtility-reported
Hiawatha125.17.3HardUtility-reported
Davenport196.011.5Very hardCounty estimate
Bertram128.07.5HardUtility-reported
Fairfax128.07.5HardUtility-reported
Robins128.07.5HardUtility-reported
Shueyville128.07.5HardUtility-reported
Iowa City75.64.4Moderately hardUtility-reported
Ames150.48.8HardUtility-reported
Sioux City183.010.7Very hardUtility-reported
Evansdale263.515.4Very hardCounty estimate
Waterloo263.515.4Very hardCounty estimate
University Heights75.64.4Moderately hardUtility-reported
Dubuque195.011.4Very hardCounty estimate
Cedar Falls263.515.4Very hardCounty estimate
Indianola300.017.5Very hardCounty estimate
Centerville118.56.9Moderately hardCounty estimate
Creston105.76.2Moderately hardCounty estimate
Burlington349.520.4Very hardCounty estimate
Muscatine240.014.0Very hardCounty estimate
Coralville337.019.7Very hardCounty estimate
Fort Madison210.012.3Very hardCounty estimate
North Liberty49.02.9SoftUtility-reported
Oskaloosa110.06.4Moderately hardUtility-reported
Spencer345.020.2Very hardCounty estimate
Grimes296.017.3Very hardCounty estimate
Webster City450.026.3Very hardCounty estimate
Knoxville266.015.6Very hardCounty estimate
Brooklyn375.021.9Very hardCounty estimate
Boone314.018.4Very hardCounty estimate
Bouton302.017.7Very hardCounty estimate
Storm Lake660.038.6Very hardCounty estimate
Denison400.023.4Very hardCounty estimate
Mount Pleasant432.025.3Very hardCounty estimate
Le Mars455.026.6Very hardCounty estimate
Pella266.015.6Very hardCounty estimate
Waverly207.512.1Very hardCounty estimate
Carroll325.019.0Very hardCounty estimate
Keokuk210.012.3Very hardCounty estimate
Grinnell375.021.9Very hardCounty estimate
Fairfield315.018.4Very hardCounty estimate
Sioux Center483.028.3Very hardCounty estimate
Beacon110.06.4Moderately hardUtility-reported
Perry302.017.7Very hardCounty estimate
Clear Lake306.017.9Very hardCounty estimate
Charles City290.517.0Very hardCounty estimate
Nevada310.018.1Very hardCounty estimate
Eldridge196.011.5Very hardCounty estimate
Orange City483.028.3Very hardCounty estimate
Spirit Lake295.517.3Very hardCounty estimate
Sheldon483.028.3Very hardCounty estimate
Glenwood470.027.5Very hardCounty estimate
Tiffin337.019.7Very hardCounty estimate
Tama290.017.0Very hardCounty estimate
Manning325.019.0Very hardCounty estimate
Sergeant Bluff405.023.7Very hardCounty estimate
Madrid314.018.4Very hardCounty estimate
Luther314.018.4Very hardCounty estimate
Huxley310.018.1Very hardCounty estimate
Lisbon450.026.3Very hardCounty estimate
Forest City380.022.2Very hardCounty estimate
Carlisle300.017.5Very hardCounty estimate
West Liberty240.014.0Very hardCounty estimate
Solon337.019.7Very hardCounty estimate
Waukon326.019.1Very hardCounty estimate
Eagle Grove360.021.1Very hardCounty estimate
Emmetsburg406.023.7Very hardCounty estimate
Greenfield220.012.9Very hardCounty estimate
Osage286.016.7Very hardCounty estimate
New Hampton231.013.5Very hardCounty estimate
Tipton450.026.3Very hardCounty estimate
Story City310.018.1Very hardCounty estimate
Williamsburg330.019.3Very hardCounty estimate
Milford295.517.3Very hardCounty estimate
Montezuma375.021.9Very hardCounty estimate
Newton365.021.4Very hardCounty estimate
West Burlington349.520.4Very hardCounty estimate
Garner400.023.4Very hardCounty estimate
Wilton450.026.3Very hardCounty estimate
Onawa295.817.3Very hardCounty estimate
Clarion360.021.1Very hardCounty estimate
Grundy Center360.021.1Very hardCounty estimate
Hawarden483.028.3Very hardCounty estimate
Bloomfield198.811.6Very hardCounty estimate
Missouri Valley560.032.8Very hardCounty estimate
Eldora356.020.8Very hardCounty estimate
Center Point266.015.6Very hardCounty estimate
Hudson263.515.4Very hardCounty estimate
West Branch450.026.3Very hardCounty estimate
Postville326.019.1Very hardCounty estimate
West Union350.020.5Very hardCounty estimate
Marengo330.019.3Very hardCounty estimate
Belmond360.021.1Very hardCounty estimate
Ogden314.018.4Very hardCounty estimate
Cascade308.018.0Very hardCounty estimate
Hull483.028.3Very hardCounty estimate
Belle Plaine273.016.0Very hardCounty estimate
Toledo290.017.0Very hardCounty estimate
Bellevue310.018.1Very hardCounty estimate
Ely266.015.6Very hardCounty estimate
Colfax365.021.4Very hardCounty estimate
Rockwell City306.017.9Very hardCounty estimate
Lake Mills380.022.2Very hardCounty estimate
Alta660.038.6Very hardCounty estimate
Wapello233.513.7Very hardCounty estimate
Northwood320.018.7Very hardCounty estimate
Atkins273.016.0Very hardCounty estimate
Audubon405.023.7Very hardCounty estimate
Ida Grove410.024.0Very hardCounty estimate
Woodward314.018.4Very hardCounty estimate
Britt400.023.4Very hardCounty estimate
Sumner207.512.1Very hardCounty estimate
Parkersburg254.014.8Very hardCounty estimate
Sigourney450.026.3Very hardCounty estimate
Lamoni211.612.4Very hardCounty estimate
Monroe365.021.4Very hardCounty estimate
Denver207.512.1Very hardCounty estimate
New London432.025.3Very hardCounty estimate
Dallas Center302.017.7Very hardCounty estimate
Durant240.014.0Very hardCounty estimate
Pocahontas800.046.8Very hardCounty estimate
Columbus Junction233.513.7Very hardCounty estimate
Leon211.612.4Very hardCounty estimate
Guttenberg237.013.9Very hardCounty estimate
Mount Ayr146.08.5HardCounty estimate
Stuart220.012.9Very hardCounty estimate
Farley195.011.4Very hardCounty estimate
Lake City685.040.1Very hardCounty estimate
Manson685.040.1Very hardCounty estimate
Prairie City365.021.4Very hardCounty estimate
Mediapolis349.520.4Very hardCounty estimate
Moville405.023.7Very hardCounty estimate
Remsen455.026.6Very hardCounty estimate
Pleasantville266.015.6Very hardCounty estimate
Reinbeck360.021.1Very hardCounty estimate
Granger296.017.3Very hardCounty estimate
Woodbine560.032.8Very hardCounty estimate
Hartley440.025.7Very hardCounty estimate
Guthrie Center179.010.5HardUtility-reported
Traer290.017.0Very hardCounty estimate
Corning240.014.0Very hardCounty estimate
Akron455.026.6Very hardCounty estimate
Urbana273.016.0Very hardCounty estimate
Nashua231.013.5Very hardCounty estimate
Walcott196.011.5Very hardCounty estimate
Slater296.017.3Very hardCounty estimate
Oakland385.022.5Very hardCounty estimate
Wellman314.518.4Very hardCounty estimate
Avoca385.022.5Very hardCounty estimate
Bedford150.08.8HardCounty estimate
Holstein410.024.0Very hardCounty estimate
Van Meter283.016.6Very hardCounty estimate
Monona326.019.1Very hardCounty estimate
Earlham283.016.6Very hardCounty estimate
Palo266.015.6Very hardCounty estimate
Logan560.032.8Very hardCounty estimate
Kingsley455.026.6Very hardCounty estimate
Sanborn440.025.7Very hardCounty estimate
Nora Springs290.517.0Very hardCounty estimate
Roland310.018.1Very hardCounty estimate
Lone Tree337.019.7Very hardCounty estimate
Lenox150.08.8HardCounty estimate
New Sharon297.517.4Very hardCounty estimate
Dike360.021.1Very hardCounty estimate
Coon Rapids277.016.2Very hardCounty estimate
Oxford337.019.7Very hardCounty estimate
Dysart273.016.0Very hardCounty estimate
Shell Rock254.014.8Very hardCounty estimate
Central City266.015.6Very hardCounty estimate
Laurens800.046.8Very hardCounty estimate
Fayette350.020.5Very hardCounty estimate
Clarksville254.014.8Very hardCounty estimate
Alton483.028.3Very hardCounty estimate
Middle Amana330.019.3Very hardCounty estimate
Dunlap560.032.8Very hardCounty estimate
Jewell339.019.8Very hardCounty estimate
Gilbert310.018.1Very hardCounty estimate
Elkader237.013.9Very hardCounty estimate
Tripoli207.512.1Very hardCounty estimate
Buffalo196.011.5Very hardCounty estimate
Lake Park295.517.3Very hardCounty estimate
Mapleton295.817.3Very hardCounty estimate
Springville266.015.6Very hardCounty estimate
St. Ansgar286.016.7Very hardCounty estimate
St. Ansgar286.016.7Very hardCounty estimate
Strawberry Point237.013.9Very hardCounty estimate
Paullina440.025.7Very hardCounty estimate
Glidden325.019.0Very hardCounty estimate
Villisca260.015.2Very hardCounty estimate
Sheffield305.017.8Very hardCounty estimate
Aplington254.014.8Very hardCounty estimate
Calmar340.019.9Very hardCounty estimate
Lake View420.024.6Very hardCounty estimate
Arnolds Park295.517.3Very hardCounty estimate
Panora277.016.2Very hardCounty estimate
George483.528.3Very hardCounty estimate
Rockwell306.017.9Very hardCounty estimate
Sidney280.616.4Very hardCounty estimate
Brighton315.018.4Very hardCounty estimate
North English330.019.3Very hardCounty estimate
Riverside314.518.4Very hardCounty estimate
Sloan405.023.7Very hardCounty estimate
Clarence450.026.3Very hardCounty estimate
Janesville207.512.1Very hardCounty estimate
Winfield432.025.3Very hardCounty estimate
Treynor385.022.5Very hardCounty estimate
Mechanicsville450.026.3Very hardCounty estimate
Griswold200.011.7Very hardCounty estimate
Tabor280.616.4Very hardCounty estimate
Baxter365.021.4Very hardCounty estimate
Fredericksburg231.013.5Very hardCounty estimate
Eddyville425.024.9Very hardCounty estimate
Aurelia585.034.2Very hardCounty estimate
Lawton405.023.7Very hardCounty estimate
Hinton455.026.6Very hardCounty estimate
Epworth195.011.4Very hardCounty estimate
Danville349.520.4Very hardCounty estimate
Eldon425.024.9Very hardCounty estimate
West Point210.012.3Very hardCounty estimate
Neola385.022.5Very hardCounty estimate
Newell660.038.6Very hardCounty estimate
Le Grand360.021.1Very hardCounty estimate
Graettinger406.023.7Very hardCounty estimate
Donnellson210.012.3Very hardCounty estimate
Sully365.021.4Very hardCounty estimate
Schleswig400.023.4Very hardCounty estimate
Cambridge310.018.1Very hardCounty estimate
Gilbertville263.515.4Very hardCounty estimate
Milo300.017.5Very hardCounty estimate
Manilla400.023.4Very hardCounty estimate
Okoboji295.517.3Very hardCounty estimate
Whiting295.817.3Very hardCounty estimate
Montrose210.012.3Very hardCounty estimate
Redfield302.017.7Very hardCounty estimate
Schaller420.024.6Very hardCounty estimate
Ruthven406.023.7Very hardCounty estimate
Hospers483.028.3Very hardCounty estimate
Merrill455.026.6Very hardCounty estimate
Ventura340.019.9Very hardUtility-reported
Boyden483.028.3Very hardCounty estimate
Fontanelle220.012.9Very hardCounty estimate
Dexter283.016.6Very hardCounty estimate
Moravia118.56.9Moderately hardCounty estimate
Stanwood450.026.3Very hardCounty estimate
Goldfield360.021.1Very hardCounty estimate
Kellogg365.021.4Very hardCounty estimate
Early420.024.6Very hardCounty estimate
Farmington210.012.3Very hardCounty estimate
Everly345.020.2Very hardCounty estimate
Badger440.025.7Very hardCounty estimate
Gilman360.021.1Very hardCounty estimate
Richland450.026.3Very hardCounty estimate
Charter Oak400.023.4Very hardCounty estimate
Arcadia325.019.0Very hardCounty estimate
Ellsworth339.019.8Very hardCounty estimate
Elma255.014.9Very hardCounty estimate
Breda325.019.0Very hardCounty estimate
Whittemore366.021.4Very hardCounty estimate
Dow City400.023.4Very hardCounty estimate
Stacyville286.016.7Very hardCounty estimate
Royal345.020.2Very hardCounty estimate
Klemme400.023.4Very hardCounty estimate
Batavia315.018.4Very hardCounty estimate
Martensdale300.017.5Very hardCounty estimate
Lawler231.013.5Very hardCounty estimate
Salem432.025.3Very hardCounty estimate
Vail400.023.4Very hardCounty estimate
Plainfield207.512.1Very hardCounty estimate
Bussey266.015.6Very hardCounty estimate
Casey277.016.2Very hardCounty estimate
Duncombe440.025.7Very hardCounty estimate
Orient220.012.9Very hardCounty estimate
Birmingham265.515.5Very hardCounty estimate
Ringsted545.031.9Very hardCounty estimate
Middletown349.520.4Very hardCounty estimate
Rudd290.517.0Very hardCounty estimate
Washington314.518.4Very hardCounty estimate
Templeton325.019.0Very hardCounty estimate
Bennett450.026.3Very hardCounty estimate
Diagonal146.08.5HardCounty estimate
Minburn302.017.7Very hardCounty estimate
Mystic118.56.9Moderately hardCounty estimate
Irwin230.013.4Very hardCounty estimate
Floyd290.517.0Very hardCounty estimate
Granville440.025.7Very hardCounty estimate
Kelley310.018.1Very hardCounty estimate
Amana330.019.3Very hardCounty estimate
Atalissa240.014.0Very hardCounty estimate
Salix405.023.7Very hardCounty estimate
Bronson405.023.7Very hardCounty estimate
Manly320.018.7Very hardCounty estimate
Westside400.023.4Very hardCounty estimate
Blakesburg425.024.9Very hardCounty estimate
Libertyville315.018.4Very hardCounty estimate
Stockport265.515.5Very hardCounty estimate
Fenton366.021.4Very hardCounty estimate
Malcom375.021.9Very hardCounty estimate
Protivin255.014.9Very hardCounty estimate
Kiron400.023.4Very hardCounty estimate
Yale277.016.2Very hardCounty estimate
Auburn420.024.6Very hardCounty estimate
Mallard406.023.7Very hardCounty estimate
Hornick405.023.7Very hardCounty estimate
Crystal Lake400.023.4Very hardCounty estimate
Leland380.022.2Very hardCounty estimate
Deloit400.023.4Very hardCounty estimate
Pisgah560.032.8Very hardCounty estimate
Defiance230.013.4Very hardCounty estimate
Lockridge315.018.4Very hardCounty estimate
Halbur325.019.0Very hardCounty estimate
Harvey266.015.6Very hardCounty estimate
Renwick410.024.0Very hardCounty estimate
Blencoe295.817.3Very hardCounty estimate
Fostoria345.020.2Very hardCounty estimate
Ladora330.019.3Very hardCounty estimate
Moorhead295.817.3Very hardCounty estimate
Spillville340.019.9Very hardCounty estimate
Waucoma350.020.5Very hardCounty estimate
Alta Vista231.013.5Very hardCounty estimate
Ionia231.013.5Very hardCounty estimate
Dedham325.019.0Very hardCounty estimate
Meservey400.023.4Very hardCounty estimate
Bettendorf121.07.1HardUtility-reported
Panorama Park121.07.1HardUtility-reported
Riverdale121.07.1HardUtility-reported
Grafton320.018.7Very hardCounty estimate
Clutier290.017.0Very hardCounty estimate
Blue Grass196.011.5Very hardCounty estimate
Rembrandt660.038.6Very hardCounty estimate
Montour290.017.0Very hardCounty estimate
Jamaica277.016.2Very hardCounty estimate
Sac City420.024.6Very hardCounty estimate
Olds432.025.3Very hardCounty estimate
Hartford300.017.5Very hardCounty estimate
Smithland405.023.7Very hardCounty estimate
Thor410.024.0Very hardCounty estimate
Calamus185.010.8Very hardCounty estimate
Stockton196.011.5Very hardCounty estimate
Jesup263.515.4Very hardCounty estimate
Ottumwa425.024.9Very hardCounty estimate
Lidderdale325.019.0Very hardCounty estimate
Little Sioux560.032.8Very hardCounty estimate
Wallingford545.031.9Very hardCounty estimate
Pilot Mound314.018.4Very hardCounty estimate
Randall339.019.8Very hardCounty estimate
Dickens345.020.2Very hardCounty estimate
Woolstock360.021.1Very hardCounty estimate
Goodell400.023.4Very hardCounty estimate
Millersburg330.019.3Very hardCounty estimate
Vincent440.025.7Very hardCounty estimate
Pacific Junction470.027.5Very hardCounty estimate
Fort Dodge440.025.7Very hardCounty estimate
Lanesboro325.019.0Very hardCounty estimate
Dawson302.017.7Very hardCounty estimate
Castana295.817.3Very hardCounty estimate
State Center360.021.1Very hardCounty estimate
Sibley358.020.9Very hardCounty estimate
Peosta195.011.4Very hardCounty estimate
Matlock483.028.3Very hardCounty estimate
Rock Rapids483.528.3Very hardCounty estimate
Truesdale660.038.6Very hardCounty estimate
Orchard286.016.7Very hardCounty estimate
Colwell290.517.0Very hardCounty estimate
Plover800.046.8Very hardCounty estimate
Le Claire196.011.5Very hardCounty estimate
West Bend406.023.7Very hardCounty estimate
Kalona337.019.7Very hardCounty estimate
Greene254.014.8Very hardCounty estimate
Lansing326.019.1Very hardCounty estimate
Odebolt420.024.6Very hardCounty 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.

Source: USGS Water Science School - Hardness of Water

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.