The water test log, and why your memory is the least reliable instrument you own
Drift is invisible day to day and obvious in a log. What to record, how often to test each parameter, and a free CSV template to start with.
A good aquarium water test log is one row for every day you touch the tank, with twelve columns: date, the seven core parameters — NO₃, PO₄, KH, GH, pH, NH₄, NO₂ — plus temperature, the water-change percentage, what you dosed, and a notes field. Test the core set weekly, GH monthly, and write the row even when every number is boring. You can download the template as a plain CSV that opens in Excel, Google Sheets or Numbers, with two example rows already filled in.
That's the short answer for anyone who came here for a spreadsheet. The rest of this guide is the reasoning: why those columns and not others, how often each one actually deserves a test, how trends surface out of a dull table, and the handful of habits that quietly ruin a log's value.
Why a log beats memory
Nothing in an aquarium announces that it's drifting. A tank sliding toward trouble looks, on any given day, exactly like it did yesterday — the week-to-week change is smaller than anything your eyes or your memory can resolve. A log exists because drift only becomes visible when you can put two numbers weeks apart next to each other.
Two examples I've watched play out, in my own tanks and other people's.
KH first. A tank starts at 5 °dKH. Nitrification quietly consumes the buffer, and every second week the reading comes back a shade lower: 5, then 4, then 4 again, then 3. No single test raises an eyebrow — nobody panics over a KH of 4 — but the slope is heading for zero, and when KH runs out the pH doesn't drift, it crashes. Written down, the trend is unmistakable by week six. Trusted to memory, "wasn't it about 4 last time?" covers everything right up until the crash.
Nitrate second. The peaks just before the weekly water change read 20, then 23, then 27 mg/L. None of those is dramatic next to the usual 25 mg/L ceiling, but the row of them says something a single test never can: the tank's waste production has outgrown its maintenance. More food, more fish, plants slowing down — something shifted, and the log caught it three weeks before the algae did.
And there's a third job, the underrated one. When something eventually does go wrong — an algae bloom, shrimp deaths, cloudy water — the first question is always what changed, and when? A log answers that in thirty seconds. Memory, asked the same question, invents an answer, usually starring whatever you happened to do most recently.
What to record
More than test results. A column of numbers with no causes attached is half a record. Four things belong in the log:
Test results. The seven core parameters cover most freshwater tanks: NO₃ and PO₄ for waste and nutrients, KH and GH for buffering and minerals, pH, and NH₄/NO₂ as cycle indicators. If you fertilise a planted tank you'll want Fe and K columns too — add them, the template is yours.
Water changes, with size. A nitrate reading means something different the day before a water change than the day after, so a test result without knowing where in the cycle it sits is half a data point. Log every change and its percentage.
Doses. Product and amount. Fertiliser, remineraliser, conditioner, medication — anything that went into the water on purpose.
Events. New livestock, deaths, a filter clean, a big plant trim, a food change, a fresh test-kit batch, two weeks of holiday feeding. These live happily in the notes column, and they're the answers to next month's "what changed?"
You do not need every parameter every time. A row containing one nitrate value and a note is a perfectly good row. The only rule: if you measured something or did something, it gets a dated line.
The template
The CSV has the twelve columns above, and its two example rows demonstrate the habits worth copying. The tests are taken before the water change, so week-to-week readings stay comparable. The dose column records what went in. And the notes column does the thinking — "KH down a degree, keep an eye on it" is exactly the kind of sentence that makes a log worth keeping.
A few mechanics that pay off later: keep dates in ISO format (2026-06-14) so the file sorts properly; leave a cell blank rather than guessing at a value you didn't measure; and keep units in the header row, never in the cells, so the columns stay chartable.
How often to test what
Testing everything weekly is how logging becomes a chore and gets abandoned by week five. Parameters move at very different speeds, and the cadence should match:
| Parameter | Cadence | Why |
|---|---|---|
| NO₃ | weekly, just before the water change | the headline waste number; its pre-change peak sets your water-change size |
| PO₄ | weekly, together with NO₃ | the algae early-warning; only means much read next to nitrate |
| KH | every 1–2 weeks; weekly with CO₂ or heavy stock | drains slowly via nitrification — the pH-crash early warning |
| GH | monthly, plus after any change to the source-water mix | barely moves on its own |
| pH | weekly, at the same time of day every time | swings with CO₂ through the photoperiod; timing noise swamps real change |
| NH₄ / NO₂ | daily while cycling; afterwards only on suspicion | should read flat zero in a running tank — test after deaths, new stock, filter mishaps |
| Temp | glance daily, log with every test | a failing heater shows up here before the fish do |
While a tank is cycling none of this applies — NH₄ and NO₂ daily is the whole job for those weeks, and the cycling guide walks through what the two curves should do. Once the tank is established, a non-zero reading on either is an event, not a data point.
Reading trends out of a table
Rule one: compare like with like. Most parameters in a maintained tank move in a sawtooth — nitrate climbs between water changes and drops when you do one. Comparing a Friday-before-the-change reading with a Sunday-after reading tells you about the water change, not about the tank. Compare peaks with peaks and troughs with troughs, which is exactly why the template tests before the change.
Rule two: do the slope arithmetic. It's one subtraction and one division:
drift per week ≈ (this week's reading − reading n weeks ago) / n
If KH read 5 eight weeks ago and 3 today, that's (3 − 5) / 8 = −0.25 °dKH per week — the buffer is gone in roughly three months if nothing changes, and now you know it a quarter of a year early. The same arithmetic on rising pre-change nitrate peaks tells you whether your water change needs to grow; the bigger-water-change guide covers what to do with that answer, and the water-change impact calculator lets you try a swap size on paper before you haul buckets.
Rule three: chart it. Select the date column and one parameter column and insert a line chart. A slope you'd never spot scanning cells is unmissable as a line. This is, honestly, the one job a spreadsheet makes you do by hand that ought to happen by itself.
Five habits that ruin a log
Logging only when worried. Test on a rhythm, not on a hunch, or you end up with a record of bad days and no baseline to compare them against. The boring rows are the log's entire value.
Testing at random times. pH can easily read half a unit apart between morning and late afternoon in a planted tank, and every sawtooth parameter depends on where in the water-change cycle you catch it. Fix the time of day and the point in the cycle, or you're logging your schedule, not your water.
Numbers without causes. A nitrate that halves overnight is either a miracle or a water change you forgot to write down. Every dose and every change goes in the same file as the readings.
Switching test kits silently. Two brands read the same water differently, so a mid-log switch looks exactly like a tank event. One word in the notes column prevents a month of confusion. While we're here: obey the reagent shake times in the leaflet. The popular nitrate drop tests want the second reagent shaken for a full minute, and a lazy five-second shake reads systematically low — I know because mine did, for years, before I caught it.
Writing "fine" instead of the number. "Fine" can't be charted, averaged or compared against last month. 22 is a data point; "fine" is a mood.
Where the spreadsheet stops
Honest answer: the CSV works. I ran my logs in a spreadsheet for years, and the template above will do the job for as long as you keep filling it in. What it won't do is chart itself, remind you that the water change is due, or notice that this week's KH continues a slide the last six rows started.
reefnotes is the same table with the manual work removed — free, ad-free, and browser-based, nothing to install, works on the phone standing at the tank. You log a test in a few taps; it draws the trend line through your history, projects it forward with its Forecast and confidence band, shows you when the next water change is due, tracks doses against a product catalog, and keeps the whole record in a wide, editable logbook view that is more or less this CSV with charts attached. The trend-chart guide shows what the payoff looks like, and an account is free if you'd rather the drift found you instead of the other way round.
And if the spreadsheet suits you — keep the spreadsheet. The tool matters far less than the habit. Tanks don't get into trouble because someone logged in the wrong software; they get into trouble because nobody wrote anything down at all.

