uk-bathing-water
Pricing
from $2.00 / 1,000 site results
uk-bathing-water
Pricing
from $2.00 / 1,000 site results
Rating
0.0
(0)
Developer
josh hardy
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Features
Share
UK Bathing Water & River Conditions
Get the official status of every designated bathing water in England in one run: about 460 beaches, lakes and river swimming spots. Each site comes back as one clean row with:
- its annual water quality rating (Excellent / Good / Sufficient / Poor) from the Environment Agency,
- the daily pollution-risk forecast (in season),
- any open pollution incident or suspension of sampling,
- the nearest live river gauge within 3 km, with its typical range, so you can see if a river is running high,
- optionally, the E. coli and intestinal enterococci counts from the latest sample,
- a short list of warning-sign codes, worked out from the fields above.
The data comes from the Environment Agency's Bathing Water Quality and Flood Monitoring APIs. The raw APIs are linked data that is awkward to use: values are wrapped in nested objects, the sample year and date are hidden inside URIs, and river gauges aren't linked to bathing sites at all. This actor does that cleaning and joining for you.
This is data, not health advice. It reports official ratings, forecasts and warning signs. It never says whether it is "safe" to swim. Always check signage at the site and the Environment Agency's own pages before going in the water.
What you can use it for
- Travel, holiday and outdoor apps showing beach and lake conditions
- Open-water swimming, surf, coasteering, paddling and angling clubs and schools
- Local news and data journalism (for example "which beaches near us are rated Poor?")
- Research into water quality by region, water company or site type
- Daily alerts, using a scheduled run (see below)
Input
All fields are optional. With no input, you get every site in England.
| Field | Type | What it does |
|---|---|---|
sites | list of strings | Bathing water IDs (ukj3308-19001) or names. A name matches any site whose name contains it, so windermere returns all four Windermere sites. |
area | object | {"lat": 50.72, "lon": -1.88, "radiusKm": 15} returns only sites within the radius, nearest first, and adds distanceKm. |
riverLevels | inland / all / none | Which sites get the nearest river gauge. The default is inland (river and lake sites). |
includeLatestSample | boolean | Adds the latest E. coli and enterococci counts. For more than 40 sites they come from one bulk list (refreshed every 6 hours), otherwise from one request per site. |
maxSites | integer | Stop after this many sites. |
proxyConfiguration | proxy | Defaults to an Apify Residential proxy in the United Kingdom. The Environment Agency blocks requests from outside the UK, including Apify's own servers. Each source is tried directly first, and the proxy is only used for sources that block that. |
Example: sites within 40 km of Reading, with river gauges for every site and the latest sample counts:
{"area": { "lat": 51.48, "lon": -0.6, "radiusKm": 40 },"riverLevels": "all","includeLatestSample": true}
Output
One dataset item per bathing water. This is a real row from 3 November 2026:
{"id": "ukj1102-11941","name": "Pangbourne Meadow, River Thames","district": "Pangbourne Parish","eaArea": "South East","waterCompany": "Thames Water Utilities Limited","lat": 51.48682521935274,"lon": -1.083940641648369,"type": "river","isInland": true,"impactedByHeavyRain": false,"classification": null,"classificationYear": null,"riskLevel": null,"riskExpires": null,"suspension": null,"openIncident": null,"latestSampleDate": "2026-09-23","eaUri": "http://environment.data.gov.uk/id/bathing-water/ukj1102-11941","distanceKm": 33.52,"nation": "england","inSeason": false,"riskForecastCurrent": false,"latestSample": {"sampledAt": "2026-09-23T09:00:00","eColi": 150,"eColiQualifier": "=","enterococci": 45,"enterococciQualifier": "="},"river": {"station": "Pangbourne","stationRef": "2190TH","river": "River Pang","valueM": 0.141,"typicalLowM": 0.079,"typicalHighM": 0.78,"state": "normal","readAt": "2026-11-03T12:15:00Z","distanceKm": 0.34},"warningSigns": [],"source": "Environment Agency, Open Government Licence v3.0","fetchedAt": "2026-11-03T12:42:35+00:00"}
Pangbourne Meadow was first designated in 2025, so it has no annual rating yet, which is why classification is null.
Field notes
type:coastal,estuary,riverorlake, taken from the EA's own site type.isInlandis true for rivers and lakes.classification: the latest annual rating:Excellent,Good,Sufficient,PoororClosed. It isnullfor newly designated sites.classificationYearis the year it covers.riskLevel: the EA's daily pollution-risk forecast,normalorincreased. The last forecast stays in the API after the season ends, so checkriskForecastCurrent, which is only true while the forecast hasn't expired.suspension: the EA's latest active suspension of sampling, if any, with the start, expected end and reason exactly as the EA records them.openIncident: an open pollution incident recorded by the EA at the site, with its type and start time.dataAsOf: when the bathing water data (ratings, forecasts, incidents) was fetched from the Environment Agency. Their API is sometimes unavailable. When it is, the run uses the last good copy from the past 7 days instead of failing, says so in its status message and marksOUTPUTas stale. River levels are always live.latestSampleDateis always included.latestSample(the counts in cfu/100 ml, with=,<or>qualifiers) is only filled in whenincludeLatestSampleis on.river: the nearest EA river gauge within 3 km that has a live reading. Gauges with a published typical range are preferred.stateislow,normalorhighagainst that range, andnullif the gauge has no typical range. Levels are metres above the gauge's own datum, so compare them with the typical range, not with other gauges.
Warning-sign codes
| Code | When it appears |
|---|---|
pollution_risk_increased | The EA forecasts an increased risk of pollution today. Only in season, and only while the forecast is current. |
pollution_incident_open | The EA has an open pollution incident recorded at the site. |
rating_poor | The latest annual rating is Poor. |
river_high | The nearest river gauge is above its typical high level. |
An empty list means none of these official flags are raised. It does not mean the water is clean or safe.
The bathing season
In England the season runs from 15 May to 30 September. During the season:
- the EA samples each site, usually about weekly;
- it publishes daily pollution-risk forecasts at the sites where it forecasts.
Outside the season there are no new samples or forecasts. Ratings, incidents and river levels still update, and inSeason and riskForecastCurrent will be false.
Scheduled daily runs
Forecasts are published each morning in season, and river gauges update every 15 minutes. A typical setup is a daily schedule (for example 10:00 UK time) with your sites or area saved as input, plus a webhook or integration that reads the dataset. Run it every few hours if you mainly want river levels.
Run summary
Every run saves a summary to the OUTPUT record in the run's key-value store. It shows whether each source worked, how many sites matched and were returned, and whether the run stopped at your cost limit. If the river-level service is down, the run still returns every site, with river: null, and the summary records the error.
Coverage and limits
- England only for now (about 460 designated bathing waters). Wales and Scotland are planned.
- River gauges are matched by distance (3 km or less). About 35 of the 38 inland sites currently have a gauge. A gauge may be on a tributary or a nearby stream rather than the bathing water itself, so check
river.riverandriver.distanceKm. - Sample counts and forecasts are only as fresh as the EA's own publishing.
Data sources and licence
- Environment Agency Bathing Water Quality API:
environment.data.gov.uk/bwq - Environment Agency Real-time flood-monitoring API:
environment.data.gov.uk/flood-monitoring
Both are published under the Open Government Licence v3.0. Contains public sector information licensed under the Open Government Licence v3.0. This actor isn't affiliated with or endorsed by the Environment Agency.
Pricing
You pay per site returned (see the Pricing tab). A run that matches no sites costs nothing and says so in its status message. Turning on includeLatestSample or river levels doesn't change the price per site.