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

What pH, GH, KH, and TDS measure, how they interact, the ammonia-pH toxicity relationship, chlorine vs chloramine in tap water, and when to adjust vs leave your water alone.

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 parts per million of calcium carbonate equivalent (1 dGH = 17.8 parts per million as 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 parts per million as 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 parts per million CO2, which corresponds to roughly pH 6.6-6.8 at KH 4-5 dGH. Below 15 parts per million CO2 doesn't help plants much; above 35 parts per million 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 parts per million before a water change is good. Above 40 parts per million means either more frequent changes or a lighter fish load. The water change calculator can help dial in the schedule.

TDS (total dissolved solids)

TDS measures everything dissolved in the water: calcium, magnesium, sodium, potassium, bicarbonates, chlorides, sulfates, silicates, and trace minerals. It's measured in mg/L (ppm) using a TDS meter, which actually measures electrical conductivity and converts to an approximate TDS value.

TDS is a blunt instrument. It tells you the total mineral load but not what those minerals are. A TDS of 200 parts per million could be mostly calcium and magnesium (good for livebearers) or mostly sodium (bad for most freshwater fish). GH and KH tests tell you the composition; TDS tells you the total.

Where TDS is useful: monitoring RO output (should be below 10 parts per million; rising TDS means the membrane needs replacement), tracking remineralization (adding GH booster to RO water until TDS hits your target), and checking consistency over time (a sudden TDS change in your tap water suggests something changed at the treatment plant).

For most freshwater tanks, GH and KH testing gives you everything you need. TDS adds supplementary information for specialized setups (shrimp tanks, discus, soft-water breeding projects) where total mineral load matters beyond just calcium and magnesium.

Ammonia toxicity and pH: the hidden interaction

Ammonia exists in two forms in water: un-ionized ammonia (NH3, which is toxic to fish) and ammonium (NH4+, which is much less toxic). The ratio between them depends on pH and temperature. At pH 7.0 and 25 C, about 0.5% of total ammonia nitrogen (TAN) is in the toxic NH3 form. At pH 8.0, that jumps to roughly 5%. At pH 9.0, it's about 30%.

This means the same ammonia test result (say, 1.0 parts per million TAN) is far more dangerous at pH 8.0 than at pH 7.0 because ten times more of it is in the toxic form. A Rift Lake cichlid tank at pH 8.2 with 0.5 parts per million TAN has a more serious ammonia problem than a soft-water tetra tank at pH 6.5 with the same 0.5 parts per million reading.

Standard ammonia test kits (API, Seachem) measure total ammonia nitrogen (both forms combined). They don't distinguish between NH3 and NH4+. You need to know your pH to interpret the result. An ammonia/pH cross-reference chart (available online and often printed in test kit instructions) converts TAN to actual toxic NH3 concentration.

The practical consequence: in high-pH tanks (African cichlids, hard-water community tanks), ammonia management is more critical because any ammonia is proportionally more toxic. Overstocking and overfeeding are riskier at high pH than at low pH, even though the test kit shows the same number.

Chlorine and chloramine in tap water

Municipal water treatment adds disinfectants to kill bacteria. These disinfectants also kill the nitrifying bacteria in your filter and damage fish gill tissue on direct exposure. You must neutralize them before adding tap water to a tank.

Chlorine is the traditional disinfectant. It dissipates naturally through off-gassing: letting tap water sit in an open container for 24 hours, or aerating it vigorously for a few hours, removes chlorine. You can also neutralize it instantly with a dechlorinator product (sodium thiosulfate is the active ingredient in most).

Chloramine is chlorine bonded to ammonia. Many water utilities have switched to chloramine because it's more stable in the distribution system (it doesn't dissipate in the pipes the way chlorine does). Chloramine does not off-gas. It will not leave the water by sitting overnight. You must use a dechlorinator that specifically neutralizes chloramine (most modern products do; Seachem Prime, API Stress Coat, and Fritz Complete all handle chloramine).

When a chloramine neutralizer breaks the chlorine-ammonia bond, it releases a small amount of free ammonia into the water. In an established tank with a functioning biofilter, this ammonia is processed quickly. In an uncycled tank or during a large water change in a heavily stocked tank, the released ammonia can cause a temporary spike. Products like Seachem Prime include an ammonia-binding component that detoxifies this released ammonia for 24-48 hours, giving the biofilter time to process it.

How to find out what your utility uses: Check your annual Consumer Confidence Report (CCR), available on your water utility's website. It lists the disinfectant type, residual concentration, and other treatment chemicals. If in doubt, use a dechlorinator that handles both chlorine and chloramine; there's no downside to treating for chloramine even if your water only has chlorine.

Seasonal and geographic variation

Tap water isn't constant. Municipal utilities adjust treatment based on source water conditions, which change with seasons, rainfall, and demand.

Spring runoff dilutes minerals in surface-water supplies. GH and KH may drop temporarily. pH may shift as the raw water chemistry changes.

Late summer in areas relying on reservoirs or river water concentrates minerals as water levels drop. GH and TDS may rise.

Disinfectant dosing increases after heavy rain (more organic matter in the source water requires more treatment). Chloramine levels may spike following storms.

Well water is generally more stable than surface water but can change when the water table drops during drought or rises during wet seasons. Well water often contains elevated iron, manganese, or sulfur that surface-treated water doesn't.

If you notice unexplained pH drift, unusual fish behavior, or parameter changes in your tank that don't correspond to anything you did, test your tap water. The source may have changed. Growers running sensitive setups (shrimp breeding, discus tanks, planted tanks with precise CO2 control) benefit from testing tap water quarterly and after any major weather event.

Putting it together: a practical decision tree

  1. Test your tap water (pH, GH, KH, TDS). Let it sit 24 hours before testing pH.
  2. Look up the preferred parameters for the fish you want to keep.
  3. If your tap water falls within the acceptable range for those species, use it as-is with dechlorination. Stock the tank and don't adjust anything.
  4. If your water is too hard for the species you want: blend with RO water to bring GH and KH down to target. Use the remineralizer calculator to hit specific targets.
  5. If your water is too soft for the species you want: add crushed coral, limestone, or a commercial mineral buffer to the filter to raise GH and KH.
  6. If your pH is stable but outside the ideal range for your species by less than 0.5 units: leave it alone. Stability wins.
  7. If your KH is below 3 dGH: add buffer (crushed coral, sodium bicarbonate, or potassium bicarbonate) before stocking. Low KH is a crash waiting to happen.
  8. Test weekly. Log results. Trends matter more than single readings.