Iowa Water Hardness by County

Water in Iowa has a median hardness of 310 mg/L as CaCO₃ — "very hard" on the USGS scale — based on 22,531 measurements at 5,050 monitoring stations. Osceola County has the state's hardest measured water (1300 mg/L); Taylor County the softest (140). Rank: #2 of the 50 states and D.C.

Iowa water hardness map — what the numbers mean. Data verified 2026-07-22.

Every one of Iowa's 91 measured counties tests hard or harder: 90 rank very hard and 1 rank hard. The hardest are Osceola County (1300 mg/L), Emmet County (760), and Pocahontas County (713.5). Even Taylor County, the softest measured area in the state, reads 140 mg/L — still hard on the USGS scale.

About 100% of Iowa's roughly 3.1 million residents in counties with gate-passing hardness data live where tap water is hard or worse.

Statewide, Iowa's median works out to 18.1 grains per gallon and ranks #2 of the 50 states and D.C. Across 22,531 measurements at 5,050 stations — 5,016 of them since 2000 — the middle 80% of readings fall between 170 and 580 mg/L. The public record runs from 1900 to 2023.

See where Iowa sits nationally on the national map, or what its number means on the hardness scale.

Download the Iowa water hardness map (PNG) — Water hardness by county in Iowa: 91 counties mapped from USGS/EPA data, statewide median 310 mg/L (very hard); darker counties have harder water.

By county

Water hardness by county

The table lists all 91 measured Iowa counties, hardest first. Their medians span 1300 mg/L in Osceola County to 140 in Taylor County — a 9.3× range. 8 more Iowa counties lack gate-passing data.

County water hardness, hardest first — median mg/L as CaCO₃.
CountyMedianBandResultsSitesNewest
Osceola County1300Very hard75302022
Emmet County760Very hard107302018
Pocahontas County713.5Very hard80362002
Palo Alto County695Very hard88302014
Buena Vista County580Very hard207652013
Calhoun County580Very hard100302014
Cherokee County520Very hard169582006
Clay County515Very hard110472006
Sac County490Very hard186702006
Sioux County490Very hard489912014
O'Brien County470Very hard193622013
Webster County470Very hard332972014
Keokuk County460Very hard122482017
Poweshiek County460Very hard110302017
Crawford County440Very hard247752006
Kossuth County440Very hard177522017
Lyon County440Very hard449562022
Monona County430Very hard215472020
Woodbury County430Very hard331962006
Plymouth County426.7Very hard511592006
Ida County420Very hard154402006
Greene County410Very hard143452006
Harrison County410Very hard216402006
Shelby County410Very hard109422006
Humboldt County400Very hard151522005
Washington County400Very hard199852017
Henry County390Very hard179482014
Audubon County380Very hard92282006
Marshall County380Very hard160652017
Hancock County370Very hard131222017
Winnebago County367Very hard68152014
Story County365Very hard212522013
Boone County360Very hard157222013
Carroll County360Very hard2681062006
Grundy County360Very hard152562017
Hamilton County360Very hard525822018
Jasper County360Very hard122502011
Wright County360Very hard213352006
Hardin County352Very hard7441152023
Dallas County350Very hard253582006
Franklin County350Very hard115242017
Mills County350Very hard94282006
Tama County345Very hard439912017
Benton County340Very hard226592017
Cerro Gordo County340Very hard202712017
Mahaska County340Very hard121572013
Cedar County320Very hard134402006
Fayette County320Very hard160522017
Iowa County320Very hard5141312017
Worth County320Very hard69142017
Allamakee County312Very hard120312017
Jackson County310Very hard160382013
Jones County310Very hard132342017
Winneshiek County305.5Very hard110252013
Polk County303.5Very hard694662017
Clayton County302.5Very hard338712014
Guthrie County300Very hard175502013
Pottawattamie County296.5Very hard172492014
Jefferson County290Very hard90412017
Van Buren County289Very hard345392023
Adams County280Very hard38102006
Buchanan County280Very hard136312017
Marion County280Very hard5001092014
Mitchell County280Very hard200122020
Fremont County274.7Very hard189342017
Howard County270Very hard105172006
Johnson County270Very hard3801092017
Wapello County270Very hard266452014
Black Hawk County262Very hard371842017
Delaware County260Very hard130362014
Dubuque County260Very hard287462022
Linn County260Very hard1,7972632023
Warren County260Very hard177712006
Floyd County255Very hard204382017
Chickasaw County250Very hard55172017
Lucas County250Very hard156742006
Bremer County240Very hard223432017
Butler County240Very hard156352017
Page County240Very hard60272006
Louisa County238Very hard604882023
Des Moines County232Very hard346702017
Montgomery County230Very hard76272013
Dickinson County220Very hard131242004
Cass County200Very hard81322006
Lee County200Very hard373782011
Madison County200Very hard70182004
Scott County200Very hard221242022
Clinton County190Very hard707592023
Adair County180Very hard132152006
Muscatine County180Very hard3541352017
Taylor County140Hard97162006

ZIP codes

ZIP codes in Iowa

The ZIP codes below are grouped by the Iowa county they fall in. Each ZIP takes its county's measured median — shown in the group header — so this is a ZIP-to-county guide, not a separate reading for every ZIP. To check the water system serving a specific address, use the lookup.

Osceola County · 1300 mg/L · Very hard

5123251249513455135051354

Emmet County · 760 mg/L · Very hard

5051450531505785133451365

Pocahontas County · 713.5 mg/L · Very hard

505405054150546505545057150573505745058150593

Palo Alto County · 695 mg/L · Very hard

5051550527505285053650562505975134251358

Buena Vista County · 580 mg/L · Very hard

5051050565505685057650585505885059251002

Calhoun County · 580 mg/L · Very hard

50538505515055250561505635057550579505865144951453

Cherokee County · 520 mg/L · Very hard

5100551012510145102951035510375104951061

Clay County · 515 mg/L · Very hard

51033510475130151333513385134051341513435135751366

Sac County · 490 mg/L · Very hard

5053550567505835105351433514505145851466

Sioux County · 490 mg/L · Very hard

51003510115102351027510365104151201512345123851239512445124751250

O'Brien County · 470 mg/L · Very hard

5100951022510465105851231512455124851346

Webster County · 470 mg/L · Very hard

5050150516505185052150523505245053050532505435054450557505665056950594

Keokuk County · 460 mg/L · Very hard

5010450136502555026852231523355235552550525625256352568525765258552591

Poweshiek County · 460 mg/L · Very hard

5011250157501715024252211522215222252232

Crawford County · 440 mg/L · Very hard

514325143951441514425144851454514605146151465514675152051528

Kossuth County · 440 mg/L · Very hard

504515048050483505115051750522505395055650559505605059050598

Lyon County · 440 mg/L · Very hard

5123051235512375124051241512425124351246

Monona County · 430 mg/L · Very hard

510105103451040510515106051063515235155851572

Woodbury County · 430 mg/L · Very hard

5100451007510155101651019510265103051039510445104851052510545105551056511015110351104511055110651111

Plymouth County · 426.7 mg/L · Very hard

5100151008510245102851031510385104551050510625110851109

Ida County · 420 mg/L · Very hard

510065101851020510255143151445

Greene County · 410 mg/L · Very hard

50050500645010750129502175023551462

Harrison County · 410 mg/L · Very hard

51529515455154651550515555155651557515635156451579

Shelby County · 410 mg/L · Very hard

51446514475152751530515315153751562515655157051578

Humboldt County · 400 mg/L · Very hard

50519505205052950545505485055850570505775058250591

Washington County · 400 mg/L · Very hard

52201522485232752353523565235952621

Henry County · 390 mg/L · Very hard

5264152644526455264752649526525265452659

Audubon County · 380 mg/L · Very hard

500255004250076501105011751543

Marshall County · 380 mg/L · Very hard

50005500515007850106501205014150142501485015850162502345023950247

Hancock County · 370 mg/L · Very hard

504235043050432504385043950447504495045750484

Winnebago County · 367 mg/L · Very hard

50424504365045050453504655047350478

Story County · 365 mg/L · Very hard

500105001250013500145004650055500565010550124501345015450201502365024850278

Boone County · 360 mg/L · Very hard

5003150036500405015250156502125022350276

Carroll County · 360 mg/L · Very hard

5140151430514365144051443514445145151452514555145951463

Grundy County · 360 mg/L · Very hard

506095062150624506385064250657506695067350680

Hamilton County · 360 mg/L · Very hard

500345007550130501325023150246502495027150595

Jasper County · 360 mg/L · Very hard

500285005450127501355013750153501685017050208502285023250251

Wright County · 360 mg/L · Very hard

5007150101504215047050525505335054250599

Hardin County · 352 mg/L · Very hard

50006501025012250126502065023050258502695062750672

Dallas County · 350 mg/L · Very hard

50003500385003950063500665006950146501675022050233502635026650323

Franklin County · 350 mg/L · Very hard

5004150227504205042750431504415045250475506015060550633

Mills County · 350 mg/L · Very hard

51534515405154151551515545156151571

Tama County · 345 mg/L · Very hard

501735061250632506355065250675522155221752225523395234252348

Benton County · 340 mg/L · Very hard

52206522085220952224522295224952257523135231552318523325234552346523495235152354

Cerro Gordo County · 340 mg/L · Very hard

504015042850433504645046750469504775047950482

Mahaska County · 340 mg/L · Very hard

500275014350207525345254352561525775258652595

Cedar County · 320 mg/L · Very hard

522165225352255523065233752358527215277252778

Fayette County · 320 mg/L · Very hard

506065065550662506645067150681521355214152142521475216452166521695217152175

Iowa County · 320 mg/L · Very hard

522035222052236522515230152307523085231652325523345234752361

Worth County · 320 mg/L · Very hard

50434504405044450446504485045650459

Allamakee County · 312 mg/L · Very hard

5214052146521515215952160521625217052172

Jackson County · 310 mg/L · Very hard

52030520315205452060520645206952070520715207452075520795220752309

Jones County · 310 mg/L · Very hard

5203352205522125225252305523105231252320523215232352362

Winneshiek County · 305.5 mg/L · Very hard

52101521325213352144521615216552168

Polk County · 303.5 mg/L · Very hard

500075000950021500235003250035500735010950111501315016150169502265023750243502445026550309503105031150312503135031450315503165031750319503205032150322503245032550327

Clayton County · 302.5 mg/L · Very hard

520355204252043520445204752048520495205252066520725207652077521565215752158

Guthrie County · 300 mg/L · Very hard

50002500265002950048500585011550128501645021650277

Pottawattamie County · 296.5 mg/L · Very hard

51501515035151051521515255152651536515425154851549515535155951560515755157651577

Jefferson County · 290 mg/L · Very hard

52533525405255652557525675258052635

Van Buren County · 289 mg/L · Very hard

525355254252551525655257052573525885262052651

Adams County · 280 mg/L · Very hard

50839508415085750859

Buchanan County · 280 mg/L · Very hard

50607506295064150644506505065450682522105232652329

Marion County · 280 mg/L · Very hard

500445005750062501165011950138501635021450219502255025250256

Mitchell County · 280 mg/L · Very hard

50426504545045550460504615047250476

Fremont County · 274.7 mg/L · Very hard

516395164051645516485164951650516525165351654

Howard County · 270 mg/L · Very hard

504665062852134521365215552163

Johnson County · 270 mg/L · Very hard

52235522405224152242522455224652247523175232252333523385234052755

Wapello County · 270 mg/L · Very hard

52501525305253652548525535255452566

Black Hawk County · 262 mg/L · Very hard

506135062350626506345064350648506515066750701507025070350707

Delaware County · 260 mg/L · Very hard

520365203852040520415205052057522235223752330

Dubuque County · 260 mg/L · Very hard

52001520025200352032520395204552046520535205652065520685207352078

Linn County · 260 mg/L · Very hard

52202522135221452218522195222752228522335230252314523245232852336523415234452352524015240252403524045240552411

Warren County · 260 mg/L · Very hard

500015004750118501255013950145501605016650210502115022950241

Floyd County · 255 mg/L · Very hard

50435504585046850471506165062050653

Chickasaw County · 250 mg/L · Very hard

506035063050645506585065952154

Lucas County · 250 mg/L · Very hard

5004950068501515023850272

Bremer County · 240 mg/L · Very hard

5062250631506475066650668506745067650677

Butler County · 240 mg/L · Very hard

5060250604506085061150619506255063650649506605066550670

Page County · 240 mg/L · Very hard

51601516305163151632516365163751638516475165151656

Louisa County · 238 mg/L · Very hard

526405265352737527385273952752

Des Moines County · 232 mg/L · Very hard

5260152623526375263852646526505265552660

Montgomery County · 230 mg/L · Very hard

508475086451532515335156651573

Dickinson County · 220 mg/L · Very hard

51331513475135151355513605136351364

Cass County · 200 mg/L · Very hard

5002050022502745084350853515355154451552

Lee County · 200 mg/L · Very hard

526195262452625526265262752630526315263252639526565265752658

Madison County · 200 mg/L · Very hard

500335006150070500725014950155502185022250240502575026150273

Scott County · 200 mg/L · Very hard

5272252726527285274552746527485275352756527585276552767527685276952773528015280252803528045280652807

Clinton County · 190 mg/L · Very hard

520375225452701527275272952730527315273252742527505275152757527715277452777

Adair County · 180 mg/L · Very hard

5025050837508465084950858

Muscatine County · 180 mg/L · Very hard

527205274752749527545275952760527615276652776

Taylor County · 140 mg/L · Hard

50833508365084050848508515086251646

646 ZIP codes are not served by a mapped community water system — most are private-well areas. See well water hardness.

Check any ZIP's utility and hardness →

Source

Groundwater vs surface water

Iowa's groundwater measures harder than its surface water — 353 mg/L across 14,522 samples versus 248 across 7,985, about 1.4× harder. Wells draw from groundwater, so well owners in Iowa tend to see the harder number — 353 mg/L, very hard. Groundwater readings there run 220 to 710 mg/L across the middle 80% of samples. The comparison draws on 4,655 groundwater and 393 surface-water monitoring sites; 54 readings above 2,000 mg/L were logged but held out of the medians as outliers.

Groundwater (wells)

353 mg/L as CaCO₃ · 14,522 results at 4,655 stations.

Surface water (rivers, lakes)

248 mg/L as CaCO₃ · 7,985 results at 393 stations.

Groundwater measures about 1.4× harder than surface water here.

Chemistry

Water chemistry in Iowa

Beyond the hardness number, Iowa's water carries a fuller chemical signature — here is how its measured parameters compare to national benchmarks.

TDS

328 mg/L · n=3,795

328 mg/L — about 1.5× the national county median of 226, consistent with hard, mineral-rich water.

pH

8.2 pH · n=3,060

pH 8.2 — within the EPA secondary range of 6.5–8.5, on the alkaline side.

Alkalinity

204 mg/L as CaCO3 · n=7,562

204 mg/L — substantial buffering capacity, which resists pH swings.

Calcium : Magnesium

67.6 : 22 mg/L3.07 : 1 · n=5,013

Calcium is about 65% of Iowa's hardness (67.6 mg/L Ca to 22 mg/L Mg), a little more magnesium-rich than the national ~68% calcium share.

Parameter medians may include a small share of quality-control samples; the hardness lane is fully QC-filtered.

Aquifers

Major aquifers under Iowa

3 aquifer systems supply much of Iowa's measured groundwater.

  • Lower Cretaceous aquifersmedian 480 mg/L across 521 samples at 164 sites: very hard.
  • Mississippian aquifersmedian 400 mg/L across 181 samples at 43 sites: very hard.
  • Cambrian-Ordovician aquifer systemmedian 340 mg/L across 1,020 samples at 191 sites: very hard.

Together these systems account for 1,722 measured samples at 398 sites. Aquifer medians pool samples across a whole system and can mask local variation — see the national aquifer map for how these compare across states.

Trend

Hardness over time

1900s2020s400

Iowa's decade median moved from 206 mg/L in the 1900s to 262 in the 2020s. Over the series, the decade median peaked at 400 mg/L in the 1930s and bottomed at 206 in the 1900s. Decade medians reflect where and what agencies sampled in each era, not just changes in the water itself.

Scale

Where Iowa sits on the scale

On the USGS scale, Iowa's 310 mg/L is very hard — 18.1 grains per gallon, well above the 180 mg/L very-hard cutoff — among the hardest water measured in the US.

SoftModerately hardHardVery hard60 · 3.5 gpg120 · 7.0 gpg180 · 10.5 gpg310 mg/L — Very hard
Harder than 85% of the 2,977 measured county medians.

At 310 mg/L (18.1 gpg), water-softener owners in Iowa typically set their unit to this hardness — settings calculator.

Questions

Frequently asked questions

Is Iowa's water hard?
Iowa's median hardness is 310 mg/L as CaCO₃, "very hard" on the USGS scale and 2.21× the national county median of 140 mg/L. About 100% of residents in measured counties have hard-or-worse water.
Which county in Iowa has the hardest water?
Osceola County, with a median of 1300 mg/L as CaCO₃ across 75 measurements. Even the softest, Taylor County at 140 mg/L, is still "hard" on the USGS scale.
Is well water harder than city water in Iowa?
Groundwater measures harder here — about 1.4× the surface water — so wells tend to run harder (groundwater 353 vs surface water 248 mg/L).
How do I find my exact hardness in Iowa?
Search your ZIP on the lookup tool, read your utility's Consumer Confidence Report, or test at home with a kit.
Is Iowa's water harder than the national average?
Yes. Iowa's median of 310 mg/L is 2.21× the national county median of 140 mg/L, and Iowa ranks #2 of the 50 states and D.C.

Compare

States with similar hardness

Two states measure closest to Iowa's 310 mg/L: North Dakota at 310 mg/L and Arizona at 300 mg/L. Iowa measures harder than 98% of states. Browse the full ranking on the statistics page.

More: hardness scale · check your address · national statistics · the national map.

By . Source: USGS/EPA Water Quality Portal — 22,531 Iowa measurements. Data last verified . Methodology.

Cite this page:Iowa Water Hardness by County.” Hard Water Map. Retrieved 2026-07-22, https://hardwatermap.com/water-hardness/iowa/