Skip to main content
💧 TapWaterData

Water Hardness in Illinois

Across 249 measured cities — with 425 more covered by labeled county-level estimates — Illinois's median tap water hardness is 157.0 mg/L (9.2 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
157.0
mg/L (9.2 gpg), measured cities
Measured Range
14.0-649.0
mg/L across measured cities
Measured Cities
249
utility-reported or computed values
County Estimates
425
63% of covered cities

Illinois Cities by Hardness Category

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

CategoryRangeMeasured citiesShare
Soft0-60 mg/L145.6%
Moderately hard60-120 mg/L4919.7%
Hard120-180 mg/L7228.9%
Very hard>180 mg/L11445.8%

Hardest and Softest Water in Illinois

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

Hardest water in Illinois

  1. East Dubuque 649.0 mg/L (38.0 gpg), very hard
  2. Lake Barrington 573.0 mg/L (33.5 gpg), very hard
  3. North Pekin 567.0 mg/L (33.2 gpg), very hard
  4. Monee 558.0 mg/L (32.6 gpg), very hard
  5. Crete 523.7 mg/L (30.6 gpg), very hard

Softest water in Illinois

  1. West Dundee 14.0 mg/L (0.8 gpg), soft
  2. Wataga 17.7 mg/L (1.0 gpg), soft
  3. Germantown Hills 24.0 mg/L (1.4 gpg), soft
  4. Avon 30.0 mg/L (1.8 gpg), soft
  5. Little York 30.0 mg/L (1.8 gpg), soft

Every Covered City in Illinois

All 674 covered Illinois 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
Chicago138.98.1HardUtility-reported
Elmwood Park229.013.4Very hardCounty estimate
Evergreen Park229.013.4Very hardCounty estimate
Oak Park229.013.4Very hardCounty estimate
Riverdale229.013.4Very hardCounty estimate
Cahokia Heights157.09.2HardUtility-reported
Belleville157.09.2HardUtility-reported
Swansea157.09.2HardUtility-reported
Fairview Heights157.09.2HardUtility-reported
Champaign85.05.0Moderately hardUtility-reported
Naperville120.07.0Moderately hardUtility-reported
Preston Heights247.814.5Very hardUtility-reported
Crystal Lawns244.014.3Very hardUtility-reported
Joliet244.014.3Very hardUtility-reported
Sunnyland244.014.3Very hardUtility-reported
Ridgewood244.014.3Very hardUtility-reported
Rockdale244.014.3Very hardUtility-reported
Shorewood287.016.8Very hardCounty estimate
Rockford329.119.3Very hardUtility-reported
Freeburg157.09.2HardUtility-reported
Smithton157.09.2HardUtility-reported
Urbana84.34.9Moderately hardUtility-reported
Savoy84.34.9Moderately hardUtility-reported
Brooklyn157.09.2HardUtility-reported
East St. Louis157.09.2HardUtility-reported
Fairmont City157.09.2HardUtility-reported
Shiloh157.09.2HardUtility-reported
Washington Park157.09.2HardUtility-reported
Peoria272.515.9Very hardUtility-reported
Kankakee139.58.2HardUtility-reported
Bartonville283.016.6Very hardUtility-reported
Bellevue283.016.6Very hardUtility-reported
Lake Camelot283.016.6Very hardUtility-reported
Rome283.016.6Very hardUtility-reported
West Peoria283.016.6Very hardUtility-reported
Chatham280.016.4Very hardCounty estimate
Bartlett287.016.8Very hardCounty estimate
Elgin111.06.5Moderately hardUtility-reported
Bradley137.58.0HardUtility-reported
Bolingbrook287.016.8Very hardCounty estimate
Waukegan119.07.0Moderately hardUtility-reported
Cicero229.013.4Very hardCounty estimate
Bourbonnais138.08.1HardUtility-reported
Limestone138.08.1HardUtility-reported
Manteno138.08.1HardUtility-reported
Arlington Heights115.06.7Moderately hardUtility-reported
Romeoville303.017.7Very hardUtility-reported
Evanston135.07.9HardUtility-reported
Schaumburg130.37.6HardComputed from Ca+Mg
Rosewood Heights190.011.1Very hardUtility-reported
Woodridge134.27.8HardUtility-reported
Orland Hills147.08.6HardUtility-reported
Skokie132.07.7HardUtility-reported
Elmhurst109.96.4Moderately hardUtility-reported
Des Plaines126.07.4HardUtility-reported
East Alton190.011.1Very hardUtility-reported
Orland Park147.08.6HardUtility-reported
Berwyn111.06.5Moderately hardUtility-reported
Forest Park229.013.4Very hardCounty estimate
Oak Lawn229.013.4Very hardCounty estimate
Tinley Park300.017.5Very hardUtility-reported
Downers Grove131.07.7HardUtility-reported
Normal327.019.1Very hardCounty estimate
Alton190.011.1Very hardUtility-reported
Wheaton124.07.3HardUtility-reported
Hoffman Estates229.013.4Very hardCounty estimate
Lombard287.016.8Very hardCounty estimate
Vernon Hills250.014.6Very hardCounty estimate
Buffalo Grove154.09.0HardUtility-reported
Mundelein250.014.6Very hardCounty estimate
Lemont227.813.3Very hardUtility-reported
Addison287.016.8Very hardCounty estimate
Godfrey276.016.1Very hardCounty estimate
Gurnee250.014.6Very hardCounty estimate
Moline110.06.4Moderately hardUtility-reported
Wheeling131.57.7HardUtility-reported
Glenview229.013.4Very hardCounty estimate
Millstadt157.09.2HardUtility-reported
Melrose Park103.46.0Moderately hardUtility-reported
Mount Prospect112.06.5Moderately hardUtility-reported
Streamwood229.013.4Very hardCounty estimate
North Chicago136.28.0HardUtility-reported
Bloomingdale287.016.8Very hardCounty estimate
Carol Stream287.016.8Very hardCounty estimate
Boulder Hill235.013.7Very hardUtility-reported
Oswego235.013.7Very hardUtility-reported
Danville310.018.1Very hardCounty estimate
Carpentersville67.43.9Moderately hardComputed from Ca+Mg
Hanover Park140.08.2HardUtility-reported
Markham229.013.4Very hardCounty estimate
Calumet City229.013.4Very hardCounty estimate
Pekin361.221.1Very hardUtility-reported
Roscoe387.022.6Very hardUtility-reported
Machesney Park387.022.6Very hardUtility-reported
Darien287.016.8Very hardCounty estimate
Edwardsville87.45.1Moderately hardComputed from Ca+Mg
Bellwood104.06.1Moderately hardUtility-reported
Elk Grove Village141.08.3HardUtility-reported
Franklin Park104.06.1Moderately hardUtility-reported
Libertyville250.014.6Very hardCounty estimate
Glendale Heights287.016.8Very hardCounty estimate
Bensenville104.06.1Moderately hardUtility-reported
Burbank229.013.4Very hardCounty estimate
East Peoria360.721.1Very hardUtility-reported
Silvis211.812.4Very hardUtility-reported
Carbondale36.22.1SoftUtility-reported
Chicago Heights229.013.4Very hardCounty estimate
Algonquin378.022.1Very hardUtility-reported
Cary378.022.1Very hardUtility-reported
Maryville276.016.1Very hardCounty estimate
Lake in the Hills283.016.6Very hardUtility-reported
Lake Bluff128.47.5HardUtility-reported
Glen Ellyn136.08.0HardUtility-reported
New Lenox137.08.0HardUtility-reported
Wilmette138.08.1HardUtility-reported
McHenry384.022.5Very hardUtility-reported
Schiller Park104.06.1Moderately hardUtility-reported
Effingham108.06.3Moderately hardUtility-reported
West Chicago287.016.8Very hardCounty estimate
Huntley31.21.8SoftUtility-reported
Midlothian229.013.4Very hardCounty estimate
Batavia358.020.9Very hardUtility-reported
Westmont127.17.4HardUtility-reported
Woodstock343.020.1Very hardCounty estimate
Teutopolis108.06.3Moderately hardUtility-reported
Maywood229.013.4Very hardCounty estimate
Belvidere416.024.3Very hardUtility-reported
Harvey229.013.4Very hardCounty estimate
Hazel Crest229.013.4Very hardCounty estimate
Jerseyville108.06.3Moderately hardUtility-reported
Zion250.014.6Very hardCounty estimate
Rolling Meadows229.013.4Very hardCounty estimate
Loves Park316.018.5Very hardUtility-reported
Blue Island229.013.4Very hardCounty estimate
Oakbrook Terrace98.95.8Moderately hardUtility-reported
Crest Hill465.027.2Very hardUtility-reported
Grayslake250.014.6Very hardCounty estimate
Morton Grove229.013.4Very hardCounty estimate
South Elgin395.023.1Very hardUtility-reported
Great Lakes137.08.0HardUtility-reported
Plano378.022.1Very hardCounty estimate
Lisle287.016.8Very hardCounty estimate
Roselle287.016.8Very hardCounty estimate
Phoenix140.08.2HardUtility-reported
South Holland140.08.2HardUtility-reported
Thornton140.08.2HardUtility-reported
Villa Park98.95.8Moderately hardUtility-reported
Park Forest163.09.5HardUtility-reported
Dolton229.013.4Very hardCounty estimate
East Moline192.011.2Very hardUtility-reported
Berkeley104.06.1Moderately hardUtility-reported
Matteson229.013.4Very hardCounty estimate
Stone Park104.06.1Moderately hardUtility-reported
Hampton320.018.7Very hardCounty estimate
Alsip229.013.4Very hardCounty estimate
Homer Glen287.016.8Very hardCounty estimate
Lake Zurich84.24.9Moderately hardUtility-reported
Arbury Hills91.25.3Moderately hardUtility-reported
Mokena91.25.3Moderately hardUtility-reported
Mattoon108.06.3Moderately hardUtility-reported
Homewood112.06.5Moderately hardUtility-reported
Westchester229.013.4Very hardCounty estimate
Bethalto276.016.1Very hardCounty estimate
Streator253.014.8Very hardUtility-reported
Brookfield229.013.4Very hardCounty estimate
Crestwood229.013.4Very hardCounty estimate
Worth229.013.4Very hardCounty estimate
Justice229.013.4Very hardCounty estimate
Willow Springs229.013.4Very hardCounty estimate
North Aurora238.013.9Very hardUtility-reported
Hinsdale133.07.8HardUtility-reported
Sycamore289.016.9Very hardUtility-reported
Palos Hills229.013.4Very hardCounty estimate
New Burnside83.14.9Moderately hardCounty estimate
Caseyville265.515.5Very hardCounty estimate
Groveland347.020.3Very hardCounty estimate
Troy276.016.1Very hardCounty estimate
Wauconda146.08.5HardUtility-reported
Country Club Hills229.013.4Very hardCounty estimate
Bridgeview229.013.4Very hardCounty estimate
Taylorville142.08.3HardUtility-reported
Northlake104.06.1Moderately hardUtility-reported
River Grove104.06.1Moderately hardUtility-reported
La Grange122.07.1HardUtility-reported
Palos Heights229.013.4Very hardCounty estimate
Georgetown310.018.1Very hardCounty estimate
Marion47.02.8SoftUtility-reported
Sterling172.010.1HardUtility-reported
Antioch250.014.6Very hardCounty estimate
Robinson264.015.4Very hardUtility-reported
Chicago Ridge229.013.4Very hardCounty estimate
Hickory Hills229.013.4Very hardCounty estimate
Energy170.09.9HardCounty estimate
Wood Dale287.016.8Very hardCounty estimate
Nashville165.59.7HardCounty estimate
Kewanee54.33.2SoftUtility-reported
La Grange Park129.07.5HardUtility-reported
Lagrange Park129.07.5HardUtility-reported
Channahon193.011.3Very hardUtility-reported
Glen Carbon276.016.1Very hardCounty estimate
Western Springs229.013.4Very hardCounty estimate
Rantoul300.017.5Very hardCounty estimate
Herrin170.09.9HardCounty estimate
Warrenville474.027.7Very hardUtility-reported
Richton Park206.012.1Very hardUtility-reported
Lincolnwood136.08.0HardUtility-reported
Deerfield135.07.9HardUtility-reported
Winnetka135.07.9HardUtility-reported
Monee558.032.6Very hardUtility-reported
Minooka378.022.1Very hardCounty estimate
Pontiac191.011.2Very hardUtility-reported
Columbia232.513.6Very hardCounty estimate
Willowbrook287.016.8Very hardCounty estimate
Goreville47.02.8SoftUtility-reported
Palestine264.015.4Very hardUtility-reported
Prestbury419.024.5Very hardUtility-reported
Sugar Grove419.024.5Very hardUtility-reported
River Forest135.07.9HardUtility-reported
Lincolnshire380.022.2Very hardUtility-reported
Lyons229.013.4Very hardCounty estimate
Murphysboro166.09.7HardCounty estimate
Centralia140.08.2HardCounty estimate
Macomb240.514.1Very hardCounty estimate
Wood River128.17.5HardComputed from Ca+Mg
Waterloo232.513.6Very hardCounty estimate
Carbon Cliff257.115.0Very hardUtility-reported
St. Charles214.712.6Very hardComputed from Ca+Mg
Itasca287.016.8Very hardCounty estimate
Washington229.913.4Very hardComputed from Ca+Mg
Flossmoor146.08.5HardUtility-reported
Steger229.013.4Very hardCounty estimate
Clarendon Hills159.29.3HardUtility-reported
West Frankfort124.07.3HardCounty estimate
Mascoutah124.07.3HardUtility-reported
Oak Brook287.016.8Very hardCounty estimate
Rock Falls334.019.5Very hardCounty estimate
Crete523.730.6Very hardUtility-reported
Pierron163.09.5HardCounty estimate
Lake Villa205.012.0Very hardUtility-reported
Venetian Village205.012.0Very hardUtility-reported
Harwood Heights229.013.4Very hardCounty estimate
Whittington124.07.3HardCounty estimate
Island Lake250.014.6Very hardCounty estimate
Pingree Grove64.63.8Moderately hardUtility-reported
Broadview229.013.4Very hardCounty estimate
Decatur261.015.3Very hardCounty estimate
Rockton295.017.3Very hardUtility-reported
Gilberts328.019.2Very hardUtility-reported
West Dundee14.00.8SoftComputed from Ca+Mg
Dupo265.515.5Very hardCounty estimate
Riverwoods380.022.2Very hardUtility-reported
DeKalb340.019.9Very hardCounty estimate
University Park287.016.8Very hardCounty estimate
Pocahontas163.09.5HardCounty estimate
Camp Point220.012.9Very hardCounty estimate
Scott Air Force Base265.515.5Very hardCounty estimate
Winthrop Harbor250.014.6Very hardCounty estimate
Sheridan321.018.8Very hardCounty estimate
Mahomet300.017.5Very hardCounty estimate
Curran104.06.1Moderately hardUtility-reported
Elburn232.013.6Very hardUtility-reported
Sherman280.016.4Very hardCounty estimate
Williamsville280.016.4Very hardCounty estimate
Posen229.013.4Very hardCounty estimate
Germantown Hills24.01.4SoftComputed from Ca+Mg
Peoria Heights300.017.5Very hardCounty estimate
Knollwood93.75.5Moderately hardUtility-reported
Mount Zion103.06.0Moderately hardUtility-reported
Volo145.68.5HardUtility-reported
Coal City98.35.8Moderately hardUtility-reported
Hampshire60.53.5Moderately hardUtility-reported
Charleston290.017.0Very hardCounty estimate
Robbins229.013.4Very hardCounty estimate
Valmeyer232.513.6Very hardCounty estimate
Highwood120.07.0Moderately hardUtility-reported
Carlyle171.010.0HardUtility-reported
Wonder Lake292.317.1Very hardComputed from Ca+Mg
Marseilles321.018.8Very hardCounty estimate
Jonesboro156.59.2HardCounty estimate
Tuscola286.016.7Very hardCounty estimate
The Galena Territory233.113.6Very hardComputed from Ca+Mg
Olympia Fields229.013.4Very hardCounty estimate
Creve Coeur299.617.5Very hardComputed from Ca+Mg
Palos Park229.013.4Very hardCounty estimate
Virden138.08.1HardUtility-reported
Fox River Grove520.030.4Very hardUtility-reported
Norwood367.021.5Very hardUtility-reported
White Hall407.023.8Very hardUtility-reported
Hometown229.013.4Very hardCounty estimate
Lakemoor223.013.0Very hardUtility-reported
Coal Valley114.56.7Moderately hardComputed from Ca+Mg
Trenton168.09.8HardCounty estimate
Carmi249.314.6Very hardUtility-reported
Red Bud232.513.6Very hardCounty estimate
Oneida331.019.4Very hardCounty estimate
Johnston City170.09.9HardCounty estimate
Tolono300.017.5Very hardCounty estimate
New Baden168.09.8HardCounty estimate
Lockport458.026.8Very hardUtility-reported
Oregon329.519.3Very hardCounty estimate
Salem140.08.2HardCounty estimate
Aledo270.015.8Very hardCounty estimate
Mackinaw347.020.3Very hardCounty estimate
Woodlawn180.010.5HardCounty estimate
Gibson City355.020.8Very hardCounty estimate
Manhattan372.021.8Very hardUtility-reported
Bushnell240.514.1Very hardCounty estimate
Rushville277.016.2Very hardCounty estimate
Casey250.514.7Very hardCounty estimate
Collinsville276.016.1Very hardCounty estimate
Granite City276.016.1Very hardCounty estimate
Momence393.023.0Very hardUtility-reported
Lake Barrington573.033.5Very hardUtility-reported
Winnebago340.019.9Very hardCounty estimate
Annapolis263.015.4Very hardCounty estimate
Savanna358.020.9Very hardCounty estimate
Newton243.014.2Very hardCounty estimate
Abingdon331.019.4Very hardCounty estimate
Warsaw221.012.9Very hardCounty estimate
Dixon354.520.7Very hardCounty estimate
Albion178.010.4HardCounty estimate
El Paso336.019.6Very hardCounty estimate
Heyworth327.019.1Very hardCounty estimate
Tremont105.36.2Moderately hardUtility-reported
Lena350.020.5Very hardCounty estimate
Arcola286.016.7Very hardCounty estimate
Pawnee280.016.4Very hardCounty estimate
Christopher124.07.3HardCounty estimate
Poplar Grove368.021.5Very hardCounty estimate
Carrollton268.515.7Very hardCounty estimate
Carthage221.012.9Very hardCounty estimate
Galva370.021.6Very hardCounty estimate
Bridgeport228.013.3Very hardCounty estimate
Mason City235.013.7Very hardCounty estimate
Colona243.014.2Very hardUtility-reported
Kenilworth121.07.1HardUtility-reported
Sesser124.07.3HardCounty estimate
Amboy354.520.7Very hardCounty estimate
Oblong263.015.4Very hardCounty estimate
Odin140.08.2HardCounty estimate
Farmington344.020.1Very hardCounty estimate
Lewistown219.712.8Very hardComputed from Ca+Mg
De Soto166.09.7HardCounty estimate
Davis Junction329.519.3Very hardCounty estimate
Seneca321.018.8Very hardCounty estimate
Nokomis185.010.8Very hardCounty estimate
Jacksonville194.011.3Very hardCounty estimate
Polo329.519.3Very hardCounty estimate
Dawson280.016.4Very hardCounty estimate
Round Lake250.014.6Very hardCounty estimate
Norris City344.020.1Very hardCounty estimate
Colchester240.514.1Very hardCounty estimate
Arthur330.019.3Very hardCounty estimate
Elwood287.016.8Very hardCounty estimate
Prospect Heights229.013.4Very hardCounty estimate
Henry284.016.6Very hardCounty estimate
Girard145.08.5HardCounty estimate
Pecatonica305.017.8Very hardUtility-reported
East Dubuque649.038.0Very hardUtility-reported
Steeleville206.512.1Very hardCounty estimate
Thompsonville124.07.3HardCounty estimate
Cambridge370.021.6Very hardCounty estimate
Belle Rive180.010.5HardCounty estimate
Elmwood300.017.5Very hardCounty estimate
Hinckley340.019.9Very hardCounty estimate
Prophetstown334.019.5Very hardCounty estimate
Catlin310.018.1Very hardCounty estimate
Oakwood310.018.1Very hardCounty estimate
Richmond343.020.1Very hardCounty estimate
Zeigler124.07.3HardCounty estimate
Farmer City313.018.3Very hardCounty estimate
Auburn280.016.4Very hardCounty estimate
Carrier Mills450.026.3Very hardCounty estimate
New Athens265.515.5Very hardCounty estimate
South Roxana276.016.1Very hardCounty estimate
Kirkland340.019.9Very hardCounty estimate
Roanoke336.019.6Very hardCounty estimate
Minonk336.019.6Very hardCounty estimate
Carlinville145.08.5HardCounty estimate
Henderson331.019.4Very hardCounty estimate
Lacon284.016.6Very hardCounty estimate
Mt. Vernon180.010.5HardCounty estimate
Waltonville180.010.5HardCounty estimate
Lexington327.019.1Very hardCounty estimate
Highland276.016.1Very hardCounty estimate
Moweaqua222.013.0Very hardCounty estimate
Stockton365.021.4Very hardCounty estimate
Bluford180.010.5HardCounty estimate
Orion370.021.6Very hardCounty estimate
Hudson327.019.1Very hardCounty estimate
St. Jacob276.016.1Very hardCounty estimate
St. Jacob276.016.1Very hardCounty estimate
East Carondelet265.515.5Very hardCounty estimate
Delavan347.020.3Very hardCounty estimate
Bement317.018.5Very hardCounty estimate
Gilman315.018.4Very hardCounty estimate
Somonauk340.019.9Very hardCounty estimate
Chenoa42.42.5SoftComputed from Ca+Mg
Dix180.010.5HardCounty estimate
Kell140.08.2HardCounty estimate
Bunker Hill145.08.5HardCounty estimate
Cambria170.09.9HardCounty estimate
Princeville300.017.5Very hardCounty estimate
Manito347.020.3Very hardCounty estimate
Edinburg257.015.0Very hardCounty estimate
Kincaid257.015.0Very hardCounty estimate
Grayville167.59.8HardCounty estimate
Stonington257.015.0Very hardCounty estimate
Earlville321.018.8Very hardCounty estimate
Maroa114.06.7Moderately hardUtility-reported
Vienna83.14.9Moderately hardCounty estimate
Atlanta347.020.3Very hardCounty estimate
Port Byron320.018.7Very hardCounty estimate
Fisher300.017.5Very hardCounty estimate
Neoga280.516.4Very hardCounty estimate
Benld145.08.5HardCounty estimate
Erie334.019.5Very hardCounty estimate
Herscher313.018.3Very hardCounty estimate
Winchester289.016.9Very hardCounty estimate
Roodhouse412.024.1Very hardUtility-reported
North Pekin567.033.2Very hardUtility-reported
Germantown168.09.8HardCounty estimate
Sandoval140.08.2HardCounty estimate
Dieterich310.018.1Very hardUtility-reported
Stillman Valley287.016.8Very hardUtility-reported
Greenup280.516.4Very hardCounty estimate
Pleasant Plains280.016.4Very hardCounty estimate
Waterman340.019.9Very hardCounty estimate
Oquawka314.018.4Very hardCounty estimate
Bethany330.019.3Very hardCounty estimate
Forreston329.519.3Very hardCounty estimate
Clifton315.018.4Very hardCounty estimate
Gardner327.019.1Very hardCounty estimate
Walnut337.019.7Very hardCounty estimate
Lanark358.020.9Very hardCounty estimate
Roxana79.94.7Moderately hardComputed from Ca+Mg
Hartford276.016.1Very hardCounty estimate
Mount Carroll347.020.3Very hardUtility-reported
Mt. Carroll347.020.3Very hardUtility-reported
Springfield120.07.0Moderately hardUtility-reported
Cerro Gordo317.018.5Very hardCounty estimate
Warren365.021.4Very hardCounty estimate
Durand340.019.9Very hardCounty estimate
Granville287.016.8Very hardCounty estimate
Toluca284.016.6Very hardCounty estimate
Okawville165.59.7HardCounty estimate
Gridley327.019.1Very hardCounty estimate
Onarga315.018.4Very hardCounty estimate
Tower Lakes247.214.5Very hardComputed from Ca+Mg
Utica321.018.8Very hardCounty estimate
Wyoming352.020.6Very hardCounty estimate
Payson220.012.9Very hardCounty estimate
La Fayette352.020.6Very hardCounty estimate
Toulon352.020.6Very hardCounty estimate
Capron189.311.1Very hardComputed from Ca+Mg
Dunlap300.017.5Very hardCounty estimate
New Berlin280.016.4Very hardCounty estimate
Albers168.09.8HardCounty estimate
Milford315.018.4Very hardCounty estimate
Assumption257.015.0Very hardCounty estimate
Cobden156.59.2HardCounty estimate
Ashland359.021.0Very hardCounty estimate
Rossville310.018.1Very hardCounty estimate
Astoria344.020.1Very hardCounty estimate
Harristown202.011.8Very hardUtility-reported
Barry234.513.7Very hardCounty estimate
Waverly194.011.3Very hardCounty estimate
Maple Park320.518.7Very hardCounty estimate
Philo300.017.5Very hardCounty estimate
St. Anne313.018.3Very hardCounty estimate
Warrensburg261.015.3Very hardCounty estimate
Ladd337.019.7Very hardCounty estimate
Griggsville234.513.7Very hardCounty estimate
Valier124.07.3HardCounty estimate
Chatsworth340.019.9Very hardCounty estimate
Hanna City300.017.5Very hardCounty estimate
Atwood317.018.5Very hardCounty estimate
Minier347.020.3Very hardCounty estimate
Wayne City137.08.0HardUtility-reported
La Harpe221.012.9Very hardCounty estimate
Thomasboro258.015.1Very hardUtility-reported
Forrest340.019.9Very hardCounty estimate
Macon261.015.3Very hardCounty estimate
Louisville180.010.5HardCounty estimate
Chebanse313.018.3Very hardCounty estimate
Chrisman269.015.7Very hardCounty estimate
Greenfield268.515.7Very hardCounty estimate
Hebron343.020.1Very hardCounty estimate
Homer300.017.5Very hardCounty estimate
Martinsville250.514.7Very hardCounty estimate
Washburn336.019.6Very hardCounty estimate
Royalton124.07.3HardCounty estimate
Cuba344.020.1Very hardCounty estimate
Danvers327.019.1Very hardCounty estimate
Divernon280.016.4Very hardCounty estimate
Buffalo280.016.4Very hardCounty estimate
Toledo280.516.4Very hardCounty estimate
Kingston340.019.9Very hardCounty estimate
Murrayville194.011.3Very hardCounty estimate
Woodson194.011.3Very hardCounty estimate
Geneva320.518.7Very hardCounty estimate
Hoyleton165.59.7HardCounty estimate
South Pekin347.020.3Very hardCounty estimate
Mounds125.07.3HardCounty estimate
Dowell166.09.7HardCounty estimate
Elkville166.09.7HardCounty estimate
Ava166.09.7HardCounty estimate
Johnsburg353.020.6Very hardUtility-reported
Pistakee Highlands353.020.6Very hardUtility-reported
Flanagan340.019.9Very hardCounty estimate
Malta340.019.9Very hardCounty estimate
Pleasant Hill234.513.7Very hardCounty estimate
Worden276.016.1Very hardCounty estimate
Gorham166.09.7HardCounty estimate
Sumner228.013.3Very hardCounty estimate
Glasford79.94.7Moderately hardComputed from Ca+Mg
Morrisonville257.015.0Very hardCounty estimate
Nilwood145.08.5HardCounty estimate
Nauvoo221.012.9Very hardCounty estimate
Hoffman168.09.8HardCounty estimate
Shawneetown276.016.1Very hardCounty estimate
Illiopolis280.016.4Very hardCounty estimate
Meredosia194.011.3Very hardCounty estimate
Alto Pass156.59.2HardCounty estimate
Odell340.019.9Very hardCounty estimate
Downs327.019.1Very hardCounty estimate
Mazon327.019.1Very hardCounty estimate
Goodfield169.89.9HardComputed from Ca+Mg
Gifford265.015.5Very hardUtility-reported
Viola270.015.8Very hardCounty estimate
Ashton265.015.5Very hardUtility-reported
Beckemeyer168.09.8HardCounty estimate
Argenta261.015.3Very hardCounty estimate
Bloomington88.95.2Moderately hardUtility-reported
Franklin Grove366.021.4Very hardUtility-reported
Forsyth261.015.3Very hardCounty estimate
Oreana261.015.3Very hardCounty estimate
Hawthorn Woods134.07.8HardUtility-reported
Frankfort287.016.8Very hardCounty estimate
Buncombe83.14.9Moderately hardCounty estimate
Makanda166.09.7HardCounty estimate
Mt. Olive145.08.5HardCounty estimate
Annawan370.021.6Very hardCounty estimate
Dunfermline344.020.1Very hardCounty estimate
East Galesburg331.019.4Very hardCounty estimate
St. David344.020.1Very hardCounty estimate
Wataga17.71.0SoftComputed from Ca+Mg
Livingston276.016.1Very hardCounty estimate
Freeport350.020.5Very hardCounty estimate
Northbrook131.07.7HardUtility-reported
Techny131.07.7HardUtility-reported
Thayer280.016.4Very hardCounty estimate
Ashmore290.017.0Very hardCounty estimate
Orangeville291.017.0Very hardUtility-reported
Pearl City234.513.7Very hardCounty estimate
Blandinsville187.010.9Very hardUtility-reported
Watson235.013.7Very hardCounty estimate
Armington304.017.8Very hardUtility-reported
Camargo286.016.7Very hardCounty estimate
Cedarville304.017.8Very hardUtility-reported
Yates City62.43.6Moderately hardComputed from Ca+Mg
Keithsburg250.014.6Very hardUtility-reported
Stewardson222.013.0Very hardCounty estimate
Little York30.01.8SoftComputed from Ca+Mg
Moro276.016.1Very hardCounty estimate
Galena326.019.1Very hardUtility-reported
Saybrook327.019.1Very hardCounty estimate
Matherville270.015.8Very hardCounty estimate
Vergennes166.09.7HardCounty estimate
Lyndon268.015.7Very hardUtility-reported
Hecker232.513.6Very hardCounty estimate
Bartelso481.028.1Very hardUtility-reported
Hutsonville263.015.4Very hardCounty estimate
Canton401.023.4Very hardUtility-reported
Chandlerville466.027.3Very hardUtility-reported
Humboldt401.023.4Very hardUtility-reported
Ingleside250.014.6Very hardCounty estimate
Chapin266.015.6Very hardUtility-reported
Grand Ridge321.018.8Very hardCounty estimate
Carlock102.46.0Moderately hardComputed from Ca+Mg
Colp170.09.9HardCounty estimate
Keyesport163.09.5HardCounty estimate
Tovey257.015.0Very hardCounty estimate
Prairie City313.018.3Very hardUtility-reported
Taylor Ridge320.018.7Very hardCounty estimate
Towanda327.019.1Very hardCounty estimate
Melvin355.020.8Very hardCounty estimate
German Valley199.011.6Very hardUtility-reported
Hardin280.016.4Very hardCounty estimate
Aurora287.016.8Very hardCounty estimate
Barrington229.013.4Very hardCounty estimate
Leaf River306.017.9Very hardUtility-reported
Ottawa321.018.8Very hardCounty estimate
Alexander194.011.3Very hardCounty estimate
Avon30.01.8SoftComputed from Ca+Mg
Aviston168.09.8HardCounty estimate
Sorento163.09.5HardCounty estimate
Neponset337.019.7Very hardCounty estimate
Arenzville369.021.6Very hardUtility-reported
Good Hope240.514.1Very hardCounty estimate
Olmsted125.07.3HardCounty estimate
Altamont127.07.4HardUtility-reported
Sigel127.07.4HardUtility-reported
Hindsboro286.016.7Very hardCounty estimate
Oakland290.017.0Very hardCounty estimate
Scales Mound365.021.4Very hardCounty estimate
Richview165.59.7HardCounty estimate
Freeman Spur170.09.9HardCounty estimate
Mulkeytown124.07.3HardCounty estimate
Fieldon216.012.6Very hardCounty estimate
Maeystown232.513.6Very hardCounty estimate
Bardolph240.514.1Very hardCounty estimate
Rock City350.020.5Very hardCounty estimate
Oakford302.017.7Very hardCounty estimate
Ludlow300.017.5Very hardCounty estimate
Cedar Point321.018.8Very hardCounty estimate
Hennepin287.016.8Very hardCounty estimate
Kane210.012.3Very hardUtility-reported
Elliott355.020.8Very hardCounty estimate
Maquon331.019.4Very hardCounty estimate
Winfield287.016.8Very hardCounty estimate
Anna262.615.4Very hardUtility-reported
Sibley355.020.8Very hardCounty estimate
Mill Shoals167.59.8HardCounty estimate
Broughton220.012.9Very hardCounty estimate
Carterville170.09.9HardCounty estimate
Radom165.59.7HardCounty estimate
Steward280.016.4Very hardUtility-reported
Morton170.09.9HardUtility-reported
Montrose169.09.9HardUtility-reported
Crystal Lake388.022.7Very hardUtility-reported
Seaton47.42.8SoftComputed from Ca+Mg
Galesburg331.019.4Very hardCounty estimate
Benton124.07.3HardCounty estimate
Macedonia124.07.3HardCounty estimate
Sciota240.514.1Very hardCounty estimate
Springerton167.59.8HardCounty estimate
Yorkville378.022.1Very hardCounty estimate
Lindenwood329.519.3Very hardCounty estimate
Patterson268.515.7Very hardCounty estimate
Wilmington287.016.8Very hardCounty estimate
Palatine349.620.4Very hardComputed from Ca+Mg
Rochester280.016.4Very hardCounty estimate
Strawn340.019.9Very hardCounty estimate
Bishop Hill47.42.8SoftComputed from Ca+Mg
Sandwich340.019.9Very hardCounty estimate
Monmouth174.810.2HardComputed from Ca+Mg
St. Augustine174.810.2HardComputed from Ca+Mg
Mount Erie66.23.9Moderately hardUtility-reported
Peru321.018.8Very hardCounty estimate
Lincoln222.013.0Very hardUtility-reported
Havana285.016.7Very hardUtility-reported
Hines229.013.4Very hardCounty estimate
Morris285.016.7Very hardUtility-reported
Lake Forest250.014.6Very hardCounty estimate
Mount Vernon180.010.5HardCounty estimate
Pittsfield234.513.7Very hardCounty estimate
Harrison48.62.8SoftUtility-reported
Colfax327.019.1Very hardCounty estimate
Coulterville245.514.4Very hardCounty estimate
Davis350.020.5Very hardCounty estimate
Enfield167.59.8HardCounty estimate
Galatia450.026.3Very hardCounty estimate
Hamel276.016.1Very hardCounty estimate
Littleton277.016.2Very hardCounty estimate
Milledgeville358.020.9Very hardCounty estimate
Modesto145.08.5HardCounty estimate
New Douglas276.016.1Very hardCounty estimate
Newark378.022.1Very hardCounty estimate
Olive Branch205.012.0Very hardCounty estimate
Roseville284.016.6Very hardCounty estimate
Tamms205.012.0Very hardCounty estimate
Thomson358.020.9Very hardCounty estimate
Windsor222.013.0Very 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 Illinois's Water Hardness

Illinois 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

Illinois Water Hardness FAQ

Does Illinois have hard water?

Yes — across Illinois's measured cities, typical tap water is hard. The median is 157.0 mg/L (9.2 gpg) — hard on the USGS scale, where anything above 120 mg/L (7 gpg) counts as hard. 186 of Illinois's 249 measured cities fall in the hard or very hard bands (75%), so check your own city rather than the state average.

How hard is tap water in Illinois?

Across the 249 Illinois cities with measured values in our index, the median hardness is 157.0 mg/L (9.2 gpg) — hard on the USGS scale. Individual cities range from 14.0 to 649.0 mg/L, so check your own city rather than assuming the state number.

Which city in Illinois has the hardest water?

East Dubuque has the hardest measured tap water in our Illinois index at 649.0 mg/L (38.0 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 Illinois?

186 of Illinois's 249 measured cities (75%) 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 Illinois 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.