Skip to main content
💧 TapWaterData

Water Hardness in Michigan

Across 312 measured cities — with 163 more covered by labeled county-level estimates — Michigan's median tap water hardness is 194.7 mg/L (11.4 gpg): very 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
194.7
mg/L (11.4 gpg), measured cities
Measured Range
51.0-578.5
mg/L across measured cities
Measured Cities
312
utility-reported or computed values
County Estimates
163
34% of covered cities

Michigan Cities by Hardness Category

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

CategoryRangeMeasured citiesShare
Soft0-60 mg/L31.0%
Moderately hard60-120 mg/L8527.2%
Hard120-180 mg/L5918.9%
Very hard>180 mg/L16552.9%

Hardest and Softest Water in Michigan

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

Hardest water in Michigan

  1. Prudenville 578.5 mg/L (33.8 gpg), very hard
  2. Grandville 524.4 mg/L (30.7 gpg), very hard
  3. Romeo 512.3 mg/L (30.0 gpg), very hard
  4. Perrington 511.0 mg/L (29.9 gpg), very hard
  5. Perrinton 511.0 mg/L (29.9 gpg), very hard

Softest water in Michigan

  1. L'Anse 51.0 mg/L (3.0 gpg), soft
  2. Sault Ste. Marie 52.9 mg/L (3.1 gpg), soft
  3. Gwinn 58.9 mg/L (3.4 gpg), soft
  4. K. I. Sawyer 67.3 mg/L (3.9 gpg), moderately hard
  5. Munising 81.2 mg/L (4.8 gpg), moderately hard

Every Covered City in Michigan

All 475 covered Michigan 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
Detroit96.55.6Moderately hardUtility-reported
River Rouge96.05.6Moderately hardUtility-reported
Harper Woods94.85.5Moderately hardUtility-reported
Grosse Pointe Park94.95.5Moderately hardUtility-reported
Grosse Pointe94.95.5Moderately hardUtility-reported
Kentwood138.08.1HardUtility-reported
Sterling Heights102.76.0Moderately hardUtility-reported
East Grand Rapids136.98.0HardUtility-reported
Forest Hills138.08.1HardUtility-reported
Walker138.08.1HardUtility-reported
Grand Rapids138.08.1HardUtility-reported
Livonia88.75.2Moderately hardUtility-reported
Warren94.65.5Moderately hardUtility-reported
Westland95.75.6Moderately hardUtility-reported
Dearborn98.65.8Moderately hardUtility-reported
Troy99.65.8Moderately hardUtility-reported
Kalamazoo318.918.6Very hardUtility-reported
Eastwood319.018.6Very hardUtility-reported
Westwood319.018.6Very hardUtility-reported
Lansing446.026.1Very hardUtility-reported
Inkster104.36.1Moderately hardUtility-reported
Flint137.38.0HardUtility-reported
Utica102.76.0Moderately hardUtility-reported
Clio312.018.3Very hardUtility-reported
St. Clair Shores101.05.9Moderately hardUtility-reported
Dearborn Heights104.36.1Moderately hardUtility-reported
Garden City104.36.1Moderately hardUtility-reported
Pontiac120.77.1HardUtility-reported
Rochester Hills100.45.9Moderately hardUtility-reported
Plymouth104.56.1Moderately hardUtility-reported
Lincoln Park127.97.5HardUtility-reported
Roseville101.05.9Moderately hardUtility-reported
Romulus92.15.4Moderately hardUtility-reported
Mount Clemens102.86.0Moderately hardUtility-reported
Taylor102.26.0Moderately hardUtility-reported
Allen Park104.06.1Moderately hardUtility-reported
Dewitt310.018.1Very hardCounty estimate
Southfield117.96.9Moderately hardUtility-reported
Melvindale104.06.1Moderately hardUtility-reported
Ann Arbor155.99.1HardUtility-reported
Barton Hills152.78.9HardUtility-reported
Ecorse104.06.1Moderately hardUtility-reported
Fraser101.05.9Moderately hardUtility-reported
Farmington Hills119.47.0Moderately hardUtility-reported
Clinton Township101.05.9Moderately hardUtility-reported
St. Clair Shores266.015.6Very hardCounty estimate
Keego Harbor120.77.1HardUtility-reported
Orchard Lake Village120.77.1HardUtility-reported
Sylvan Lake120.77.1HardUtility-reported
Saginaw109.06.4Moderately hardUtility-reported
Franklin120.77.1HardUtility-reported
Canton90.65.3Moderately hardUtility-reported
Wayne90.65.3Moderately hardUtility-reported
Macomb151.08.8HardUtility-reported
Beecher143.58.4HardUtility-reported
Beechwood141.08.3HardUtility-reported
Ypsilanti167.69.8HardUtility-reported
Mount Morris120.67.0HardUtility-reported
Johannesburg99.65.8Moderately hardUtility-reported
Novi115.86.8Moderately hardUtility-reported
Rochester104.26.1Moderately hardUtility-reported
Sheridan96.45.6Moderately hardUtility-reported
Cedarville324.018.9Very hardUtility-reported
Shelby Township105.06.1Moderately hardUtility-reported
Three Rivers250.014.6Very hardCounty estimate
Flushing113.06.6Moderately hardUtility-reported
Holland141.08.3HardUtility-reported
Farmington97.85.7Moderately hardUtility-reported
Marshall96.25.6Moderately hardUtility-reported
Bay City128.07.5HardUtility-reported
Auburn Hills90.35.3Moderately hardUtility-reported
Royal Oak96.25.6Moderately hardUtility-reported
Midland106.06.2Moderately hardUtility-reported
New Baltimore136.58.0HardUtility-reported
Detroit Beach122.07.1HardUtility-reported
Monroe122.07.1HardUtility-reported
Woodland Beach122.07.1HardUtility-reported
West Bloomfield146.08.5HardUtility-reported
Bloomfield Hills90.35.3Moderately hardUtility-reported
New Haven165.39.7HardUtility-reported
Portage304.017.8Very hardUtility-reported
East Lansing194.411.4Very hardUtility-reported
Alpena272.615.9Very hardUtility-reported
Burton149.58.7HardUtility-reported
Flat Rock96.15.6Moderately hardUtility-reported
Zeeland260.015.2Very hardCounty estimate
Birmingham96.75.7Moderately hardUtility-reported
Bingham Farms90.35.3Moderately hardUtility-reported
Dorr147.08.6HardUtility-reported
Jenison260.015.2Very hardCounty estimate
Beverly Hills90.35.3Moderately hardUtility-reported
Byron Center230.013.4Very hardCounty estimate
Muskegon141.08.3HardUtility-reported
Chelsea270.015.8Very hardCounty estimate
Port Huron300.017.5Very hardCounty estimate
Wixom277.016.2Very hardCounty estimate
Brownstown Township96.15.6Moderately hardUtility-reported
Woodhaven96.15.6Moderately hardUtility-reported
Lake Orion277.016.2Very hardCounty estimate
Pleasant Ridge277.016.2Very hardCounty estimate
Eastpointe266.015.6Very hardCounty estimate
Ossineke180.010.5HardCounty estimate
Northville132.07.7HardUtility-reported
Madison Heights277.016.2Very hardCounty estimate
Oak Park277.016.2Very hardCounty estimate
Jackson220.912.9Very hardUtility-reported
Grand Blanc157.39.2HardUtility-reported
Adrian221.112.9Very hardUtility-reported
Olivet118.06.9Moderately hardUtility-reported
Howell117.36.9Moderately hardUtility-reported
Belleville303.017.7Very hardCounty estimate
Mount Pleasant225.013.2Very hardCounty estimate
Wyandotte105.06.1Moderately hardUtility-reported
Haslett374.021.9Very hardCounty estimate
Grand Haven260.015.2Very hardCounty estimate
Walled Lake277.016.2Very hardCounty estimate
Saline123.07.2HardUtility-reported
Harrison Township110.06.4Moderately hardUtility-reported
Otisville450.026.3Very hardUtility-reported
Brighton418.524.5Very hardUtility-reported
Hamtramck86.85.1Moderately hardUtility-reported
Ferndale99.55.8Moderately hardUtility-reported
Grand Ledge458.026.8Very hardUtility-reported
Wacousta458.026.8Very hardUtility-reported
Waverly458.026.8Very hardUtility-reported
Hickory Corners210.012.3Very hardCounty estimate
Marysville113.06.6Moderately hardUtility-reported
Hale317.618.6Very hardUtility-reported
Allendale260.015.2Very hardCounty estimate
Traverse City163.39.6HardUtility-reported
Pentwater180.010.5HardCounty estimate
Hazel Park277.016.2Very hardCounty estimate
Owosso339.019.8Very hardUtility-reported
Grandville524.430.7Very hardComputed from Ca+Mg
Vulcan197.511.6Very hardCounty estimate
New Boston303.017.7Very hardCounty estimate
Washington266.015.6Very hardCounty estimate
Gibraltar109.06.4Moderately hardUtility-reported
Berkley84.65.0Moderately hardUtility-reported
Sault Ste. Marie52.93.1SoftUtility-reported
Stanwood160.09.4HardCounty estimate
Niles260.015.2Very hardCounty estimate
Coldwater302.117.7Very hardUtility-reported
Escanaba131.07.7HardUtility-reported
Ionia395.023.1Very hardUtility-reported
Okemos425.024.9Very hardUtility-reported
Fairview155.09.1HardCounty estimate
Sturgis306.017.9Very hardUtility-reported
Lewiston231.013.5Very hardUtility-reported
Kawkawlin154.09.0HardCounty estimate
Essexville154.09.0HardCounty estimate
Clawson277.016.2Very hardCounty estimate
South Lyon459.726.9Very hardUtility-reported
Independence Township327.019.1Very hardUtility-reported
Village of Clarkston327.019.1Very hardUtility-reported
Fenton315.018.4Very hardUtility-reported
Fort Gratiot300.017.5Very hardCounty estimate
Battle Creek195.011.4Very hardUtility-reported
Cadillac146.98.6HardUtility-reported
Sanford276.016.1Very hardCounty estimate
Big Rapids172.010.1HardUtility-reported
St Joseph172.010.1HardUtility-reported
Marine City103.36.0Moderately hardUtility-reported
Spring Lake260.015.2Very hardCounty estimate
Grosse Ile303.017.7Very hardCounty estimate
Riverview109.06.4Moderately hardUtility-reported
Trenton109.06.4Moderately hardUtility-reported
Bridgeport260.015.2Very hardCounty estimate
Muskegon Heights146.08.5HardUtility-reported
Holly322.918.9Very hardUtility-reported
Reese140.08.2HardCounty estimate
Grosse Pointe Farms110.06.4Moderately hardUtility-reported
Hartland422.024.7Very hardUtility-reported
New Hudson326.019.1Very hardUtility-reported
Fruitport160.09.4HardCounty estimate
Newport300.017.5Very hardCounty estimate
Freeland260.015.2Very hardCounty estimate
Lapeer353.620.7Very hardUtility-reported
Iron Mountain274.016.0Very hardUtility-reported
Alma270.015.8Very hardCounty estimate
Petoskey274.016.0Very hardComputed from Ca+Mg
Oxford355.020.8Very hardUtility-reported
Milford321.018.8Very hardUtility-reported
St. Clair300.017.5Very hardCounty estimate
Fair Haven300.017.5Very hardCounty estimate
Tecumseh348.020.4Very hardUtility-reported
Dexter270.015.8Very hardCounty estimate
Union270.015.8Very hardCounty estimate
Genesee91.45.3Moderately hardUtility-reported
Dollar Bay90.55.3Moderately hardCounty estimate
Alanson170.09.9HardCounty estimate
Center Line266.015.6Very hardCounty estimate
Mason355.020.8Very hardUtility-reported
Hudsonville385.022.5Very hardUtility-reported
Kincheloe93.75.5Moderately hardUtility-reported
Ada230.013.4Very hardCounty estimate
St. Louis255.014.9Very hardUtility-reported
Howard City237.013.9Very hardUtility-reported
Skandia59.43.5SoftCounty estimate
Davison181.110.6Very hardUtility-reported
Ishpeming59.43.5SoftCounty estimate
Carleton300.017.5Very hardCounty estimate
East China106.06.2Moderately hardUtility-reported
Belding269.015.7Very hardUtility-reported
Swartz Creek97.75.7Moderately hardUtility-reported
Cheboygan192.011.2Very hardUtility-reported
Nunica93.15.4Moderately hardUtility-reported
Auburn154.09.0HardCounty estimate
Coopersville180.010.5HardUtility-reported
Lexington114.06.7Moderately hardUtility-reported
Frankenmuth260.015.2Very hardCounty estimate
Caledonia496.029.0Very hardUtility-reported
Negaunee59.43.5SoftCounty estimate
Bridgman127.07.4HardUtility-reported
Algonac300.017.5Very hardCounty estimate
Linden338.019.8Very hardUtility-reported
Houghton Lake90.05.3Moderately hardCounty estimate
Wellston132.07.7HardUtility-reported
Williamston132.07.7HardUtility-reported
Middleville299.017.5Very hardUtility-reported
Douglas216.012.6Very hardUtility-reported
Saugatuck216.012.6Very hardUtility-reported
Portland290.017.0Very hardCounty estimate
Boyne City224.313.1Very hardUtility-reported
Romeo512.330.0Very hardUtility-reported
Waterford301.717.6Very hardUtility-reported
Rockford230.013.4Very hardCounty estimate
Fowlerville253.514.8Very hardUtility-reported
Birch Run260.015.2Very hardCounty estimate
Gaylord251.014.7Very hardUtility-reported
Sagola251.014.7Very hardUtility-reported
Vicksburg221.412.9Very hardUtility-reported
Imlay City355.020.8Very hardUtility-reported
Sparta317.018.5Very hardUtility-reported
Durand332.019.4Very hardCounty estimate
Bad Axe293.017.1Very hardUtility-reported
Norway197.511.6Very hardCounty estimate
Highland399.023.3Very hardUtility-reported
Blissfield241.014.1Very hardUtility-reported
Ferrysburg260.015.2Very hardCounty estimate
Manistique106.06.2Moderately hardUtility-reported
Kinde304.017.8Very hardUtility-reported
Charlevoix138.08.1HardUtility-reported
Clare421.024.6Very hardUtility-reported
Ithaca279.016.3Very hardUtility-reported
Iron River262.015.3Very hardUtility-reported
Comstock438.025.6Very hardUtility-reported
K. I. Sawyer67.33.9Moderately hardUtility-reported
Gladwin417.724.4Very hardUtility-reported
Ludington112.06.5Moderately hardUtility-reported
St. Ignace112.06.5Moderately hardUtility-reported
St. Ignace100.05.8Moderately hardCounty estimate
Bangor205.512.0Very hardCounty estimate
Rogers City195.011.4Very hardUtility-reported
Harbert260.015.2Very hardCounty estimate
East Tawas140.08.2HardCounty estimate
Munising81.24.8Moderately hardUtility-reported
Watervliet260.015.2Very hardCounty estimate
Marquette110.06.4Moderately hardUtility-reported
Trowbridge Park110.06.4Moderately hardUtility-reported
Vassar244.014.3Very hardUtility-reported
Hartford205.512.0Very hardCounty estimate
Sandusky314.518.4Very hardCounty estimate
Almont159.09.3HardUtility-reported
Potterville405.523.7Very hardCounty estimate
Ontonagon62.43.6Moderately hardCounty estimate
Newaygo170.09.9HardCounty estimate
Pinckney290.017.0Very hardCounty estimate
Gwinn58.93.4SoftUtility-reported
Montague160.09.4HardCounty estimate
Croswell359.021.0Very hardUtility-reported
Cass City300.017.5Very hardUtility-reported
Reed City231.013.5Very hardUtility-reported
Bronson280.016.4Very hardCounty estimate
Quinnesec197.511.6Very hardCounty estimate
Somerset Center300.017.5Very hardCounty estimate
Chesaning165.09.7HardUtility-reported
Galesburg260.015.2Very hardCounty estimate
Baraga49.02.9SoftCounty estimate
Clinton307.017.9Very hardCounty estimate
Hudson307.017.9Very hardCounty estimate
L'Anse51.03.0SoftUtility-reported
Jonesville300.017.5Very hardCounty estimate
Morenci307.017.9Very hardCounty estimate
East Jordan274.016.0Very hardUtility-reported
Port Austin274.016.0Very hardUtility-reported
Manchester270.015.8Very hardCounty estimate
West Branch200.011.7Very hardCounty estimate
Hart180.010.5HardCounty estimate
Grawn202.011.8Very hardUtility-reported
Constantine250.014.6Very hardCounty estimate
Perry365.021.4Very hardUtility-reported
Oscoda140.08.2HardCounty estimate
Mattawan196.011.5Very hardUtility-reported
Burt260.015.2Very hardCounty estimate
Conklin260.015.2Very hardCounty estimate
Corunna332.019.4Very hardCounty estimate
Newberry46.62.7SoftCounty estimate
Harbor Springs210.412.3Very hardUtility-reported
Crystal Falls75.04.4Moderately hardCounty estimate
Berrien Springs350.020.5Very hardUtility-reported
Evart212.012.4Very hardUtility-reported
Lawton205.512.0Very hardCounty estimate
New Buffalo260.015.2Very hardCounty estimate
Yale300.017.5Very hardCounty estimate
Grayling175.010.2HardUtility-reported
Leslie374.021.9Very hardCounty estimate
Decatur205.512.0Very hardCounty estimate
Cassopolis270.015.8Very hardCounty estimate
Wakefield50.02.9SoftCounty estimate
Armada254.014.8Very hardUtility-reported
Capac331.019.4Very hardUtility-reported
Sebewaing125.07.3HardCounty estimate
Plainwell341.019.9Very hardUtility-reported
Boyne Falls258.915.1Very hardUtility-reported
Harbor Beach125.07.3HardCounty estimate
Port Hope125.07.3HardCounty estimate
South Rockwood300.017.5Very hardCounty estimate
Homer250.014.6Very hardCounty estimate
Kingsley243.014.2Very hardUtility-reported
Montrose280.016.4Very hardCounty estimate
Elk Rapids177.010.3HardCounty estimate
White Pigeon383.022.4Very hardUtility-reported
Union City270.015.8Very hardCounty estimate
Nashville210.012.3Very hardCounty estimate
Three Oaks260.015.2Very hardCounty estimate
Bessemer50.02.9SoftCounty estimate
Ovid305.017.8Very hardUtility-reported
Webberville374.521.9Very hardUtility-reported
Coloma260.015.2Very hardCounty estimate
Luther156.09.1HardCounty estimate
Schoolcraft260.015.2Very hardCounty estimate
Manitou Beach247.014.4Very hardUtility-reported
Shepherd247.014.4Very hardUtility-reported
Standish120.07.0Moderately hardCounty estimate
Fennville361.021.1Very hardUtility-reported
Stanton227.513.3Very hardCounty estimate
White Cloud170.09.9HardCounty estimate
Saranac290.017.0Very hardCounty estimate
Breckenridge236.013.8Very hardUtility-reported
Brown City113.06.6Moderately hardUtility-reported
Brooklyn256.515.0Very hardCounty estimate
Litchfield380.022.2Very hardUtility-reported
Manton182.010.6Very hardUtility-reported
Frankfort153.08.9HardCounty estimate
Bellevue405.523.7Very hardCounty estimate
Edwardsburg339.019.8Very hardUtility-reported
Edmore227.513.3Very hardCounty estimate
Coleman310.018.1Very hardUtility-reported
Hamilton310.018.1Very hardUtility-reported
Centreville81.74.8Moderately hardUtility-reported
Ravenna160.09.4HardCounty estimate
Scottville160.09.4HardCounty estimate
Pinconning154.09.0HardCounty estimate
Pigeon125.07.3HardCounty estimate
Lake Linden90.55.3Moderately hardCounty estimate
Stockbridge374.021.9Very hardCounty estimate
Hermansville175.010.2HardUtility-reported
Colon312.018.3Very hardUtility-reported
Memphis250.014.6Very hardUtility-reported
Grass Lake114.06.7Moderately hardUtility-reported
Fowler389.022.8Very hardUtility-reported
Hillsdale389.022.8Very hardUtility-reported
Petersburg300.017.5Very hardCounty estimate
Davisburg277.016.2Very hardCounty estimate
Harrison153.08.9HardUtility-reported
Bellaire177.010.3HardCounty estimate
Reading300.017.5Very hardCounty estimate
Roscommon90.05.3Moderately hardCounty estimate
Millington140.08.2HardCounty estimate
Beaverton196.011.5Very hardCounty estimate
Baldwin156.09.1HardCounty estimate
Concord256.515.0Very hardCounty estimate
Lawrence205.512.0Very hardCounty estimate
Dryden253.014.8Very hardUtility-reported
Greenville346.020.2Very hardUtility-reported
North Branch346.020.2Very hardUtility-reported
Lakeview227.513.3Very hardCounty estimate
Caspian210.012.3Very hardUtility-reported
Central Lake257.015.0Very hardUtility-reported
Clarklake260.015.2Very hardUtility-reported
Hastings210.012.3Very hardCounty estimate
Baroda260.015.2Very hardCounty estimate
Walkerville180.010.5HardCounty estimate
Onsted282.016.5Very hardUtility-reported
Mackinaw City263.015.4Very hardUtility-reported
Burr Oak295.017.3Very hardUtility-reported
Marion193.011.3Very hardUtility-reported
Farwell195.011.4Very hardUtility-reported
Whitmore Lake183.810.8Very hardUtility-reported
Ubly241.014.1Very hardUtility-reported
Lake City145.08.5HardUtility-reported
Elkton125.07.3HardCounty estimate
Columbiaville186.010.9Very hardUtility-reported
Caseville151.08.8HardUtility-reported
Gobles236.013.8Very hardUtility-reported
Tekonsha300.017.5Very hardUtility-reported
Jasper307.017.9Very hardCounty estimate
Hillman365.021.4Very hardUtility-reported
Pierson227.513.3Very hardCounty estimate
Fairgrove140.08.2HardCounty estimate
Maple Rapids261.015.3Very hardUtility-reported
McBain280.016.4Very hardUtility-reported
Port Sanilac409.023.9Very hardUtility-reported
Bancroft290.017.0Very hardUtility-reported
Britton140.08.2HardUtility-reported
Byron301.017.6Very hardUtility-reported
Hopkins140.08.2HardUtility-reported
Metamora398.023.3Very hardUtility-reported
Buckley278.016.3Very hardUtility-reported
Carsonville362.021.2Very hardUtility-reported
Ashley373.021.8Very hardUtility-reported
Frederic290.017.0Very hardUtility-reported
Harrisville236.013.8Very hardUtility-reported
Palmer117.06.8Moderately hardUtility-reported
Pewamo314.018.4Very hardUtility-reported
Mackinac Island104.06.1Moderately hardUtility-reported
Powers221.012.9Very hardUtility-reported
Cedar Springs346.020.2Very hardUtility-reported
Perrington511.029.9Very hardUtility-reported
Perrinton511.029.9Very hardUtility-reported
Atlanta236.013.8Very hardUtility-reported
Champion236.013.8Very hardUtility-reported
Grand Marais183.010.7Very hardUtility-reported
Mesick197.011.5Very hardUtility-reported
Gagetown245.014.3Very hardUtility-reported
Kingston245.014.3Very hardUtility-reported
Gaastra75.04.4Moderately hardCounty estimate
Mecosta310.418.1Very hardUtility-reported
Lake Fenton276.016.1Very hardUtility-reported
Sand Lake230.013.4Very hardCounty estimate
Amasa75.04.4Moderately hardCounty estimate
Ellsworth272.015.9Very hardUtility-reported
Paw Paw254.014.8Very hardUtility-reported
Prudenville578.533.8Very hardUtility-reported
Lupton372.021.8Very hardUtility-reported
Eau Claire108.06.3Moderately hardUtility-reported
Marlette235.013.7Very hardUtility-reported
Owendale266.015.6Very hardUtility-reported
Posen183.010.7Very hardUtility-reported
Twin Lake130.07.6HardUtility-reported
Bay Shore244.014.3Very hardUtility-reported
Millersburg254.014.8Very hardUtility-reported
Carney220.012.9Very hardCounty estimate
Marcellus270.015.8Very hardCounty estimate
Remus195.011.4Very hardUtility-reported
Minden City178.010.4HardUtility-reported
Quincy314.018.4Very hardUtility-reported
Mt. Clemens317.518.6Very hardUtility-reported
Mt. Morris280.016.4Very hardCounty estimate
Michigan Center160.09.4HardUtility-reported
Garden350.020.5Very hardUtility-reported
Lake Odessa137.08.0HardUtility-reported
West Olive205.012.0Very hardUtility-reported
Lake George180.010.5HardUtility-reported
Lamont260.015.2Very hardCounty estimate
Gowen208.012.2Very hardUtility-reported
Holton91.85.4Moderately hardUtility-reported
Suttons Bay328.019.2Very hardUtility-reported
Shelby353.020.6Very hardUtility-reported
Argentine89.45.2Moderately hardUtility-reported
Kalkaska89.45.2Moderately hardUtility-reported
Williamsburg253.014.8Very hardUtility-reported
Vestaburg328.019.2Very hardUtility-reported
Brimley49.12.9SoftCounty estimate
Whitehall160.09.4HardCounty estimate
Indian River155.09.1HardUtility-reported
Kewadin265.015.5Very hardUtility-reported
Rosebush334.019.5Very hardUtility-reported
Vanderbilt227.013.3Very hardUtility-reported
Covert205.512.0Very hardCounty estimate
Glen Arbor130.07.6HardCounty estimate
Hemlock260.015.2Very hardCounty estimate
South Range90.55.3Moderately hardCounty estimate
Watersmeet50.02.9SoftCounty 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 Michigan's Water Hardness

Michigan 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

Michigan Water Hardness FAQ

Does Michigan have hard water?

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

How hard is tap water in Michigan?

Across the 312 Michigan cities with measured values in our index, the median hardness is 194.7 mg/L (11.4 gpg) — very hard on the USGS scale. Individual cities range from 51.0 to 578.5 mg/L, so check your own city rather than assuming the state number.

Which city in Michigan has the hardest water?

Prudenville has the hardest measured tap water in our Michigan index at 578.5 mg/L (33.8 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 Michigan?

224 of Michigan's 312 measured cities (72%) 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 Michigan 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.