Data Dictionary
Every field returned by the Homedata API, with types, units, and coverage notes. Use the API Reference for endpoint signatures and code examples.
Sections
Property Intelligence
Endpoint: GET https://api.homedata.co.uk/api/properties/{uprn}/
| Field | Type | Description |
|---|---|---|
| uprn | integer | Unique Property Reference Number — the canonical UK property identifier (29M+ properties) |
| full_address | string | Formatted full address including postcode |
| address_line_1 | string | First line of address (house number + street) |
| address_line_2 | string|null | Second line of address (district, locality) — may be null |
| postcode | string | Royal Mail formatted postcode (e.g. SW1A 2AA) |
| town | string | Town or city name |
| county | string|null | County — may be null for London/metropolitan areas |
| latitude | float | WGS84 latitude to 6 decimal places |
| longitude | float | WGS84 longitude to 6 decimal places |
| property_type | string | D = Detached, S = Semi-detached, T = Terraced, F = Flat/maisonette |
| tenure | string|null | F = Freehold, L = Leasehold — may be null if unknown |
| bedrooms | integer|null | Bedroom count from EPC or Land Registry data — may be null |
| total_floor_area | float|null | Total internal floor area in m² from EPC — may be null |
| construction_age_band | string|null | Build period band e.g. "1967-1975", "2007 onwards" — may be null |
| new_build | boolean|null | True if classified as new build at last transaction — may be null |
| last_sold_date | string|null | ISO 8601 date of last registered sale (e.g. 2022-03-15) — may be null |
| last_sold_price | integer|null | Last registered sale price in pence (not pounds) — may be null |
| lsoa_code | string|null | Lower Super Output Area code (e.g. E01000001) — used for deprivation lookups |
| council_tax_band | string|null | Council tax band A–H — may be null if not yet scraped |
EPC & Energy
Included in the property response object. Source: MHCLG EPC Register (~26M certificates).
| Field | Type | Description |
|---|---|---|
| epc_rating | string|null | Current EPC band A–G (A = most efficient) — null if no certificate |
| epc_potential_rating | string|null | Potential EPC band after recommended improvements |
| epc_current_score | integer|null | Numeric SAP energy efficiency score (1–100) |
| epc_potential_score | integer|null | Potential SAP score after improvements |
| epc_inspection_date | string|null | ISO 8601 date of EPC assessment |
| energy_consumption_kwh | float|null | Estimated annual energy consumption in kWh |
| co2_emissions_tonnes | float|null | Estimated annual CO₂ emissions in tonnes |
| heating_type | string|null | Primary heating system type (e.g. "Gas boiler", "Heat pump") |
| hot_water_type | string|null | Hot water system description |
| glazing_type | string|null | Window glazing type (e.g. "Double glazing", "Single glazing") |
| wall_type | string|null | Wall construction and insulation type |
| roof_type | string|null | Roof construction and insulation type |
| has_solar_panels | boolean | True if EPC records photovoltaic panels installed |
Environmental Risks
Endpoint: GET https://api.homedata.co.uk/api/risks/{risk_type}/?uprn=
Risk types: flood_rivers_sea, flood_surface_water,
radon, noise,
landfill, coal_mining,
air_quality_today, invasive_plants
| 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: Very Low, Low, Medium, High, Very High |
| results[].score | integer | Numeric risk score (1=Very Low … 5=Very High) |
| results[].score_unit | string | Score scale descriptor (e.g. "band") |
| 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 | Data confidence: high, medium, or low |
| location | object | Resolved coordinates used for the lookup |
Deprivation Index
Source: MHCLG Indices of Multiple Deprivation (IoD) 2019. Covers England only.
Endpoint: GET https://api.homedata.co.uk/api/deprivation/?uprn=
| Field | Type | Description |
|---|---|---|
| lsoa_code | string | Lower Super Output Area code (e.g. E01000001) |
| lsoa_name | string | LSOA name (e.g. "Hackney 001A") |
| imd_rank | integer | Overall IMD rank — 1 = most deprived, 32,844 = least deprived |
| imd_decile | integer | IMD decile 1–10 (1 = 10% most deprived areas in England) |
| income_rank | integer | Income deprivation domain rank |
| employment_rank | integer | Employment deprivation domain rank |
| education_rank | integer | Education, Skills and Training domain rank |
| health_rank | integer | Health Deprivation and Disability domain rank |
| crime_rank | integer | Crime domain rank |
| barriers_rank | integer | Barriers to Housing and Services domain rank |
| living_env_rank | integer | Living Environment Deprivation domain rank |
| idaci_rank | integer | Income Deprivation Affecting Children Index rank |
| idaopi_rank | integer | Income Deprivation Affecting Older People Index rank |
| total_population | integer | Resident population of the LSOA |
Prices & Transactions
Source: HM Land Registry Price Paid Data. England & Wales only. Updated monthly.
Price Trends
| Field | Type | Description |
|---|---|---|
| outcode | string | Outward postcode district (e.g. SW1A) |
| property_type | string | D / S / T / F (Detached / Semi / Terraced / Flat) |
| period | string | Year-month of data point (e.g. "2024-01") |
| avg_price | integer | Average sale price in pence for the period |
| median_price | integer | Median sale price in pence for the period |
| transaction_count | integer | Number of registered sales in this period |
| yoy_change_pct | float|null | Year-on-year price change as percentage — null if insufficient data |
Property Sales
| Field | Type | Description |
|---|---|---|
| transaction_id | string | Land Registry transaction UUID |
| uprn | integer | Property UPRN |
| sale_price | integer | Registered sale price in pence |
| sale_date | string | ISO 8601 date of registration |
| property_type | string | D / S / T / F |
| new_build | boolean | True if classified as new build at time of sale |
| tenure | string | F = Freehold, L = Leasehold |
| full_address | string | Formatted address at time of registration |
| postcode | string | Postcode at time of registration |
Comparables
Endpoint: GET https://api.homedata.co.uk/api/comparables/?uprn=
AI-ranked comparable sold properties. Response time ~6s (OpenAI ranking).
| Field | Type | Description |
|---|---|---|
| subject | object | The subject property (full property object) |
| comparables | array | Ranked list of comparable sold properties |
| comparables[].uprn | integer | UPRN of comparable property |
| comparables[].full_address | string | Address of comparable |
| comparables[].sale_price | integer | Sale price in pence |
| comparables[].sale_date | string | ISO 8601 date of sale |
| comparables[].similarity_score | float | AI-computed similarity score 0.0–1.0 (1.0 = most similar) |
| comparables[].distance_m | integer | Distance from subject property in metres |
| comparables[].property_type | string | D / S / T / F |
| comparables[].bedrooms | integer|null | Bedroom count |
| comparables[].total_floor_area | float|null | Floor area in m² |
| meta.count | integer | Number of comparables returned |
| meta.radius_m | integer | Search radius used in metres |
Address & Location
Address endpoints use transparent call weights: find and postcode cost 2 calls each, retrieve costs 5 calls (Royal Mail PAF + OS licensing).
| Field | Type | Description |
|---|---|---|
| suggestions | array | Array of address suggestion objects (find endpoint) |
| suggestions[].uprn | integer | UPRN of suggested address |
| suggestions[].address | string | Full formatted address string |
| suggestions[].address_line_1 | string | First line (house number + street) |
| suggestions[].address_line_2 | string|null | Second line (district/locality) — may be null |
| suggestions[].postcode | string | Postcode |
| suggestions[].town | string | Town or city |
| suggestions[].latitude | float|null | WGS84 latitude — included on retrieve endpoint |
| suggestions[].longitude | float|null | WGS84 longitude — included on retrieve endpoint |
| meta.query | string | The search query used |
| meta.count | integer | Number of suggestions returned (max 8) |
Council Tax
Endpoint: GET https://api.homedata.co.uk/api/council-tax/?postcode=
Source: VOA Council Tax Valuation List.
| Field | Type | Description |
|---|---|---|
| uprn | integer | Property UPRN |
| full_address | string | Formatted full address |
| postcode | string | Postcode |
| council_tax_band | string | VOA council tax band A–H (A = lowest, H = highest) |
| band_description | string | Human-readable description (e.g. "Band D — up to £88,000 in 1991 values") |
| local_authority | string|null | Local authority name — may be null |
| source | string | "voa_scrape" or "epc" depending on data origin |
Planning Applications
Endpoint: GET https://api.homedata.co.uk/api/planning/search/?postcode=
Source: 417 Local Planning Authorities, 20M+ applications.
| Field | Type | Description |
|---|---|---|
| results | array | Array of planning application objects |
| results[].reference | string | LPA application reference (e.g. 2024/01234/FUL) |
| results[].description | string | Application description as submitted |
| results[].status | string | Application status: Approved, Refused, Pending, Withdrawn, etc. |
| results[].application_type | string | Application type: Full, Householder, Prior Approval, etc. |
| results[].decision_date | string|null | ISO 8601 decision date — null if pending |
| results[].submitted_date | string | ISO 8601 submission date |
| results[].lpa_name | string | Local Planning Authority name |
| results[].address | string | Application site address |
| results[].postcode | string | Application site postcode |
| results[].uprn | integer|null | Matched UPRN — null if address could not be matched |
| results[].distance_m | integer | Distance from query postcode centroid in metres |
| meta.total | integer | Total matching applications (before pagination) |
| meta.page | integer | Current page number |
| meta.radius_km | float | Search radius used in km |
Solar Assessment
Endpoint: GET https://api.homedata.co.uk/api/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/api/crime/?postcode=
Source: Police UK API (data.police.uk). Updated monthly. England, Wales & Northern Ireland.
| Field | Type | Description |
|---|---|---|
| total | integer | Total crimes recorded in the past 12 months within 1 mile radius |
| monthly_average | float | Average crimes per month |
| by_category | object | Crime counts keyed by category slug |
| by_category.anti-social-behaviour | integer | Anti-social behaviour incidents |
| by_category.burglary | integer | Residential and non-residential burglary |
| by_category.criminal-damage-arson | integer | Criminal damage and arson |
| by_category.drugs | integer | Drug offences |
| by_category.vehicle-crime | integer | Vehicle crime (theft from/of vehicle) |
| by_category.violent-crime | integer | Violence and sexual offences |
| by_category.other-theft | integer | Other theft offences |
| period_months | integer | Number of months of data included |
| force | string | Police force name covering this location |
Agent Statistics
Endpoint: GET https://api.homedata.co.uk/api/agent-stats/{uprn}/
Performance metrics for agents active near the subject property.
| Field | Type | Description |
|---|---|---|
| agents | array | Array of agent performance objects, ranked by market share |
| agents[].agent_name | string | Estate agent branch name |
| agents[].listings_count | integer | Active listings attributed to this agent |
| agents[].sold_count | integer | Properties sold in the past 12 months |
| agents[].market_share_pct | float | Percentage of local market (by listings volume) |
| agents[].avg_days_to_sell | integer|null | Average days from listing to SSTC — null if insufficient data |
| agents[].avg_sale_to_asking_ratio | float|null | Average ratio of sale price to asking price (e.g. 0.97 = 97%) |
| agents[].listing_history_count | integer | Total properties listed by this agent in the area |
| meta.radius_m | integer | Search radius used in metres |
| meta.agent_count | integer | Number of agents returned |