Skip to main content
💧 TapWaterData

Water Hardness in Oklahoma

Across 40 measured cities — with 328 more covered by labeled county-level estimates — Oklahoma's median tap water hardness is 142.2 mg/L (8.3 gpg): hard on the USGS scale. Below: every covered city, the state's hardest and softest water, and the geology that explains it.

Data updated July 6, 2026. Sources: utility-reported water quality data and USGS/EPA Water Quality Portal samples.

State Median
142.2
mg/L (8.3 gpg), measured cities
Measured Range
45.9-361.0
mg/L across measured cities
Measured Cities
40
utility-reported or computed values
County Estimates
328
89% of covered cities

Oklahoma Cities by Hardness Category

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

CategoryRangeMeasured citiesShare
Soft0-60 mg/L12.5%
Moderately hard60-120 mg/L1332.5%
Hard120-180 mg/L2460.0%
Very hard>180 mg/L25.0%

Hardest and Softest Water in Oklahoma

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

Hardest water in Oklahoma

  1. Bristow 231.5 mg/L (13.5 gpg), very hard
  2. Atoka 157.0 mg/L (9.2 gpg), hard
  3. Byng 157.0 mg/L (9.2 gpg), hard
  4. Konawa 157.0 mg/L (9.2 gpg), hard
  5. Lake Aluma 157.0 mg/L (9.2 gpg), hard

Softest water in Oklahoma

  1. Poteau 45.9 mg/L (2.7 gpg), soft
  2. Bartlesville 88.4 mg/L (5.2 gpg), moderately hard
  3. Bixby 92.2 mg/L (5.4 gpg), moderately hard
  4. Broken Arrow 92.2 mg/L (5.4 gpg), moderately hard
  5. Catoosa 92.2 mg/L (5.4 gpg), moderately hard

Every Covered City in Oklahoma

All 368 covered Oklahoma 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
Norman148.48.7HardUtility-reported
Oklahoma City156.69.2HardUtility-reported
Byng157.09.2HardUtility-reported
Yukon157.09.2HardUtility-reported
Newcastle157.09.2HardUtility-reported
Atoka157.09.2HardUtility-reported
Pink157.09.2HardUtility-reported
Stringtown157.09.2HardUtility-reported
Phillips157.09.2HardUtility-reported
Jones221.012.9Very hardCounty estimate
Konawa157.09.2HardUtility-reported
Lake Aluma157.09.2HardUtility-reported
Lehigh157.09.2HardUtility-reported
Spencer221.012.9Very hardCounty estimate
Valley Brook157.09.2HardUtility-reported
Tulsa110.06.4Moderately hardUtility-reported
Moore93.55.5Moderately hardUtility-reported
Broken Arrow92.25.4Moderately hardUtility-reported
Comanche290.017.0Very hardCounty estimate
Lawton152.58.9HardCounty estimate
Medicine Park152.58.9HardCounty estimate
Fort Sill152.58.9HardCounty estimate
Edmond135.27.9HardUtility-reported
Arcadia136.08.0HardUtility-reported
Stillwater236.413.8Very hardCounty estimate
Bixby92.25.4Moderately hardUtility-reported
Choctaw221.012.9Very hardCounty estimate
Owasso153.08.9HardUtility-reported
Claremore131.07.7HardCounty estimate
Sperry153.08.9HardUtility-reported
Jenks148.08.7HardCounty estimate
Sapulpa111.06.5Moderately hardUtility-reported
Bartlesville88.45.2Moderately hardUtility-reported
Catoosa92.25.4Moderately hardUtility-reported
Duncan290.017.0Very hardCounty estimate
Fair Oaks92.25.4Moderately hardUtility-reported
Mounds68.04.0Moderately hardCounty estimate
Mannford183.010.7Very hardCounty estimate
Sand Springs111.06.5Moderately hardUtility-reported
Marlow290.017.0Very hardCounty estimate
Glenpool148.08.7HardCounty estimate
Vera153.08.9HardUtility-reported
Ada254.014.8Very hardCounty estimate
Skiatook153.08.9HardUtility-reported
Shawnee140.08.2HardCounty estimate
Collinsville153.08.9HardUtility-reported
Durant235.013.7Very hardCounty estimate
Coweta92.25.4Moderately hardUtility-reported
Ponca City422.024.7Very hardCounty estimate
Haskell92.25.4Moderately hardUtility-reported
Mcalester92.05.4Moderately hardCounty estimate
Sallisaw70.04.1Moderately hardCounty estimate
Chickasha700.040.9Very hardCounty estimate
Wister36.72.1SoftCounty estimate
Kellyville183.010.7Very hardCounty estimate
Poteau45.92.7SoftUtility-reported
Bethany221.012.9Very hardCounty estimate
Tahlequah95.05.6Moderately hardCounty estimate
Park Hill95.05.6Moderately hardCounty estimate
Madill313.018.3Very hardCounty estimate
Mustang463.027.1Very hardCounty estimate
West Siloam Springs112.86.6Moderately hardComputed from Ca+Mg
Moffett70.04.1Moderately hardCounty estimate
Kingston313.018.3Very hardCounty estimate
Mannsville250.014.6Very hardCounty estimate
Welling95.05.6Moderately hardCounty estimate
Vian70.04.1Moderately hardCounty estimate
Commerce181.010.6Very hardCounty estimate
Gore70.04.1Moderately hardCounty estimate
Marble City70.04.1Moderately hardCounty estimate
Pryor108.06.3Moderately hardCounty estimate
Piedmont123.07.2HardUtility-reported
Kiefer183.010.7Very hardCounty estimate
Idabel19.51.1SoftCounty estimate
Vinita230.513.5Very hardCounty estimate
Heavener36.72.1SoftCounty estimate
Keota132.07.7HardCounty estimate
Achille235.013.7Very hardCounty estimate
Broken Bow19.51.1SoftCounty estimate
Guymon254.014.8Very hardCounty estimate
Gene Autry242.014.2Very hardCounty estimate
Marietta296.017.3Very hardCounty estimate
Springer242.014.2Very hardCounty estimate
Calera235.013.7Very hardCounty estimate
Spiro36.72.1SoftCounty estimate
Howe36.72.1SoftCounty estimate
Colbert235.013.7Very hardCounty estimate
Panama36.72.1SoftCounty estimate
Cleveland220.012.9Very hardCounty estimate
Guthrie344.020.1Very hardCounty estimate
Okmulgee68.04.0Moderately hardCounty estimate
Beggs68.04.0Moderately hardCounty estimate
Bokoshe36.72.1SoftCounty estimate
Cameron36.72.1SoftCounty estimate
Pocola36.72.1SoftCounty estimate
Shady Point36.72.1SoftCounty estimate
Blackwell422.024.7Very hardCounty estimate
Stilwell114.06.7Moderately hardCounty estimate
Tuttle700.040.9Very hardCounty estimate
Bokchito235.013.7Very hardCounty estimate
Addington230.013.4Very hardCounty estimate
Burneyville296.017.3Very hardCounty estimate
Hastings443.525.9Very hardCounty estimate
Healdton242.014.2Very hardCounty estimate
Ringling230.013.4Very hardCounty estimate
Ryan230.013.4Very hardCounty estimate
Waurika230.013.4Very hardCounty estimate
Wilson242.014.2Very hardCounty estimate
Checotah150.08.8HardCounty estimate
Blanchard700.040.9Very hardCounty estimate
Ketchum230.513.5Very hardCounty estimate
Oologah131.07.7HardCounty estimate
Talala131.07.7HardCounty estimate
Elgin152.58.9HardCounty estimate
Okemah99.05.8Moderately hardCounty estimate
Tishomingo250.014.6Very hardCounty estimate
Walters443.525.9Very hardCounty estimate
Krebs92.05.4Moderately hardCounty estimate
Cashion123.07.2HardUtility-reported
Muldrow70.04.1Moderately hardCounty estimate
Chouteau108.06.3Moderately hardCounty estimate
Inola131.07.7HardCounty estimate
Mead235.013.7Very hardCounty estimate
Noble179.010.5HardCounty estimate
Oakhurst111.06.5Moderately hardUtility-reported
Wilburton38.52.3SoftCounty estimate
Holdenville180.010.5HardCounty estimate
Geronimo152.58.9HardCounty estimate
Tonkawa422.024.7Very hardCounty estimate
Cache152.58.9HardCounty estimate
Salina108.06.3Moderately hardCounty estimate
Porum138.08.1HardCounty estimate
Warner138.08.1HardCounty estimate
Westville114.06.7Moderately hardCounty estimate
Francis254.014.8Very hardCounty estimate
Lone Grove242.014.2Very hardCounty estimate
Arkoma36.72.1SoftCounty estimate
Hulbert95.05.6Moderately hardCounty estimate
Watonga509.029.8Very hardCounty estimate
Alderson92.05.4Moderately hardCounty estimate
Eufaula150.08.8HardCounty estimate
Redbird119.07.0Moderately hardCounty estimate
Dewey137.08.0HardCounty estimate
Harrah221.012.9Very hardCounty estimate
Amber700.040.9Very hardCounty estimate
Hartshorne92.05.4Moderately hardCounty estimate
Morris68.04.0Moderately hardCounty estimate
Red Oak38.52.3SoftCounty estimate
Fitzhugh254.014.8Very hardCounty estimate
Pocasset700.040.9Very hardCounty estimate
Langley108.06.3Moderately hardCounty estimate
Haworth19.51.1SoftCounty estimate
Roosevelt802.546.9Very hardCounty estimate
Gotebo802.546.9Very hardCounty estimate
Wewoka216.012.6Very hardCounty estimate
Quinton92.05.4Moderately hardCounty estimate
Nichols Hills134.07.8HardUtility-reported
The Village134.07.8HardUtility-reported
Perkins236.413.8Very hardCounty estimate
Minco700.040.9Very hardCounty estimate
Anadarko712.541.7Very hardCounty estimate
Apache712.541.7Very hardCounty estimate
Binger712.541.7Very hardCounty estimate
Carnegie712.541.7Very hardCounty estimate
Fletcher152.58.9HardCounty estimate
Fort Cobb712.541.7Very hardCounty estimate
Gracemont712.541.7Very hardCounty estimate
Mountain View802.546.9Very hardCounty estimate
Purcell402.023.5Very hardCounty estimate
Fanshawe36.72.1SoftCounty estimate
Pawhuska170.09.9HardCounty estimate
Spavinaw108.06.3Moderately hardCounty estimate
Strang108.06.3Moderately hardCounty estimate
Bristow231.513.5Very hardComputed from Ca+Mg
Adair108.06.3Moderately hardCounty estimate
Chelsea131.07.7HardCounty estimate
Indiahoma152.58.9HardCounty estimate
Henryetta68.04.0Moderately hardCounty estimate
Ravia250.014.6Very hardCounty estimate
Perry254.014.8Very hardCounty estimate
Milburn250.014.6Very hardCounty estimate
Mcloud140.08.2HardCounty estimate
Kinta132.07.7HardCounty estimate
Mountain Park802.546.9Very hardCounty estimate
Snyder802.546.9Very hardCounty estimate
Stigler132.07.7HardCounty estimate
Whitefield132.07.7HardCounty estimate
Roland70.04.1Moderately hardCounty estimate
Concho463.027.1Very hardCounty estimate
Drumright183.010.7Very hardCounty estimate
Lindsay349.020.4Very hardCounty estimate
Stroud246.014.4Very hardCounty estimate
Mill Creek250.014.6Very hardCounty estimate
Fairview747.543.7Very hardCounty estimate
Davis263.015.4Very hardCounty estimate
Grandfield730.042.7Very hardCounty estimate
El Reno463.027.1Very hardCounty estimate
Valliant19.51.1SoftCounty estimate
Hinton712.541.7Very hardCounty estimate
Hominy170.09.9HardCounty estimate
Muskogee138.08.1HardCounty estimate
Wainwright138.08.1HardCounty estimate
Agra246.014.4Very hardCounty estimate
Cushing236.413.8Very hardCounty estimate
Stonewall254.014.8Very hardCounty estimate
Bowlegs216.012.6Very hardCounty estimate
Seminole216.012.6Very hardCounty estimate
Jay121.07.1HardCounty estimate
Wyandotte181.010.6Very hardCounty estimate
Ninnekah700.040.9Very hardCounty estimate
Disney108.06.3Moderately hardCounty estimate
Porter119.07.0Moderately hardCounty estimate
Goodwell254.014.8Very hardCounty estimate
Prague246.014.4Very hardCounty estimate
Ochelata137.08.0HardCounty estimate
Grant146.08.5HardCounty estimate
Oktaha138.08.1HardCounty estimate
Castle99.05.8Moderately hardCounty estimate
Crowder92.05.4Moderately hardCounty estimate
Chattanooga443.525.9Very hardCounty estimate
Lexington179.010.5HardCounty estimate
Hennessey571.033.4Very hardCounty estimate
Lone Wolf802.546.9Very hardCounty estimate
Temple443.525.9Very hardCounty estimate
Thackerville296.017.3Very hardCounty estimate
Bison400.023.4Very hardCounty estimate
Waukomis400.023.4Very hardCounty estimate
Peggs95.05.6Moderately hardCounty estimate
Rentiesville150.08.8HardCounty estimate
Maysville349.020.4Very hardCounty estimate
Paoli349.020.4Very hardCounty estimate
Wayne402.023.5Very hardCounty estimate
Schulter68.04.0Moderately hardCounty estimate
Garvin19.51.1SoftCounty estimate
Randlett443.525.9Very hardCounty estimate
Billings254.014.8Very hardCounty estimate
Monroe36.72.1SoftCounty estimate
Hooker254.014.8Very hardCounty estimate
Jennings183.010.7Very hardCounty estimate
Terlton220.012.9Very hardCounty estimate
Taft138.08.1HardCounty estimate
Savanna92.05.4Moderately hardCounty estimate
Fairland181.010.6Very hardCounty estimate
Fort Gibson138.08.1HardCounty estimate
Union City463.027.1Very hardCounty estimate
Preston68.04.0Moderately hardCounty estimate
Wynnewood349.020.4Very hardCounty estimate
Langston344.020.1Very hardCounty estimate
Whitesboro36.72.1SoftCounty estimate
Cookson95.05.6Moderately hardCounty estimate
Cherokee815.047.7Very hardCounty estimate
Marshall400.023.4Very hardCounty estimate
Mulhall344.020.1Very hardCounty estimate
Orlando254.014.8Very hardCounty estimate
Hobart802.546.9Very hardCounty estimate
Stratford349.020.4Very hardCounty estimate
Beaver560.032.8Very hardCounty estimate
Fairfax170.09.9HardCounty estimate
Caddo235.013.7Very hardCounty estimate
Caney107.06.3Moderately hardCounty estimate
Devol443.525.9Very hardCounty estimate
Loveland730.042.7Very hardCounty estimate
Shidler170.09.9HardCounty estimate
Talihina38.52.3SoftCounty estimate
Wagoner119.07.0Moderately hardCounty estimate
Boise City260.015.2Very hardCounty estimate
Oilton183.010.7Very hardCounty estimate
Afton121.07.1HardCounty estimate
Mooreland640.037.4Very hardCounty estimate
Wellston246.014.4Very hardCounty estimate
Allen254.014.8Very hardCounty estimate
Council Hill150.08.8HardCounty estimate
Rush Springs700.040.9Very hardCounty estimate
Sulphur263.015.4Very hardCounty estimate
Geary509.029.8Very hardCounty estimate
Barnsdall170.09.9HardCounty estimate
Okeene509.029.8Very hardCounty estimate
Yale236.413.8Very hardCounty estimate
Chandler246.014.4Very hardCounty estimate
Douglas400.023.4Very hardCounty estimate
Enid400.023.4Very hardCounty estimate
Fairmont400.023.4Very hardCounty estimate
Garber400.023.4Very hardCounty estimate
Hunter400.023.4Very hardCounty estimate
Clayton22.01.3SoftCounty estimate
Macomb140.08.2HardCounty estimate
Shattuck385.022.5Very hardCounty estimate
Webbers Falls138.08.1HardCounty estimate
Wetumka180.010.5HardCounty estimate
Cyril712.541.7Very hardCounty estimate
Crescent344.020.1Very hardCounty estimate
Stuart180.010.5HardCounty estimate
Maud140.08.2HardCounty estimate
Okarche463.027.1Very hardCounty estimate
Okay119.07.0Moderately hardCounty estimate
Elmore City349.020.4Very hardCounty estimate
Welch230.513.5Very hardCounty estimate
Laverne560.032.8Very hardCounty estimate
Hydro712.541.7Very hardCounty estimate
Meeker246.014.4Very hardCounty estimate
Braggs138.08.1HardCounty estimate
Boley99.05.8Moderately hardCounty estimate
Newkirk422.024.7Very hardCounty estimate
Weleetka99.05.8Moderately hardCounty estimate
Velma290.017.0Very hardCounty estimate
Texhoma254.014.8Very hardCounty estimate
Braman422.024.7Very hardCounty estimate
Woodward640.037.4Very hardCounty estimate
Copan137.08.0HardCounty estimate
Ramona137.08.0HardCounty estimate
Fittstown254.014.8Very hardCounty estimate
Davenport246.014.4Very hardCounty estimate
Hendrix235.013.7Very hardCounty estimate
Kemp235.013.7Very hardCounty estimate
Atwood180.010.5HardCounty estimate
Leedey706.041.3Very hardCounty estimate
Wright City19.51.1SoftCounty estimate
Sterling152.58.9HardCounty estimate
Millerton19.51.1SoftCounty estimate
Mutual640.037.4Very hardCounty estimate
Coalgate130.07.6HardCounty estimate
Proctor95.05.6Moderately hardCounty estimate
Verden700.040.9Very hardCounty estimate
Luther221.012.9Very hardCounty estimate
Carney246.014.4Very hardCounty estimate
Alex700.040.9Very hardCounty estimate
Gans70.04.1Moderately hardCounty estimate
Hammon706.041.3Very hardCounty estimate
McCurtain132.07.7HardCounty estimate
Depew183.010.7Very hardCounty estimate
Dibble402.023.5Very hardCounty estimate
Locust Grove108.06.3Moderately hardCounty estimate
Cement712.541.7Very hardCounty estimate
Wann207.512.1Very hardCounty estimate
Marland254.014.8Very hardCounty estimate
Hodgen36.72.1SoftCounty estimate
Pawnee220.012.9Very hardCounty estimate
Nicoma Park221.012.9Very hardCounty estimate
Turpin560.032.8Very hardCounty estimate
Sparks246.014.4Very hardCounty estimate
Deer Creek435.025.4Very hardCounty estimate
Medford435.025.4Very hardCounty estimate
Muse36.72.1SoftCounty estimate
Clarita130.07.6HardCounty estimate
Osage170.09.9HardCounty estimate
Cromwell216.012.6Very hardCounty estimate
Fort Supply385.022.5Very hardCounty estimate
Big Cabin230.513.5Very hardCounty estimate
Eakly712.541.7Very hardCounty estimate
Hardesty254.014.8Very hardCounty estimate
Dougherty263.015.4Very hardCounty estimate
Cheyenne706.041.3Very hardCounty estimate
Lamar180.010.5HardCounty estimate
Buffalo490.028.6Very hardCounty estimate
Sharon640.037.4Very hardCounty estimate
Hallett220.012.9Very hardCounty estimate
Kenefic250.014.6Very hardCounty estimate
Glencoe236.413.8Very hardCounty estimate
Slick183.010.7Very hardCounty estimate
Adams254.014.8Very hardCounty estimate
Ardmore242.014.2Very hardCounty estimate
Faxon152.58.9HardCounty estimate
Keyes260.015.2Very hardCounty estimate
Miami181.010.6Very hardCounty estimate
Foss361.021.1Very hardUtility-reported
Kansas121.07.1HardCounty estimate
Pond Creek435.025.4Very hardCounty estimate
Ratliff City242.014.2Very hardCounty estimate

Above 120 mg/L (7 gpg), scale is usually worth treating — see our water softener guide, or size a system with the hardness calculator & converter.

The Geology Behind Oklahoma's Water Hardness

Oklahoma sits in the Great Plains and interior lowlands region.

The Great Plains and interior lowlands are underlain by carbonate rock, gypsum, and other evaporite deposits, and the semi-arid climate concentrates dissolved minerals rather than flushing them out. Aquifers like the High Plains (Ogallala) yield water the USGS classifies as hard to very hard across most of the region, from the Dakotas down through Texas. Surface-water systems fed by plains rivers carry much of the same mineral load.

Source: USGS - High Plains aquifer

Oklahoma Water Hardness FAQ

Does Oklahoma have hard water?

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

How hard is tap water in Oklahoma?

Across the 40 Oklahoma cities with measured values in our index, the median hardness is 142.2 mg/L (8.3 gpg) — hard on the USGS scale. Individual cities range from 45.9 to 361.0 mg/L, so check your own city rather than assuming the state number.

Which city in Oklahoma has the hardest water?

Bristow has the hardest measured tap water in our Oklahoma index at 231.5 mg/L (13.5 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 Oklahoma?

26 of Oklahoma's 40 measured cities (65%) 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 Oklahoma 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.