EA Water Quality Archive · ~monthly grab samples
The headline figures
Two sampling points carry the story: Thames at Teddington Weir
(TH-PTHR0107), the freshwater point at the tidal limit, and Thames at
Richmond (TH-PTTR0002), tidal water below Mogden sewage works. Twenty-two
years of ~monthly samples show a river that is well-oxygenated at the surface but nutrient-rich —
and a tidal reach that, in summer, loses its oxygen.
Dissolved oxygen: healthy above the weir, fish-stress below Mogden
Dissolved oxygen is the single best measure of whether a river can support fish. Above Teddington Weir the freshwater Thames never fell below 5 mg/l in 283 samples (lowest 5.82 mg/l). Below the weir and Mogden sewage works, the tidal water tells a different story: it repeatedly sags below the thresholds at which coarse fish begin to suffer.
Dissolved oxygen range — freshwater vs tidal reach
Each bar spans the lowest-to-highest recorded reading; the dot marks the mean · EA Water Quality Archive, 2004–2026
/sampling-point/{id}/observation,
determinand 9924. Freshwater = Teddington Weir TH-PTHR0107 (n=283); tidal = pooled
Richmond, Teddington and low-flow points (n=98). Thresholds are indicative fish-stress guides, not
the site-specific WFD standard. Provenance: RAW-PULL;
pooling & excursion counts DERIVED.
The contrast is the point. The freshwater bar sits entirely to the right of the 5 mg/l stress line — DO there never breached it in 22 years. The tidal bar reaches left across both the 5 mg/l and 3 mg/l lines, bottoming out at 2.53 mg/l (30% saturation). Every sub-5 event falls between June and October, when warm water holds less oxygen and organic loading exerts most demand — consistent with, though not proof of, a sewage-driven summer oxygen sag below Mogden. Above the weir the opposite risk appears: oxygen supersaturates to 182% of saturation, the signature of an algal bloom feeding on excess nutrients.
Nutrients: eutrophic above the weir, twice as phosphate-rich below
Orthophosphate is the nutrient that drives freshwater eutrophication and is a named cause of the river's "Poor" WFD status. Above the weir it exceeds the indicative 0.10 mg/l boundary in 91.6% of samples — but the 20-year trend is genuinely downward, from a pre-2010 mean of 0.39 mg/l to 0.18 mg/l from 2020 on.
Orthophosphate above the weir — annual mean, 2004–2026
Thames at Teddington Weir (freshwater) · every annual mean stays above the eutrophication boundary
TH-PTHR0107,
determinand 0180 (orthophosphate as P), 286 samples. Points are annual means; the dashed line is
the ~0.10 mg/l indicative eutrophication boundary (type-general, not the site-specific WFD
standard). 2020 (n=5) and 2026 (n=4, to April) are part-years — the hollow 2026
marker flags this. Provenance: RAW-PULL; annual means
DERIVED.
Phosphate has fallen a long way since the mid-2000s, which weakens any "getting worse" narrative — but it has not fallen far enough: the river is still enriched well past the point where nutrients stop being a problem. Downstream in the tidal reach the concentration roughly doubles (Richmond mean 0.663 mg/l), consistent with the sewage and urban-drainage inputs the EA names as reasons the water body is not "good."
| Determinand | Freshwater mean | Tidal mean | What it indicates |
|---|---|---|---|
| Dissolved oxygen (mg/l) | 10.32 · min 5.82 | 8.81 · min 2.53 | Fresh never <5; tidal sags to fish-stress in summer |
| DO saturation (%) | 96 · max 182 | 84 · min 30 | Fresh supersaturates (algal bloom); tidal depletes |
| Orthophosphate (mg/l as P) | 0.267 · 91.6% >0.10 | 0.663 · ~2× | Eutrophication driver — enriched throughout, worse tidal |
| Ammoniacal N (mg/l) | 0.10 | 0.09 | Low and improving at both points over 20 years |
| Nitrate (mg/l as N) | 7.46 | n=6 — insufficient | Fresh series only; tidal too sparse to trend |
| Water temperature (°C) | 12.79 | 14.76 | Tidal runs warmer; warm water holds less oxygen |
| Zinc (dissolved / total) | 0 records | 0 records | PROVEN GAP named tidal "Moderate" driver, unmonitored |
Sample sizes: freshwater DO n=283, DO %sat n=284, ammonia n=285, orthophosphate n=286, nitrate n=256, temperature n=285. Tidal (Richmond) DO n=64, %sat n=88, ammonia n=60, orthophosphate n=60, temperature n=86. The Richmond nitrate series (n=6, 2025–26 only) is too short to trend and is excluded from any claim. RAW-PULL.
How to read this
Caveats a regulator would press — stated up front
- The worst oxygen lows are historical. The 2.53 mg/l minimum and the tightest cluster of sub-5 events are 2004–2006. Recent tidal DO has improved — Richmond's 2020-on mean is ≈10.9 mg/l — so do not read a present-day crisis into a 20-year-old minimum. Ammonia and phosphate have also improved.
- Correlation is not causation. The summer (Jun–Oct) clustering of low-DO events is consistent with sewage-driven oxygen demand, but monthly daytime grab samples miss the acute storm-spill and pre-dawn crashes, and these readings are not overlaid on Mogden's spill dates. The spill→oxygen link here is inferential, not proven.
- Zinc is entirely unmonitored. Zinc has zero records at all 12 reach points, yet it is the named "Moderate" driver on the tidal water body — so that classification cannot be corroborated from open data at all.
- No effluent or spill quality is published here. Mogden's own discharge points (
TH-PTNE0063combined,TH-PTNE0133storm tank) return HTTP 204 — no observations in the public archive, and no spill volume is published anywhere. There is no open measure of what actually enters the tidal Thames. - A 17-year gap at the key tidal point. Richmond DO was measured 2004–2008, then not again until 2025–2026 — so the tidal reach has no dissolved-oxygen record for ~15 of the intervening years.
- Method notes. Values below the detection limit are set to ½ the limit (37 cases, all ammonia/phosphate); the threshold lines drawn on the charts are type-general indicative guides, not the exact site-specific WFD standards; freshwater and pooled-tidal points are grouped by us, not by the EA.
Sources & provenance
- RAW-PULL EA Water Quality Archive (WIMS) FastAPI service,
environment.data.gov.uk/water-quality/(openapi v1.3.0), route/sampling-point/{id}/observation. Backbone series: Teddington WeirTH-PTHR0107(freshwater) and RichmondTH-PTTR0002(tidal); pooled tidal addsTH-PTTR0001,TH-PTLF0005,TH-PTLF0006. - Fresh pull:
water-quality.csv— 2,432 observations, retrieved 2026-07-31, licence OGL v3.0. All headline figures on this page reconcile exactly to this file. - Determinand codes: DO 9924, DO %sat 9901, ammoniacal N 0111, orthophosphate 0180, nitrate 0117, temperature 0076; zinc 0243/0245 (returns no data on this reach).
- DERIVED Annual means, % exceedance, pooled-tidal excursion counts and the fresh-vs-tidal ratio are this programme's calculations from the RAW-PULL observations.
- Working files:
/tmp/thames_datastore/water_quality/—observations_all_points.csv,summary_stats.csv, per-pointraw_TH-*.csv, and the analysis scripts kept as provenance.