Water Chemistry
GH, KH and pH Explained: Hardness, Buffering and Safe Changes
Key takeaways
- GH is calcium and magnesium, KH is carbonate buffering, and pH is acidity; KH decides how stable pH stays.
- 1 dGH (or dKH) = 17.848 ppm as CaCO3. Below roughly 20 ppm alkalinity (about 1.1 dKH), nitrification falters and pH can crash.
- Stable water that suits your fish beats chasing a target pH with chemicals; change hardness gradually by blending water.
GH (general hardness) measures the dissolved calcium and magnesium in your water. KH (carbonate hardness) measures carbonate and bicarbonate, which act as a buffer, and pH measures how acidic or alkaline the water is. KH matters most day to day, because it decides how well pH resists change. For most community fish, stable, moderate values that match your tap water matter far more than hitting a particular pH.
What each number means
GH: calcium and magnesium
Hardness is a measure of divalent ions, which are ions with a 2+ charge, mostly calcium and magnesium. SRAC Publication 464 explains that fish use these minerals for bone and scale formation and blood clotting, and that calcium in the water helps fish limit salt loss from their blood. Snails and shrimp need calcium for shells and molting. The USGS classifies water hardness roughly like this:
| mg/L as CaCO3 | dGH (approx.) | USGS description |
|---|---|---|
| 0–60 | 0–3.4 | Soft |
| 61–120 | 3.4–6.7 | Moderately hard |
| 121–180 | 6.8–10.1 | Hard |
| over 180 | over 10.1 | Very hard |
KH: really, alkalinity
Aquarium “KH” kits actually measure total alkalinity: how much acid the water can neutralize before its pH drops. In most tap water, that comes almost entirely from bicarbonate and carbonate. SRAC 464 points out that hardness and alkalinity are often confused because both are reported in mg/L as CaCO3. Where limestone is the source, the two numbers are similar. Where sodium bicarbonate is the source, you can have high KH and low GH. That’s why baking soda raises KH without touching GH.
pH: a logarithmic scale
pH is the negative logarithm of the hydrogen-ion concentration. Each whole unit is a tenfold change, so pH 6.0 has ten times the hydrogen ions of pH 7.0. SRAC 464 gives 6.5–9.0 as the recommended range for aquaculture and notes that average fish blood pH is about 7.4. Fish may become stressed and die if pH drops below 5 or rises above 10.
Converting units
German degrees (dGH, dKH) were originally defined in terms of calcium oxide: 1 degree = 10 mg CaO per liter. Converting to the calcium carbonate convention that labs use:
1 dGH = 10 mg/L × (100.09 ÷ 56.08) = 17.848 mg/L (ppm) as CaCO3
The same factor applies to dKH. SRAC 4606 adds that 1 grain per gallon (gpg) equals 17.1 mg/L as CaCO3.
| Degrees (dGH or dKH) | ppm as CaCO3 |
|---|---|
| 1 | 17.8 |
| 3 | 53.5 |
| 4 | 71.4 |
| 6 | 107.1 |
| 8 | 142.8 |
| 10 | 178.5 |
| 12 | 214.2 |
Worked example: your water report lists total hardness as 150 mg/L as CaCO3. That’s 150 ÷ 17.848 = 8.4 dGH, or 150 ÷ 17.1 = 8.8 gpg.
Some reports list calcium and magnesium in mg/L of each element instead. SRAC 4606 warns that you can’t simply add those numbers together to get hardness. Convert each one first, using the factors SRAC 464 gives (2.5 for calcium, 4.12 for magnesium):
- Calcium 40 mg/L × 2.497 = 99.9 mg/L as CaCO3
- Magnesium 12 mg/L × 4.118 = 49.4 mg/L as CaCO3
- Total: 149.3 mg/L as CaCO3 ≈ 8.4 dGH
KH buffering and pH crashes
The nitrifying bacteria in your filter produce acid as they convert ammonia. According to UF/IFAS’s Ammonia in Aquatic Systems, nitrification releases hydrogen ions and CO2, which lower pH unless there’s enough alkalinity to absorb them. The bacteria also use up alkalinity as they work. UF/IFAS gives two key points:
- At total alkalinity below 20 mg/L (about 1.1 dKH), common nitrifying bacteria don’t work effectively.
- Once alkalinity runs out, pH can drop “significantly and quickly,” harming both fish and bacteria. This is often called “old tank syndrome.”
A crash usually builds up slowly: KH readings slip lower between water changes over weeks, then pH falls sharply, and ammonia or nitrite shows up because the biofilter has slowed. The fix is usually unexciting. Regular water changes replace lost alkalinity. If your tap KH is very low, adding a measured buffer keeps a reserve (see below). If you have soft tap water, test KH at least weekly. Our test kit guide covers how to get reliable readings.
How CO2, pH and KH are linked
Dissolved CO2 forms carbonic acid, which lowers pH. KH resists that drop. If you know two of the three values, you can estimate the third. SRAC 464 gives factors (from Tucker, 1984) that you multiply by total alkalinity in mg/L to estimate CO2 in mg/L. Here are selected values at 77°F (25°C):
| pH | Factor |
|---|---|
| 6.6 | 0.495 |
| 6.8 | 0.313 |
| 7.0 | 0.197 |
| 7.2 | 0.124 |
| 7.4 | 0.078 |
| 7.6 | 0.050 |
Worked example: a planted tank has a KH of 4 dKH (4 × 17.848 = 71.4 mg/L) at 77°F (25°C).
- At pH 6.8: 0.313 × 71.4 = 22.3 mg/L CO2
- At pH 7.4: 0.078 × 71.4 = 5.6 mg/L CO2
The familiar hobby shortcut, CO2 ≈ 3 × dKH × 10^(7 − pH), gives 19 mg/L for the first case, which is in the same ballpark. Treat both as estimates. SRAC 464 recommends measuring pH within 30 minutes of sampling and says a direct CO2 test is preferable because the method has several sources of error. Other acids and buffers, such as tannins from wood or phosphate-based pH products, throw the estimate off completely. That’s why CO2 drop checkers use a separate reference solution with a known KH instead of tank water.
pH also swings over each day. SRAC 464’s Table 1 shows CO2 falling and pH rising during daylight as plants photosynthesize, and the reverse at night. Measure pH at the same time each day so you’re comparing like with like. Our low-tech planted tank guide explains why this matters when you’re not injecting CO2.
When to adjust pH, and when not to
Usually leave it alone if:
- Your fish are common captive-bred species and your pH is steady, even if it’s higher or lower than what a care sheet lists.
- You’re thinking of using “pH up” or “pH down” in water with moderate KH. The buffer pushes back, so you end up dosing again and again, and pH swings with each dose. That’s worse for fish than a steady, slightly-off value.
- There’s ammonia in the tank. Raising pH turns more of the total ammonia into toxic NH3 (see the table in the test kit guide). Fix the ammonia first.
Adjusting is reasonable when:
- KH is so low that pH keeps crashing.
- You keep snails or shrimp and GH is too low for healthy shells and molts.
- You’re breeding soft-water species, or keeping hard-water fish such as livebearers or rift-lake cichlids in water that’s very different from what they need.
The simplest approach of all is to choose fish that suit your tap water. The stocking planner can help you shortlist compatible species.
Safe ways to adjust
Raising KH with sodium bicarbonate
Plain baking soda (sodium bicarbonate, NaHCO3) raises KH without raising GH.
- 1 dKH = 17.848 mg/L as CaCO3 ÷ 50.04 = 0.357 meq/L
- 0.357 meq/L × 84.01 mg/meq = about 30 mg/L of sodium bicarbonate per 1 dKH
- For 20 US gallons (75.7 L) of actual water: 75.7 × 30 = 2,271 mg, or about 2.3 g per dKH
Weigh it on a scale that reads to 0.1 g, since teaspoon measures vary. Dose for the real water volume, not the tank’s nominal size, because gravel and decor take up space. Where you can, dissolve it into the replacement water before a water change so that tank and new water match. Raise KH in small steps over several days. Bicarbonate alone rarely pushes aquarium pH much above about 8.3.
Raising GH
Use a GH remineralizer (a blend of calcium and magnesium salts) and follow the label dose. Crushed coral or aragonite in the filter raises both GH and KH slowly. It dissolves faster in more acidic water, so it tends to limit itself as pH rises.
Lowering hardness by blending with RO or distilled water
The fraction of tap water to use is your target divided by your tap value.
Example: tap water is 14 dGH and 8 dKH, and you want about 6 dGH.
- 6 ÷ 14 = 0.43, so the mix is 43% tap and 57% RO
- KH in the mix: 8 × 0.43 = 3.4 dKH
- For a 5-gallon (18.9 L) bucket: about 2.1 gallons (8.1 L) tap + 2.9 gallons (10.8 L) RO
Never use pure RO water alone, because it contains no minerals or buffer. Move toward the new values over several water changes rather than all at once, since sudden big changes in hardness stress fish. Our guide to water change math shows how each water change shifts the tank’s values.
Lowering pH gently
Peat, catappa leaves and driftwood release tannins that lower pH modestly in soft, low-KH water. In well-buffered water they do little except tint the water.
Common mistakes
- Treating “hardness” on a strip as GH when it may be total hardness in a different unit. Check the label.
- Adding pH-down chemicals over and over to fight a high KH.
- Switching from hard tap water to pure RO in a single water change.
- Letting KH run close to zero in a soft-water tank without testing.
Run the numbers
Stocking & Bioload Planner
Estimate net water volume, bioload and compatibility for a planned community, with every formula shown.
Fishless Cycle Ammonia Dosing Calculator
Work out how much household ammonia or ammonium chloride reaches your target ppm, with unit conversions.
Sources and further reading
Fishkeeping guidance on this page is general. Species, local tap water and equipment vary, so confirm decisions with your own water tests. For sick fish, follow medication labels and consult an aquatic veterinarian. Spotted an error? Tell us and we will review it under our corrections policy.