Water Hardness in Minnesota
Across 49 measured cities — with 341 more covered by labeled county-level estimates — Minnesota's median tap water hardness is 162.0 mg/L (9.5 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.
Minnesota 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 | 6 | 12.2% |
| Moderately hard | 60-120 mg/L | 13 | 26.5% |
| Hard | 120-180 mg/L | 9 | 18.4% |
| Very hard | >180 mg/L | 21 | 42.9% |
Hardest and Softest Water in Minnesota
Measured values only; labeled county estimates and values under active dispute never rank.
Hardest water in Minnesota
- New Prague — 435.2 mg/L (25.4 gpg), very hard
- Waconia — 378.0 mg/L (22.1 gpg), very hard
- Sartell — 352.4 mg/L (20.6 gpg), very hard
- Cottage Grove — 330.0 mg/L (19.3 gpg), very hard
- Minnetrista — 319.0 mg/L (18.6 gpg), very hard
Softest water in Minnesota
- Stewartville — 13.8 mg/L (0.8 gpg), soft
- Lino Lakes — 39.2 mg/L (2.3 gpg), soft
- Two Harbors — 40.1 mg/L (2.4 gpg), soft
- Duluth — 42.8 mg/L (2.5 gpg), soft
- Maplewood — 55.6 mg/L (3.3 gpg), soft
Every Covered City in Minnesota
All 390 covered Minnesota 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 |
|---|---|---|---|---|
| Minneapolis | 88.8 | 5.2 | Moderately hard | Utility-reported |
| St. Paul | 125.0 | 7.3 | Hard | County estimate |
| Mendota | 82.1 | 4.8 | Moderately hard | Utility-reported |
| St. Paul | 82.1 | 4.8 | Moderately hard | Utility-reported |
| Moorhead | 78.7 | 4.6 | Moderately hard | Computed from Ca+Mg |
| Osseo | 120.0 | 7.0 | Moderately hard | Utility-reported |
| Brooklyn Park | 120.0 | 7.0 | Moderately hard | Utility-reported |
| Bloomington | 100.0 | 5.8 | Moderately hard | Utility-reported |
| Duluth | 42.8 | 2.5 | Soft | Utility-reported |
| Woodbury | 160.0 | 9.4 | Hard | Utility-reported |
| Hopkins | 162.8 | 9.5 | Hard | Utility-reported |
| Lexington | 191.0 | 11.2 | Very hard | Utility-reported |
| Andover | 200.0 | 11.7 | Very hard | County estimate |
| Blaine | 191.0 | 11.2 | Very hard | Utility-reported |
| Eagan | 132.0 | 7.7 | Hard | Utility-reported |
| St. Cloud | 240.0 | 14.0 | Very hard | County estimate |
| St. Cloud | 240.0 | 14.0 | Very hard | County estimate |
| Farmington | 270.0 | 15.8 | Very hard | County estimate |
| Lakeville | 270.0 | 15.8 | Very hard | County estimate |
| Coon Rapids | 201.0 | 11.8 | Very hard | Utility-reported |
| Eden Prairie | 98.9 | 5.8 | Moderately hard | Utility-reported |
| Wayzata | 186.0 | 10.9 | Very hard | Utility-reported |
| Burnsville | 193.0 | 11.3 | Very hard | Utility-reported |
| Minnetonka | 186.0 | 10.9 | Very hard | Utility-reported |
| Edina | 146.0 | 8.5 | Hard | Utility-reported |
| St. Louis Park | 112.0 | 6.5 | Moderately hard | Utility-reported |
| Mankato | 343.5 | 20.1 | Very hard | County estimate |
| Shakopee | 420.0 | 24.6 | Very hard | County estimate |
| Cottage Grove | 330.0 | 19.3 | Very hard | Utility-reported |
| Inver Grove Heights | 270.0 | 15.8 | Very hard | County estimate |
| Birchwood Village | 162.0 | 9.5 | Hard | Utility-reported |
| Roseville | 78.0 | 4.6 | Moderately hard | Utility-reported |
| Savage | 309.8 | 18.1 | Very hard | Computed from Ca+Mg |
| Brooklyn Center | 78.8 | 4.6 | Moderately hard | Utility-reported |
| Shoreview | 192.0 | 11.2 | Very hard | Utility-reported |
| Owatonna | 308.0 | 18.0 | Very hard | County estimate |
| Chaska | 230.0 | 13.4 | Very hard | County estimate |
| Faribault | 302.0 | 17.7 | Very hard | Utility-reported |
| Prior Lake | 196.0 | 11.5 | Very hard | Utility-reported |
| Chanhassen | 121.0 | 7.1 | Hard | Utility-reported |
| Champlin | 234.0 | 13.7 | Very hard | County estimate |
| Hastings | 270.0 | 15.8 | Very hard | County estimate |
| Golden Valley | 89.6 | 5.2 | Moderately hard | Utility-reported |
| New Brighton | 230.0 | 13.4 | Very hard | Utility-reported |
| Albertville | 260.0 | 15.2 | Very hard | County estimate |
| St. Michael | 260.0 | 15.2 | Very hard | County estimate |
| Rosemount | 270.0 | 15.8 | Very hard | County estimate |
| Willmar | 238.5 | 13.9 | Very hard | County estimate |
| Sartell | 352.4 | 20.6 | Very hard | Computed from Ca+Mg |
| Lino Lakes | 39.2 | 2.3 | Soft | Utility-reported |
| Albert Lea | 294.0 | 17.2 | Very hard | County estimate |
| Anoka | 200.0 | 11.7 | Very hard | County estimate |
| Elk River | 170.0 | 9.9 | Hard | County estimate |
| Red Wing | 285.0 | 16.7 | Very hard | County estimate |
| Buffalo | 260.0 | 15.2 | Very hard | County estimate |
| Hibbing | 77.8 | 4.5 | Moderately hard | County estimate |
| Bemidji | 170.0 | 9.9 | Hard | County estimate |
| Hutchinson | 215.0 | 12.6 | Very hard | County estimate |
| Lake Benton | 390.0 | 22.8 | Very hard | County estimate |
| Robbinsdale | 201.0 | 11.8 | Very hard | Utility-reported |
| Fergus Falls | 210.0 | 12.3 | Very hard | County estimate |
| Marshall | 554.0 | 32.4 | Very hard | County estimate |
| Brainerd | 215.0 | 12.6 | Very hard | Utility-reported |
| Alexandria | 193.0 | 11.3 | Very hard | County estimate |
| Monticello | 260.0 | 15.2 | Very hard | County estimate |
| New Ulm | 490.0 | 28.6 | Very hard | County estimate |
| Worthington | 374.0 | 21.9 | Very hard | County estimate |
| Waconia | 378.0 | 22.1 | Very hard | Utility-reported |
| Maplewood | 55.6 | 3.3 | Soft | Utility-reported |
| Sauk Rapids | 146.0 | 8.5 | Hard | County estimate |
| North St. Paul | 55.6 | 3.3 | Soft | Utility-reported |
| Hugo | 108.5 | 6.3 | Moderately hard | County estimate |
| St. Peter | 450.0 | 26.3 | Very hard | County estimate |
| St. Peter | 450.0 | 26.3 | Very hard | County estimate |
| Big Lake | 170.0 | 9.9 | Hard | County estimate |
| Cloquet | 214.0 | 12.5 | Very hard | Computed from Ca+Mg |
| Fairmont | 322.5 | 18.9 | Very hard | County estimate |
| Detroit Lakes | 170.0 | 9.9 | Hard | County estimate |
| St. Anthony | 254.0 | 14.8 | Very hard | Utility-reported |
| East Grand Forks | 300.0 | 17.5 | Very hard | County estimate |
| Waseca | 288.0 | 16.8 | Very hard | County estimate |
| Cohasset | 130.0 | 7.6 | Hard | County estimate |
| Grand Rapids | 130.0 | 7.6 | Hard | County estimate |
| Willernie | 162.0 | 9.5 | Hard | Utility-reported |
| Gilbert | 77.8 | 4.5 | Moderately hard | County estimate |
| Dellwood | 162.0 | 9.5 | Hard | Utility-reported |
| Mahtomedi | 162.0 | 9.5 | Hard | Utility-reported |
| Lake Elmo | 249.0 | 14.6 | Very hard | Utility-reported |
| Minnetrista | 319.0 | 18.6 | Very hard | Utility-reported |
| Waite Park | 240.0 | 14.0 | Very hard | County estimate |
| New Prague | 435.2 | 25.4 | Very hard | Computed from Ca+Mg |
| Crookston | 300.0 | 17.5 | Very hard | County estimate |
| Belle Plaine | 420.0 | 24.6 | Very hard | County estimate |
| Stewartville | 13.8 | 0.8 | Soft | Utility-reported |
| Kasson | 255.0 | 14.9 | Very hard | County estimate |
| Delano | 260.0 | 15.2 | Very hard | County estimate |
| Welch | 285.0 | 16.7 | Very hard | County estimate |
| Glencoe | 215.0 | 12.6 | Very hard | County estimate |
| Isanti | 125.5 | 7.3 | Hard | County estimate |
| St. Paul Park | 108.5 | 6.3 | Moderately hard | County estimate |
| St. Bonifacius | 234.0 | 13.7 | Very hard | County estimate |
| Montevideo | 450.0 | 26.3 | Very hard | County estimate |
| Zimmerman | 170.0 | 9.9 | Hard | County estimate |
| North Branch | 109.0 | 6.4 | Moderately hard | County estimate |
| Circle Pines | 200.0 | 11.7 | Very hard | County estimate |
| Lindstrom | 109.0 | 6.4 | Moderately hard | County estimate |
| Spring Park | 234.0 | 13.7 | Very hard | County estimate |
| Becker | 170.0 | 9.9 | Hard | County estimate |
| Windom | 353.0 | 20.6 | Very hard | County estimate |
| Sauk Centre | 240.0 | 14.0 | Very hard | County estimate |
| Hamel | 234.0 | 13.7 | Very hard | County estimate |
| Loretto | 234.0 | 13.7 | Very hard | County estimate |
| Maple Plain | 234.0 | 13.7 | Very hard | County estimate |
| Elko New Market | 420.0 | 24.6 | Very hard | County estimate |
| Pipestone | 406.5 | 23.8 | Very hard | County estimate |
| Cannon Falls | 285.0 | 16.7 | Very hard | County estimate |
| Wadena | 238.0 | 13.9 | Very hard | County estimate |
| Le Sueur | 380.0 | 22.2 | Very hard | County estimate |
| Lonsdale | 322.0 | 18.8 | Very hard | County estimate |
| St. Charles | 290.0 | 17.0 | Very hard | County estimate |
| St. Charles | 290.0 | 17.0 | Very hard | County estimate |
| Eveleth | 77.8 | 4.5 | Moderately hard | County estimate |
| Melrose | 240.0 | 14.0 | Very hard | County estimate |
| Ely | 14.7 | 0.9 | Soft | County estimate |
| Two Harbors | 40.1 | 2.4 | Soft | Utility-reported |
| Sleepy Eye | 490.0 | 28.6 | Very hard | County estimate |
| Norwood Young America | 230.0 | 13.4 | Very hard | County estimate |
| Chisago City | 109.0 | 6.4 | Moderately hard | County estimate |
| Benson | 470.5 | 27.5 | Very hard | County estimate |
| Mora | 71.5 | 4.2 | Moderately hard | County estimate |
| Perham | 210.0 | 12.3 | Very hard | County estimate |
| Long Prairie | 180.0 | 10.5 | Hard | County estimate |
| Annandale | 260.0 | 15.2 | Very hard | County estimate |
| Breckenridge | 279.0 | 16.3 | Very hard | County estimate |
| Plainview | 286.5 | 16.8 | Very hard | County estimate |
| Montrose | 260.0 | 15.2 | Very hard | County estimate |
| Waverly | 260.0 | 15.2 | Very hard | County estimate |
| Zumbrota | 285.0 | 16.7 | Very hard | County estimate |
| Warren | 300.0 | 17.5 | Very hard | County estimate |
| Blue Earth | 340.5 | 19.9 | Very hard | County estimate |
| Pine City | 63.0 | 3.7 | Moderately hard | County estimate |
| Long Lake | 234.0 | 13.7 | Very hard | County estimate |
| Rush City | 109.0 | 6.4 | Moderately hard | County estimate |
| Milaca | 97.0 | 5.7 | Moderately hard | County estimate |
| Montgomery | 380.0 | 22.2 | Very hard | County estimate |
| Chatfield | 300.0 | 17.5 | Very hard | County estimate |
| Staples | 180.0 | 10.5 | Hard | County estimate |
| St. Bonifacius | 234.0 | 13.7 | Very hard | County estimate |
| Mountain Iron | 77.8 | 4.5 | Moderately hard | County estimate |
| Granite Falls | 602.5 | 35.2 | Very hard | County estimate |
| Dodge Center | 255.0 | 14.9 | Very hard | County estimate |
| Caledonia | 290.0 | 17.0 | Very hard | County estimate |
| Excelsior | 83.4 | 4.9 | Moderately hard | Utility-reported |
| Roseau | 200.0 | 11.7 | Very hard | County estimate |
| Cokato | 260.0 | 15.2 | Very hard | County estimate |
| Albany | 240.0 | 14.0 | Very hard | County estimate |
| Bayport | 108.5 | 6.3 | Moderately hard | County estimate |
| Lakeland | 108.5 | 6.3 | Moderately hard | County estimate |
| Glenwood | 337.0 | 19.7 | Very hard | County estimate |
| Foley | 146.0 | 8.5 | Hard | County estimate |
| Barnesville | 372.0 | 21.8 | Very hard | County estimate |
| Pelican Rapids | 210.0 | 12.3 | Very hard | County estimate |
| Spring Valley | 300.0 | 17.5 | Very hard | County estimate |
| Lake Crystal | 343.5 | 20.1 | Very hard | County estimate |
| Paynesville | 240.0 | 14.0 | Very hard | County estimate |
| Wabasha | 286.5 | 16.8 | Very hard | County estimate |
| Eagle Lake | 343.5 | 20.1 | Very hard | County estimate |
| Le Center | 380.0 | 22.2 | Very hard | County estimate |
| Nett Lake | 38.5 | 2.3 | Soft | County estimate |
| Northfield | 322.0 | 18.8 | Very hard | County estimate |
| Crosby | 111.0 | 6.5 | Moderately hard | County estimate |
| Winsted | 215.0 | 12.6 | Very hard | County estimate |
| Olivia | 492.0 | 28.8 | Very hard | County estimate |
| Wells | 340.5 | 19.9 | Very hard | County estimate |
| Madelia | 270.0 | 15.8 | Very hard | County estimate |
| Gaylord | 390.0 | 22.8 | Very hard | County estimate |
| Janesville | 288.0 | 16.8 | Very hard | County estimate |
| Arlington | 390.0 | 22.8 | Very hard | County estimate |
| Hawley | 372.0 | 21.8 | Very hard | County estimate |
| Aitkin | 97.0 | 5.7 | Moderately hard | County estimate |
| Maple Lake | 260.0 | 15.2 | Very hard | County estimate |
| Tracy | 554.0 | 32.4 | Very hard | County estimate |
| Slayton | 350.0 | 20.5 | Very hard | County estimate |
| Mountain Lake | 353.0 | 20.6 | Very hard | County estimate |
| Springfield | 490.0 | 28.6 | Very hard | County estimate |
| Eyota | 316.0 | 18.5 | Very hard | County estimate |
| Ortonville | 600.0 | 35.1 | Very hard | County estimate |
| Hoyt Lakes | 77.8 | 4.5 | Moderately hard | County estimate |
| Howard Lake | 260.0 | 15.2 | Very hard | County estimate |
| Blooming Prairie | 308.0 | 18.0 | Very hard | County estimate |
| Stacy | 109.0 | 6.4 | Moderately hard | County estimate |
| Bovey | 130.0 | 7.6 | Hard | County estimate |
| Clearwater | 240.0 | 14.0 | Very hard | County estimate |
| Lester Prairie | 215.0 | 12.6 | Very hard | County estimate |
| Mayer | 230.0 | 13.4 | Very hard | County estimate |
| Hinckley | 63.0 | 3.7 | Moderately hard | County estimate |
| Silver Bay | 14.7 | 0.9 | Soft | County estimate |
| Waterville | 380.0 | 22.2 | Very hard | County estimate |
| Rushford | 300.0 | 17.5 | Very hard | County estimate |
| Warroad | 200.0 | 11.7 | Very hard | County estimate |
| Kenyon | 285.0 | 16.7 | Very hard | County estimate |
| Braham | 71.5 | 4.2 | Moderately hard | County estimate |
| Oronoco | 316.0 | 18.5 | Very hard | County estimate |
| Osakis | 180.0 | 10.5 | Hard | County estimate |
| Canby | 602.5 | 35.2 | Very hard | County estimate |
| Aurora | 77.8 | 4.5 | Moderately hard | County estimate |
| Mapleton | 343.5 | 20.1 | Very hard | County estimate |
| Ada | 360.0 | 21.1 | Very hard | County estimate |
| Cologne | 230.0 | 13.4 | Very hard | County estimate |
| Lakefield | 363.0 | 21.2 | Very hard | County estimate |
| Lewiston | 290.0 | 17.0 | Very hard | County estimate |
| Collegeville | 240.0 | 14.0 | Very hard | County estimate |
| St. Joseph | 240.0 | 14.0 | Very hard | County estimate |
| Madison | 493.0 | 28.8 | Very hard | County estimate |
| Dawson | 493.0 | 28.8 | Very hard | County estimate |
| Dundas | 322.0 | 18.8 | Very hard | County estimate |
| Dassel | 260.0 | 15.2 | Very hard | County estimate |
| Wheaton | 730.0 | 42.7 | Very hard | County estimate |
| Richmond | 240.0 | 14.0 | Very hard | County estimate |
| Avon | 240.0 | 14.0 | Very hard | County estimate |
| Fosston | 300.0 | 17.5 | Very hard | County estimate |
| Sandstone | 63.0 | 3.7 | Moderately hard | County estimate |
| Grand Marais | 21.7 | 1.3 | Soft | County estimate |
| Appleton | 470.5 | 27.5 | Very hard | County estimate |
| Winthrop | 390.0 | 22.8 | Very hard | County estimate |
| Winnebago | 340.5 | 19.9 | Very hard | County estimate |
| Starbuck | 337.0 | 19.7 | Very hard | County estimate |
| Minneota | 554.0 | 32.4 | Very hard | County estimate |
| Hayfield | 255.0 | 14.9 | Very hard | County estimate |
| Clara City | 450.0 | 26.3 | Very hard | County estimate |
| Menahga | 238.0 | 13.9 | Very hard | County estimate |
| Red Lake Falls | 296.0 | 17.3 | Very hard | County estimate |
| Frazee | 170.0 | 9.9 | Hard | County estimate |
| Preston | 300.0 | 17.5 | Very hard | County estimate |
| Fulda | 350.0 | 20.5 | Very hard | County estimate |
| Glyndon | 372.0 | 21.8 | Very hard | County estimate |
| Fairfax | 492.0 | 28.8 | Very hard | County estimate |
| New York Mills | 210.0 | 12.3 | Very hard | County estimate |
| Spring Grove | 290.0 | 17.0 | Very hard | County estimate |
| Renville | 492.0 | 28.8 | Very hard | County estimate |
| Bagley | 160.0 | 9.4 | Hard | County estimate |
| Rice | 146.0 | 8.5 | Hard | County estimate |
| New London | 238.5 | 13.9 | Very hard | County estimate |
| Elbow Lake | 380.0 | 22.2 | Very hard | County estimate |
| Moose Lake | 39.8 | 2.3 | Soft | County estimate |
| Royalton | 160.0 | 9.4 | Hard | County estimate |
| Mahnomen | 230.0 | 13.4 | Very hard | County estimate |
| Spicer | 238.5 | 13.9 | Very hard | County estimate |
| Cottonwood | 554.0 | 32.4 | Very hard | County estimate |
| Adrian | 374.0 | 21.9 | Very hard | County estimate |
| New Richland | 288.0 | 16.8 | Very hard | County estimate |
| Babbitt | 77.8 | 4.5 | Moderately hard | County estimate |
| Goodhue | 285.0 | 16.7 | Very hard | County estimate |
| Medford | 308.0 | 18.0 | Very hard | County estimate |
| Pequot Lakes | 130.0 | 7.6 | Hard | County estimate |
| Mantorville | 255.0 | 14.9 | Very hard | County estimate |
| Edgerton | 406.5 | 23.8 | Very hard | County estimate |
| Shafer | 109.0 | 6.4 | Moderately hard | County estimate |
| Grand Meadow | 259.0 | 15.2 | Very hard | County estimate |
| Coleraine | 130.0 | 7.6 | Hard | County estimate |
| Atwater | 238.5 | 13.9 | Very hard | County estimate |
| Hector | 492.0 | 28.8 | Very hard | County estimate |
| Tyler | 390.0 | 22.8 | Very hard | County estimate |
| Nicollet | 450.0 | 26.3 | Very hard | County estimate |
| Truman | 322.5 | 18.9 | Very hard | County estimate |
| Elgin | 316.0 | 18.5 | Very hard | County estimate |
| Wanamingo | 285.0 | 16.7 | Very hard | County estimate |
| Parkers Prairie | 210.0 | 12.3 | Very hard | County estimate |
| Keewatin | 130.0 | 7.6 | Hard | County estimate |
| Sherburn | 322.5 | 18.9 | Very hard | County estimate |
| Eden Valley | 260.0 | 15.2 | Very hard | County estimate |
| Harmony | 300.0 | 17.5 | Very hard | County estimate |
| Bird Island | 492.0 | 28.8 | Very hard | County estimate |
| Madison Lake | 343.5 | 20.1 | Very hard | County estimate |
| Mazeppa | 286.5 | 16.8 | Very hard | County estimate |
| Buhl | 77.8 | 4.5 | Moderately hard | County estimate |
| Carlton | 39.8 | 2.3 | Soft | County estimate |
| Morristown | 322.0 | 18.8 | Very hard | County estimate |
| Nashwauk | 130.0 | 7.6 | Hard | County estimate |
| Biwabik | 77.8 | 4.5 | Moderately hard | County estimate |
| Deer River | 130.0 | 7.6 | Hard | County estimate |
| Battle Lake | 210.0 | 12.3 | Very hard | County estimate |
| Blackduck | 170.0 | 9.9 | Hard | County estimate |
| Kerkhoven | 470.5 | 27.5 | Very hard | County estimate |
| Browerville | 180.0 | 10.5 | Hard | County estimate |
| Gibbon | 390.0 | 22.8 | Very hard | County estimate |
| Brownton | 215.0 | 12.6 | Very hard | County estimate |
| Rockville | 240.0 | 14.0 | Very hard | County estimate |
| Cass Lake | 130.0 | 7.6 | Hard | County estimate |
| Trimont | 322.5 | 18.9 | Very hard | County estimate |
| Hendricks | 390.0 | 22.8 | Very hard | County estimate |
| Marble | 130.0 | 7.6 | Hard | County estimate |
| Clarks Grove | 294.0 | 17.2 | Very hard | County estimate |
| Heron Lake | 363.0 | 21.2 | Very hard | County estimate |
| Clarissa | 180.0 | 10.5 | Hard | County estimate |
| Motley | 130.0 | 7.6 | Hard | County estimate |
| Kasota | 380.0 | 22.2 | Very hard | County estimate |
| Welcome | 322.5 | 18.9 | Very hard | County estimate |
| White Earth | 170.0 | 9.9 | Hard | County estimate |
| Ottertail | 210.0 | 12.3 | Very hard | County estimate |
| Balaton | 554.0 | 32.4 | Very hard | County estimate |
| Courtland | 450.0 | 26.3 | Very hard | County estimate |
| Stephen | 343.0 | 20.1 | Very hard | County estimate |
| Good Thunder | 343.5 | 20.1 | Very hard | County estimate |
| Ironton | 111.0 | 6.5 | Moderately hard | County estimate |
| Rochester | 316.0 | 18.5 | Very hard | County estimate |
| Green Isle | 390.0 | 22.8 | Very hard | County estimate |
| Kandiyohi | 238.5 | 13.9 | Very hard | County estimate |
| Ivanhoe | 390.0 | 22.8 | Very hard | County estimate |
| Eagle Bend | 180.0 | 10.5 | Hard | County estimate |
| Pennock | 238.5 | 13.9 | Very hard | County estimate |
| Rothsay | 279.0 | 16.3 | Very hard | County estimate |
| Prinsburg | 238.5 | 13.9 | Very hard | County estimate |
| Bertha | 180.0 | 10.5 | Hard | County estimate |
| Kellogg | 286.5 | 16.8 | Very hard | County estimate |
| Pillager | 130.0 | 7.6 | Hard | County estimate |
| New Auburn | 390.0 | 22.8 | Very hard | County estimate |
| Vermillion | 270.0 | 15.8 | Very hard | County estimate |
| Lynd | 554.0 | 32.4 | Very hard | County estimate |
| Wykoff | 300.0 | 17.5 | Very hard | County estimate |
| Upsala | 160.0 | 9.4 | Hard | County estimate |
| New Germany | 230.0 | 13.4 | Very hard | County estimate |
| Comfrey | 490.0 | 28.6 | Very hard | County estimate |
| Wrenshall | 39.8 | 2.3 | Soft | County estimate |
| Hanska | 490.0 | 28.6 | Very hard | County estimate |
| Alvarado | 343.0 | 20.1 | Very hard | County estimate |
| Emmons | 294.0 | 17.2 | Very hard | County estimate |
| Underwood | 210.0 | 12.3 | Very hard | County estimate |
| Ceylon | 322.5 | 18.9 | Very hard | County estimate |
| Ghent | 554.0 | 32.4 | Very hard | County estimate |
| Bricelyn | 340.5 | 19.9 | Very hard | County estimate |
| Ogilvie | 71.5 | 4.2 | Moderately hard | County estimate |
| Swanville | 160.0 | 9.4 | Hard | County estimate |
| Wilmont | 374.0 | 21.9 | Very hard | County estimate |
| St. Martin | 240.0 | 14.0 | Very hard | County estimate |
| Foreston | 97.0 | 5.7 | Moderately hard | County estimate |
| Vergas | 210.0 | 12.3 | Very hard | County estimate |
| Forest Lake | 200.0 | 11.7 | Very hard | County estimate |
| Grey Eagle | 180.0 | 10.5 | Hard | County estimate |
| Taconite | 130.0 | 7.6 | Hard | County estimate |
| New Munich | 240.0 | 14.0 | Very hard | County estimate |
| Plato | 215.0 | 12.6 | Very hard | County estimate |
| Murdock | 470.5 | 27.5 | Very hard | County estimate |
| Cyrus | 337.0 | 19.7 | Very hard | County estimate |
| Nerstrand | 322.0 | 18.8 | Very hard | County estimate |
| Hollandale | 294.0 | 17.2 | Very hard | County estimate |
| Darwin | 260.0 | 15.2 | Very hard | County estimate |
| Milroy | 520.0 | 30.4 | Very hard | County estimate |
| Pease | 97.0 | 5.7 | Moderately hard | County estimate |
| Ruthton | 406.5 | 23.8 | Very hard | County estimate |
| Oslo | 343.0 | 20.1 | Very hard | County estimate |
| Lake Lillian | 238.5 | 13.9 | Very hard | County estimate |
| Waldorf | 288.0 | 16.8 | Very hard | County estimate |
| Northrop | 322.5 | 18.9 | Very hard | County estimate |
| Princeton | 97.0 | 5.7 | Moderately hard | County estimate |
| Okabena | 363.0 | 21.2 | Very hard | County estimate |
| Ogema | 170.0 | 9.9 | Hard | County estimate |
| Beaver Bay | 14.7 | 0.9 | Soft | County estimate |
| Blomkest | 238.5 | 13.9 | Very hard | County estimate |
| Dennison | 285.0 | 16.7 | Very hard | County estimate |
| Dunnell | 322.5 | 18.9 | Very hard | County estimate |
| Wendell | 380.0 | 22.2 | Very hard | County estimate |
| Warba | 130.0 | 7.6 | Hard | County estimate |
| Kinney | 77.8 | 4.5 | Moderately hard | County estimate |
| Wolverton | 279.0 | 16.3 | Very hard | County estimate |
| Conger | 294.0 | 17.2 | Very hard | County estimate |
| Garvin | 554.0 | 32.4 | Very hard | County estimate |
| Kilkenny | 380.0 | 22.2 | Very hard | County estimate |
| Laporte | 160.0 | 9.4 | Hard | County estimate |
| Deerwood | 111.0 | 6.5 | Moderately hard | County estimate |
| Bingham Lake | 353.0 | 20.6 | Very hard | County estimate |
| Brook Park | 71.5 | 4.2 | Moderately hard | County estimate |
| Hampton | 270.0 | 15.8 | Very hard | County estimate |
| Alpha | 363.0 | 21.2 | Very hard | County estimate |
| Bock | 97.0 | 5.7 | Moderately hard | County estimate |
| Darfur | 270.0 | 15.8 | Very hard | County estimate |
| Holloway | 470.5 | 27.5 | Very hard | County estimate |
| Rogers | 234.0 | 13.7 | Very hard | County estimate |
| Viking | 343.0 | 20.1 | Very hard | County estimate |
| Arco | 390.0 | 22.8 | Very hard | County estimate |
| Tintah | 730.0 | 42.7 | Very hard | County estimate |
| Park Rapids | 160.0 | 9.4 | Hard | County estimate |
| Scandia | 108.5 | 6.3 | Moderately hard | County estimate |
| Victoria | 230.0 | 13.4 | Very hard | County estimate |
| Stillwater | 108.5 | 6.3 | Moderately hard | County estimate |
| Houston | 290.0 | 17.0 | Very hard | County estimate |
| Lake Bronson | 348.9 | 20.4 | Very hard | County estimate |
| Pierz | 160.0 | 9.4 | Hard | County estimate |
| Taylors Falls | 109.0 | 6.4 | Moderately hard | County estimate |
| Walker | 130.0 | 7.6 | 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 Minnesota's Water Hardness
Minnesota 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.
Minnesota Water Hardness FAQ
Does Minnesota have hard water?
Yes — across Minnesota's measured cities, typical tap water is hard. The median is 162.0 mg/L (9.5 gpg) — hard on the USGS scale, where anything above 120 mg/L (7 gpg) counts as hard. 30 of Minnesota's 49 measured cities fall in the hard or very hard bands (61%), so check your own city rather than the state average.
How hard is tap water in Minnesota?
Across the 49 Minnesota cities with measured values in our index, the median hardness is 162.0 mg/L (9.5 gpg) — hard on the USGS scale. Individual cities range from 13.8 to 435.2 mg/L, so check your own city rather than assuming the state number.
Which city in Minnesota has the hardest water?
New Prague has the hardest measured tap water in our Minnesota index at 435.2 mg/L (25.4 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 Minnesota?
30 of Minnesota's 49 measured cities (61%) 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 Minnesota 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.