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 each mostly falls within (by land area). Each ZIP takes that 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.

Key: a † after a ZIP means it has no mapped community water system — usually a private-well area. Plain ZIPs are served by a mapped community water system.

Osceola County · 1300 mg/L · Very hard

51232†51249†51345†51350†51354

Emmet County · 760 mg/L · Very hard

50514†50531†50578†51334†51365†

Pocahontas County · 713.5 mg/L · Very hard

50540†50541†50546†50554†50571†5057350574†50581†50593

Palo Alto County · 695 mg/L · Very hard

50515†50527†50528†5053650562†50597†51342†51358

Buena Vista County · 580 mg/L · Very hard

50510†50565†50568†50576†50585†50588†5059251002†

Calhoun County · 580 mg/L · Very hard

5053850551†50552†50561†5056350575†5057950586†5144951453†

Cherokee County · 520 mg/L · Very hard

51005†5101251014†51029†51035†51037†5104951061†

Clay County · 515 mg/L · Very hard

51033†51047†5130151333†51338†5134051341†51343†51357†51366†

Sac County · 490 mg/L · Very hard

50535†50567†5058351053†51433†51450†51458†51466†

Sioux County · 490 mg/L · Very hard

51003†51011†51023†51027†51036†51041†5120151234†51238†51239†5124451247†51250†

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

5100951022†51046†51058†51231†51245†51248†51346†

Webster County · 470 mg/L · Very hard

5050150516†50518†505215052350524†505305053250543505445055750566†5056950594†

Keokuk County · 460 mg/L · Very hard

50104†50136†50255†5026852231†52335†52355†52550†52562†52563†52568†52576†5258552591†

Poweshiek County · 460 mg/L · Very hard

5011250157†5017150242†52211†52221†52222†52232†

Crawford County · 440 mg/L · Very hard

51432†51439†51441†5144251448†51454†51460†51461†51465†5146751520†51528†

Kossuth County · 440 mg/L · Very hard

5045150480†50483†5051150517†50522†50539†50556†50559†50560†50590†50598†

Lyon County · 440 mg/L · Very hard

51230†51235†51237†51240†51241†51242†51243†51246

Monona County · 430 mg/L · Very hard

51010†5103451040†51051†51060†51063†51523†51558†51572†

Woodbury County · 430 mg/L · Very hard

51004†51007†51015†51016†51019†51026†51030†51039†51044†51048†51052†51054†51055†51056†5110151103†51104511055110651111†

Plymouth County · 426.7 mg/L · Very hard

51001†5100851024†51028†51031†51038†5104551050†51062†51108†51109†

Ida County · 420 mg/L · Very hard

51006†51018†51020†51025†51431†51445†

Greene County · 410 mg/L · Very hard

50050†500645010750129502175023551462†

Harrison County · 410 mg/L · Very hard

51529†51545†51546†51550†51555†51556†51557†51563†51564†51579†

Shelby County · 410 mg/L · Very hard

51446†51447†51527†51530†51531†51537†51562†51565†51570†51578†

Humboldt County · 400 mg/L · Very hard

50519†50520†5052950545†5054850558†50570†50577†50582†50591†

Washington County · 400 mg/L · Very hard

52201†52248†523275235352356†52359†52621†

Henry County · 390 mg/L · Very hard

5264152644526455264752649526525265452659

Audubon County · 380 mg/L · Very hard

50025†50042†50076†50110†50117†51543†

Marshall County · 380 mg/L · Very hard

50005†50051†50078†50106†50120†50141†5014250148†5015850162†50234†50239†50247

Hancock County · 370 mg/L · Very hard

50423†50430†50432†50438†50439†5044750449†50457†50484†

Winnebago County · 367 mg/L · Very hard

50424†50436†5045050453†50465†50473†50478†

Story County · 365 mg/L · Very hard

5001050012500135001450046†50055†50056†50105501245013450154†50201†50236†50248†50278

Boone County · 360 mg/L · Very hard

5003150036500405015250156502125022350276

Carroll County · 360 mg/L · Very hard

5140151430†51436†51440†51443†51444†5145151452†5145551459†51463†

Grundy County · 360 mg/L · Very hard

50609†50621†50624†50638†50642†50657†50669†5067350680†

Hamilton County · 360 mg/L · Very hard

50034†50075†5013050132†5023150246502495027150595

Jasper County · 360 mg/L · Very hard

50028†50054†50127†50135†50137†50153†50168†50170†5020850228†50232†50251†

Wright County · 360 mg/L · Very hard

50071†50101†50421†50470†5052550533†50542†50599†

Hardin County · 352 mg/L · Very hard

50006†50102†5012250126†50206†50230†50258†50269†5062750672†

Dallas County · 350 mg/L · Very hard

500035003850039500635006650069501465016750220†50233502635026650323

Franklin County · 350 mg/L · Very hard

50041†50227†50420†50427†50431†5044150452†50475†50601†50605†50633

Mills County · 350 mg/L · Very hard

515345154051541†51551†51554†51561†51571†

Tama County · 345 mg/L · Very hard

50173†50612†50632†50635†50652†50675†52215†52217†52225†52339†52342†52348†

Benton County · 340 mg/L · Very hard

52206†52208†52209†52224†52229†52249†52257†52313†52315†52318†52332†52345†52346523495235152354†

Cerro Gordo County · 340 mg/L · Very hard

504015042850433†50464†50467†50469†50477†50479†50482

Mahaska County · 340 mg/L · Very hard

50027†50143†50207†52534†52543†52561†5257752586†52595

Cedar County · 320 mg/L · Very hard

52216†52253†52255†52306†52337†52358†52721†52772†52778†

Fayette County · 320 mg/L · Very hard

50606†50655†50662†50664†50671†50681†52135†52141†52142†52147†52164†5216652169†52171†52175†

Iowa County · 320 mg/L · Very hard

52203†52220†52236†52251†52301†523075230852316†52325†52334†52347†52361†

Worth County · 320 mg/L · Very hard

50434†5044050444†50446†50448†50456†50459†

Allamakee County · 312 mg/L · Very hard

52140†52146†52151†52159†52160†52162†52170†52172

Jackson County · 310 mg/L · Very hard

5203052031†52054†52060†52064†52069†52070†52071†52074†5207552079†52207†52309†

Jones County · 310 mg/L · Very hard

52033†52205†52212†52252†52305†52310†523125232052321†5232352362

Winneshiek County · 305.5 mg/L · Very hard

52101†52132†52133†52144†52161†52165†52168

Polk County · 303.5 mg/L · Very hard

500075000950021†50023500325003550073501095011150131†50161†50169502265023750243502445026550309503105031150312503135031450315503165031750319503205032150322503245032550327

Clayton County · 302.5 mg/L · Very hard

52035†52042†52043†52044†52047†52048†52049†52052†52066†52072†52076†52077†52156†52157†52158†

Guthrie County · 300 mg/L · Very hard

50002†50026†50029†5004850058†50115†501285016450216†50277

Pottawattamie County · 296.5 mg/L · Very hard

5150151503†51510515215152551526†51536†51542†51548†51549†51553†51559†5156051575†51576†51577†

Jefferson County · 290 mg/L · Very hard

5253352540†52556†525575256752580†52635†

Van Buren County · 289 mg/L · Very hard

525355254252551525655257052573525885262052651

Adams County · 280 mg/L · Very hard

50839†50841†50857†50859†

Buchanan County · 280 mg/L · Very hard

50607†50629†50641†5064450650†50654†50682†52210†52326†52329†

Marion County · 280 mg/L · Very hard

500445005750062501165011950138501635021450219†502255025250256

Mitchell County · 280 mg/L · Very hard

50426†50454†50455†50460†50461†50472†50476†

Fremont County · 274.7 mg/L · Very hard

51639†51640†51645†51648†51649†51650†51652†51653†51654†

Howard County · 270 mg/L · Very hard

50466†50628†52134†5213652155†52163†

Johnson County · 270 mg/L · Very hard

52235†522405224152242522455224652247†52317†52322†5233352338†5234052755

Wapello County · 270 mg/L · Very hard

52501525305253652548†5255352554†52566†

Black Hawk County · 262 mg/L · Very hard

5061350623†506265063450643†50648†50651†50667†50701†5070250703†50707

Delaware County · 260 mg/L · Very hard

52036†52038†52040†52041†52050†5205752223†5223752330†

Dubuque County · 260 mg/L · Very hard

52001†52002†52003†52032†52039†52045†5204652053†52056†52065†52068†52073†52078

Linn County · 260 mg/L · Very hard

52202†52213†52214†52218†5221952227†52228†5223352302†52314†52324†5232852336†52341†52344†52352524015240252403524045240552411

Warren County · 260 mg/L · Very hard

5000150047†5011850125†5013950145†5016050166†50210†50211†50229†50241

Floyd County · 255 mg/L · Very hard

50435†50458†50468†50471†50616†5062050653†

Chickasaw County · 250 mg/L · Very hard

50603†50630†50645†5065850659†52154†

Lucas County · 250 mg/L · Very hard

5004950068501515023850272

Bremer County · 240 mg/L · Very hard

5062250631†50647†50666†50668†50674†50676†50677†

Butler County · 240 mg/L · Very hard

50602†50604†50608†50611†50619†50625†5063650649†50660†5066550670†

Page County · 240 mg/L · Very hard

51601†51630†51631†5163251636†51637†51638†51647†5165151656†

Louisa County · 238 mg/L · Very hard

52640†52653†5273752738†52739†52752†

Des Moines County · 232 mg/L · Very hard

52601526235263752638†52646526505265552660

Montgomery County · 230 mg/L · Very hard

50847†50864†51532†51533†5156651573

Dickinson County · 220 mg/L · Very hard

51331†51347†51351†5135551360†51363†51364†

Cass County · 200 mg/L · Very hard

50020†50022†50274†50843†50853†51535†51544†51552†

Lee County · 200 mg/L · Very hard

5261952624526255262652627526305263152632†52639526565265752658

Madison County · 200 mg/L · Very hard

50033†50061†5007050072†50149†50155†50218†50222†50240†50257†50261†50273†

Scott County · 200 mg/L · Very hard

5272252726†5272852745†52746†52748†52753†52756†52758†52765†5276752768†52769†52773†52801528025280352804†52806†52807†

Clinton County · 190 mg/L · Very hard

52037†52254†52701†52727†52729†52730†52731†52732†52742†52750†52751†5275752771†52774†52777†

Adair County · 180 mg/L · Very hard

5025050837†50846†50849†50858†

Muscatine County · 180 mg/L · Very hard

52720†5274752749†52754†52759†52760†5276152766†52776†

Taylor County · 140 mg/L · Hard

50833†50836†50840†50848†50851†50862†51646†

† 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/L ≈ 3.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 aquifers — median 480 mg/L across 521 samples at 164 sites: very hard.
  • Mississippian aquifers — median 400 mg/L across 181 samples at 43 sites: very hard.
  • Cambrian-Ordovician aquifer system — median 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/