Methodology · for researchers and sceptics

Where the
numbers come from.

Every figure on this site is traceable back to a primary source. Nothing is invented, smoothed, or projected silently. This page lists the inputs and the editorial judgements behind the numbers we publish — so a researcher can see exactly where each reading comes from.

Every input below is fetched on a fixed schedule from a named primary source — never invented, interpolated, or estimated where a real reading exists. Where a value is missing we say so rather than fill the gap.

Current freshness · as of last successful run
DWS dam levels
47.3%
Report date · 2026-04-27
Fetched · 03 May 2026, 07:15 UTC
CCT weekly dashboard
892MLD
Report date · 2026-04-28
Generated · 03 May 2026, 07:15 UTC
Open-Meteo forecast
44.4mm
Window · 2026-04-30 → 2026-05-06
Generated · 30 Apr 2026, 19:56 UTC
Inputs · the seven primary sources
Source 01 · Weekly (DWS) · refreshed daily

Department of Water and Sanitation — Cape Town River Systems

The official weekly state-of-dams report for the six WCWSS dams. DWS updates this Tuesday/Wednesday; we re-check daily so a late publication is picked up the same morning.

Format
Official state-of-dams report
What it feeds
Combined % storage · per-dam % · FSC (Mm³) · year-on-year %
Source 02 · Weekly Mondays (City) · refreshed daily

City of Cape Town — Weekly Water Dashboard

The City's own weekly briefing, published every Monday. The first page carries the headline consumption and per-person figures; later pages list month-to-date rainfall by station.

Format
City of Cape Town weekly publication
What it feeds
Daily consumption (MLD) · per-person use (l/day) · 12-month per-person reference · per-station rainfall
Source 03 · Refreshed daily

Open-Meteo — ECMWF / GFS ensemble forecast + ERA5 archive

An ensemble-blended weather service drawing on ECMWF and GFS models, with the ERA5 reanalysis archive providing a 10-year climatology. We compare the live 7-day forecast for each dam catchment against what is normal for the same calendar week of the year.

Format
Public meteorological API
What it feeds
7-day rainfall outlook for each catchment · 10-year climatology baseline
Source 04 · Monthly

Copernicus Sentinel-2 — European Space Agency

ESA's open Sentinel-2 mission. We pull cloud-filtered scenes over Theewaterskloof and use a standard water index (NDWI) to distinguish open water from exposed lakebed — the same technique used in academic and government remote-sensing work.

Format
ESA satellite imagery
What it feeds
Theewaterskloof time-lapse · water-vs-lakebed masks
Source 05 · One-time backfill (2017–2021)

Internet Archive — historical City of Cape Town publications

The City's weekly dashboard is overwritten in place every Monday, so historical readings before we began capturing them ourselves are only available via the Internet Archive. Each archived snapshot is tagged with its capture date so the provenance of every historical row is traceable.

Format
Archived primary publications
What it feeds
Pre-2022 weekly readings used for the seasonal-pattern model
Source 06 · Annual · manually curated

CCT Water Strategy 2019 + Water Outlook reports

Reference data drawn directly from the City's own strategy and outlook publications: who gets the water (City 64%, agriculture 29%, other 7%), what new sources are planned, and the historical demand-side targets. Every figure is paired with the primary-source citation it came from.

Format
City of Cape Town strategy publications
What it feeds
WCWSS allocation breakdown · New Water Programme costs & timeline · demand-side targets
Source 07 · Annual

Statistics South Africa — Census 2022 + mid-year estimates

Used to put per-person consumption (l/day) into a defensible denominator. Each year is recorded as a census reading, a StatsSA mid-year estimate, or a clearly-flagged projection — never silently interpolated.

Format
National statistics agency publications
What it feeds
Cape Town metropolitan population (per-capita normalisation)
Derived metrics · what the site computes from the raw inputs

Several of the most prominent figures aren't in any single source — they are computed from the inputs above. Here is each derivation, in plain terms, with the underlying constants.

Day Zero predictor

1,000 simulated years

The predictor runs a Monte Carlo simulation against 148 historical weekly readings (2017–2026). Per-month inflow and outflow are decomposed so the rainfall slider only scales the rainfall-driven component — moving "rainfall" to 50% in January doesn't paradoxically reduce summer drawdown.

  • · 898,221 Ml · WCWSS full storage capacity
  • · 900 MLD · baseline city consumption
  • · 8.59% / month · total system outflow baseline
  • · 13.5% · Day Zero threshold (CoCT 2018 trigger, 3.5pp above 10% dead-storage floor)
  • · seedable PRNG (mulberry32) + Box-Muller noise — runs are deterministic given the same sliders
Combined storage %

Why our number sometimes differs from a press release

We use the DWS "Total" row directly when it's present. If the row is missing or non-numeric, we fall back to an FSC-weighted average of the six dams: each dam's % is weighted by its full-storage capacity in Mm³, not by an equal share. Theewaterskloof (479.3 Mm³, ~53% of system FSC) therefore dominates the headline.

Other publishers sometimes use the simple mean across six dams, or include only the five "major" dams. Both produce different numbers from ours. We prefer the DWS-published total because it's the same arithmetic the operating authority uses.

Rainfall outlook

"Wet", "dry", "average"

The 7-day forecast sum is divided by the same-week 10-year mean. Ratio ≥ 1.25 prints "wet"; ≤ 0.75 prints "dry"; otherwise "average". A 25% deadband absorbs day-to-day model spread so the headline doesn't flip every refresh.

Per-dam totals are aggregated by FSC-weighted average, the same weighting used for the storage headline — keeping the two numbers comparable.

Freshness flags

When the site says a number is "stale"

isFresh() returns true if a reading's ISO date is within the last 9 days. Nine, not seven, because the City PDF publishes weekly and is sometimes a day or two late — a strict 7-day window would falsely flag a normal release.

Year-on-year and week-on-week changes use relChange() — a relative percentage change, not the percentage-point difference. (50% → 25% is a 50% drop, not 25 points.)

Alert levels

The four-band thresholds

  • ≥ 60% · safe — reservoirs comfortably above operating margin
  • ≥ 40% · caution — historically when restrictions are reviewed
  • ≥ 25% · drought — Level 5+ restrictions territory
  • < 25% · dayzero — within striking distance of the 13.5% trigger

These thresholds are editorial, not official. They sit slightly above the City's own restriction triggers so a reader has a margin of warning before the formal level changes.

Sparkline

8 weeks of trend

The mini-trend on the barometer is built by re-parsing the eight most recent archived DWS HTML pages from src/data/dws-raw/. The archive grows by one file per scrape, so the sparkline becomes more granular over time without changing how anything else is computed.

Honest limits · what this site is and isn't
Not real-time

DWS publishes weekly. The City's dashboard publishes weekly. We poll daily so a late publication is picked up the same day, but no figure on this site is ever fresher than its primary source. There is no live SCADA feed.

Forecasts are forecasts

The Day Zero predictor is a stochastic model conditioned on 10 years of weekly readings. It captures seasonal pattern and inter-year variance; it does not capture climate trend, infrastructure changes (e.g. new desalination), or unprecedented droughts deeper than anything in the training window.

Six dams, not the whole picture

We track the six WCWSS surface dams that supply Cape Town. The City also draws ~4–11% of its current demand from groundwater and advanced water treatment plants outside this system; that share is set to grow under the New Water Programme and is not visible in our headline %.

Historical depth

Our weekly history starts in 2017 (148 readings, irregularly spaced). Anything earlier is qualitative reference only — we don't back-cast figures we couldn't verify against an archived primary source.