Water Hardness in Michigan
Across 189 measured cities — with 265 more covered by labeled county-level estimates — Michigan's median tap water hardness is 216.0 mg/L (12.6 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 September 13, 2026. Sources: utility-reported water quality data and USGS/EPA Water Quality Portal samples.
What it costs to soften Michigan water
Water softener cost in Michigan at 12.6 gpg prices the equipment and the installation labour against the plumber wages published for Michigan, and labels every range as modelled or measured rather than leaving you to guess which it is.
Michigan · 12.63 grains per gallon
$1,069–$1,416
installed, midpoint $1,223 — a 32,000-grain unit, the size 4 people at this hardness need.
Salt and drain water over 10 years: $1,064–$1,766 — the 13,829,850 grains of hardness this household removes, at the national salt price and water rate whose sources are named below. Filter changes and Service contract are omitted rather than assumed.
Sized for 4 people regenerating every 7 days: 26,523 grains of capacity needed, rounded up to the next common residential size. The median of 189 measured Michigan cities in our hardness dataset. Modelled: the standard build band published for that state at the size this hardness calls for, equipment priced 2026-10-04 against the May 2025 reference period (OEWS M2025). Salt: the median retailer price of 3 retailers, read 2026-10-04, at a declared salt dose per regeneration. Drain water: about 50 gallons per regeneration from a government extension estimate read 2026-10-04, at the 2024 national average water and sewer rate from a government source read 2026-10-04.
Deciding whether it is worth it at all? Start from how much a water softener costs nationally — the same equipment, installation and ten-year ownership breakdown before any state wage adjustment is applied.
Michigan Cities by Hardness Category
Measured cities only — labeled county estimates never enter the category counts or the median.
| Category | Range | Measured cities | Share |
|---|---|---|---|
| Soft | 0-60 mg/L | 3 | 1.6% |
| Moderately hard | 60-120 mg/L | 46 | 24.3% |
| Hard | 120-180 mg/L | 26 | 13.8% |
| Very hard | >180 mg/L | 114 | 60.3% |
Hardest and Softest Water in Michigan
Measured values only; labeled county estimates and values under active dispute never rank.
Hardest water in Michigan
- Romeo — 516.0 mg/L (30.2 gpg), very hard
- Perrinton — 511.0 mg/L (29.9 gpg), very hard
- Caledonia — 496.0 mg/L (29.0 gpg), very hard
- South Lyon — 464.0 mg/L (27.1 gpg), very hard
- Wacousta — 458.0 mg/L (26.8 gpg), very hard
Softest water in Michigan
- L'Anse — 51.0 mg/L (3.0 gpg), soft
- Sault Ste. Marie — 52.9 mg/L (3.1 gpg), soft
- Gwinn — 58.9 mg/L (3.4 gpg), soft
- K. I. Sawyer — 67.3 mg/L (3.9 gpg), moderately hard
- Livonia — 78.5 mg/L (4.6 gpg), moderately hard
Every Covered City in Michigan
All 454 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.
| City | Hardness (mg/L) | gpg | Category | Data |
|---|---|---|---|---|
| Detroit | 94.8 | 5.5 | Moderately hard | Utility-reported |
| Grand Rapids | 138.0 | 8.1 | Hard | Utility-reported |
| Kalamazoo | 319.0 | 18.6 | Very hard | Utility-reported |
| Lansing | 374.0 | 21.9 | Very hard | County estimate |
| Warren | 89.8 | 5.3 | Moderately hard | Utility-reported |
| Dewitt | 310.0 | 18.1 | Very hard | County estimate |
| Sterling Heights | 266.0 | 15.6 | Very hard | County estimate |
| Ann Arbor | 152.0 | 8.9 | Hard | Utility-reported |
| Dearborn | 104.0 | 6.1 | Moderately hard | Utility-reported |
| Clinton Township | 101.0 | 5.9 | Moderately hard | Utility-reported |
| Flint | 158.0 | 9.2 | Hard | Utility-reported |
| Livonia | 78.5 | 4.6 | Moderately hard | Utility-reported |
| Canton | 90.6 | 5.3 | Moderately hard | Utility-reported |
| Macomb | 151.0 | 8.8 | Hard | Utility-reported |
| Westland | 303.0 | 17.7 | Very hard | County estimate |
| Troy | 99.6 | 5.8 | Moderately hard | Utility-reported |
| Rochester Hills | 96.4 | 5.6 | Moderately hard | Utility-reported |
| Shelby Township | 105.0 | 6.1 | Moderately hard | Utility-reported |
| Three Rivers | 250.0 | 14.6 | Very hard | County estimate |
| Southfield | 277.0 | 16.2 | Very hard | County estimate |
| Beecher | 113.0 | 6.6 | Moderately hard | Utility-reported |
| Taylor | 303.0 | 17.7 | Very hard | County estimate |
| Pontiac | 277.0 | 16.2 | Very hard | County estimate |
| St. Clair Shores | 101.0 | 5.9 | Moderately hard | Utility-reported |
| Dearborn Heights | 82.8 | 4.8 | Moderately hard | Utility-reported |
| Royal Oak | 96.2 | 5.6 | Moderately hard | Utility-reported |
| Farmington Hills | 96.2 | 5.6 | Moderately hard | Utility-reported |
| Ypsilanti | 103.0 | 6.0 | Moderately hard | Utility-reported |
| Saginaw | 109.0 | 6.4 | Moderately hard | Utility-reported |
| Franklin | 146.0 | 8.5 | Hard | Utility-reported |
| West Bloomfield | 146.0 | 8.5 | Hard | Utility-reported |
| Monroe | 300.0 | 17.5 | Very hard | County estimate |
| Novi | 105.0 | 6.1 | Moderately hard | Utility-reported |
| Roseville | 266.0 | 15.6 | Very hard | County estimate |
| Portage | 304.0 | 17.8 | Very hard | Utility-reported |
| Battle Creek | 250.0 | 14.6 | Very hard | County estimate |
| Zeeland | 260.0 | 15.2 | Very hard | County estimate |
| Midland | 106.0 | 6.2 | Moderately hard | Utility-reported |
| Jenison | 260.0 | 15.2 | Very hard | County estimate |
| Lincoln Park | 197.0 | 11.5 | Very hard | Utility-reported |
| Byron Center | 230.0 | 13.4 | Very hard | County estimate |
| Muskegon | 141.0 | 8.3 | Hard | Utility-reported |
| Holland | 141.0 | 8.3 | Hard | Utility-reported |
| Chelsea | 270.0 | 15.8 | Very hard | County estimate |
| Port Huron | 300.0 | 17.5 | Very hard | County estimate |
| Wixom | 277.0 | 16.2 | Very hard | County estimate |
| Brownstown Township | 96.1 | 5.6 | Moderately hard | Utility-reported |
| Jackson | 256.5 | 15.0 | Very hard | County estimate |
| East Lansing | 105.0 | 6.1 | Moderately hard | Utility-reported |
| Lake Orion | 277.0 | 16.2 | Very hard | County estimate |
| Pleasant Ridge | 277.0 | 16.2 | Very hard | County estimate |
| Eastpointe | 266.0 | 15.6 | Very hard | County estimate |
| Ossineke | 180.0 | 10.5 | Hard | County estimate |
| Bay City | 128.0 | 7.5 | Hard | Utility-reported |
| Madison Heights | 277.0 | 16.2 | Very hard | County estimate |
| Oak Park | 277.0 | 16.2 | Very hard | County estimate |
| Allen Park | 303.0 | 17.7 | Very hard | County estimate |
| Garden City | 120.0 | 7.0 | Moderately hard | County estimate |
| Belleville | 303.0 | 17.7 | Very hard | County estimate |
| Mount Pleasant | 225.0 | 13.2 | Very hard | County estimate |
| Wyandotte | 105.0 | 6.1 | Moderately hard | Utility-reported |
| Haslett | 374.0 | 21.9 | Very hard | County estimate |
| Grand Haven | 260.0 | 15.2 | Very hard | County estimate |
| Walled Lake | 277.0 | 16.2 | Very hard | County estimate |
| Inkster | 303.0 | 17.7 | Very hard | County estimate |
| Harrison Township | 110.0 | 6.4 | Moderately hard | Utility-reported |
| Romulus | 303.0 | 17.7 | Very hard | County estimate |
| Adrian | 213.0 | 12.5 | Very hard | Utility-reported |
| Hamtramck | 86.8 | 5.1 | Moderately hard | Utility-reported |
| Ferndale | 99.5 | 5.8 | Moderately hard | Utility-reported |
| Wacousta | 458.0 | 26.8 | Very hard | Utility-reported |
| Waverly | 458.0 | 26.8 | Very hard | Utility-reported |
| Auburn Hills | 277.0 | 16.2 | Very hard | County estimate |
| Hickory Corners | 210.0 | 12.3 | Very hard | County estimate |
| Burton | 280.0 | 16.4 | Very hard | County estimate |
| Marquette | 59.4 | 3.5 | Soft | County estimate |
| Birmingham | 277.0 | 16.2 | Very hard | County estimate |
| Allendale | 260.0 | 15.2 | Very hard | County estimate |
| Trenton | 303.0 | 17.7 | Very hard | County estimate |
| Mount Clemens | 266.0 | 15.6 | Very hard | County estimate |
| Wayne | 303.0 | 17.7 | Very hard | County estimate |
| Fraser | 266.0 | 15.6 | Very hard | County estimate |
| Pentwater | 180.0 | 10.5 | Hard | County estimate |
| Hazel Park | 277.0 | 16.2 | Very hard | County estimate |
| Owosso | 339.0 | 19.8 | Very hard | Utility-reported |
| Grandville | 230.0 | 13.4 | Very hard | County estimate |
| Vulcan | 197.5 | 11.6 | Very hard | County estimate |
| New Boston | 303.0 | 17.7 | Very hard | County estimate |
| Washington | 266.0 | 15.6 | Very hard | County estimate |
| Berkley | 84.6 | 5.0 | Moderately hard | Utility-reported |
| Sault Ste. Marie | 52.9 | 3.1 | Soft | Utility-reported |
| Traverse City | 146.0 | 8.5 | Hard | Utility-reported |
| Harper Woods | 303.0 | 17.7 | Very hard | County estimate |
| Stanwood | 160.0 | 9.4 | Hard | County estimate |
| Niles | 260.0 | 15.2 | Very hard | County estimate |
| Coldwater | 307.0 | 17.9 | Very hard | Utility-reported |
| Escanaba | 131.0 | 7.7 | Hard | Utility-reported |
| Ionia | 395.0 | 23.1 | Very hard | Utility-reported |
| Fairview | 155.0 | 9.1 | Hard | County estimate |
| Melvindale | 303.0 | 17.7 | Very hard | County estimate |
| New Baltimore | 102.0 | 6.0 | Moderately hard | Utility-reported |
| Riverview | 303.0 | 17.7 | Very hard | County estimate |
| Kawkawlin | 154.0 | 9.0 | Hard | County estimate |
| Essexville | 154.0 | 9.0 | Hard | County estimate |
| Sturgis | 306.0 | 17.9 | Very hard | Utility-reported |
| Clawson | 277.0 | 16.2 | Very hard | County estimate |
| Independence Township | 327.0 | 19.1 | Very hard | Utility-reported |
| Village of Clarkston | 327.0 | 19.1 | Very hard | Utility-reported |
| Fenton | 315.0 | 18.4 | Very hard | Utility-reported |
| East Grand Rapids | 111.0 | 6.5 | Moderately hard | Utility-reported |
| Fort Gratiot | 300.0 | 17.5 | Very hard | County estimate |
| Grosse Pointe Park | 98.6 | 5.8 | Moderately hard | Utility-reported |
| South Lyon | 464.0 | 27.1 | Very hard | Utility-reported |
| Sanford | 276.0 | 16.1 | Very hard | County estimate |
| Big Rapids | 172.0 | 10.1 | Hard | Utility-reported |
| Flat Rock | 303.0 | 17.7 | Very hard | County estimate |
| Farmington | 277.0 | 16.2 | Very hard | County estimate |
| Spring Lake | 260.0 | 15.2 | Very hard | County estimate |
| Grosse Ile | 303.0 | 17.7 | Very hard | County estimate |
| Cadillac | 146.0 | 8.5 | Hard | Utility-reported |
| Alpena | 106.0 | 6.2 | Moderately hard | Utility-reported |
| Bridgeport | 260.0 | 15.2 | Very hard | County estimate |
| Howell | 123.0 | 7.2 | Hard | Utility-reported |
| Marysville | 113.0 | 6.6 | Moderately hard | Utility-reported |
| Muskegon Heights | 146.0 | 8.5 | Hard | Utility-reported |
| Reese | 140.0 | 8.2 | Hard | County estimate |
| Ecorse | 303.0 | 17.7 | Very hard | County estimate |
| Grosse Pointe Farms | 110.0 | 6.4 | Moderately hard | Utility-reported |
| New Hudson | 326.0 | 19.1 | Very hard | Utility-reported |
| Fruitport | 160.0 | 9.4 | Hard | County estimate |
| Newport | 300.0 | 17.5 | Very hard | County estimate |
| Freeland | 260.0 | 15.2 | Very hard | County estimate |
| Brighton | 427.0 | 25.0 | Very hard | Utility-reported |
| Iron Mountain | 274.0 | 16.0 | Very hard | Utility-reported |
| Alma | 270.0 | 15.8 | Very hard | County estimate |
| Saline | 270.0 | 15.8 | Very hard | County estimate |
| Plymouth | 303.0 | 17.7 | Very hard | County estimate |
| Petoskey | 274.1 | 16.0 | Very hard | Computed from Ca+Mg |
| Lapeer | 355.0 | 20.8 | Very hard | Utility-reported |
| Greenville | 227.5 | 13.3 | Very hard | County estimate |
| St. Clair | 300.0 | 17.5 | Very hard | County estimate |
| Grand Ledge | 405.5 | 23.7 | Very hard | County estimate |
| Fair Haven | 300.0 | 17.5 | Very hard | County estimate |
| Holly | 340.0 | 19.9 | Very hard | Utility-reported |
| Tecumseh | 348.0 | 20.4 | Very hard | Utility-reported |
| Dexter | 270.0 | 15.8 | Very hard | County estimate |
| Union | 270.0 | 15.8 | Very hard | County estimate |
| Genesee | 91.4 | 5.3 | Moderately hard | Utility-reported |
| Dollar Bay | 90.5 | 5.3 | Moderately hard | County estimate |
| Flushing | 280.0 | 16.4 | Very hard | County estimate |
| Grand Blanc | 186.0 | 10.9 | Very hard | Utility-reported |
| Alanson | 170.0 | 9.9 | Hard | County estimate |
| Center Line | 266.0 | 15.6 | Very hard | County estimate |
| Mason | 355.0 | 20.8 | Very hard | Utility-reported |
| Ludington | 160.0 | 9.4 | Hard | County estimate |
| Hillsdale | 300.0 | 17.5 | Very hard | County estimate |
| Kincheloe | 93.7 | 5.5 | Moderately hard | Utility-reported |
| River Rouge | 303.0 | 17.7 | Very hard | County estimate |
| Rochester | 277.0 | 16.2 | Very hard | County estimate |
| Hudsonville | 260.0 | 15.2 | Very hard | County estimate |
| Marshall | 250.0 | 14.6 | Very hard | County estimate |
| Ada | 230.0 | 13.4 | Very hard | County estimate |
| St. Louis | 255.0 | 14.9 | Very hard | Utility-reported |
| Skandia | 59.4 | 3.5 | Soft | County estimate |
| Ishpeming | 59.4 | 3.5 | Soft | County estimate |
| Milford | 324.0 | 18.9 | Very hard | Utility-reported |
| Northville | 277.0 | 16.2 | Very hard | County estimate |
| Carleton | 300.0 | 17.5 | Very hard | County estimate |
| East China | 106.0 | 6.2 | Moderately hard | Utility-reported |
| Belding | 269.0 | 15.7 | Very hard | Utility-reported |
| New Haven | 301.0 | 17.6 | Very hard | Utility-reported |
| Swartz Creek | 97.7 | 5.7 | Moderately hard | Utility-reported |
| Cheboygan | 192.0 | 11.2 | Very hard | Utility-reported |
| Auburn | 154.0 | 9.0 | Hard | County estimate |
| Grosse Pointe | 104.0 | 6.1 | Moderately hard | Utility-reported |
| Utica | 266.0 | 15.6 | Very hard | County estimate |
| Davison | 170.0 | 9.9 | Hard | Utility-reported |
| Frankenmuth | 260.0 | 15.2 | Very hard | County estimate |
| Marine City | 100.0 | 5.8 | Moderately hard | Utility-reported |
| Caledonia | 496.0 | 29.0 | Very hard | Utility-reported |
| Negaunee | 59.4 | 3.5 | Soft | County estimate |
| Coopersville | 260.0 | 15.2 | Very hard | County estimate |
| Sparta | 230.0 | 13.4 | Very hard | County estimate |
| Algonac | 300.0 | 17.5 | Very hard | County estimate |
| Linden | 338.0 | 19.8 | Very hard | Utility-reported |
| Houghton Lake | 90.0 | 5.3 | Moderately hard | County estimate |
| Plainwell | 240.0 | 14.0 | Very hard | County estimate |
| Williamston | 132.0 | 7.7 | Hard | Utility-reported |
| Douglas | 216.0 | 12.6 | Very hard | Utility-reported |
| Saugatuck | 216.0 | 12.6 | Very hard | Utility-reported |
| Portland | 290.0 | 17.0 | Very hard | County estimate |
| Highland Twp. | 308.0 | 18.0 | Very hard | Utility-reported |
| Romeo | 516.0 | 30.2 | Very hard | Utility-reported |
| Boyne City | 224.0 | 13.1 | Very hard | Utility-reported |
| Rockford | 230.0 | 13.4 | Very hard | County estimate |
| Birch Run | 260.0 | 15.2 | Very hard | County estimate |
| Gaylord | 251.0 | 14.7 | Very hard | Utility-reported |
| Imlay City | 355.0 | 20.8 | Very hard | Utility-reported |
| Oxford | 277.0 | 16.2 | Very hard | County estimate |
| Bloomfield Hills | 277.0 | 16.2 | Very hard | County estimate |
| Cedar Springs | 230.0 | 13.4 | Very hard | County estimate |
| Durand | 332.0 | 19.4 | Very hard | County estimate |
| Paw Paw | 205.5 | 12.0 | Very hard | County estimate |
| Norway | 197.5 | 11.6 | Very hard | County estimate |
| Middleville | 299.0 | 17.5 | Very hard | Utility-reported |
| Blissfield | 241.0 | 14.1 | Very hard | Utility-reported |
| Ferrysburg | 260.0 | 15.2 | Very hard | County estimate |
| Manistique | 106.0 | 6.2 | Moderately hard | Utility-reported |
| Bad Axe | 304.0 | 17.8 | Very hard | Utility-reported |
| Charlevoix | 138.0 | 8.1 | Hard | Utility-reported |
| Clare | 421.0 | 24.6 | Very hard | Utility-reported |
| Ithaca | 279.0 | 16.3 | Very hard | Utility-reported |
| Mount Morris | 378.0 | 22.1 | Very hard | Utility-reported |
| Iron River | 262.0 | 15.3 | Very hard | Utility-reported |
| K. I. Sawyer | 67.3 | 3.9 | Moderately hard | Utility-reported |
| Fowlerville | 307.0 | 17.9 | Very hard | Utility-reported |
| Gladwin | 420.0 | 24.6 | Very hard | Utility-reported |
| Vicksburg | 209.0 | 12.2 | Very hard | Utility-reported |
| St. Ignace | 112.0 | 6.5 | Moderately hard | Utility-reported |
| Bangor | 205.5 | 12.0 | Very hard | County estimate |
| Rogers City | 195.0 | 11.4 | Very hard | Utility-reported |
| Harbert | 260.0 | 15.2 | Very hard | County estimate |
| East Tawas | 140.0 | 8.2 | Hard | County estimate |
| Munising | 81.2 | 4.8 | Moderately hard | Utility-reported |
| Watervliet | 260.0 | 15.2 | Very hard | County estimate |
| Keego Harbor | 277.0 | 16.2 | Very hard | County estimate |
| Trowbridge Park | 110.0 | 6.4 | Moderately hard | Utility-reported |
| Vassar | 244.0 | 14.3 | Very hard | Utility-reported |
| Hartford | 205.5 | 12.0 | Very hard | County estimate |
| Sandusky | 314.5 | 18.4 | Very hard | County estimate |
| Almont | 159.0 | 9.3 | Hard | Utility-reported |
| Potterville | 405.5 | 23.7 | Very hard | County estimate |
| Ontonagon | 62.4 | 3.6 | Moderately hard | County estimate |
| Newaygo | 170.0 | 9.9 | Hard | County estimate |
| Clio | 280.0 | 16.4 | Very hard | County estimate |
| Pinckney | 290.0 | 17.0 | Very hard | County estimate |
| Gwinn | 58.9 | 3.4 | Soft | Utility-reported |
| Montague | 160.0 | 9.4 | Hard | County estimate |
| Croswell | 359.0 | 21.0 | Very hard | Utility-reported |
| Cass City | 300.0 | 17.5 | Very hard | Utility-reported |
| Reed City | 231.0 | 13.5 | Very hard | Utility-reported |
| Bronson | 280.0 | 16.4 | Very hard | County estimate |
| Quinnesec | 197.5 | 11.6 | Very hard | County estimate |
| Somerset Center | 300.0 | 17.5 | Very hard | County estimate |
| Chesaning | 165.0 | 9.7 | Hard | Utility-reported |
| Galesburg | 260.0 | 15.2 | Very hard | County estimate |
| Baraga | 49.0 | 2.9 | Soft | County estimate |
| Clinton | 307.0 | 17.9 | Very hard | County estimate |
| Hudson | 307.0 | 17.9 | Very hard | County estimate |
| L'Anse | 51.0 | 3.0 | Soft | Utility-reported |
| Waterford | 271.0 | 15.8 | Very hard | Utility-reported |
| Jonesville | 300.0 | 17.5 | Very hard | County estimate |
| Morenci | 307.0 | 17.9 | Very hard | County estimate |
| East Jordan | 274.0 | 16.0 | Very hard | Utility-reported |
| Manchester | 270.0 | 15.8 | Very hard | County estimate |
| West Branch | 200.0 | 11.7 | Very hard | County estimate |
| Hart | 180.0 | 10.5 | Hard | County estimate |
| Grawn | 202.0 | 11.8 | Very hard | Utility-reported |
| Bridgman | 260.0 | 15.2 | Very hard | County estimate |
| Constantine | 250.0 | 14.6 | Very hard | County estimate |
| Perry | 365.0 | 21.4 | Very hard | Utility-reported |
| Oscoda | 140.0 | 8.2 | Hard | County estimate |
| Mattawan | 196.0 | 11.5 | Very hard | Utility-reported |
| Burt | 260.0 | 15.2 | Very hard | County estimate |
| Conklin | 260.0 | 15.2 | Very hard | County estimate |
| Corunna | 332.0 | 19.4 | Very hard | County estimate |
| Kalkaska | 140.0 | 8.2 | Hard | County estimate |
| Lake Odessa | 290.0 | 17.0 | Very hard | County estimate |
| Newberry | 46.6 | 2.7 | Soft | County estimate |
| Grass Lake | 256.5 | 15.0 | Very hard | County estimate |
| Shelby | 180.0 | 10.5 | Hard | County estimate |
| Crystal Falls | 75.0 | 4.4 | Moderately hard | County estimate |
| Berrien Springs | 350.0 | 20.5 | Very hard | Utility-reported |
| Evart | 212.0 | 12.4 | Very hard | Utility-reported |
| Lawton | 205.5 | 12.0 | Very hard | County estimate |
| New Buffalo | 260.0 | 15.2 | Very hard | County estimate |
| Yale | 300.0 | 17.5 | Very hard | County estimate |
| Grayling | 175.0 | 10.2 | Hard | Utility-reported |
| Marlette | 314.5 | 18.4 | Very hard | County estimate |
| Leslie | 374.0 | 21.9 | Very hard | County estimate |
| Decatur | 205.5 | 12.0 | Very hard | County estimate |
| Cassopolis | 270.0 | 15.8 | Very hard | County estimate |
| Wakefield | 50.0 | 2.9 | Soft | County estimate |
| Howard City | 237.0 | 13.9 | Very hard | Utility-reported |
| Armada | 254.0 | 14.8 | Very hard | Utility-reported |
| Capac | 331.0 | 19.4 | Very hard | Utility-reported |
| Sebewaing | 125.0 | 7.3 | Hard | County estimate |
| Olivet | 405.5 | 23.7 | Very hard | County estimate |
| Harbor Beach | 125.0 | 7.3 | Hard | County estimate |
| Port Hope | 125.0 | 7.3 | Hard | County estimate |
| South Rockwood | 300.0 | 17.5 | Very hard | County estimate |
| Homer | 250.0 | 14.6 | Very hard | County estimate |
| Kingsley | 243.0 | 14.2 | Very hard | Utility-reported |
| Montrose | 280.0 | 16.4 | Very hard | County estimate |
| Elk Rapids | 177.0 | 10.3 | Hard | County estimate |
| White Pigeon | 383.0 | 22.4 | Very hard | Utility-reported |
| Union City | 270.0 | 15.8 | Very hard | County estimate |
| Nashville | 210.0 | 12.3 | Very hard | County estimate |
| Three Oaks | 260.0 | 15.2 | Very hard | County estimate |
| Bessemer | 50.0 | 2.9 | Soft | County estimate |
| Ovid | 305.0 | 17.8 | Very hard | Utility-reported |
| Centreville | 250.0 | 14.6 | Very hard | County estimate |
| Coloma | 260.0 | 15.2 | Very hard | County estimate |
| Quincy | 280.0 | 16.4 | Very hard | County estimate |
| Luther | 156.0 | 9.1 | Hard | County estimate |
| Schoolcraft | 260.0 | 15.2 | Very hard | County estimate |
| Shepherd | 247.0 | 14.4 | Very hard | Utility-reported |
| Standish | 120.0 | 7.0 | Moderately hard | County estimate |
| Webberville | 381.0 | 22.3 | Very hard | Utility-reported |
| Fennville | 361.0 | 21.1 | Very hard | Utility-reported |
| Stanton | 227.5 | 13.3 | Very hard | County estimate |
| White Cloud | 170.0 | 9.9 | Hard | County estimate |
| Saranac | 290.0 | 17.0 | Very hard | County estimate |
| Breckenridge | 236.0 | 13.8 | Very hard | Utility-reported |
| Brown City | 113.0 | 6.6 | Moderately hard | Utility-reported |
| Brooklyn | 256.5 | 15.0 | Very hard | County estimate |
| Litchfield | 380.0 | 22.2 | Very hard | Utility-reported |
| Manton | 182.0 | 10.6 | Very hard | Utility-reported |
| Frankfort | 153.0 | 8.9 | Hard | County estimate |
| Bellevue | 405.5 | 23.7 | Very hard | County estimate |
| Edwardsburg | 339.0 | 19.8 | Very hard | Utility-reported |
| Edmore | 227.5 | 13.3 | Very hard | County estimate |
| Coleman | 310.0 | 18.1 | Very hard | Utility-reported |
| Ravenna | 160.0 | 9.4 | Hard | County estimate |
| Scottville | 160.0 | 9.4 | Hard | County estimate |
| Pinconning | 154.0 | 9.0 | Hard | County estimate |
| Pigeon | 125.0 | 7.3 | Hard | County estimate |
| Lake Linden | 90.5 | 5.3 | Moderately hard | County estimate |
| Stockbridge | 374.0 | 21.9 | Very hard | County estimate |
| Harbor Springs | 216.0 | 12.6 | Very hard | Utility-reported |
| Colon | 312.0 | 18.3 | Very hard | Utility-reported |
| Memphis | 250.0 | 14.6 | Very hard | Utility-reported |
| Lexington | 114.0 | 6.7 | Moderately hard | Utility-reported |
| Fowler | 389.0 | 22.8 | Very hard | Utility-reported |
| Petersburg | 300.0 | 17.5 | Very hard | County estimate |
| Davisburg | 277.0 | 16.2 | Very hard | County estimate |
| Harrison | 153.0 | 8.9 | Hard | Utility-reported |
| Bellaire | 177.0 | 10.3 | Hard | County estimate |
| Reading | 300.0 | 17.5 | Very hard | County estimate |
| Roscommon | 90.0 | 5.3 | Moderately hard | County estimate |
| Millington | 140.0 | 8.2 | Hard | County estimate |
| Beaverton | 196.0 | 11.5 | Very hard | County estimate |
| Baldwin | 156.0 | 9.1 | Hard | County estimate |
| Concord | 256.5 | 15.0 | Very hard | County estimate |
| Lawrence | 205.5 | 12.0 | Very hard | County estimate |
| Dryden | 253.0 | 14.8 | Very hard | Utility-reported |
| North Branch | 346.0 | 20.2 | Very hard | Utility-reported |
| Lakeview | 227.5 | 13.3 | Very hard | County estimate |
| Caspian | 210.0 | 12.3 | Very hard | Utility-reported |
| Central Lake | 257.0 | 15.0 | Very hard | Utility-reported |
| Hastings | 210.0 | 12.3 | Very hard | County estimate |
| Baroda | 260.0 | 15.2 | Very hard | County estimate |
| Walkerville | 180.0 | 10.5 | Hard | County estimate |
| Onsted | 282.0 | 16.5 | Very hard | Utility-reported |
| Mackinaw City | 263.0 | 15.4 | Very hard | Utility-reported |
| Suttons Bay | 130.0 | 7.6 | Hard | County estimate |
| Marion | 193.0 | 11.3 | Very hard | Utility-reported |
| Farwell | 195.0 | 11.4 | Very hard | Utility-reported |
| Otisville | 280.0 | 16.4 | Very hard | County estimate |
| Ubly | 241.0 | 14.1 | Very hard | Utility-reported |
| Lake City | 145.0 | 8.5 | Hard | Utility-reported |
| Burr Oak | 295.0 | 17.3 | Very hard | Utility-reported |
| Elkton | 125.0 | 7.3 | Hard | County estimate |
| Columbiaville | 186.0 | 10.9 | Very hard | Utility-reported |
| Caseville | 151.0 | 8.8 | Hard | Utility-reported |
| Gobles | 236.0 | 13.8 | Very hard | Utility-reported |
| Tekonsha | 300.0 | 17.5 | Very hard | Utility-reported |
| Jasper | 307.0 | 17.9 | Very hard | County estimate |
| Hillman | 365.0 | 21.4 | Very hard | Utility-reported |
| Pierson | 227.5 | 13.3 | Very hard | County estimate |
| Fairgrove | 140.0 | 8.2 | Hard | County estimate |
| Sheridan | 227.5 | 13.3 | Very hard | County estimate |
| Maple Rapids | 261.0 | 15.3 | Very hard | Utility-reported |
| McBain | 280.0 | 16.4 | Very hard | Utility-reported |
| Port Sanilac | 409.0 | 23.9 | Very hard | Utility-reported |
| Bancroft | 290.0 | 17.0 | Very hard | Utility-reported |
| Britton | 140.0 | 8.2 | Hard | Utility-reported |
| Eau Claire | 260.0 | 15.2 | Very hard | County estimate |
| Byron | 301.0 | 17.6 | Very hard | Utility-reported |
| Metamora | 398.0 | 23.3 | Very hard | Utility-reported |
| Buckley | 278.0 | 16.3 | Very hard | Utility-reported |
| Carsonville | 362.0 | 21.2 | Very hard | Utility-reported |
| Ashley | 373.0 | 21.8 | Very hard | Utility-reported |
| Harrisville | 236.0 | 13.8 | Very hard | Utility-reported |
| Palmer | 117.0 | 6.8 | Moderately hard | Utility-reported |
| Pewamo | 314.0 | 18.4 | Very hard | Utility-reported |
| Mackinac Island | 104.0 | 6.1 | Moderately hard | Utility-reported |
| Powers | 221.0 | 12.9 | Very hard | Utility-reported |
| Perrinton | 511.0 | 29.9 | Very hard | Utility-reported |
| Atlanta | 236.0 | 13.8 | Very hard | Utility-reported |
| Grand Marais | 183.0 | 10.7 | Very hard | Utility-reported |
| Mesick | 197.0 | 11.5 | Very hard | Utility-reported |
| Gagetown | 245.0 | 14.3 | Very hard | Utility-reported |
| Gaastra | 75.0 | 4.4 | Moderately hard | County estimate |
| Boyne Falls | 231.0 | 13.5 | Very hard | Utility-reported |
| Barton Hills | 380.0 | 22.2 | Very hard | Utility-reported |
| Sand Lake | 230.0 | 13.4 | Very hard | County estimate |
| Amasa | 75.0 | 4.4 | Moderately hard | County estimate |
| Ellsworth | 272.0 | 15.9 | Very hard | Utility-reported |
| Whitmore Lake | 270.0 | 15.8 | Very hard | County estimate |
| Garden | 120.0 | 7.0 | Moderately hard | County estimate |
| Owendale | 266.0 | 15.6 | Very hard | Utility-reported |
| Posen | 183.0 | 10.7 | Very hard | Utility-reported |
| Millersburg | 254.0 | 14.8 | Very hard | Utility-reported |
| Carney | 220.0 | 12.9 | Very hard | County estimate |
| Marcellus | 270.0 | 15.8 | Very hard | County estimate |
| Minden City | 178.0 | 10.4 | Hard | Utility-reported |
| Mt. Morris | 280.0 | 16.4 | Very hard | County estimate |
| Lamont | 260.0 | 15.2 | Very hard | County estimate |
| Brimley | 49.1 | 2.9 | Soft | County estimate |
| Whitehall | 160.0 | 9.4 | Hard | County estimate |
| Cedarville | 100.0 | 5.8 | Moderately hard | County estimate |
| Champion | 59.4 | 3.5 | Soft | County estimate |
| Clarklake | 256.5 | 15.0 | Very hard | County estimate |
| Covert | 205.5 | 12.0 | Very hard | County estimate |
| Dorr | 240.0 | 14.0 | Very hard | County estimate |
| Frederic | 135.0 | 7.9 | Hard | County estimate |
| Glen Arbor | 130.0 | 7.6 | Hard | County estimate |
| Gowen | 230.0 | 13.4 | Very hard | County estimate |
| Hale | 140.0 | 8.2 | Hard | County estimate |
| Hamilton | 240.0 | 14.0 | Very hard | County estimate |
| Hartland | 290.0 | 17.0 | Very hard | County estimate |
| Hemlock | 260.0 | 15.2 | Very hard | County estimate |
| Hermansville | 220.0 | 12.9 | Very hard | County estimate |
| Highland | 277.0 | 16.2 | Very hard | County estimate |
| Holton | 160.0 | 9.4 | Hard | County estimate |
| Hopkins | 240.0 | 14.0 | Very hard | County estimate |
| Indian River | 160.0 | 9.4 | Hard | County estimate |
| Johannesburg | 81.0 | 4.7 | Moderately hard | County estimate |
| Kewadin | 177.0 | 10.3 | Hard | County estimate |
| Kinde | 125.0 | 7.3 | Hard | County estimate |
| Kingston | 140.0 | 8.2 | Hard | County estimate |
| Lake George | 218.0 | 12.8 | Very hard | County estimate |
| Lewiston | 155.0 | 9.1 | Hard | County estimate |
| Lupton | 200.0 | 11.7 | Very hard | County estimate |
| Manitou Beach | 307.0 | 17.9 | Very hard | County estimate |
| Mecosta | 160.0 | 9.4 | Hard | County estimate |
| Michigan Center | 256.5 | 15.0 | Very hard | County estimate |
| Mt. Clemens | 266.0 | 15.6 | Very hard | County estimate |
| Nunica | 260.0 | 15.2 | Very hard | County estimate |
| Okemos | 374.0 | 21.9 | Very hard | County estimate |
| Port Austin | 125.0 | 7.3 | Hard | County estimate |
| Prudenville | 90.0 | 5.3 | Moderately hard | County estimate |
| Remus | 160.0 | 9.4 | Hard | County estimate |
| Rosebush | 225.0 | 13.2 | Very hard | County estimate |
| Sagola | 197.5 | 11.6 | Very hard | County estimate |
| South Range | 90.5 | 5.3 | Moderately hard | County estimate |
| Twin Lake | 160.0 | 9.4 | Hard | County estimate |
| Vanderbilt | 81.0 | 4.7 | Moderately hard | County estimate |
| Vestaburg | 227.5 | 13.3 | Very hard | County estimate |
| Watersmeet | 50.0 | 2.9 | Soft | County estimate |
| Wellston | 160.0 | 9.4 | Hard | County estimate |
| West Olive | 260.0 | 15.2 | Very hard | County estimate |
| Williamsburg | 131.0 | 7.7 | Hard | County 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.
Michigan Water Hardness FAQ
Does Michigan have hard water?
Yes — across Michigan's measured cities, typical tap water is hard. The median is 216.0 mg/L (12.6 gpg) — very hard on the USGS scale, where anything above 120 mg/L (7 gpg) counts as hard. 140 of Michigan's 189 measured cities fall in the hard or very hard bands (74%), so check your own city rather than the state average.
How hard is tap water in Michigan?
Across the 189 Michigan cities with measured values in our index, the median hardness is 216.0 mg/L (12.6 gpg) — very hard on the USGS scale. Individual cities range from 51.0 to 516.0 mg/L, so check your own city rather than assuming the state number.
Which city in Michigan has the hardest water?
Romeo has the hardest measured tap water in our Michigan index at 516.0 mg/L (30.2 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?
140 of Michigan's 189 measured cities (74%) 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.
Need whole-house or professional water treatment?
For the problems a pitcher or under-sink filter cannot fix — scale, rust and black staining, sulfur smell, well contamination, or test results you cannot explain. Tell us what is happening and we will connect you with a local water-treatment professional.
Get the Weekly Water Brief
One email a week on water testing, treatment, and what water-quality data means for your home.
One email a week. Unsubscribe anytime.