The file, as text
date,ph,nitrate_ppm,nitrite_ppm,ammonia_ppm,water_changed,water_change_percent,notes 2026-11-01 09:15,7.2,15,0,0,yes,25,"Nitrate before the water change, 20 L out" 2026-11-04 19:40,7.1,20,0,0,no,0,"Added 6 neon tetras" 2026-11-08 10:02,7.3,15,0,0,yes,25,"Filter media rinsed in tank water"
Column names stay in English on purpose: they match the app export, so two files can be merged without a mapping table.
A spreadsheet is the smallest possible log system: one file, no account, opens anywhere, and you can sort it, chart it or hand it to a spreadsheet-minded friend. This page gives you the header row so you do not have to invent one.
The columns
| Column | Format | Example |
|---|---|---|
| date | YYYY-MM-DD HH:MM | 2026-11-01 09:15 |
| ph | decimal | 7.2 |
| nitrate_ppm | decimal | 15 |
| nitrite_ppm | decimal | 0 |
| ammonia_ppm | decimal | 0 |
| water_changed | yes / no | yes |
| water_change_percent | 0–100 | 25 |
| notes | free text, quoted if it contains a comma | "20 L changed" |
Two things that trip people up
- If your spreadsheet uses a comma as the decimal separator, it may expect semicolons between columns instead. Import the file with “comma” as the separator rather than letting the app guess.
- Keep the header exactly as it is: lowercase, underscored. The moment you rename a column, the file stops matching the app export and any script that reads it.
The app exports CSV with these eight columns. This template exists so a spreadsheet started today can grow into the same shape as an export from your phone.
What it is not
There is no import into the app in the current release — the CSV is a backup and an escape hatch, not a sync format. The browser log exports the same header if you want a middle step, and the printable sheet is for paper.