Aquariums

Water chemistry for fishkeepers: pH, GH, KH, and what they mean

8 min read

Most fishkeeping problems that get blamed on disease are actually water chemistry problems. A tank at the wrong pH kills slowly. Low KH causes overnight pH crashes that kill fast. Hard water softened through an ion-exchange unit replaces calcium with sodium, which is worse for most fish than the hardness it removed.

This covers what each parameter measures, how they relate, and the parts that matter for keeping fish alive.

pH

pH measures hydrogen ion concentration on a logarithmic scale from 0 (extremely acidic) to 14 (extremely alkaline). 7.0 is neutral. Each whole number is a tenfold change; pH 6.0 is ten times more acidic than pH 7.0, and pH 5.0 is a hundred times more acidic than pH 7.0.

Most freshwater fish tolerate pH 6.0 to 8.0. Some, like Rift Lake cichlids, need 7.5 to 8.5. Others, like cardinal tetras and discus, prefer 5.5 to 6.5. The species profiles on this site list the range for each fish.

Two things matter more than hitting an exact number:

Stability. A tank that holds steady at 7.6 is better for most community fish than a tank that bounces between 6.8 and 7.4 because the keeper keeps adding pH-down products. Fish acclimate to a stable pH outside their "ideal" range far better than they handle swings.

Matching your source water. If your tap water comes out at pH 7.8 and 12 dGH, stock fish that like hard alkaline water (livebearers, rainbowfish, Rift Lake cichlids). Fighting your tap water is expensive, labor-intensive, and usually creates instability. The exception is if you're keeping species with strict requirements (discus, crystal red shrimp, certain wild-caught tetras) and you're willing to use RO water and remineralize to spec.

GH (general hardness)

GH measures the concentration of dissolved calcium and magnesium ions (Ca2+ and Mg2+). It's reported in degrees (dGH) or in mg/L of calcium carbonate equivalent (1 dGH = 17.8 mg/L CaCO3).

Rough categories:

  • 0-4 dGH: very soft (Southeast Asian blackwater species, most Caridina shrimp)
  • 4-8 dGH: soft (most tropical community fish, many tetras and rasboras)
  • 8-12 dGH: moderate (livebearers, most barbs, many cichlids)
  • 12-20 dGH: hard (Rift Lake cichlids, brackish species)
  • 20+ dGH: very hard (some Tanganyikan shell-dwellers, certain snails)

Fish need calcium and magnesium for bone growth, osmoregulation, and gill function. Shrimp need calcium to build their exoskeleton after molting; low GH is the most common cause of failed molts in Neocaridina and Caridina shrimp. Snails need calcium to grow their shells; thin, eroded shells in mystery snails or nerites almost always point to low GH.

GH doesn't affect pH directly. A tank can be soft and alkaline (uncommon but possible) or hard and acidic (unusual in nature but can happen with CO2 injection in hard water).

KH (carbonate hardness)

KH measures the buffering capacity of the water, specifically the concentration of bicarbonate (HCO3-) and carbonate (CO32-) ions. Same units as GH: dGH or mg/L CaCO3 equivalent.

KH matters because it determines how stable your pH is. Bicarbonate acts as a pH buffer: when acid is added to the water (from fish respiration, bacterial activity, or decomposing organics), bicarbonate neutralizes it and the pH stays stable. When the KH is consumed, the pH drops with nothing to stop it.

A pH crash is what happens when KH hits zero. The pH falls rapidly, sometimes from 7.0 to below 5.0 overnight. This kills fish. It's one of the most common causes of mysterious overnight deaths in tanks that "seemed fine yesterday."

Rules of thumb:

  • KH above 4 dGH is generally safe from pH crashes in a normally stocked tank.
  • KH below 2 dGH is risky unless pH is being monitored closely or the tank is deliberately maintained as a soft-water system with frequent small water changes.
  • Tanks with CO2 injection consume KH faster because the dissolved CO2 forms carbonic acid. Planted tanks running pressurized CO2 should monitor KH weekly.

How pH, KH, and CO2 interact

This is the relationship that confuses people, but it matters for planted tanks and for understanding why pH drops at night.

Carbon dioxide dissolves in water and forms carbonic acid:

CO2 + H2O ↔ H2CO3 ↔ H+ + HCO3-

More CO2 means more carbonic acid, which means more hydrogen ions, which means lower pH. During the day, plants consume CO2 through photosynthesis, reducing the acid load, and pH rises. At night, plants respire and add CO2, and pH drops. In a planted tank with CO2 injection, the pH may swing 0.5 to 1.0 units between lights-on and lights-off. This is normal and not harmful as long as the KH is adequate to prevent the swing from going too far.

The CO2/KH/pH table (used by the CO2 calculator on this site) lets you estimate dissolved CO2 from a pH reading and a KH reading. The target for most planted tanks is 20-30 ppm CO2, which corresponds to roughly pH 6.6-6.8 at KH 4-5 dGH. Below 15 ppm CO2 doesn't help plants much; above 35 ppm starts stressing fish (rapid gill movement, gasping at the surface).

When to adjust your water

Usually: don't. Pick fish that match your tap water. This is the single most useful piece of advice in freshwater fishkeeping and the one most beginners ignore. If your tap comes out at pH 7.4, GH 10, KH 6, you have excellent water for livebearers, barbs, rainbowfish, and most community species. Stock those.

Adjust for shrimp. Caridina shrimp (crystal reds, Taiwan bees) need GH 4-6, KH 0-1, pH 5.8-6.8. This almost always means starting with RO or distilled water and remineralizing with a product like Salty Shrimp GH+. The GH/KH dosing calculator on this site helps with the math.

Adjust for Rift Lake cichlids in soft water. If your tap is soft (GH below 6, KH below 4) and you want to keep Malawi or Tanganyika cichlids, you'll need to buffer the water up. Crushed coral in the filter, limestone in the tank, or commercial Rift Lake buffer salts all work. The key metric is KH; get it above 8 dGH and pH will stabilize in the 7.8-8.4 range naturally.

Adjust for soft-water species in hard water. Discus, wild-caught tetras, and some dwarf cichlids from blackwater habitats do poorly in hard alkaline water long-term. RO water blended with tap water to hit the target GH and KH is the standard approach. An RO unit produces 50-100 gallons per day depending on the model. For a single tank this is overkill; for multiple soft-water tanks it pays for itself by eliminating buffer-chemical costs.

Never chase pH with pH-up or pH-down products. These shift the pH temporarily without addressing the underlying buffer chemistry. The pH rebounds within hours, creating exactly the instability that harms fish. If the pH needs to move, change the KH (which changes the buffering equilibrium) or change the source water (RO blending). Don't add acid or base directly.

Testing

Test pH, GH, and KH from your tap water before setting up a tank. Let a glass of tap water sit for 24 hours before testing; dissolved CO2 in pressurized municipal water can suppress the pH reading by 0.5 or more. The pH after 24 hours of off-gassing is the number that matters.

Test the tank water weekly. If pH, GH, and KH are stable week to week, everything is fine. If KH is dropping between water changes, something in the tank is consuming buffer (driftwood leaching tannins, CO2 injection, high bioload). Top up KH or increase water change frequency.

Nitrate testing is separate from this but related: nitrate accumulates between water changes and provides a rough indicator of how well the water-change schedule matches the bioload. Below 20 ppm before a water change is good. Above 40 ppm means either more frequent changes or a lighter fish load. The water change calculator can help dial in the schedule.

Related tools