Method & sources
How Rain To Spill collects its data, where every number comes from, and the research behind the project.
How it works
-
1
Check the outfalls
Every 15 minutes our server asks Thames Water which storm overflows on the River Lea, Bow Creek and the Thames are spilling sewage.
-
2
Measure rain, river and tide
At the same time it collects rainfall from the Wanstead Park rain gauge, the river level at Lea Bridge and the tide level at Silvertown from the Environment Agency.
-
3
Collect past spills
Past spills come from Thames Water's monitors, published by the Environment Agency. The records start in January 2024 and give the time each spill started and stopped.
-
4
Link spills to rain and tide
For each spill we add up the rain that fell at that outfall in the 24 hours before it started, using Open-Meteo's weather history. We also work out whether the tide was rising or falling at that moment, from tide data for the Thames estuary that we checked against the Silvertown gauge.
Live data we use
These APIs (online services that send data to our server) keep the site up to date.
Thames Water
Open Data API: storm discharges
The list of storm overflow outfalls, where they are, and whether each one is spilling right now.
Used for: outfalls, live spills
data.thameswater.co.ukEnvironment Agency
Real-time flood-monitoring API
Rainfall at Wanstead Park, river level at Lea Bridge, and tide level at Silvertown, measured every 15 minutes.
Used for: rain, river level, tide
environment.data.gov.uk/flood-monitoringEnvironment Agency
Flood warnings
Current flood alerts and warnings for Greater London.
Used for: flood alerts
environment.data.gov.uk/flood-monitoringOpen-Meteo
Weather history and forecast APIs
Hourly rain at each outfall for past spills, plus the rain forecast and soil moisture, which tells us how wet the ground already is.
Used for: rain before each spill, wet catchment
open-meteo.comOpen-Meteo
Marine weather API
Hourly tide heights in the Thames estuary since 2024. We shift them by about two hours to match the Silvertown gauge, which gives the high and low tide times for past spills. They agree with the gauge about 96% of the time.
Used for: where it goes
open-meteo.com/en/docs/marine-weather-apiRainViewer
Weather radar API
The latest rain radar images, showing where it is raining right now.
Used for: rain radar
rainviewer.comHistorical data
Environment Agency
Event Duration Monitoring: start and stop data
The time each storm overflow in England started and stopped spilling, as reported by the water companies.
Used for: past spills
environment.data.gov.ukHow the Live map forecast works
The map estimates where sewage released by storm overflows is likely to be in the River Thames now and over the next 7 days, and how certain that estimate is. The dropdowns below explain every step so you can check, reuse or challenge it. The numbers shown in highlighted boxes are read directly from the map's settings file, so they always match what the map is using.
In brief
- Which overflows are spilling? Thames Water's Event Duration Monitoring (EDM) feed says which storm overflows are discharging now and when each last started and stopped.
- Which will spill? Hourly rain forecasts for each overflow give a chance of a new spill over the next 7 days.
- Where does it go? Each spill is followed down the river as a series of small "parcels" moving at a speed derived from measured river flow, and — below Teddington — washing back and forth with the predicted tide.
- How much is left? Bacteria die off over time and the sewage spreads out along the river.
- How certain is it? The whole calculation is repeated times with the uncertain inputs varied each time. The spread of the results gives the likely range and the chance of each level.
The traffic light
The status for your spot is the headline of the map. It turns the detailed model results (see “Levels and units” and “Uncertainty and likelihood” below) into one of three lights, using the same rules on the map, the 7-day outlook, the share card and the WhatsApp updates.
What the risk refers to. Every light is a sewage risk: how likely it is that sewage from storm overflows is in the water on your stretch. Sewage carries germs, so it is a health risk if you swallow river water or it gets into cuts. It is not a measured water-quality result, and it does not cover other hazards (cold water, currents, boat traffic, blue-green algae). The same meaning applies to right now, to each hour of the next 24 hours, and to each of the next 7 days — where a day shows its highest hourly sewage risk.
| Light | Shown when… | What it means for you |
|---|
Your stretch. The status covers your spot and the river up and downstream of it (± 1, 3, 5 or 10 km — you choose). A stretch takes the status of its riskiest point, because sewage at one end can drift to the other with the flow or tide.
Each day in the 7-day row shows the worst hour of that day (UK time). Hover or focus a day for how many hours are affected and when it peaks.
"Certainty" (High / Medium / Low) is the share of the varied model runs that agree there is sewage (moderate or worse) when the light is amber or red, or that there isn't when it's green: High = at least of runs agree, Medium = at least , otherwise Low. A red light with "Low" certainty means the model thinks it is possible but the runs disagree — worth checking again later.
Why 30%? A one-in-three chance of sewage is treated as enough to warn you. This is a deliberately cautious choice (risk.probability), not a scientific threshold; it can be changed once the model has been checked against water samples.
Colours are never the only signal: each light also has a symbol (✓ low, ! moderate, ✕ high) and a written label, so the status is readable in greyscale, for colour-blind users and by screen readers.
Data
| Input | Source | Updated | Used for |
|---|---|---|---|
| Overflow status, last start/stop | Thames Water EDM open data API (the only live source: the Environment Agency publishes spill records after the event, not live) | ~15 min | Observed spills |
| River flow (m³/s) | Environment Agency real-time flood-monitoring API | 15 min | River speed |
| Predicted high waters, 7 days | ADMIRALTY EasyTide predictions (London Bridge), via the Rain To Spill backend | daily | Tide timing below Teddington |
| Observed tidal level (fallback) | Environment Agency flood-monitoring API | 15 min | Tide timing if ADMIRALTY unavailable |
| Hourly rain forecast, days | Open-Meteo | hourly | Forecast spills |
| Past spill records | Rain To Spill spill-event database. First choice: the Environment Agency's published Event Duration Monitoring records for Thames Water (start and stop times in GMT), imported by the project. Added to these: spills logged from Thames Water's live feed since the site started running | as imported, then ~15 min | How spill-prone each overflow is: the percentile rank of its total spill hours over the last year |
| River centreline | OS Open Rivers (WatercourseLink) | twice a year | Distances along the river |
Positions along the river are measured as chainage: kilometres downstream from the source at Thames Head along the OS Open Rivers centreline (about 341 km to the outer estuary; the tidal limit at Teddington is about 243 km).
The model, step by step
Spills become parcels
Every minutes that an overflow is discharging, it releases one parcel carrying w = 0.25 spill-hours (one time-step). Forecast spills release one parcel per hour. Overflows on tributaries join the Thames at the nearest point on the centreline after a delay:
where d is the straight-line distance to the Thames, s = converts it to channel length, and vtrib = m/s. Overflows more than km from the Thames are left out. A spill still running is assumed to continue for more hours.
Movement in the non-tidal river
River speed at each point comes from the latest flow Q at the nearest Environment Agency gauge upstream, using a hydraulic-geometry power law:
with a = , b = (60 m³/s → ~0.4 m/s; 300 m³/s → ~0.7 m/s). Each parcel moves v·Δt downstream every step.
Movement in the tidal river (below Teddington)
Water in the tidal Thames moves upstream on the flood tide and downstream on the ebb. Each parcel has a slowly drifting mean position m plus a tidal displacement:
HWprev and HWnext are the predicted high waters either side of time t, so the tide follows the real 7-day ADMIRALTY predictions rather than a fixed period. E = km is the distance a parcel travels between low and high water; unet = km/day is the slow seaward drift. Parcels cannot pass upstream of Teddington weir.
Die-off
Faecal bacteria die off in river water. A parcel's remaining load after age hours is
T90 = h is the time for 90% to die. Laboratory river-water studies found 99% die-off of E. coli in about 2–3 days at 15–25 °C, which is a T90 of roughly 24–36 h; die-off is slower in colder water.
Spreading
Sewage spreads along the river as it travels. Each parcel is spread as a bell curve whose width grows with age:
with σ0 = km and dispersion D = km²/h.
The impact index
The index at river position x and time t adds up every parcel's spread-out remaining load:
It is calculated every km along the river and every minutes, from hours ago to hours ahead.
Levels and units
The index unit is spill-hours per kilometre (SH/km), after die-off. 1 SH/km means the sewage from one hour of overflow discharge spread evenly along one kilometre of river, before any of it has died off.
| Level | Index range (SH/km) | What it could look like |
|---|
This is a relative index, not a bacteria count. EDM records whether an overflow is discharging, not how much, so every spill-hour counts the same and the levels cannot yet be converted to E. coli per 100 ml. For comparison, the legal standards for inland bathing waters are, for E. coli: Excellent ≤ 500 and Good ≤ 1,000 cfu/100 ml (95th percentile), Sufficient ≤ 900 cfu/100 ml (90th percentile). Calibrating these levels against water samples taken at known index values is the next step for this project; until then, treat "high" as "much more sewage than usual is likely here", not as a measured exceedance.
Uncertainty and likelihood
Many inputs are uncertain: how much each overflow actually releases, how fast the river flows, how quickly bacteria die, how much it will rain. Instead of one answer, the model runs an ensemble:
- Central estimate — one run with every input at its typical value, and forecast spills counted in proportion to their chance (a 40% chance of a 1-hour spill counts as 0.4 spill-hours). This is the line on the chart and the default river colour.
- further runs — each input is drawn at random from the range below, and each forecast spill either happens or doesn't. Runs use a fixed random seed per hour so the map and the WhatsApp alerts agree.
| Uncertain input | How it varies between runs |
|---|
From those runs, at every point and hour the map reports:
- Likely range (10th–90th percentile): 80% of runs fall inside it. The shaded band on the chart.
- Standard deviation (SD): the typical spread around the ensemble mean.
- Chance of a level: the share of runs at or above that level. "60% chance of MODERATE or worse" means 60% of runs reached 0.15 SH/km or more.
Because several inputs are skewed (for example a spill can be much larger than typical, but not much smaller than zero), the ensemble mean is usually a little higher than the central estimate. The range widens further ahead because rain forecast errors grow by per day of lead time. With runs, chances are reported in steps of about ; treat them as approximate.
The next 24 hours: rain and tide
Under the traffic light, a strip shows the next hours for your stretch, hour by hour. It gives context; the light itself still comes from the model above.
- Sewage — the traffic light for each hour (the worst point on your stretch).
- Rain — the hourly rain forecast (Open-Meteo), averaged over forecast points within km of your spot. Strength follows the American Meteorological Society definitions: light up to 2.5 mm an hour, moderate 2.6–7.6 mm, heavy over 7.6 mm. Less than mm counts as dry. When more than mm is forecast in 24 hours, the summary says rain could set off overflows. Rain falling further upstream matters too; the model includes that, the strip does not.
- Tide — high (▲) and low (▼) water times. ADMIRALTY predicts them for London Bridge (Tower Pier); for other places they are shifted by the Port of London Authority's average time differences (for example, high water is about 31 minutes later at Putney Bridge and about an hour later at Richmond and Teddington), interpolated along the river. Downstream of Greenland Dock and upstream of Teddington the nearest listed difference is used, so times there are approximate. Rising means the water is flowing upstream, so sewage from overflows below you can be carried up to you; falling means it is flowing towards the sea. Above Teddington Lock the river is not tidal. The curve between the labels is smoothed: the real Thames rises faster than it falls, so use the labelled times.
If ADMIRALTY data is unavailable, high waters are extrapolated every 12.42 hours from the last known one and low water is put halfway between; the summary then says "approx.".
7-day spill forecast
For each overflow and each forecast hour, the rain over the hours before (R) gives a chance of spilling:
R50 is the rain that gives half the site's maximum chance and k sets how sharply it rises. Below mm the chance is zero. Where they come from depends on the overflow:
- Overflows with a rainfall threshold from this project's analysis (the "What sets them off" page). For every overflow, that analysis records the rain that fell in the hours before each of its past spills. R is the forecast rain over hours. The chance starts at the lowest rain that has set the overflow off (there it is of the site's maximum) and reaches half the maximum at the average rain before its spills, so R50 = that average and k = (average − lowest) ÷ ln((1 − s) ÷ s), with s the starting share, kept between and mm. An overflow needs at least past spills with rain data to be treated this way.
- All other overflows use one general rule: R is the rain over hours, R50 = mm and k = mm.
Hover over an overflow on the map to see which rule it uses. Limits: the rain before past spills comes from the project's records (Open-Meteo's weather history, or the paired rain gauge for newly logged spills) while the forecast is a weather-model grid value; the average rain before spills is used as the half-way point by judgement, because the record holds only the days an overflow did spill, not the wet days it did not; and one unusual spill can set the lowest value.
psite starts at , is raised or lowered by the overflow's spill record in the EA annual returns when available, and is multiplied by if it spilled in the last 48 hours (a wet catchment spills more easily). Overflow tooltips show the resulting chance of at least one spill in the next 24 hours and 7 days.
WhatsApp alerts
Every 15 minutes the Rain To Spill backend runs the same model and works out the traffic light for each subscriber's stretch, exactly as the map does. Subscribers choose one of three options:
- Every change, plus early warnings — a message whenever the light changes, and a warning when a rise is forecast within the next 12 hours (with its chance and time).
- Every change — Low ⇄ Moderate ⇄ High, no early warnings.
- High only — when the stretch turns red or stops being red.
Each message gives the new and previous status, the main overflow responsible, the 7-day row of lights, what to do, and a link that opens the map on that stretch with the full forecast. To avoid flip-flopping, an improvement must last 60 minutes before it is announced; a rise is sent straight away. At most one message per hour, except a rise to red. Between 22:00 and 07:00 only rises to red are sent; anything else waits until morning. Replying STATUS gives the current light, the next change, the week ahead and nearby public sightings.
Public sightings
River users can report what they see. Reports appear on the map for days and are counted in WhatsApp STATUS replies. They are unverified and are not fed into the model; in future they could be used to check and calibrate it. No names, contact details or IP addresses are stored. To stop automated spam, the form uses Google reCAPTCHA v3, which runs invisibly and gives each submission a score; low-scoring submissions are rejected. reCAPTCHA is only loaded when you open the report form. For serious pollution, also report it to the Environment Agency (24-hour hotline ).
Your data
- Your location is used in your browser to find your spot. It is only sent to the server if you submit a sighting (the sighting's position) or sign up for WhatsApp updates (your chosen spot).
- Saved spots are stored only in this browser (local storage). Clearing your browser data removes them; they are never uploaded.
- Postcode search sends the postcode you type to postcodes.io to find its location. When you type three or more letters in the search bar, the text is also sent to two free place-search services — postcodes.io (Ordnance Survey place names) and Photon by komoot (OpenStreetMap) — to find towns, neighbourhoods and clubs near the river. Nothing else about you is sent with it.
- Embedded status cards on club websites show the same model estimate and store nothing about visitors.
- Sightings store what, where, when and your optional note — nothing that identifies you.
- WhatsApp updates store your number, stretch and choices until you reply STOP, which deletes them. Unconfirmed sign-ups are deleted after 48 hours.
- reCAPTCHA (report form only) is provided by Google under its Privacy Policy and Terms of Service.
Limitations
- No measured volumes: EDM gives duration only. Strength is treated as unknown (see the uncertainty table).
- EDM monitors can be wrong or offline; offline monitors are excluded unless configured otherwise.
- Other sewage sources (treatment works final effluent, misconnections, boats, rural run-off) are not included.
- The river is treated as one line: no mixing across its width, no side channels, no tributary flows except as a travel delay.
- One tidal excursion for the whole tidal Thames; in reality it varies along the river and between spring and neap tides.
- The uncertainty ranges are judgement-based and should be narrowed by comparing with water samples.
- Clock changes: some past spill times in the project database were stored without allowing for the change between GMT and British Summer Time, so they can be an hour out. This barely affects how spill-prone an overflow looks (durations are unchanged) and shifts the 24-hour rain total before a spill by one hour. The Environment Agency's records, which are in GMT all year, are treated as the reference.
All parameter values
Read live from Website/shared/river/config.js. Change them there and this table and the map update together.
References
- American Meteorological Society (no date) ‘Rain’, Glossary of Meteorology. Available at: https://glossary.ametsoc.org/wiki/Rain (Accessed: 13 November 2026).
- Apache Software Foundation (no date) Apache ECharts. Available at: https://echarts.apache.org/ (Accessed: 13 November 2026).
- The Bathing Water Regulations 2013 (SI 2013/1675), Schedule 5. Available at: https://legislation.gov.uk/uksi/2013/1675/schedule/5/2016-06-20 (Accessed: 13 November 2026).
- Defra (2011) Creating a River Thames fit for our future: a strategic and economic case for the Thames Tunnel. PB 13677. Available at: https://assets.publishing.service.gov.uk/media/5a8017b0e5274a2e8ab4e240/pb13677-thamestunnel-businesscase.pdf (Accessed: 10 November 2026).
- Defra Press Office (2023) ‘Government response to BBC reporting on storm overflows’, Defra in the media, 5 September. Available at: https://deframedia.blog.gov.uk/2023/09/05/government-response-to-bbc-reporting-on-storm-overflows/ (Accessed: 9 October 2026).
- Dezeen (2025) ‘“Super sewer fully up and running” in London to protect River Thames’, Dezeen, 20 February. Available at: https://www.dezeen.com/2025/02/20/thames-tideway-tunnel-london-river-thames/ (Accessed: 10 October 2026).
- Dick, L.K., Stelzer, E.A., Bertke, E.E., Fong, D.L. and Stoeckel, D.M. (2010) ‘Relative decay of Bacteroidales microbial source tracking markers and cultivated Escherichia coli in freshwater microcosms’, Applied and Environmental Microbiology, 76(10), pp. 3255–3262. doi: 10.1128/AEM.02636-09. Available at: https://pmc.ncbi.nlm.nih.gov/articles/PMC2869114 (Accessed: 13 November 2026).
- Environment Act 2021, c. 30. Available at: https://www.legislation.gov.uk/ukpga/2021/30 (Accessed: 9 October 2026).
- Environment Agency (no date a) Event Duration Monitoring – Storm Overflow – Start/Stop Detailed Data [Data set]. Available at: https://environment.data.gov.uk/dataset/e9677ac1-fd32-4ceb-88a0-2735be5f27c7 (Accessed: 11 November 2026).
- Environment Agency (no date b) Real-time flood-monitoring API: reference. Available at: https://environment.data.gov.uk/flood-monitoring/doc/reference (Accessed: 10 October 2026).
- Environment Agency (2025) Environment Agency storm overflow spill data for 2024. Press release, 27 March. Available at: https://www.gov.uk/government/news/environment-agency-storm-overflow-spill-data-for-2024 (Accessed: 9 October 2026).
- Environment Agency (2026a) Fewer and shorter storm overflow spills in 2025, new monitoring data shows. Press release, 26 March. Available at: https://www.gov.uk/government/news/fewer-and-shorter-storm-overflow-spills-in-2025-new-monitoring-data-shows (Accessed: 10 October 2026).
- Environment Agency (2026b) Event Duration Monitoring – Storm Overflows – Annual Returns [Data set]. Available at: https://www.data.gov.uk/dataset/event-duration-monitoring-storm-overflows-annual-returns (Accessed: 9 October 2026).
- Flood Radar (no date) Flood Radar. Available at: https://www.floodradar.co.uk/ (Accessed: 10 October 2026).
- Google (no date) reCAPTCHA v3. Available at: https://developers.google.com/recaptcha/docs/v3 (Accessed: 13 November 2026).
- Google Cloud (no date) reCAPTCHA migration overview. Available at: https://docs.cloud.google.com/recaptcha/docs/migration-overview (Accessed: 13 November 2026).
- GOV.UK (no date) Report water pollution. Available at: https://www.gov.uk/report-water-pollution (Accessed: 13 November 2026).
- Komoot (no date) Photon: open source geocoder for OpenStreetMap data. Available at: https://github.com/komoot/photon (Accessed: 13 November 2026).
- Lipp, A. and Dawe, J. (no date) SewageMap. Available at: https://www.sewagemap.co.uk/ (Accessed: 9 October 2026).
- MapLibre (no date) MapLibre GL JS documentation. Available at: https://maplibre.org/maplibre-gl-js/docs/ (Accessed: 13 November 2026).
- Open-Meteo (no date a) Marine weather API. Available at: https://open-meteo.com/en/docs/marine-weather-api (Accessed: 10 November 2026).
- Open-Meteo (no date b) Weather forecast API documentation. Available at: https://open-meteo.com/en/docs (Accessed: 13 November 2026).
- OpenFreeMap (no date) OpenFreeMap. Available at: https://openfreemap.org/ (Accessed: 13 November 2026).
- OpenJS Foundation (no date) deck.gl: @deck.gl/maplibre overview. Available at: https://deck.gl/docs/api-reference/maplibre/overview (Accessed: 13 November 2026).
- OpenStreetMap contributors (no date) Copyright and licence. Available at: https://www.openstreetmap.org/copyright (Accessed: 13 November 2026).
- Ordnance Survey (no date) OS Open Rivers: overview. Available at: https://docs.os.uk/os-downloads/networks/os-open-rivers/os-open-rivers-overview (Accessed: 13 November 2026).
- Port of London Authority (no date) Tide tables: average time differences. Available at: https://www.pla.co.uk/Safety/Tide-Tables-Average-Time-Differences (Accessed: 13 November 2026).
- Postcodes.io (no date) API overview. Available at: https://api.postcodes.io/docs/overview (Accessed: 13 November 2026).
- The Rivers Trust (no date) Sewage map. Available at: https://theriverstrust.org/key-issues/sewage-in-rivers (Accessed: 10 October 2026).
- The Rivers Trust (2025) 2024 sewage spill data, 28 March. Available at: https://theriverstrust.org/about-us/news/2024-sewage-spill-cso-data (Accessed: 9 October 2026).
- Thames Water (no date a) History of London’s sewer system. Available at: https://www.thameswater.co.uk/about-us/community/days-out/riverside-spaces/history-of-london-sewer-system (Accessed: 10 October 2026).
- Thames Water (no date b) Open data: storm discharge (Event Duration Monitoring) [Data set]. Available at: https://data.thameswater.co.uk/ (Accessed: 9 October 2026).
- Thames Water (no date c) Thames Tideway Tunnel. Available at: https://www.thameswater.co.uk/about-us/projects/thames-tideway-tunnel (Accessed: 10 October 2026).
- Thames Water (no date d) Storm discharge and flow data. Available at: https://www.thameswater.co.uk/about-us/performance/river-health/storm-discharge-and-flow-data (Accessed: 13 November 2026).
- UCL (2025) Sewage map of England. UCL Mathematical & Physical Sciences news, July. Available at: https://www.ucl.ac.uk/mathematical-physical-sciences/news/2025/jul/sewage-map-england (Accessed: 9 October 2026).
- UK Hydrographic Office (no date) ADMIRALTY EasyTide. Available at: https://easytide.admiralty.co.uk (Accessed: 13 November 2026).