UK Flood Risk Lookup by Postcode (England) avatar

UK Flood Risk Lookup by Postcode (England)

Pricing

from $5.00 / 1,000 location checks

Go to Apify Store
UK Flood Risk Lookup by Postcode (England)

UK Flood Risk Lookup by Postcode (England)

Check flood risk by UK postcode or lat/long in bulk: official Environment Agency Flood Zone 1/2/3, river/sea source, recorded past floods and nearest flood defence, one JSON row per location. England only; screening data, not a flood search. No API key, MCP-ready, $5/1,000 locations.

Pricing

from $5.00 / 1,000 location checks

Rating

0.0

(0)

Developer

Japan Open Data

Japan Open Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 hours ago

Last modified

Categories

Share

Look up the official Environment Agency flood zone (1, 2 or 3) for UK postcodes or latitude/longitude in England, in bulk. Each location returns one flat JSON row with the flood source (river or sea), recorded past floods and the nearest flood defence.

Check up to 1,000 properties per run for $5 per 1,000 locations — no API key, ready for the Apify API and MCP (AI agents).

  • Flood zone by postcode: Flood Zone 1 (low), 2 (medium) or 3 (high probability) from the Environment Agency's Flood Map for Planning, with the annual chance in plain English and whether the risk comes from rivers, the sea or both.
  • Flood history: the number of Environment Agency Recorded Flood Outlines that cover the point, plus the name and dates of the latest recorded flood (e.g. "December 2015 Flood Event").
  • Flood defences nearby: distance to the nearest mapped flood defence (embankment, wall, high ground, demountable barrier...), its design standard and condition.
  • Bulk flood risk checks: up to 1,000 postcodes or coordinates per run, each with your own label, one row per location in input order. Great for property lists, portfolios and site shortlists.
  • Official open data: Environment Agency data under the Open Government Licence; postcode centroids from the ONS Postcode Directory. You pay a small start fee per run plus one charge per location assessed; rows for invalid, unknown and non-England inputs are not charged.

What can it be used for?

  1. Property portals, estate agents and proptech. Add an official flood zone and flood history column to every listing, or enrich the output of UK property scrapers (Rightmove, Zoopla, OnTheMarket) with one extra call per batch of postcodes.
  2. Investors, lenders and insurers — portfolio screening. Screen hundreds of addresses or sites before you order detailed reports: which ones sit in Flood Zone 3, which have flooded before, and which are next to a defence.
  3. Developers, solar and land teams — site selection. Flood Zones are the map used by the planning system in England (the sequential test). Check candidate sites in one run before commissioning a flood risk assessment.
  4. AI agents and chatbots. Answer "Is this postcode at risk of flooding?" or "Has this street flooded before?" with one call and a ready-made one-sentence floodRiskSummary.

Not a substitute for a flood search or flood risk assessment. This Actor returns public planning-level map data. It is not a conveyancing flood search, an insurance or mortgage underwriting document, or a site-specific flood risk assessment, and it does not say whether an individual building will flood. See "Data source, attribution and caveats".

How to use it

  1. Click Start to try the default input (two places in York).
  2. Paste your postcodes or "lat,long" strings (up to 1,000), optionally with a label each.
  3. Download the rows as JSON, CSV or Excel, or call the Actor via the API or MCP (see below).

Only locations is required. Run it with the default input to check two places in York: a riverside postcode (Flood Zone 3, flooded in 2015) and York Minster (Flood Zone 1).

InputTypeDefaultWhat it does
locationslist["YO1 9WP", "53.9623,-1.0819"]UK postcodes ("YO1 9WP", any spacing or case) and/or "latitude,longitude" strings. Via the API also objects {"postcode": "YO1 9WP", "label": "Listing 1042"} or {"latitude": 53.96, "longitude": -1.08, "label": "Site A"}. Up to 1,000 per run.
includeFloodHistorybooleantrueCount recorded flood outlines at each point and return the latest one. Turn off for faster runs.
includeDefencesbooleantrueReturn the nearest mapped flood defence within the radius.
defenceRadiusMetersinteger500Search radius for flood defences (10–2,000 m).

Coverage: England only. Welsh, Scottish and Northern Irish postcodes and coordinates return an error row that is not charged (their flood maps are published by Natural Resources Wales, SEPA and DfI Rivers).

Postcodes are checked at the postcode centroid (a single point, from the ONS Postcode Directory). A postcode can cover several streets, and part of it may be in a different flood zone. For a specific building, pass its latitude/longitude.

Input example

{
"locations": [
{ "postcode": "YO1 9WP", "label": "Listing 1042" },
"53.9623,-1.0819",
"EX2 4AN"
]
}

Output example

Real output from the input above (run on 2026-09-22). The first row:

{
"status": "ok",
"input": "{\"postcode\": \"YO1 9WP\", \"label\": \"Listing 1042\"}",
"label": "Listing 1042",
"postcode": "YO1 9WP",
"latitude": 53.957102,
"longitude": -1.082664,
"adminDistrict": "York",
"floodZone": 3,
"floodZoneName": "Flood Zone 3",
"floodProbability": "high",
"annualChance": "1% (1 in 100) or greater annual chance from rivers, or 0.5% (1 in 200) or greater from the sea.",
"floodSource": "river and sea",
"floodZoneOrigin": "modelled and recorded",
"recordedFloodCount": 4,
"inRecordedFloodOutline": true,
"latestRecordedFloodName": "December 2015 Flood Event",
"latestRecordedFloodStart": "2015-12-25",
"latestRecordedFloodEnd": "2015-12-29",
"latestRecordedFloodSource": "main river",
"latestRecordedFloodCause": "channel capacity exceeded (no raised defences)",
"defenceSearchRadiusMeters": 500,
"defencesWithinRadius": 35,
"nearestDefenceMeters": 27,
"nearestDefenceType": "Natural High Ground",
"nearestDefenceProtects": "Fluvial",
"nearestDefenceDesignStandardYears": null,
"nearestDefenceCondition": null,
"nearestDefenceWatercourse": "River Ouse",
"floodRiskSummary": "Flood Zone 3 (high probability, river and sea); 4 recorded flood outline(s) cover this point, latest December 2015 Flood Event (2015-12-25); nearest mapped flood defence 27 m away.",
"locationSource": "Postcode centroid from postcodes.io (ONS Postcode Directory). Contains OS data (c) Crown copyright and database right; Contains Royal Mail data (c) Royal Mail copyright and database right; Source: Office for National Statistics licensed under the Open Government Licence v3.0.",
"source": "Environment Agency: Flood Map for Planning - Flood Zones; Recorded Flood Outlines; AIMS Spatial Flood Defences",
"attribution": "Contains Environment Agency information (c) Environment Agency and/or database right. Licensed under the Open Government Licence v3.0.",
"sourceUrl": "https://environment.data.gov.uk/spatialdata/flood-map-for-planning-flood-zones/ogc/features/v1/collections/Flood_Zones_2_3_Rivers_and_Sea/items?f=application%2Fjson&filter-lang=cql-text&filter=INTERSECTS%28shape,POINT%28-1.082664%2053.957102%29%29&limit=100"
}

All three rows from the same run:

InputFlood zoneSourceRecorded floodsLatest recorded floodNearest defence
YO1 9WP (Listing 1042)3 (high)river and sea4December 2015 Flood Event27 m, natural high ground
53.9623,-1.0819 (York Minster)1 (low)—0—387 m
EX2 4AN (Exeter)3 (high)river1River Exe: Dec 196021 m, demountable defence

Unknown postcodes, places outside England and invalid input return one row that says what to change. These rows are not charged (only the per-run start fee applies). Real output:

{"status": "not_found", "input": "ZZ9 9ZZ", "label": null, "postcode": "ZZ9 9ZZ", "error": "Postcode ZZ9 9ZZ was not found in the current ONS Postcode Directory (it may be mistyped, new or terminated); check it or pass \"latitude,longitude\" instead."}
{"status": "error", "input": "CF10 1EP", "label": null, "postcode": "CF10 1EP", "error": "Location #3 (CF10 1EP) is in Wales; this Actor covers England only (Wales is mapped by Natural Resources Wales)."}
{"status": "error", "input": "York, UK", "label": null, "error": "Location #1 (York, UK) must be a UK postcode like \"YO1 9WP\", \"latitude,longitude\" in decimal degrees like \"53.9571,-1.0826\", or an object like {\"postcode\": \"YO1 9WP\", \"label\": \"Site A\"}."}

Output fields

FieldMeaning
statusok, not_found or error
input, labelWhat you passed, and your label
postcode, latitude, longitude, adminDistrictNormalised postcode (if given), the point that was checked, and the local authority of the postcode
floodZone, floodZoneName, floodProbabilityFlood Map for Planning zone: 1 (low), 2 (medium) or 3 (high probability)
annualChanceThe annual chance of flooding that the zone stands for, in words
floodSource, floodZoneOriginWhere the risk comes from (river, sea, river and sea) and whether the zone is modelled and/or based on recorded floods (Flood Zones 2–3 only)
recordedFloodCount, inRecordedFloodOutlineNumber of Environment Agency recorded flood outlines covering the point (records from 1946, some older)
latestRecordedFloodName, latestRecordedFloodStart, latestRecordedFloodEnd, latestRecordedFloodSource, latestRecordedFloodCauseThe most recent recorded flood at the point
defenceSearchRadiusMeters, defencesWithinRadiusRadius used and number of mapped flood defence assets within it
nearestDefenceMeters, nearestDefenceType, nearestDefenceProtects, nearestDefenceDesignStandardYears, nearestDefenceCondition, nearestDefenceWatercourseThe nearest defence: distance, asset type, fluvial/tidal/coastal, design standard of protection (a 1-in-N-year flood), condition grade (1 very good – 5 very poor) and river
floodRiskSummaryOne English sentence summarising the row (handy for AI agents and reports)
locationSource, source, attribution, sourceUrlWhere the point and the flood data come from, the required attribution, and the exact Environment Agency request for the flood zone
errorOn not_found / error rows: one sentence explaining what to change

How much does a flood risk check cost?

This Actor uses Pay per event pricing — you pay per location assessed, not for compute time:

EventPriceWhen it is charged
Actor start$0.001Once per run (charged by Apify on every run, including runs where every input is invalid)
Location checked (result-row)$0.005 ($5 per 1,000)Once per ok row. not_found and error rows are not charged
ExampleLocationsCost per run
One postcode ("Is this address in a flood zone?")1$0.006
A buyer's shortlist20$0.101
A portfolio or a day of new listings1,000$5.001

For comparison, a conveyancing flood report for one property costs around £20 — this Actor is a screening step before you decide which properties need one.

Use the maximum cost per run option when you start the Actor to cap spending. If the limit is reached, the Actor stops before checking further locations (they are not looked up or charged) and says so in the status message.

Use via API & MCP (AI agents)

Apify API (HTTP). Run the Actor and get the rows in one call:

curl -X POST "https://api.apify.com/v2/acts/japan-open-data~uk-flood-zone-lookup/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"locations": ["YO1 9WP", "EX2 4AN", "51.5055,-0.0754"]}'

Python (apify-client):

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
listings = [{"postcode": "YO1 9WP", "label": "1042"}, {"postcode": "EX2 4AN", "label": "1043"}]
run = client.actor("japan-open-data/uk-flood-zone-lookup").call(run_input={"locations": listings})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row["label"], row["status"], row.get("floodZone"), row.get("recordedFloodCount"), row.get("error"))

MCP (Claude, ChatGPT, Cursor and other AI agents). Add this Actor as a tool through the Apify MCP server (https://mcp.apify.com), for example with ?tools=japan-open-data/uk-flood-zone-lookup. Only locations is required, so an agent can call it with {"locations": ["<postcode>"]}.

Recommended agent settings:

  • "Is this postcode at risk of flooding?" → {"locations": ["<postcode>"]} and read floodRiskSummary.
  • Many properties at once → pass all of them in one run (up to 1,000), each with a label, and match rows back by label.
  • Just the flood zone, fastest → "includeFloodHistory": false, "includeDefences": false.
  • Always check status; on not_found/error show the error sentence to the user. Remind users that Flood Zones are a planning map (they ignore defences and do not cover surface water), not a survey of a specific building.

FAQ

Can I use this instead of a conveyancing flood search or for an insurance or mortgage decision? No. It returns public, planning-level map data for screening. For a transaction, an insurance quote or a lending decision, order a professional flood report or flood risk assessment.

Does Flood Zone 1 mean a property will never flood? No. Flood Zones cover rivers and the sea only and ignore flood defences. They do not include surface water (heavy rainfall), groundwater or reservoir flooding, which can affect Flood Zone 1 properties.

Can I check hundreds of postcodes at once? Yes — pass up to 1,000 postcodes or coordinates per run, each with an optional label. You get one row per location, in input order, so you can join the results back to your spreadsheet or property list.

Does it cover Wales, Scotland or Northern Ireland? Not yet. Those locations return an error row that is not charged. Tell us on the Issues tab if you need them.

How fresh is the data? Each run queries the Environment Agency's live published services, so you get the current version of the Flood Map for Planning, Recorded Flood Outlines and flood defence register (the Environment Agency updates them several times a year).

Why did a point in the sea come back as Flood Zone 1? Coordinates up to about 1 km beyond England's generalised coastline are accepted, but the flood map does not cover the sea. Make sure coordinates are on land; postcodes are not affected.

Data source, attribution and caveats

  • Flood zones: Environment Agency, Flood Map for Planning – Flood Zones (Flood Zones 2 and 3, rivers and sea; present day, ignoring defences). A point outside Flood Zones 2 and 3 is Flood Zone 1. https://environment.data.gov.uk/dataset/04532375-a198-476e-985e-0579a0a11b47
  • Flood history: Environment Agency, Recorded Flood Outlines. https://environment.data.gov.uk/dataset/8c75e700-d465-11e4-8b5b-f0def148f590
  • Flood defences: Environment Agency, AIMS Spatial Flood Defences (inc. standardised attributes). https://environment.data.gov.uk/dataset/8e5be50f-d465-11e4-ba9a-f0def148f590
  • Attribution (all Environment Agency data): Contains Environment Agency information © Environment Agency and/or database right 2026. Licensed under the Open Government Licence v3.0.
  • Postcodes: postcode centroids via postcodes.io from the ONS Postcode Directory. Contains OS data © Crown copyright and database right; Contains Royal Mail data © Royal Mail copyright and database right; Source: Office for National Statistics licensed under the Open Government Licence v3.0. Northern Ireland (BT) postcodes are not looked up.
  • England check for coordinates: ONS Countries (December 2024) Boundaries UK BUC. Source: Office for National Statistics licensed under the Open Government Licence v3.0. Contains OS data © Crown copyright and database right 2024.
  • Not a flood search, insurance or mortgage document. Results are public, planning-level map data for screening. They are not a conveyancing flood search, an insurance or lending decision, or a flood risk assessment, and do not show whether an individual building will flood. Flood Zones ignore flood defences and do not include surface water (rainfall), groundwater or reservoir flooding. Always rely on a professional report for a transaction.
  • Not affiliated: this Actor is an independent project and is not affiliated with, endorsed by or sponsored by the Environment Agency, Defra, ONS or postcodes.io. It does not use their logos.
  • Access: the Actor uses only the Environment Agency's published OGC API – Features services (/spatialdata/.../ogc/features/v1) and the public postcodes.io API, a few requests per location with at most 3 locations in parallel, and identifies itself in the User-Agent.
  • No personal data: only flood map polygons' attributes, flood defence asset attributes (no owner names are returned) and the postcodes/points you provide.

Known limitations

  • England only. Wales, Scotland, Northern Ireland, the Isle of Man and the Channel Islands are not covered.
  • Postcode = one point. Postcodes are checked at their centroid; use coordinates for a specific building.
  • Coordinates on the coast. England is recognised from a generalised coastline, so coordinates up to about 1 km beyond it (piers, spits, harbours) are accepted. A point in the sea or on the foreshore within that band is outside the flood map and comes back as Flood Zone 1 — check that your coordinates are on land. Points further out return an error row that is not charged.
  • Exactly on a zone edge. Within a metre or two of a flood zone boundary the result can go either way; the Flood Map for Planning is not precise to that level.
  • Rivers and sea only. No surface water (rainfall), groundwater or reservoir flood risk, and no "Risk of Flooding from Rivers and Sea" likelihood bands in this version.
  • Recorded floods are not complete. Absence of a recorded flood outline does not mean a place has never flooded.
  • Speed. About 1–2 seconds per location with all options on (roughly 25 locations in 35 seconds); up to 1,000 locations per run.

More from Japan Open Data

Feedback

Found a wrong value or need another layer (e.g. flood likelihood bands, Wales or Scotland, address-level geocoding)? Open an issue on the Actor's Issues tab with your input and what you expected.