Property datasets
UK property data, ready for your model.
29M UK properties, each keyed by its UPRN, so energy, sales, listings, risk and area all join on one column. Pull them into a dataframe from 59 endpoints, or take a file for a whole area.
One key
Everything joins on the UPRN
The UPRN is the permanent ID behind a UK address. Every Homedata property record carries it, so you join datasets on one column instead of matching addresses.
The home
Type, bedrooms, bathrooms, floor area, build age, construction and tenure.
The fieldsPrices and events
Land Registry sales and every listing event since 2000: listed, reduced, Sold STC, let agreed.
The fieldsEnergy
23M energy certificates: ratings, scores and the recommended works.
The fieldsRisk and area
Flood, ground and environmental risk, schools, crime and deprivation.
The fieldsIn a notebook
From a list of addresses to a dataframe
Match each address to its UPRN, then pull the record. A match that fails returns a reason and costs nothing.
import pandas as pd, requests
API = "https://api.homedata.co.uk"
headers = {"Authorization": "Api-Key YOUR_API_KEY"}
def uprn(address, postcode):
r = requests.get(f"{API}/address/match/", params={"address": address, "postcode": postcode}, headers=headers)
if r.status_code == 422: # no match, or several: no charge
return None
r.raise_for_status() # a bad key or a rate limit stops here
return str(r.json()["uprn"]) # kept as text, so a UPRN never becomes 1.0e11
def record(u):
r = requests.get(f"{API}/property/{u}/base/", headers=headers)
r.raise_for_status()
return r.json()
homes = pd.read_csv("addresses.csv") # address, postcode
homes["uprn"] = [uprn(a, p) for a, p in zip(homes.address, homes.postcode)]
data = pd.json_normalize([record(u) for u in homes.uprn.dropna()])
Prefer to ask in plain English? The Homedata MCP server puts the same data inside Claude, Codex and other AI tools.
At scale
A whole area as one file
Call the API one property at a time, or take a file for a list or a whole area. Tell us the area and the fields, and how you will use them.
- Pay per field through the API, from 1p, with no subscription.
- Coverage is published: what we hold, and where.
- Every field is described in the data catalogue.
More for analysts
Start with a sample
Get a key and pull your first records today, or tell us the area you need as a file.