UK Flood Risk Data Explained: NAFRA2, Risk Bands, and the EA Flood Risk API
What EA NAFRA2 flood risk data means, how the four risk bands work, and how to query flood risk for any UK property by UPRN.
What is EA flood risk data?
The Environment Agency's National Flood Risk Assessment 2 (NAFRA2) is the authoritative dataset for flood risk in England. It covers two distinct flood types — river and coastal flooding, and surface water flooding — and classifies every point in the country into one of four risk bands.
NAFRA2 replaced the older Flood Map for Planning in 2024. It uses hydraulic modelling and climate projections to estimate the probability of flooding at any location, expressed as a likelihood per year.
The four flood risk bands
Both flood types use the same four-band classification:
| Band | Annual probability | Score | Plain English |
|---|---|---|---|
| High | Greater than 1 in 30 | 4 | Floods more than once every 30 years on average |
| Medium | 1 in 30 to 1 in 100 | 3 | Between a 1% and 3.3% annual chance of flooding |
| Low | 1 in 100 to 1 in 1,000 | 2 | Between a 0.1% and 1% annual chance of flooding |
| Very low | Less than 1 in 1,000 | 1 | Less than a 0.1% annual chance of flooding |
A property flagged as High risk from rivers and sea doesn't mean it floods every year — it means the probability of flooding in any given year is greater than about 3.3%. Over a 25-year mortgage term, that's roughly a 60% chance of at least one flood event.
Rivers and sea vs. surface water — what's the difference?
The API returns two separate risk assessments per property, because the causes — and therefore the risks — are distinct:
-
Flood from rivers and sea (
flood_rivers_sea) — water overflowing from rivers, estuaries, or coastal zones. Typically affects low-lying land near watercourses. Properties in flood plains, river valleys, or coastal areas are most exposed. Modelled using river flow data and coastal surge projections. -
Flood from surface water (
flood_surface_water) — rainwater that can't drain away fast enough, accumulating on roads, gardens, and property. Often affects urban areas with heavy paving, overwhelmed drainage systems, or natural low points in the landscape. A property can have high surface water risk even if it's nowhere near a river.
These two risk types don't always match. A property might be on high ground (low river flood risk) but sit in a bowl that collects runoff (high surface water risk). Looking at both together gives a complete picture.
Querying the Flood Risk API
The Homedata Flood Risk API wraps the DEFRA WMS and returns NAFRA2 data by UPRN. You need a UPRN — if you have an address, use the Address Lookup API first to resolve it.
Endpoint:
GET https://api.homedata.co.uk/api/risks/flood/?uprn={uprn}
Authorization: Api-Key YOUR_API_KEY
cURL:
curl "https://api.homedata.co.uk/api/risks/flood/?uprn=100023336956" \
-H "Authorization: Api-Key YOUR_API_KEY"
Python:
import requests
API_KEY = "your_api_key"
UPRN = 100023336956
resp = requests.get(
"https://api.homedata.co.uk/api/risks/flood/",
params={"uprn": UPRN},
headers={"Authorization": f"Api-Key {API_KEY}"},
)
data = resp.json()
for result in data["results"]:
print(f"{result['risk_type']}: {result['label']}")
print(f" {result['properties']['description']}")
JavaScript:
const uprn = 100023336956;
const response = await fetch(
`https://api.homedata.co.uk/api/risks/flood/?uprn=${uprn}`,
{ headers: { Authorization: "Api-Key YOUR_API_KEY" } }
);
const data = await response.json();
data.results.forEach((risk) => {
console.log(`${risk.risk_type}: ${risk.label}`);
console.log(` ${risk.properties.description}`);
});
Example response
{
"risk_type": "flood",
"uprn": 100023336956,
"location": {
"lat": 51.509865,
"lon": -0.118092
},
"results": [
{
"risk_type": "flood_rivers_sea",
"label": "Low",
"score": 2,
"score_unit": "band",
"intersects": true,
"distance_m": 0,
"search_radius_m": 0,
"count": 1,
"radius_description": "At property",
"properties": {
"description": "Between 1 in 1,000 and 1 in 100 chance of flooding each year",
"confidence": "H"
}
},
{
"risk_type": "flood_surface_water",
"label": "Medium",
"score": 3,
"score_unit": "band",
"intersects": true,
"distance_m": 0,
"search_radius_m": 0,
"count": 1,
"radius_description": "At property",
"properties": {
"description": "Between 1 in 100 and 1 in 30 chance of flooding each year",
"confidence": "H"
}
}
]
}
If a property has no detected flood risk from a particular source, that risk type is omitted from results — it doesn't appear with a "None" or "Very low" entry. An empty results array means no flood risk detected from either source.
The full environmental picture
Flood is one of seven risk types available through the API. To get everything in a single call, use /api/risks/all/:
curl "https://api.homedata.co.uk/api/risks/all/?uprn=100023336956" \
-H "Authorization: Api-Key YOUR_API_KEY"
This returns flood risk alongside:
- noise — road and rail noise in dB (from DEFRA noise maps)
- radon — radon gas potential (BGS 1km grid, class 1-6)
- landfill — nearest historic or active landfill site (distance in metres)
- coal_mining — Coal Authority development risk areas
- invasive_plants — Japanese knotweed and six other Schedule 9 species within 5 miles
- air_quality_today — today's DAQI air quality index (1-10) from the nearest UK-AIR monitoring station
Use cases
Mortgage and conveyancing due diligence
Mortgage lenders and conveyancers routinely commission flood risk searches as part of property transactions. The API lets you automate this: look up flood risk at application time, flag Medium or High risk properties for manual review, and pass the result directly into your LOS or case management system.
def check_flood_for_mortgage(uprn: int, api_key: str) -> dict:
resp = requests.get(
"https://api.homedata.co.uk/api/risks/flood/",
params={"uprn": uprn},
headers={"Authorization": f"Api-Key {api_key}"},
timeout=15,
)
resp.raise_for_status()
results = resp.json().get("results", [])
max_band = 0
for r in results:
max_band = max(max_band, r.get("score", 0))
return {
"uprn": uprn,
"flood_score": max_band, # 1=Very low, 2=Low, 3=Medium, 4=High
"requires_review": max_band >= 3,
"raw": results,
}
Insurance pricing enrichment
General insurers price home insurance partly on flood risk. By pulling NAFRA2 data at quote time — rather than relying on expensive specialist flood data suppliers — you can build a lightweight first-pass risk score that directs high-risk quotes to specialist underwriters.
Property search and listing tools
Add a flood risk badge to property listings. Buyers are increasingly asking about environmental risks. Showing a "Low flood risk" indicator on a listing is a positive signal; flagging "Medium surface water risk" builds trust and sets expectations before viewings.
// Map API score to display badge
function floodBadge(score) {
const badges = {
0: { label: "No risk detected", color: "green" },
1: { label: "Very low flood risk", color: "green" },
2: { label: "Low flood risk", color: "yellow" },
3: { label: "Medium flood risk", color: "orange" },
4: { label: "High flood risk", color: "red" },
};
return badges[score] ?? badges[0];
}
// Get the highest band across both flood types
const maxScore = Math.max(
...data.results.map((r) => r.score ?? 0),
0
);
const badge = floodBadge(maxScore);
Things to know
- England only — NAFRA2 covers England. Scotland (SEPA), Wales (NRW), and Northern Ireland (DAERA) each maintain separate flood risk datasets under different APIs and access arrangements.
- Point query — flood risk is assessed at the property's lat/lng centroid, not its boundary polygon. A large garden might span a river zone boundary; the API returns the risk at the building itself.
- NAFRA2 is not a planning constraint — it's a risk indicator. Planning constraint zones (Flood Zones 1, 2, 3) are a different dataset. For planning work, consult the Planning Portal directly.
- Climate projections included — NAFRA2 incorporates UKCP18 climate scenarios, so it accounts for increased flood risk from climate change over a 50-year horizon. Older NFRA1 data did not.
Getting started
- Create a free Homedata account
- Get your API key from the developer dashboard
- Resolve any address to a UPRN using the Address Lookup API
- Query flood risk:
GET /api/risks/flood/?uprn={uprn}
See the full Flood Risk API reference for parameter details, response schemas, and additional risk types.
Query flood risk for any UK property
Free API key — 100 calls/month, no credit card required.