Actuarial · Pricing analyst · Underwriting engineer

Continuous percentile signals for every postcode in Great Britain.

Banded risk levels (low/medium/high) lose information — a postcode at the 74th flood percentile is treated identically to one at the 52nd. Zyfy returns raw national percentile ranks for flood risk, crime, radon, and air quality alongside the bands, so actuarial models get the granularity they need without you building the normalisation layer. summary.insuranceRiskLevel is pre-computed from flood and crime percentiles when you just need a quick tier.

Relevant signals

These fields are returned on every response and are ready to wire into your application logic.

SignalRelevanceWhat it tells you
percentiles.floodRiversCriticalNational percentile rank (0–100) for rivers and sea flood risk. 100 = highest risk in Great Britain. Continuous — gives actuarial models the granularity that four-band classifications lose.
percentiles.crimeRateCriticalNational crime rate percentile. A postcode at p94 carries meaningfully different risk from p75, even though both would be banded as "very_high". Use this in pricing models that need precision.
percentiles.radonHighNational percentile rank for radon potential. Radon is a material risk signal for property and buildings insurance — especially relevant in granite and limestone areas of Devon, Cornwall, and Derbyshire.
summary.insuranceRiskLevelHigh"high" when flood ≥ 75th percentile or crime ≥ 80th. "medium" when flood ≥ 50th or crime ≥ 60th. A pre-computed tier you can wire directly into product eligibility rules.
signals.flood.riversSeaMediumEA rivers and coastal flood risk band: very_low, low, medium, or high. Use alongside the percentile rank — the band gives you a human-readable label for the same underlying signal.
percentiles.floodGroundwaterMediumGroundwater flood percentile. Often correlated with rivers/sea risk but not always — groundwater is the dominant flood type in chalk and limestone areas where the rivers risk is low.

Live example

A real-world request and the response it returns.

Request

curl https://zyfy.uk/v1/postcode/TA126LQ \
  -H "X-Api-Key: your_api_key"

Response

{
  "postcode": "TA12 6LQ",
  "adminDistrict": "Somerset West and Taunton",
  "region": "South West",
  "summary": {
    "propertyRiskLevel": "high",
    "insuranceRiskLevel": "high"
  },
  "signals": {
    "flood": { "riversSea": "high", "groundwater": "medium" },
    "deprivation": { "imdDecile": 7 }
  },
  "scores": {
    "propertyRiskScore": 0.71
  },
  "percentiles": {
    "floodRivers": 97,
    "floodGroundwater": 68,
    "crimeRate": 24,
    "radon": 38
  }
}

Example data is illustrative only. Responses shown include a subset of signals for clarity — the full response contains additional fields. See the signal reference for the complete list.

What you get

  • Percentile ranks remove the normalisation step — Pre-built national percentile rankings mean you can compare any two postcodes on the same scale without writing the ranking logic yourself.
  • Multiple risk signals in one call — Flood (rivers and groundwater), crime, and radon are all returned in the same response. No secondary lookups, no data joins, no schedule dependencies between separate data sources.
  • summary.insuranceRiskLevel for fast tiering — When continuous precision is not needed — eligibility checks, product display logic, quick filters — the pre-computed tier lets you gate without touching the percentile fields.
  • Same endpoint as the rest of your stack — One API key, one endpoint, one response format — whether you are pricing buildings insurance, contents, motor, or landlord policies.

Add location risk to your pricing models today.

Free tier includes 100 requests per month. No credit card, no sales call.