Postcode Intelligence — Signals

All signals returned by GET /v1/postcode/{postcode}

All field names are camelCase. The response is structured into nested objects: summary, signals, scores, percentiles, and geographyCodes. Signals marked full postcode only are omitted for outward-code-only queries (e.g. "SW1A").

Northern Ireland (BT) postcodes are not supported and return a 422 error.

Location identity

postcode # string

Normalised postcode with space: "SW1A 2AA". Outward-only queries: "SW1A".

First part of the postcode (e.g. "SW1A").

inwardCode # string | null

Second part of the postcode. Null for outward-code-only queries.

Coordinates

latitude # number | null

Population-weighted centroid latitude (ONSPD). Not a property boundary.

longitude # number | null

Population-weighted centroid longitude.

eastings # integer | null

Ordnance Survey easting (British National Grid).

northings # integer | null

Ordnance Survey northing (British National Grid).

Administrative geography

country # string

Country this postcode falls within.

EnglandScotlandWalesNorthern Ireland
region # string | null

ONS region (e.g. "South East", "London"). England only.

adminDistrict # string | null

Local authority district or unitary authority.

adminCounty # string | null

County. Null for unitary authorities.

adminWard # string | null

Electoral ward within the local authority.

parish # string | null

Civil parish or community name. Null where no parish exists.

Westminster parliamentary constituency (2024 boundary review).

nhsTrust # string | null

NHS Integrated Care Board area.

lsoa # string | null

Lower Layer Super Output Area code (2021 census). ~1,500 residents.

msoa # string | null

Middle Layer Super Output Area code (2021 census). ~8,000 residents.

ONS 2021 rural-urban classification.

urbanurban_fringerural_townrural_villagerural_hamlet

Government Statistical Service codes for all administrative geographies above. Useful for joining to ONS statistical datasets. Fields: adminDistrict, adminCounty, adminWard, parliamentaryConstituency, lsoa, msoa.

Summary

summary.*
summary.propertyRiskLevel # string | null full postcode only

Band of scores.propertyRiskScore. Weighted from flood, crime, radon, and groundwater signals.

lowmediumhigh
summary.liveabilityLevel # string | null full postcode only

Band of scores.liveabilityScore. Weighted from air quality, crime, deprivation, green space, and EPC signals.

lowmediumhigh
summary.insuranceRiskLevel # string | null full postcode only

Derived from flood and crime percentile ranks. high = elevated flood or crime risk. medium = moderately elevated. low otherwise. Null when both signals are unavailable.

lowmediumhigh
summary.investmentOutlook # string | null full postcode only

Band of scores.investmentScore. Derived from property price rank, price trend direction, and deprivation. Not a prediction.

weakfairgoodstrong
summary.growthSignal # string | null full postcode only

Derived from signals.property.priceTrend. Categorises year-on-year price change into five magnitude buckets from strong growth to significant decline. Null when no price trend data.

strong_positivepositiveneutralweak_negativestrong_negative
summary.dataConfidence # string | null full postcode only

Count of percentile-scored signals available for this postcode. high = 6+, medium = 3–5, low = fewer than 3. Treat low-confidence postcodes with more uncertainty in downstream models.

lowmediumhigh
summary.areaTrajectory # string | null full postcode only

Overall direction of the area derived from three trend signals: IMD trend, property price growth signal, and air quality trend. improving = two or more positive with no negative. declining = two or more negative with no positive. mixed = both present. Null when no trends available.

improvingstabledecliningmixed
summary.familySuitability # string | null full postcode only

Weighted suitability for families with children. Derived from crime, green space proximity, deprivation, and broadband. Null when too few of the underlying signals are available.

poorfairgoodexcellent
summary.retirementSuitability # string | null full postcode only

Weighted suitability for retirement. Derived from crime, air quality, green space proximity, deprivation, and rural/urban classification. Null when too few of the underlying signals are available.

poorfairgoodexcellent

Broadband

signals.broadband.*
signals.broadband.superfast # boolean | null full postcode only

Superfast broadband (30Mbps+) available per Ofcom Connected Nations. Infrastructure coverage, not per-property.

signals.broadband.ultrafast # boolean | null full postcode only

Ultrafast broadband (100Mbps+) available.

signals.broadband.gigabit # boolean | null full postcode only

Gigabit-capable broadband available.

Flood risk

signals.flood.*
signals.flood.riversSea # string | null full postcode only

Risk of flooding from rivers or the sea per Environment Agency data. "high" = greater than 1 in 30 chance per year.

very_lowlowmediumhigh
signals.flood.riversSeaTrend # string | null full postcode only

Year-on-year change in rivers/sea flood risk band vs the prior EA annual update. Null until feed has run twice.

worseningstableimprovinginsufficient_data
signals.flood.groundwater # string | null full postcode only

Risk of groundwater flooding (rising water table). Most relevant in chalk and limestone areas.

very_lowlowmediumhigh
signals.flood.groundwaterTrend # string | null full postcode only

Year-on-year change in groundwater flood risk. Same pattern as riversSeaTrend.

worseningstableimprovinginsufficient_data

Property prices

signals.property.*
signals.property.averagePrice # integer | null full postcode only

Median residential transaction price last 12 months (HMLR Price Paid). Null when fewer than 3 transactions.

signals.property.priceLow # integer | null full postcode only

25th percentile residential transaction price (last 12 months).

signals.property.priceHigh # integer | null full postcode only

75th percentile residential transaction price (last 12 months).

signals.property.priceTrend # number | null full postcode only

Year-on-year % change in median price: last 12 months vs prior 12 months. Positive = growth.

Period over which priceTrend is calculated. Always 12.

signals.property.transactionVolume # integer | null full postcode only

Number of residential transactions in the last 12 months.

signals.property.granularity # string | null full postcode only

Geographic level at which price data is sourced. local_authority is Scotland-only (council area average; priceLow/priceHigh are null at this level).

postcodesectordistrictlocal_authority
signals.property.trendConfidence # string | null full postcode only

Confidence in the price trend. null when no trend is available (price data exists but no YoY history, or no data at any level). "high" = postcode-level 10+ transactions. "medium" = sector-level. "low" = district or local authority level.

highmediumlow

Deprivation

signals.deprivation.*

Index of Multiple Deprivation decile 1–10. 1 = most deprived 10% nationally. Covers England (ONS IMD 2025), Scotland (SIMD 2020), Wales (WIMD 2025).

Change in IMD decile between most recent and prior editions. "improving" = less deprived. England only.

improvingstabledeclininginsufficient_data

Crime

signals.crime.*
signals.crime.rateBand # string | null full postcode only

Overall crime rate band relative to the within-country distribution. England/Wales: LSOA (quarterly). Scotland: SIMD datazone (~5-yearly).

very_lowlowmediumhighvery_high
signals.crime.dataGranularity # object | null full postcode only

Geographic resolution of the crime signals. Fields: band ("lsoa" | "datazone"), categories ("lsoa" | "local_authority").

signals.crime.categories.violence.band # string | null full postcode only

Violence and sexual offences. Scotland: non-sexual violence + sexual crimes.

very_lowlowmediumhighvery_high
signals.crime.categories.property.band # string | null full postcode only

Burglary, theft, shoplifting. Scotland: crimes of dishonesty.

very_lowlowmediumhighvery_high
signals.crime.categories.vehicle.band # string | null full postcode only

Vehicle crime. Scotland: motor vehicle offences.

very_lowlowmediumhighvery_high
signals.crime.categories.antisocial.band # string | null full postcode only

Anti-social behaviour and public order. Scotland: miscellaneous offences.

very_lowlowmediumhighvery_high
signals.crime.categories.drugs.band # string | null full postcode only

Drugs offences. Scotland: weapons and drug crimes.

very_lowlowmediumhighvery_high
signals.crime.categories.damage.band # string | null full postcode only

Criminal damage and arson. Scotland: fire-raising and vandalism.

very_lowlowmediumhighvery_high

MP & constituency

signals.political.*
signals.political.mpName # string | null full postcode only

Name of the current Westminster MP. From UK Parliament Members API, refreshed weekly.

signals.political.mpParty # string | null full postcode only

Political party of the current MP.

signals.political.mpPartyColour # string | null full postcode only

Hex colour code for the MP's party (e.g. "#E4003B"). Useful for map visualisations.

Housing

signals.housing.*
signals.housing.epcAverageRating # string | null full postcode only

Most common EPC energy efficiency band for residential properties. England and Wales only. Null when fewer than 3 certificates on record.

ABCDEFG
signals.housing.councilTaxBand # object | null full postcode only

Council tax band estimate. lower/upper give the band range (equal when a single band is determined). source: "exact_nrs" = authoritative NRS data (Scotland); "derived_hmlr" = derived from HMLR prices + ONS regional HPI (England/Wales); "derived_lsoa" = LSOA price fallback only. Not authoritative VOA data for E&W.

{ loweruppersource }
signals.housing.dominantPropertyType # string | null full postcode only

Most common residential property type in this postcode's LSOA. Derived from ONS Census 2021 TS044 (England/Wales) and NRS Census 2022 (Scotland). Null until CensusPropertyTypeFeed has run.

detachedsemi_detachedterracedflatother

Environment

signals.environment.*
signals.environment.airQualityBand # string | null full postcode only

Derived from NO2 using DEFRA DAQI thresholds. "very_low" covers most rural and suburban postcodes.

very_lowlowmoderatehigh
signals.environment.airQualityTrend # string | null full postcode only

Year-on-year change in air quality band vs the prior DEFRA annual update.

worseningstableimprovinginsufficient_data
signals.environment.no2UgM3 # integer | null full postcode only

Annual mean NO2 concentration (µg/m³) from DEFRA modelled data. WHO guideline: 10. UK legal limit: 40.

signals.environment.pm25UgM3 # integer | null full postcode only

Annual mean PM2.5 concentration (µg/m³). WHO guideline: 5. UK limit: 20.

signals.environment.radonPotential # string | null full postcode only

Radon potential from BGS/UKHSA Indicative Atlas. Reflects % of homes likely to exceed the UKHSA action level (200 Bq/m³).

very_lowlowmediumhighvery_high
signals.environment.greenSpaceProximityMetres # integer | null full postcode only

Distance in metres to nearest public green space access point (OS Open Greenspace, e.g. parks/playing fields — not open countryside). Cross-reference ruralUrbanClassification/isNationalPark for rural postcodes. Updated every 6 months.

signals.environment.isNationalPark # boolean | null full postcode only

True if the postcode falls within a National Park. Covers all 15 UK national parks (England, Wales, Scotland).

signals.environment.isAonb # boolean | null full postcode only

True if the postcode falls within a National Landscape (AONB). Covers England, Wales, and Scotland NSAs.

signals.environment.isGreenBelt # boolean | null full postcode only

True if the postcode falls within a statutory Green Belt (England only).

Composite scores

scores.*
scores.propertyRiskScore # float | null full postcode only

0.0–1.0. Higher = more risk (inverted convention). Derived from national percentile ranks of flood, crime, radon, and groundwater signals. Null-safe — redistributes when signals are missing. Null when too few components are available.

scores.liveabilityScore # float | null full postcode only

0.0–1.0. Higher = more liveable. Derived from national percentile ranks of air quality, crime, deprivation, green space, and EPC signals. Null-safe. Null when too few components are available.

scores.investmentScore # float | null full postcode only

0.0–1.0. Derived from property price rank, price trend direction, and deprivation rank. Null when too few inputs are available.

scores.affordabilityIndex # float | null full postcode only

0.0–1.0. Inverted national property price percentile. 1.0 = cheapest nationally, 0.0 = most expensive. Null when no property price data.

scores.scoreConvention # string full postcode only

Always "0_to_1; higher_is_better except propertyRiskScore". All scores are 0–1 and higher is better, except propertyRiskScore where lower is better (it measures risk, not desirability).

Percentile signals

percentiles.*
percentiles.floodRivers # integer | null full postcode only

0–100 national percentile rank. 100 = highest flood (rivers/sea) risk.

percentiles.floodGroundwater # integer | null full postcode only

100 = highest groundwater flood risk.

percentiles.crimeRate # integer | null full postcode only

100 = highest crime rate nationally.

percentiles.imd # integer | null full postcode only

100 = least deprived nationally.

percentiles.propertyPrice # integer | null full postcode only

100 = most expensive nationally.

percentiles.propertyPriceRegional # integer | null full postcode only

100 = most expensive within ONS region.

percentiles.radon # integer | null full postcode only

100 = highest radon potential.

percentiles.airQuality # integer | null full postcode only

100 = cleanest air nationally.

percentiles.greenSpaceProximity # integer | null full postcode only

100 = closest green space nationally.

percentiles.epc # integer | null full postcode only

100 = most energy efficient nationally.

Nearest endpoint only

How far (metres) the matched postcode centroid is from the coordinates you submitted. Present on GET /v1/postcode/nearest only — null on standard postcode lookups.

Metadata

Response schema version. Currently "1.0".

dataAsOf # string

ISO 8601 datetime when the core postcode dataset was last loaded.

checkedAt # string

ISO 8601 datetime when this request was processed.

sources # object

Data source attribution per signal group. Fields: geography, flood, crime, property, deprivation, broadband, environment, epc, greenSpace.