Data dictionary
Fields returned by the main Homedata API responses, with types, units, and coverage notes. Use the API Reference for endpoint signatures and code examples.
Sections
Property Data
Endpoint: GET https://api.homedata.co.uk/properties/{uprn}/
Every call returns these 15 base fields. Everything else is an add-on: chain slugs with ?with= (e.g. ?with=address,rooms) and each one adds its own block to the response. The add-ons are listed below the base fields.
| Field | Type | Description |
|---|---|---|
| uprn | integer | Unique Property Reference Number: the canonical UK property identifier (29M+ properties) |
| property_type | string|null | Full type name, e.g. "Detached", "Semi-Detached", "Terraced", "Flat" |
| classification_code | string|null | AddressBase classification code (e.g. RD06 = self-contained flat) |
| epc_floor_area | float|null | Total floor area in m² from the latest EPC |
| current_energy_efficiency | integer|null | Current EPC energy efficiency score (1–100) |
| potential_energy_efficiency | integer|null | Potential EPC score after recommended improvements (1–100) |
| last_epc_date | string|null | ISO 8601 date of the latest EPC |
| windows_type | string|null | Window glazing description from the EPC (e.g. "Double glazed") |
| fireplaces | integer|null | Fireplace count from the EPC |
| extensions | integer|null | Extension count from the EPC |
| last_sold_date | string|null | ISO 8601 date of the latest Land Registry-confirmed sale |
| last_sold_price | integer|null | Price of that sale, in pounds |
| last_sold_txid | string|null | HM Land Registry transaction ID of that sale |
| predicted_price | integer|null | Price estimate in pounds: a sale in the last 12 months, else the latest active sale listing in that window, else the modelled estimate |
| average_area_price | integer|null | Average price for the surrounding area, in pounds |
Add-ons (?with=)
| Slug | Tokens | Coverage | What it adds |
|---|---|---|---|
| address | 5 | UK | Full postal address, coordinates, USRN / TOID / UDPRN |
| amenities | 5 | UK | Nearby amenities across all 11 groups: food, education, healthcare, financial, civic, worship, culture, convenience, green spaces, transport and shops |
| broadband | 1 | UK | Average and maximum download speeds, superfast and gigabit availability |
| conservation | 3 | England & Wales | Conservation areas the property sits inside, matched against local authority designations |
| construction | 1 | England & Wales | Construction age band, material, basement |
| council_tax | 3 | UK | Council tax band (A–H) and billing authority name |
| council_tax_full | 5 | UK | Band and authority plus GSS code, country, yearly and monthly charge in GBP, valuation bounds and fiscal year |
| crime | 1 | England, Wales & N. Ireland | Crime for the property’s postcode for the latest published month, broken down by category. England, Wales and Northern Ireland; Scotland is published separately by Police Scotland and is not included. |
| demographics | 1 | England & Wales | Census demographics for the postcode: population, age bands and household composition |
| deprivation | 1 | England & Wales | Index of Multiple Deprivation 2019: overall rank and decile, plus the seven IMD domains and the two income-deprivation indices (children, older people), each with its own rank and decile |
| dimensions | 1 | England & Wales | Building footprint area, height, volume, floor area |
| epc | 1 | England & Wales | Energy performance certificate: current and potential ratings (A–G) and the scores behind them, lodgement date, floor area, main fuel and mains gas |
| epc_renovations | 1 | England & Wales | Recommended EPC improvements with cost ranges |
| flood | 1 | England & Wales | Flood risk on its own (rivers, sea and surface water) pulled out of the environmental risks bundle |
| garden | 1 | England & Wales | Garden presence and details |
| land | 1 | England & Wales | Land area in m² (not available for flats) |
| last_sold | 1 | England & Wales | Most recent sale for this UPRN: date and price, from HM Land Registry |
| listed_buildings | 3 | England & Wales | Listed buildings at or within the property, matched against the Historic England register |
| lr_title | 1 | England & Wales | Land Registry title number, tenure, restrictions |
| lr_title_full | 10 | England & Wales | Full registered title: tenure, covenants, corporate and overseas ownership, and boundary geometry |
| parking | 1 | England & Wales | Parking presence and details |
| planning_designations | 3 | England & Wales | Planning designations covering the property: Green Belt, AONB, National Park, SSSI and others |
| planning_history | 5 | England & Wales | Planning applications for this UPRN: references, statuses, decisions and dates |
| price_distributions | 1 | England & Wales | Price percentiles for the outcode, split by property type |
| price_growth | 1 | England & Wales | Year-on-year price growth for the outcode, as a percentage |
| price_trends | 1 | England & Wales | Average monthly price trend for the outcode, with a historic average and volatility score |
| property_type | 1 | UK | Property type (detached, semi-detached, terraced or flat) with its classification code |
| risks | 7 | Varies by category | Environmental risks in one block: flood, radon, noise, landfill, coal mining, invasive plants, air quality |
| roof | 1 | England & Wales | Roof material, shape, solar panels |
| rooms | 1 | England & Wales | Bedrooms, bathrooms, habitable and heated rooms |
| schools | 1 | England & Wales | Nearby state and independent schools within 3km by default, with Ofsted rating, distance and phase |
| solar | 5 | UK | Solar PV potential, generation and payback |
| title_boundary | 5 | England & Wales | The registered title boundary as GeoJSON geometry (WGS84) |
| transport | 1 | UK | Nearby stations, stops and interchanges, with distance |
| valuation_estimate | 10 | England & Wales | Automated sale-price estimate: headline figure, range, confidence score and the inputs behind it |
| valuation_full | 25 | England & Wales | Automated sale-price estimate with the full evidence pack: sold comparables, active listings, lifecycle scoring and time adjustment |
Tokens above are charged per add-on requested, on top of the 1-token property call. The full slug list for a given UPRN, with availability, comes back from the discovery call GET https://api.homedata.co.uk/property/{uprn}/.
EPC & energy
Endpoint: GET https://api.homedata.co.uk/epc-checker/{uprn}/. Source: MHCLG EPC Register; Homedata holds over 23 million certificates.
| Field | Type | Description |
|---|---|---|
| uprn | integer | The property UPRN |
| current_energy_rating | string|null | Current EPC rating as the A–G letter |
| potential_energy_rating | string|null | Potential A–G letter after recommended improvements |
| current_energy_efficiency | integer|null | Current EPC energy efficiency score (1–100): null if no certificate |
| potential_energy_efficiency | integer|null | Potential score after recommended improvements (1–100) |
| last_epc_date | string|null | ISO 8601 date of the latest EPC |
| epc_floor_area | float|null | Total floor area in m² from the EPC |
| construction_age_band | string|null | Build period band, e.g. "2007-2011" |
| epc_id | string|null | EPC certificate reference |
Environmental risks
Endpoint: GET https://api.homedata.co.uk/risks/{risk_type}/?uprn=
Risk types (the {risk_type} path slug): flood, radon,
noise, landfill,
coal_mining, non_coal_mining,
invasive_plants, air_quality_today, or all for every type in one call.
Flood results come back split by source (e.g. flood_rivers_sea, flood_surface_water).
| Field | Type | Description |
|---|---|---|
| results | array | Array of risk assessment objects for this UPRN |
| results[].risk_type | string | Risk category identifier (e.g. flood_rivers_sea) |
| results[].label | string | Human-readable risk level (e.g. Low, Medium, High); wording varies by risk type |
| results[].score | number|null | Numeric score on the scale named in score_unit (e.g. radon class, noise dB, flood band); null where the risk type has no numeric score, such as coal_mining |
| results[].score_unit | string|null | Scale of score: "band", "class" or "dB"; null when score is null |
| results[].intersects | boolean | True if risk zone directly intersects the property boundary |
| results[].distance_m | integer | Distance in metres to nearest risk zone (0 = at property) |
| results[].search_radius_m | integer | Search radius used for proximity check |
| results[].count | integer | Number of risk zones found within search radius |
| results[].radius_description | string | Human-readable radius label (e.g. "At property", "Within 100m") |
| results[].properties | object | Risk-specific metadata (description, confidence, source) |
| results[].properties.description | string | Plain-English explanation of this risk level |
| results[].properties.confidence | string|null | Data confidence, flood results only; may be null |
| location | object | Resolved coordinates used for the lookup: {lat, lon} |
Deprivation index
Source: MHCLG Indices of Multiple Deprivation (IoD) 2019. Covers England only.
Endpoint: GET https://api.homedata.co.uk/deprivation/?postcode=
| Field | Type | Description |
|---|---|---|
| postcode | string | The postcode the lookup resolved to |
| lsoa.code | string | Lower Super Output Area code (e.g. E01031220) |
| lsoa.name | string | LSOA name (e.g. "Worcester 016B") |
| lad.code | string | Local authority district code (e.g. E07000237) |
| lad.name | string | Local authority district name |
| overall.rank | integer | Overall IMD rank: 1 = most deprived |
| overall.decile | integer | IMD decile 1–10 (1 = the 10% most deprived areas in England) |
| overall.score | integer | Overall score band behind the label |
| overall.label | string | Plain-English band, e.g. "Average" |
| overall.short_label | string | Short form of the band label |
| overall.lad_rank | integer | Rank of the local authority itself |
| overall.lad_rank_description | string | e.g. "Local authority ranks 142 out of 317" |
| domains | array | One object per IMD domain |
| domains[].domain | string | Domain key: income, employment, education, health, crime, housing, environment, idaci, idaopi |
| domains[].label | string | Domain name |
| domains[].short_label | string | Short domain name |
| domains[].description | string | What the domain measures |
| domains[].rank | integer | Domain rank for this LSOA |
| domains[].decile | integer | Domain decile 1–10 |
| domains[].score | integer | Domain score band |
| domains[].score_label | string | Plain-English band for the domain |
| domains[].score_short | string | Short form of the domain band |
| domains[].lad_rank | integer | Domain rank of the local authority |
| metadata.source | string | e.g. "MHCLG English Indices of Deprivation 2019" |
| metadata.total_lsoas | integer | Total LSOAs in the index |
| metadata.total_lads | integer | Total local authority districts in the index |
Prices & transactions
Source: HM Land Registry Price Paid Data. England & Wales only. Updated monthly.
Price trends
GET https://api.homedata.co.uk/price_trends/{outcode}/: monthly median asking prices from sale listings, not Land Registry sold prices.
| Field | Type | Description |
|---|---|---|
| outcode | string | Outward postcode district (e.g. SW1A) |
| monthly_average_prices | object | Median asking price in pounds, keyed by year-month (e.g. "2026-01": 615000), over the past 12 months |
| volatility_score | float | Month-to-month variation in the medians: higher means a more volatile market |
Property sales
| Field | Type | Description |
|---|---|---|
| id | integer | Sale record identifier: pass it to /property_sale_events/?sale={id} for the event timeline. That endpoint is arranged per customer rather than sold self-serve. |
| txid | string|null | HM Land Registry transaction identifier |
| sold_let_date | string|null | ISO 8601 date the sale or let completed |
| sold_let_price | integer|null | Price in pounds |
| first_listing_date | string|null | ISO 8601 date the property was first listed |
| transaction_type | string | Sale or Let |
| is_complete | boolean | True once the transaction completed |
| is_available | boolean | True while the property is still on the market |
Address & location
| Field | Type | Description |
|---|---|---|
| suggestions | array | Array of address suggestion objects (find endpoint) |
| suggestions[].uprn | integer | UPRN of the suggested address: the permanent identifier to store |
| suggestions[].uprn_token | string | Encrypted UPRN token, regenerated on every response: do not store |
| suggestions[].address | string | Full formatted address string |
| suggestions[].postcode | string | Postcode |
| suggestions[].town | string | Town or city |
| count | integer | Number of suggestions returned |
Council tax
Two endpoints. Light: GET https://api.homedata.co.uk/council_tax_band/{uprn}/ (3 tokens, band + authority only). Full: GET https://api.homedata.co.uk/council_tax/{uprn}/ (5 tokens, adds GSS code, country, yearly/monthly charge in GBP, valuation bounds and fiscal year).
Sources: official council tax band listings for bands; each local authority's published rates for charges. Coverage: England, Scotland and Wales, fiscal year 2026-27. Money fields are GBP strings to 2 decimal places.
| Field | Type | Description |
|---|---|---|
| council_tax_band | string | Council tax band for the property. Returned by both endpoints. |
| authority_name | string|null | Billing authority name (e.g. "Cornwall", "Glasgow City"). Returned by both endpoints. |
| uprn | integer | Property UPRN. Returned only by the postcode-mode light lookup, so the caller can identify which property matched their postcode + building filter. |
| gss_code | string|null | ONS GSS code for the billing authority (e.g. "E06000052"). Full endpoint only. |
| country | string | England | Scotland | Wales. Full endpoint only. |
| yearly_charge_gbp | string|null | Annual charge in GBP, 2dp (e.g. "2225.27"). Full endpoint only. Null if the authority has no charge row for the band/current year. |
| monthly_charge_gbp | string|null | Monthly charge in GBP, 2dp. Full endpoint only. |
| value_low_gbp | string|null | Lower bound of the 1991 valuation band for this LA + band (e.g. "68001.00"). Full endpoint only. |
| value_high_gbp | string|null | Upper bound of the 1991 valuation band. Full endpoint only. |
| fiscal_year_label | string|null | Tax year for the charge (e.g. "2026-27"). Full endpoint only. |
Planning applications
Endpoint: GET https://api.homedata.co.uk/planning/search/?postcode=
Source: over 300 UK local planning authorities, nearly 4 million applications; completeness varies by authority.
| Field | Type | Description |
|---|---|---|
| count | integer | Total matching applications (before pagination) |
| page | integer | Current page number |
| per_page | integer | Results per page |
| radius_km | float|null | Search radius used in km: null when served from the local snapshot |
| days | integer | Look-back window in days used for the search |
| results | array | Array of planning application objects |
| results[].reference | string | LPA application reference (e.g. 26/01372/LBC) |
| results[].description | string | Application description as submitted |
| results[].status | string | Application status as published by the authority (e.g. Pending, Decided, Withdrawn) |
| results[].type | string|null | Application type (e.g. Full, Householder, Heritage) |
| results[].authority | string | Local Planning Authority name |
| results[].address | string | Application site address |
| results[].postcode | string|null | Application site postcode |
| results[].date_received | string|null | ISO 8601 date the application was received |
| results[].date_validated | string|null | ISO 8601 date the application was validated |
| results[].date_decided | string|null | ISO 8601 decision date: null if undecided |
| results[].distance_km | float|null | Distance from the search point in km: null when served from the local snapshot |
Solar assessment
Endpoint: GET https://api.homedata.co.uk/solar-assessment/{uprn}/
PV model using 120 UK irradiance zones, OS footprint data, and EPC floor area.
| Field | Type | Description |
|---|---|---|
| system_size_kwp | float | Estimated PV system capacity in kWp |
| panel_count | integer | Estimated number of solar panels |
| usable_roof_area_m2 | float | Estimated usable roof area in m² |
| annual_generation_kwh | integer | Estimated annual electricity generation in kWh |
| annual_savings_gbp | integer | Estimated annual savings in pounds (no battery) |
| system_cost_gbp | integer | Estimated installed system cost in pounds |
| payback_years | float | Simple payback period in years (no battery) |
| battery_annual_savings_gbp | integer|null | Annual savings with battery storage added |
| battery_system_cost_gbp | integer|null | System cost including battery in pounds |
| battery_payback_years | float|null | Payback period with battery storage |
| co2_saved_kg | integer | Estimated annual CO₂ offset in kg |
| trees_equivalent | integer | CO₂ saving expressed as equivalent trees planted per year |
| irradiance_kwh_m2_yr | integer | Annual solar irradiance for this postcode zone in kWh/m² |
| confidence | string | Data confidence: high (OS footprint), medium (EPC area), low (bedroom estimate) |
| has_solar_panels | boolean | True if EPC already records PV panels installed |
| assumptions.panel_wattage_w | integer | Panel wattage used in calculation (default 420W) |
| assumptions.electricity_rate_p_kwh | float | Unit rate in pence/kWh used for savings calculation |
| assumptions.export_rate_p_kwh | float | Export tariff rate in pence/kWh |
| assumptions.system_efficiency | float | System efficiency factor (0.0–1.0) |
Crime Data
Endpoint: GET https://api.homedata.co.uk/crime/?postcode=
Source: Police UK API (data.police.uk). Updated monthly. England, Wales & Northern Ireland.
| Field | Type | Description |
|---|---|---|
| total_crimes | integer | Total crimes recorded near the location for the month returned |
| month | string | Year-month of the data (e.g. "2025-12") |
| search_point.latitude | float | Latitude the search resolved to |
| search_point.longitude | float | Longitude the search resolved to |
| categories | array | Crime categories, most frequent first |
| categories[].category | string | Category slug (e.g. violent-crime, burglary, anti-social-behaviour) |
| categories[].label | string | Human-readable category name |
| categories[].count | integer | Crimes recorded in this category |
| categories[].latest_month | string | Most recent month covered for this category |
| categories[].sample_locations | array | Example streets: street, latitude, longitude |
Agent statistics
Endpoint: GET https://api.homedata.co.uk/agent_stats/{uprn}/
Performance metrics for agents active near the subject property. Add ?view=market_share for the market-share view instead.
| Field | Type | Description |
|---|---|---|
| [] | array | The response is an array of agent objects: there is no wrapper object |
| [].id | integer | Agent identifier |
| [].branch_name | string | Branch name |
| [].agent_name | string | Agent name |
| [].sales_phone_number | string|null | Sales phone number for the branch |
| [].stats | object | Performance figures for this branch |
| [].stats.listing_count | integer | Listings for this branch near the property |
| [].stats.new_last_30d | integer | Listings added in the last 30 days |
| [].stats.reduced_count | integer | Listings with a recorded price reduction |
| [].stats.count_last_6mo | integer | Listings in the last 6 months |
| [].stats.avg_latest_price | integer | Average latest asking price in pounds |
| [].stats.avg_time_on_market | integer | Average days on market |
| [].stats.avg_time_to_sstc | integer | Average days from listing to sold subject to contract |
| [].stats.avg_time_to_first_offer | integer | Average days to the first offer |
| [].stats.avg_sale_percent | float | Average sale price as a percentage of the asking price |
| [].stats.recent_listings | array | Recent listings: property, address, time_on_market_days, time_to_sstc_days, sale_percent, sale_price, sold_date |
Integrate into your own product
Pay as you goThe Homedata API returns structured fields per property (UPRN, address, type, bedrooms, floor area, EPC rating, tenure, construction age, risk scores, deprivation decile, planning history, and more) all in consistent JSON across 29 million UK properties.
Structured as JSON · queryable by UPRN or postcode · ready to embed in any application
Exact measurements
Real values (distances, concentrations, counts) not rounded ratings
29 million UK properties covered
Every address queryable by UPRN or postcode
REST API
JSON responses, OpenAPI docs, sandbox: first call in under 5 minutes
Pay as you go: 100 tokens = £1 across every endpoint, no subscription needed. Bonus tokens with an optional monthly subscription, and your first top-up matched 100%. See pricing →
Further reading