# UK Flood Warnings & River Levels Area Monitor (`tabulary/uk-flood-risk-area-monitor`) Actor

Current UK flood warnings and alerts, plus the latest river and sea level readings from monitoring stations, for any point and radius in England, from the Environment Agency real-time flood-monitoring API. Includes an alert mode returning only new or changed warnings for scheduled area-watch runs.

- **URL**: https://apify.com/tabulary/uk-flood-risk-area-monitor.md
- **Developed by:** [Tabulary](https://apify.com/tabulary) (community)
- **Categories:** Real estate
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.75 / 1,000 flood records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does UK Flood Warnings & River Levels Area Monitor do?

This tool returns current UK **flood warnings** and **river levels** for any point and radius you
choose, straight from the Environment Agency's official [real-time flood-monitoring API](https://environment.data.gov.uk/flood-monitoring/doc/reference).
It returns both the active flood alerts/warnings for the area and the latest river and sea level
reading from every monitoring station nearby, so insurers, surveyors, property and real-estate risk
teams, and local resilience planners get one feed for area-level flood risk screening. An alert mode
keeps memory between runs so a scheduled "area-watch" job only reports warnings that are new or
have changed.

### What you get

- **Flood warnings and alerts** currently in force near the point: severity, full warning message,
  the affected river or sea, county, and when it was raised/last changed.
- **River and sea level readings**: the latest reading from every monitoring station in the radius,
  with the station name, river, parameter (water level, flow, etc.), unit and timestamp.
- An **alert mode** (`onlyNewWarnings`) for scheduled, recurring area-watch monitoring.
- Use from AI agents through the Apify MCP server, or from code/Google Sheets/Slack like any Apify
  Actor.

### How much does it cost?

You pay per record saved, with no monthly fee: **$2.50 per 1,000 records** on Apify's free plan, and
10-40% less on paid Apify plans. Each run also costs $0.001 to start. Apify's free plan includes $5
of credit every month, enough for about 2,000 records. Prices as of November 2026; the price shown
on this page is the one that applies.

| Use | Records | Cost on the free plan |
|---|---|---|
| One area check (warnings + ~20 station readings) | about 25 | about $0.06 |
| A daily scheduled area-watch, alert mode on | about 20-30 a day (about 750/month) | about $1.90 a month |

Set **Maximum cost per run** to cap any run; the Actor stops cleanly at the cap and keeps everything
it saved.

### Ready-made inputs

Three real use cases, each tested in a local run:

```json
{ "lat": 52.4, "long": 1.6, "dist": 15 }
```

```json
{ "lat": 51.5, "long": -0.12, "dist": 20 }
```

```json
{ "lat": 51.28, "long": 0.52, "dist": 20, "minSeverity": "1", "includeRiverLevels": true }
```

### Alerts (area-watch monitor)

Turn on **Only new/changed warnings (alert mode)** and schedule the Actor to run daily or hourly. It
remembers, per area and severity filter, which flood warnings it has already reported (by flood area
and the time its message last changed), and only returns a warning again if it is new or its message
has changed — so you never pay twice for the same unchanged warning. River/sea level readings are a
point-in-time snapshot and are always returned fresh on every run regardless of this setting; turn
off **Include river/sea level readings** if you only want the warning alert feed.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `lat` | number | required | Latitude (WGS84) of the centre point. |
| `long` | number | required | Longitude (WGS84) of the centre point. |
| `dist` | number | `15` | Search radius in kilometres (1-50). |
| `minSeverity` | string | `""` (all) | `"1"` = Severe Flood Warning only, `"2"` = also Flood Warning, `"3"` = also Flood Alert. |
| `includeRiverLevels` | boolean | `true` | Also return the latest level reading from stations in the radius. |
| `maxStations` | integer | `30` | Maximum number of stations to fetch level readings for (1-200). |
| `onlyNewWarnings` | boolean | `false` | Alert mode: only output warnings new or changed since the last run with the same area/severity. |

This tool takes a latitude/longitude point, not a postcode, because the source API itself has no
postcode lookup. Convert a postcode or address to coordinates first with a free tool such as
[postcodes.io](https://postcodes.io) or Google Maps.

### Output

One dataset item per flood warning or per station level reading. `recordType` tells you which:
`flood_warning` or `river_level_reading`. Fields that do not apply to a record's type are `null`.

A real flood warning from a live run:

```json
{
  "recordType": "flood_warning",
  "sourceUrl": "http://environment.data.gov.uk/flood-monitoring/id/floods/054WATBT1",
  "floodAreaID": "054WATBT1",
  "areaDescription": "The tidal Rivers Bure, Ant and Thurne",
  "county": "Norfolk",
  "riverOrSea": "Bure, Ant, Thurne",
  "severity": "Flood alert",
  "severityLevel": 3,
  "message": "High tides tomorrow morning may lead to flooding...",
  "isTidal": true,
  "timeRaised": "2026-11-01T15:44:21",
  "timeSeverityChanged": "2026-11-01T15:44:00",
  "timeMessageChanged": "2026-11-01T15:44:00"
}
```

A real river level reading from a live run:

```json
{
  "recordType": "river_level_reading",
  "sourceUrl": "http://environment.data.gov.uk/flood-monitoring/data/readings/E70039-level-tidal_level-Mean-15_min-mAOD/2026-11-02T01-45-00Z",
  "stationReference": "E70039",
  "label": "Lowestoft",
  "town": "Lowestoft",
  "riverName": "Tide",
  "catchmentName": "England - East Coast",
  "lat": 52.473075,
  "long": 1.750085,
  "parameter": "level",
  "parameterName": "Water Level",
  "qualifier": "Tidal Level",
  "unitName": "mAOD",
  "value": 1.047,
  "dateTime": "2026-11-02T01:45:00Z"
}
```

`severityLevel` 1 is most severe (Severe Flood Warning), 4 is a warning no longer in force.
`dateTime` and the `time*` fields are ISO 8601. Water levels are usually relative to local datum
(`unitName` such as `mASD` or `mAOD`); compare a station's own readings over time rather than across
stations.

### Use it from AI agents

Add the Actor to Claude, ChatGPT, Cursor or any MCP client through the Apify MCP server
(`https://mcp.apify.com?tools=tabulary/uk-flood-risk-area-monitor`). Ask in plain language, for
example: "Are there any flood warnings within 20km of Maidstone, Kent, and what are the current
river levels?" The agent fills in the coordinates and gets structured records back.

### Use it from code

```bash
curl -X POST "https://api.apify.com/v2/acts/tabulary~uk-flood-risk-area-monitor/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"lat": 52.4, "long": 1.6, "dist": 15}'
```

The same works with the Apify Python and JavaScript clients. See the API tab for details.

### Data source and limits

- Source: the Environment Agency's [real-time flood-monitoring API](https://environment.data.gov.uk/flood-monitoring/doc/reference)
  (Beta), under the [Open Government Licence v3.0](http://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/),
  no registration required. This uses Environment Agency flood and river level data from the
  real-time data API (Beta).
- Covers England (and tidal/coastal stations into neighbouring areas); it does not cover Scotland,
  Wales or Northern Ireland, which publish separate flood services.
- The source "should not be relied upon for safety-critical applications" (the EA's own wording).
  This tool is for informational area screening and business risk monitoring, not a life-safety
  warning system — always direct anyone at real flood risk to the official GOV.UK flood warning
  service.
- Readings and warnings are updated by the source roughly every 15 minutes; the Actor fetches at
  most one request per second and backs off on errors.
- No personal data: output is station- and area-level readings and warnings only.
- Not affiliated with or endorsed by the Environment Agency.

### Other Tabulary tools

Clean data from official and public sources, priced per result:

- [UK Gender Pay Gap Reports](https://apify.com/tabulary/uk-gender-pay-gap-reports)
- [UK House Price Index Stats](https://apify.com/tabulary/uk-house-price-index-stats)
- [UK Modern Slavery Statements](https://apify.com/tabulary/uk-modern-slavery-statements)
- [UK Storm Overflow Annual Data](https://apify.com/tabulary/uk-storm-overflow-annual-data)

### FAQ

**Is this data official?** Yes — every record comes directly from the Environment Agency's own
real-time flood-monitoring API, unmodified apart from field renaming.

**How fresh is it?** The source updates roughly every 15 minutes; each run fetches live data at
request time.

**Why coordinates and not a postcode or place name?** The source API itself only supports
latitude/longitude and county-name search, not postcodes. Convert a postcode first with a free tool
such as postcodes.io.

**Something broke?** Open an issue on the Issues tab. The Actor is tested daily.

### Changelog

- **2026-11-01:** first version: flood warnings/alerts and river/sea level readings by point and
  radius, with a new-since-last-run alert mode for warnings.

### About Tabulary

This tool is part of [Tabulary](https://apify.com/tabulary): clean tables from official public
sources. Every Tabulary tool uses the source's official API or open data where one exists,
collects no personal data, and is tested on Apify every day. Questions or ideas? Open an issue on
the Issues tab.

# Actor input Schema

## `lat` (type: `number`):

Latitude (WGS84) of the centre point of the area to check, e.g. 52.4 for a point near Norwich. Convert a postcode or address to coordinates first (for example with postcodes.io or Google Maps).

## `long` (type: `number`):

Longitude (WGS84) of the centre point, e.g. 1.6 for a point near Norwich.

## `dist` (type: `number`):

How far from the point to look for flood warnings and monitoring stations, in kilometres.

## `minSeverity` (type: `string`):

Only include flood warnings at least this severe: 1 = Severe Flood Warning only, 2 = also include Flood Warning, 3 = also include Flood Alert (least severe). Leave on "All" for every current warning and alert, including ones no longer in force.

## `includeRiverLevels` (type: `boolean`):

Also return the latest water-level reading from each monitoring station in the search radius, not just flood warnings. Turn off to save cost if you only want warnings.

## `maxStations` (type: `integer`):

Stop fetching level readings after this many monitoring stations in the radius. Each station reading is one billable result.

## `onlyNewWarnings` (type: `boolean`):

For scheduled recurring runs: only output a flood warning if it is new or its message has changed since the last run with the same area and severity filter. River level readings are unaffected and are always returned fresh.

## Actor input object example

```json
{
  "lat": 52.4,
  "long": 1.6,
  "dist": 15,
  "minSeverity": "",
  "includeRiverLevels": true,
  "maxStations": 30,
  "onlyNewWarnings": false
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "lat": 52.4,
    "long": 1.6
};

// Run the Actor and wait for it to finish
const run = await client.actor("tabulary/uk-flood-risk-area-monitor").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "lat": 52.4,
    "long": 1.6,
}

# Run the Actor and wait for it to finish
run = client.actor("tabulary/uk-flood-risk-area-monitor").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "lat": 52.4,
  "long": 1.6
}' |
apify call tabulary/uk-flood-risk-area-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tabulary/uk-flood-risk-area-monitor"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/CFie3Ya5KaMi23BFg/builds/4NM34cI2BKzUH2dpg/openapi.json
