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.
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.0% |
| Moderately hard | 60-120 mg/L | 85 | 27.2% |
| Hard | 120-180 mg/L | 59 | 18.9% |
| Very hard | >180 mg/L | 165 | 52.9% |
Hardest and Softest Water in Michigan
Measured values only; labeled county estimates and values under active dispute never rank.
Hardest water in Michigan
- Prudenville — 578.5 mg/L (33.8 gpg), very hard
- Grandville — 524.4 mg/L (30.7 gpg), very hard
- Romeo — 512.3 mg/L (30.0 gpg), very hard
- Perrington — 511.0 mg/L (29.9 gpg), very hard
- Perrinton — 511.0 mg/L (29.9 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
- 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.
| City | Hardness (mg/L) | gpg | Category | Data |
|---|---|---|---|---|
| Detroit | 96.5 | 5.6 | Moderately hard | Utility-reported |
| River Rouge | 96.0 | 5.6 | Moderately hard | Utility-reported |
| Harper Woods | 94.8 | 5.5 | Moderately hard | Utility-reported |
| Grosse Pointe Park | 94.9 | 5.5 | Moderately hard | Utility-reported |
| Grosse Pointe | 94.9 | 5.5 | Moderately hard | Utility-reported |
| Kentwood | 138.0 | 8.1 | Hard | Utility-reported |
| Sterling Heights | 102.7 | 6.0 | Moderately hard | Utility-reported |
| East Grand Rapids | 136.9 | 8.0 | Hard | Utility-reported |
| Forest Hills | 138.0 | 8.1 | Hard | Utility-reported |
| Walker | 138.0 | 8.1 | Hard | Utility-reported |
| Grand Rapids | 138.0 | 8.1 | Hard | Utility-reported |
| Livonia | 88.7 | 5.2 | Moderately hard | Utility-reported |
| Warren | 94.6 | 5.5 | Moderately hard | Utility-reported |
| Westland | 95.7 | 5.6 | Moderately hard | Utility-reported |
| Dearborn | 98.6 | 5.8 | Moderately hard | Utility-reported |
| Troy | 99.6 | 5.8 | Moderately hard | Utility-reported |
| Kalamazoo | 318.9 | 18.6 | Very hard | Utility-reported |
| Eastwood | 319.0 | 18.6 | Very hard | Utility-reported |
| Westwood | 319.0 | 18.6 | Very hard | Utility-reported |
| Lansing | 446.0 | 26.1 | Very hard | Utility-reported |
| Inkster | 104.3 | 6.1 | Moderately hard | Utility-reported |
| Flint | 137.3 | 8.0 | Hard | Utility-reported |
| Utica | 102.7 | 6.0 | Moderately hard | Utility-reported |
| Clio | 312.0 | 18.3 | Very hard | Utility-reported |
| St. Clair Shores | 101.0 | 5.9 | Moderately hard | Utility-reported |
| Dearborn Heights | 104.3 | 6.1 | Moderately hard | Utility-reported |
| Garden City | 104.3 | 6.1 | Moderately hard | Utility-reported |
| Pontiac | 120.7 | 7.1 | Hard | Utility-reported |
| Rochester Hills | 100.4 | 5.9 | Moderately hard | Utility-reported |
| Plymouth | 104.5 | 6.1 | Moderately hard | Utility-reported |
| Lincoln Park | 127.9 | 7.5 | Hard | Utility-reported |
| Roseville | 101.0 | 5.9 | Moderately hard | Utility-reported |
| Romulus | 92.1 | 5.4 | Moderately hard | Utility-reported |
| Mount Clemens | 102.8 | 6.0 | Moderately hard | Utility-reported |
| Taylor | 102.2 | 6.0 | Moderately hard | Utility-reported |
| Allen Park | 104.0 | 6.1 | Moderately hard | Utility-reported |
| Dewitt | 310.0 | 18.1 | Very hard | County estimate |
| Southfield | 117.9 | 6.9 | Moderately hard | Utility-reported |
| Melvindale | 104.0 | 6.1 | Moderately hard | Utility-reported |
| Ann Arbor | 155.9 | 9.1 | Hard | Utility-reported |
| Barton Hills | 152.7 | 8.9 | Hard | Utility-reported |
| Ecorse | 104.0 | 6.1 | Moderately hard | Utility-reported |
| Fraser | 101.0 | 5.9 | Moderately hard | Utility-reported |
| Farmington Hills | 119.4 | 7.0 | Moderately hard | Utility-reported |
| Clinton Township | 101.0 | 5.9 | Moderately hard | Utility-reported |
| St. Clair Shores | 266.0 | 15.6 | Very hard | County estimate |
| Keego Harbor | 120.7 | 7.1 | Hard | Utility-reported |
| Orchard Lake Village | 120.7 | 7.1 | Hard | Utility-reported |
| Sylvan Lake | 120.7 | 7.1 | Hard | Utility-reported |
| Saginaw | 109.0 | 6.4 | Moderately hard | Utility-reported |
| Franklin | 120.7 | 7.1 | Hard | Utility-reported |
| Canton | 90.6 | 5.3 | Moderately hard | Utility-reported |
| Wayne | 90.6 | 5.3 | Moderately hard | Utility-reported |
| Macomb | 151.0 | 8.8 | Hard | Utility-reported |
| Beecher | 143.5 | 8.4 | Hard | Utility-reported |
| Beechwood | 141.0 | 8.3 | Hard | Utility-reported |
| Ypsilanti | 167.6 | 9.8 | Hard | Utility-reported |
| Mount Morris | 120.6 | 7.0 | Hard | Utility-reported |
| Johannesburg | 99.6 | 5.8 | Moderately hard | Utility-reported |
| Novi | 115.8 | 6.8 | Moderately hard | Utility-reported |
| Rochester | 104.2 | 6.1 | Moderately hard | Utility-reported |
| Sheridan | 96.4 | 5.6 | Moderately hard | Utility-reported |
| Cedarville | 324.0 | 18.9 | Very hard | Utility-reported |
| Shelby Township | 105.0 | 6.1 | Moderately hard | Utility-reported |
| Three Rivers | 250.0 | 14.6 | Very hard | County estimate |
| Flushing | 113.0 | 6.6 | Moderately hard | Utility-reported |
| Holland | 141.0 | 8.3 | Hard | Utility-reported |
| Farmington | 97.8 | 5.7 | Moderately hard | Utility-reported |
| Marshall | 96.2 | 5.6 | Moderately hard | Utility-reported |
| Bay City | 128.0 | 7.5 | Hard | Utility-reported |
| Auburn Hills | 90.3 | 5.3 | Moderately hard | Utility-reported |
| Royal Oak | 96.2 | 5.6 | Moderately hard | Utility-reported |
| Midland | 106.0 | 6.2 | Moderately hard | Utility-reported |
| New Baltimore | 136.5 | 8.0 | Hard | Utility-reported |
| Detroit Beach | 122.0 | 7.1 | Hard | Utility-reported |
| Monroe | 122.0 | 7.1 | Hard | Utility-reported |
| Woodland Beach | 122.0 | 7.1 | Hard | Utility-reported |
| West Bloomfield | 146.0 | 8.5 | Hard | Utility-reported |
| Bloomfield Hills | 90.3 | 5.3 | Moderately hard | Utility-reported |
| New Haven | 165.3 | 9.7 | Hard | Utility-reported |
| Portage | 304.0 | 17.8 | Very hard | Utility-reported |
| East Lansing | 194.4 | 11.4 | Very hard | Utility-reported |
| Alpena | 272.6 | 15.9 | Very hard | Utility-reported |
| Burton | 149.5 | 8.7 | Hard | Utility-reported |
| Flat Rock | 96.1 | 5.6 | Moderately hard | Utility-reported |
| Zeeland | 260.0 | 15.2 | Very hard | County estimate |
| Birmingham | 96.7 | 5.7 | Moderately hard | Utility-reported |
| Bingham Farms | 90.3 | 5.3 | Moderately hard | Utility-reported |
| Dorr | 147.0 | 8.6 | Hard | Utility-reported |
| Jenison | 260.0 | 15.2 | Very hard | County estimate |
| Beverly Hills | 90.3 | 5.3 | Moderately hard | Utility-reported |
| Byron Center | 230.0 | 13.4 | Very hard | County estimate |
| Muskegon | 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 |
| Woodhaven | 96.1 | 5.6 | 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 |
| Northville | 132.0 | 7.7 | Hard | Utility-reported |
| Madison Heights | 277.0 | 16.2 | Very hard | County estimate |
| Oak Park | 277.0 | 16.2 | Very hard | County estimate |
| Jackson | 220.9 | 12.9 | Very hard | Utility-reported |
| Grand Blanc | 157.3 | 9.2 | Hard | Utility-reported |
| Adrian | 221.1 | 12.9 | Very hard | Utility-reported |
| Olivet | 118.0 | 6.9 | Moderately hard | Utility-reported |
| Howell | 117.3 | 6.9 | Moderately hard | Utility-reported |
| 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 |
| Saline | 123.0 | 7.2 | Hard | Utility-reported |
| Harrison Township | 110.0 | 6.4 | Moderately hard | Utility-reported |
| Otisville | 450.0 | 26.3 | Very hard | Utility-reported |
| Brighton | 418.5 | 24.5 | Very hard | Utility-reported |
| Hamtramck | 86.8 | 5.1 | Moderately hard | Utility-reported |
| Ferndale | 99.5 | 5.8 | Moderately hard | Utility-reported |
| Grand Ledge | 458.0 | 26.8 | Very hard | Utility-reported |
| Wacousta | 458.0 | 26.8 | Very hard | Utility-reported |
| Waverly | 458.0 | 26.8 | Very hard | Utility-reported |
| Hickory Corners | 210.0 | 12.3 | Very hard | County estimate |
| Marysville | 113.0 | 6.6 | Moderately hard | Utility-reported |
| Hale | 317.6 | 18.6 | Very hard | Utility-reported |
| Allendale | 260.0 | 15.2 | Very hard | County estimate |
| Traverse City | 163.3 | 9.6 | Hard | Utility-reported |
| 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 | 524.4 | 30.7 | Very hard | Computed from Ca+Mg |
| 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 |
| Gibraltar | 109.0 | 6.4 | Moderately hard | Utility-reported |
| Berkley | 84.6 | 5.0 | Moderately hard | Utility-reported |
| Sault Ste. Marie | 52.9 | 3.1 | Soft | Utility-reported |
| Stanwood | 160.0 | 9.4 | Hard | County estimate |
| Niles | 260.0 | 15.2 | Very hard | County estimate |
| Coldwater | 302.1 | 17.7 | Very hard | Utility-reported |
| Escanaba | 131.0 | 7.7 | Hard | Utility-reported |
| Ionia | 395.0 | 23.1 | Very hard | Utility-reported |
| Okemos | 425.0 | 24.9 | Very hard | Utility-reported |
| Fairview | 155.0 | 9.1 | Hard | County estimate |
| Sturgis | 306.0 | 17.9 | Very hard | Utility-reported |
| Lewiston | 231.0 | 13.5 | Very hard | Utility-reported |
| Kawkawlin | 154.0 | 9.0 | Hard | County estimate |
| Essexville | 154.0 | 9.0 | Hard | County estimate |
| Clawson | 277.0 | 16.2 | Very hard | County estimate |
| South Lyon | 459.7 | 26.9 | Very hard | Utility-reported |
| 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 |
| Fort Gratiot | 300.0 | 17.5 | Very hard | County estimate |
| Battle Creek | 195.0 | 11.4 | Very hard | Utility-reported |
| Cadillac | 146.9 | 8.6 | Hard | Utility-reported |
| Sanford | 276.0 | 16.1 | Very hard | County estimate |
| Big Rapids | 172.0 | 10.1 | Hard | Utility-reported |
| St Joseph | 172.0 | 10.1 | Hard | Utility-reported |
| Marine City | 103.3 | 6.0 | Moderately hard | Utility-reported |
| Spring Lake | 260.0 | 15.2 | Very hard | County estimate |
| Grosse Ile | 303.0 | 17.7 | Very hard | County estimate |
| Riverview | 109.0 | 6.4 | Moderately hard | Utility-reported |
| Trenton | 109.0 | 6.4 | Moderately hard | Utility-reported |
| Bridgeport | 260.0 | 15.2 | Very hard | County estimate |
| Muskegon Heights | 146.0 | 8.5 | Hard | Utility-reported |
| Holly | 322.9 | 18.9 | Very hard | Utility-reported |
| Reese | 140.0 | 8.2 | Hard | County estimate |
| Grosse Pointe Farms | 110.0 | 6.4 | Moderately hard | Utility-reported |
| Hartland | 422.0 | 24.7 | Very 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 |
| Lapeer | 353.6 | 20.7 | Very hard | Utility-reported |
| Iron Mountain | 274.0 | 16.0 | Very hard | Utility-reported |
| Alma | 270.0 | 15.8 | Very hard | County estimate |
| Petoskey | 274.0 | 16.0 | Very hard | Computed from Ca+Mg |
| Oxford | 355.0 | 20.8 | Very hard | Utility-reported |
| Milford | 321.0 | 18.8 | Very hard | Utility-reported |
| St. Clair | 300.0 | 17.5 | Very hard | County estimate |
| Fair Haven | 300.0 | 17.5 | Very hard | County estimate |
| 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 |
| 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 |
| Hudsonville | 385.0 | 22.5 | Very hard | Utility-reported |
| Kincheloe | 93.7 | 5.5 | Moderately hard | Utility-reported |
| Ada | 230.0 | 13.4 | Very hard | County estimate |
| St. Louis | 255.0 | 14.9 | Very hard | Utility-reported |
| Howard City | 237.0 | 13.9 | Very hard | Utility-reported |
| Skandia | 59.4 | 3.5 | Soft | County estimate |
| Davison | 181.1 | 10.6 | Very hard | Utility-reported |
| Ishpeming | 59.4 | 3.5 | Soft | 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 |
| Swartz Creek | 97.7 | 5.7 | Moderately hard | Utility-reported |
| Cheboygan | 192.0 | 11.2 | Very hard | Utility-reported |
| Nunica | 93.1 | 5.4 | Moderately hard | Utility-reported |
| Auburn | 154.0 | 9.0 | Hard | County estimate |
| Coopersville | 180.0 | 10.5 | Hard | Utility-reported |
| Lexington | 114.0 | 6.7 | Moderately hard | Utility-reported |
| Frankenmuth | 260.0 | 15.2 | Very hard | County estimate |
| Caledonia | 496.0 | 29.0 | Very hard | Utility-reported |
| Negaunee | 59.4 | 3.5 | Soft | County estimate |
| Bridgman | 127.0 | 7.4 | Hard | Utility-reported |
| 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 |
| Wellston | 132.0 | 7.7 | Hard | Utility-reported |
| Williamston | 132.0 | 7.7 | Hard | Utility-reported |
| Middleville | 299.0 | 17.5 | Very 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 |
| Boyne City | 224.3 | 13.1 | Very hard | Utility-reported |
| Romeo | 512.3 | 30.0 | Very hard | Utility-reported |
| Waterford | 301.7 | 17.6 | Very hard | Utility-reported |
| Rockford | 230.0 | 13.4 | Very hard | County estimate |
| Fowlerville | 253.5 | 14.8 | Very hard | Utility-reported |
| Birch Run | 260.0 | 15.2 | Very hard | County estimate |
| Gaylord | 251.0 | 14.7 | Very hard | Utility-reported |
| Sagola | 251.0 | 14.7 | Very hard | Utility-reported |
| Vicksburg | 221.4 | 12.9 | Very hard | Utility-reported |
| Imlay City | 355.0 | 20.8 | Very hard | Utility-reported |
| Sparta | 317.0 | 18.5 | Very hard | Utility-reported |
| Durand | 332.0 | 19.4 | Very hard | County estimate |
| Bad Axe | 293.0 | 17.1 | Very hard | Utility-reported |
| Norway | 197.5 | 11.6 | Very hard | County estimate |
| Highland | 399.0 | 23.3 | 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 |
| Kinde | 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 |
| Iron River | 262.0 | 15.3 | Very hard | Utility-reported |
| Comstock | 438.0 | 25.6 | Very hard | Utility-reported |
| K. I. Sawyer | 67.3 | 3.9 | Moderately hard | Utility-reported |
| Gladwin | 417.7 | 24.4 | Very hard | Utility-reported |
| Ludington | 112.0 | 6.5 | Moderately hard | Utility-reported |
| St. Ignace | 112.0 | 6.5 | Moderately hard | Utility-reported |
| St. Ignace | 100.0 | 5.8 | Moderately hard | County estimate |
| 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 |
| Marquette | 110.0 | 6.4 | Moderately hard | Utility-reported |
| 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 |
| 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 |
| 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 |
| Port Austin | 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 |
| 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 |
| Newberry | 46.6 | 2.7 | Soft | County estimate |
| Harbor Springs | 210.4 | 12.3 | Very hard | Utility-reported |
| 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 |
| 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 |
| 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 |
| Plainwell | 341.0 | 19.9 | Very hard | Utility-reported |
| Boyne Falls | 258.9 | 15.1 | Very hard | Utility-reported |
| 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 |
| Webberville | 374.5 | 21.9 | Very hard | Utility-reported |
| Coloma | 260.0 | 15.2 | Very hard | County estimate |
| Luther | 156.0 | 9.1 | Hard | County estimate |
| Schoolcraft | 260.0 | 15.2 | Very hard | County estimate |
| Manitou Beach | 247.0 | 14.4 | Very hard | Utility-reported |
| Shepherd | 247.0 | 14.4 | Very hard | Utility-reported |
| Standish | 120.0 | 7.0 | Moderately hard | County estimate |
| 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 |
| Hamilton | 310.0 | 18.1 | Very hard | Utility-reported |
| Centreville | 81.7 | 4.8 | Moderately 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 |
| Hermansville | 175.0 | 10.2 | Hard | Utility-reported |
| Colon | 312.0 | 18.3 | Very hard | Utility-reported |
| Memphis | 250.0 | 14.6 | Very hard | Utility-reported |
| Grass Lake | 114.0 | 6.7 | Moderately hard | Utility-reported |
| Fowler | 389.0 | 22.8 | Very hard | Utility-reported |
| Hillsdale | 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 |
| Greenville | 346.0 | 20.2 | 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 |
| Clarklake | 260.0 | 15.2 | 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 |
| Burr Oak | 295.0 | 17.3 | Very hard | Utility-reported |
| Marion | 193.0 | 11.3 | Very hard | Utility-reported |
| Farwell | 195.0 | 11.4 | Very hard | Utility-reported |
| Whitmore Lake | 183.8 | 10.8 | Very hard | Utility-reported |
| Ubly | 241.0 | 14.1 | Very hard | Utility-reported |
| Lake City | 145.0 | 8.5 | 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 |
| 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 |
| Byron | 301.0 | 17.6 | Very hard | Utility-reported |
| Hopkins | 140.0 | 8.2 | 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 |
| Frederic | 290.0 | 17.0 | 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 |
| Cedar Springs | 346.0 | 20.2 | Very hard | Utility-reported |
| Perrington | 511.0 | 29.9 | Very hard | Utility-reported |
| Perrinton | 511.0 | 29.9 | Very hard | Utility-reported |
| Atlanta | 236.0 | 13.8 | Very hard | Utility-reported |
| Champion | 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 |
| Kingston | 245.0 | 14.3 | Very hard | Utility-reported |
| Gaastra | 75.0 | 4.4 | Moderately hard | County estimate |
| Mecosta | 310.4 | 18.1 | Very hard | Utility-reported |
| Lake Fenton | 276.0 | 16.1 | 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 |
| Paw Paw | 254.0 | 14.8 | Very hard | Utility-reported |
| Prudenville | 578.5 | 33.8 | Very hard | Utility-reported |
| Lupton | 372.0 | 21.8 | Very hard | Utility-reported |
| Eau Claire | 108.0 | 6.3 | Moderately hard | Utility-reported |
| Marlette | 235.0 | 13.7 | Very hard | Utility-reported |
| Owendale | 266.0 | 15.6 | Very hard | Utility-reported |
| Posen | 183.0 | 10.7 | Very hard | Utility-reported |
| Twin Lake | 130.0 | 7.6 | Hard | Utility-reported |
| Bay Shore | 244.0 | 14.3 | 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 |
| Remus | 195.0 | 11.4 | Very hard | Utility-reported |
| Minden City | 178.0 | 10.4 | Hard | Utility-reported |
| Quincy | 314.0 | 18.4 | Very hard | Utility-reported |
| Mt. Clemens | 317.5 | 18.6 | Very hard | Utility-reported |
| Mt. Morris | 280.0 | 16.4 | Very hard | County estimate |
| Michigan Center | 160.0 | 9.4 | Hard | Utility-reported |
| Garden | 350.0 | 20.5 | Very hard | Utility-reported |
| Lake Odessa | 137.0 | 8.0 | Hard | Utility-reported |
| West Olive | 205.0 | 12.0 | Very hard | Utility-reported |
| Lake George | 180.0 | 10.5 | Hard | Utility-reported |
| Lamont | 260.0 | 15.2 | Very hard | County estimate |
| Gowen | 208.0 | 12.2 | Very hard | Utility-reported |
| Holton | 91.8 | 5.4 | Moderately hard | Utility-reported |
| Suttons Bay | 328.0 | 19.2 | Very hard | Utility-reported |
| Shelby | 353.0 | 20.6 | Very hard | Utility-reported |
| Argentine | 89.4 | 5.2 | Moderately hard | Utility-reported |
| Kalkaska | 89.4 | 5.2 | Moderately hard | Utility-reported |
| Williamsburg | 253.0 | 14.8 | Very hard | Utility-reported |
| Vestaburg | 328.0 | 19.2 | Very hard | Utility-reported |
| Brimley | 49.1 | 2.9 | Soft | County estimate |
| Whitehall | 160.0 | 9.4 | Hard | County estimate |
| Indian River | 155.0 | 9.1 | Hard | Utility-reported |
| Kewadin | 265.0 | 15.5 | Very hard | Utility-reported |
| Rosebush | 334.0 | 19.5 | Very hard | Utility-reported |
| Vanderbilt | 227.0 | 13.3 | Very hard | Utility-reported |
| Covert | 205.5 | 12.0 | Very hard | County estimate |
| Glen Arbor | 130.0 | 7.6 | Hard | County estimate |
| Hemlock | 260.0 | 15.2 | Very hard | County estimate |
| South Range | 90.5 | 5.3 | Moderately hard | County estimate |
| Watersmeet | 50.0 | 2.9 | Soft | 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 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.