GH vs KH, and why your fish care about one and your pH about the other

General hardness and carbonate hardness are two independent numbers. One builds shells, the other holds pH steady. Here is the chemistry and the targets.

GH (general hardness) is the dissolved calcium and magnesium in your water — the minerals fish, shrimp and snails build bodies and shells from — measured in °dGH, where 1 °dGH ≈ 17.86 ppm CaCO₃. KH (carbonate hardness) is the carbonate and bicarbonate that buffers your pH against the acid a tank produces every day, measured in °dKH. As rough targets: soft-water species sit around 2–6 °dGH, hard-water species at 8–18 °dGH or more, and 5–6 °dKH is enough buffer to hold pH steady in most community tanks.

The two sound like the same measurement taken twice. They are not. They are two different things that happen to share the word "hardness" and a unit that looks similar on the bottle. GH is the mineral content your livestock builds bodies out of. KH is the buffer that keeps your pH from falling off a cliff overnight. A tank can be high in one and low in the other, and the usual hardness confusion comes from treating a single dial when there are two.

If you keep RO water and add minerals back yourself, you set both numbers independently. If you run straight tap from a chalky aquifer, they tend to arrive high together, and that coincidence is exactly what makes people think they're the same thing.

GH is the mineral count

General hardness measures the total concentration of divalent cations in the water. In practice, in freshwater, that means calcium (Ca²⁺) and magnesium (Mg²⁺). A few other ions technically count, but they're trace, so GH is Ca plus Mg and nothing you need to fret about.

GH ≈ [Ca²⁺] + [Mg²⁺]

This is the number your animals respond to. Shrimp pull calcium out of the water column to harden a new shell after every moult. Snails build their shells out of it continuously, and a low-GH tank leaves them with pitted, eroded spires. Plenty of fish use the Ca:Mg balance as a breeding cue: many soft-water species will only spawn when hardness drops, and many hard-water species need it high to stay in condition. When a moult goes wrong, when shells crumble, when livebearers go off colour, GH is usually the first number I look at.

GH is read in degrees of general hardness, °dGH. The conversion to ppm is fixed:

1 °dGH ≈ 17.86 ppm CaCO₃

Tap water from a hard-water region tends to run roughly 4:1 calcium to magnesium. That ratio is fine for almost everything, and not worth chasing unless you keep something genuinely fussy. The GH parameter page has the target bands laid out, and if you're juggling ppm, °dGH, and the individual calcium and magnesium numbers, the hardness converter will do the arithmetic so you don't have to.

KH is the buffer

Carbonate hardness measures something completely different: the concentration of carbonate and bicarbonate ions (CO₃²⁻ and HCO₃⁻) in the water. These don't build shells. What they do is absorb acid.

Every day your tank produces acid. Fish respire CO₂, which becomes carbonic acid in water. Nitrifying bacteria turn ammonia into nitrate and release hydrogen ions doing it. Driftwood and leaf litter leach organic acids. Left unchecked, all of that would drive pH down. KH is the sponge that soaks up those H⁺ ions before they move the pH needle.

CO₂ + H₂O ⇌ H₂CO₃ ⇌ HCO₃⁻ + H⁺

That bicarbonate on the right of the equation is your KH, and it neutralises incoming acid by running the reaction backwards: each H⁺ that shows up gets mopped into carbonic acid instead of dropping the pH. The more bicarbonate you have, the more acid the water can swallow before pH actually shifts. This is why KH and pH stability travel together. A tank with KH of 5–6 °dKH rides the daily CO₂ swing almost flat. A tank near zero KH has nothing holding the line, so pH lurches with every breath the tank takes and can crash several points overnight. The fish don't die from the low pH directly so much as from the speed of the change.

Two slow drains work against KH constantly. Nitrification consumes it a little at a time, which is why a heavily stocked, lightly planted tank watches its KH creep down between water changes. CO₂ injection doesn't consume KH, but it does push pH down hard during the photoperiod, and a low KH lets that swing run wider than the fish would like. If you inject CO₂, the relationship between KH, pH, and dissolved gas is worth understanding in full, and the CO₂ without a meter guide walks through how the three lock together.

They are independent

Here is the part people skip. GH and KH are set by different ions, so they move independently.

A chalk-aquifer tap supply leaches both calcium carbonate and bicarbonate from the rock, so it arrives high in GH and high in KH at once. That single source is where the "they're the same number" intuition comes from. But the moment you start with RO water and remineralise, you can produce any combination you like:

Water source GH KH What you'd keep
Hard tap (chalk) high high rift cichlids, livebearers, snails
RO + shrimp GH/KH+ mid low–mid neocaridina, community
RO + GH-only salt mid near 0 caridina (bee shrimp)
Soft tap / rainwater low low discus, wild apistos, tetras

The caridina row is the one that surprises beginners. Bee shrimp want measurable GH (the calcium for moulting) sitting on top of an almost-zero KH, because their buffering substrate is doing the pH job instead. You cannot get there with a single all-in-one remineraliser. You need a GH-only product, which is the whole reason separate "GH+" and "GH/KH+" salts exist.

Targets by livestock

The window that suits your tank depends entirely on what lives in it. Roughly:

Soft-water species want low GH, typically 2–6 °dGH, with KH low to match so the pH can sit in the acidic range they evolved in:

  • most South American tetras (Paracheirodon, Hyphessobrycon)
  • wild Apistogramma
  • discus (Symphysodon)
  • caridina shrimp such as crystal and bee shrimp

Hard-water species want high GH, often 8–18 °dGH or more, with KH high enough to hold pH firmly alkaline:

  • livebearers (guppies, platies, mollies)
  • African rift-lake cichlids (Malawi, Tanganyika)
  • nerite and mystery snails
  • neocaridina (cherry) shrimp, which are far more forgiving than caridina

Neocaridina sit comfortably in the middle and tolerate a wide band, which is why they're the usual first shrimp. Caridina are fussier in both directions. If shrimp are the point of the tank, the shrimp-safe parameters guide gives the species-by-species numbers in more detail than fits here.

The mistake I see most often is keeping a fish in the wrong hardness because the local tap happens to be cheap. A discus in 15 °dGH chalk water survives, but it's never quite right. Match the water to the animal, or pick animals that match your water. Both are valid. Forcing the issue with chemistry every week, less so.

Raising and lowering each

To raise GH: add a remineraliser with calcium and magnesium. Salty Shrimp GH/KH+ or GH+ for shrimp tanks, Seachem Equilibrium for planted tanks that want minerals without raising KH much, JBL Aquadur for general use. These are examples of the categories, not endorsements; any reputable mineral salt does the job if you dose to a target.

To raise KH: baking soda (sodium bicarbonate) raises KH cleanly and cheaply without touching GH, which is the classic move for caridina keepers who need KH up a touch without lifting hardness. Crushed coral or aragonite in the filter raises KH slowly and self-limits as pH stabilises — but it dissolves as calcium carbonate, so it lifts GH along the way. Not a KH-only option. Most all-in-one GH/KH+ remineralisers raise both together.

To lower either: dilute with RO or distilled water. There is no additive that removes hardness from a running tank without causing more trouble than it solves, so the honest answer is to cut the source water with RO until the numbers land where you want them, then maintain that mix on every change. The water-change impact tool shows how far a given swap moves each number, which matters because hardness changes should be gradual, not a single big correction.

How often to test

GH barely moves on its own in a stable tank. Test it monthly, and any time after a water change where you've changed the source-water mix. KH is the one that drifts, because nitrification quietly drains it, so test it every week or two, especially in a low-KH tank where there's little buffer to lose. If you inject CO₂ or keep a heavy bioload, lean toward weekly on KH.

Manfred's whole approach is the long view: log both numbers, watch the slow lines rather than chasing single readings, and you'll see the KH creep before it becomes a pH crash. The crash is the symptom. The drifting buffer is the cause, and it's visible weeks ahead if you're writing it down.

Manfred

Manfred quietly remembers every test, dose, and water change you log. The trends fall out — no spreadsheet required.

Open a free reefnotes account →