Data catalogue/ Prices & transactions/ Sale prices
Sale prices
Completed transaction prices from HM Land Registry: the authoritative record of what properties in England and Wales actually sold for. Price paid, tenure, property classification, and transaction date. 30 years of history.
{
"count": 4,
"results": [
{
"uprn": "100023336956",
"price_paid": 55800000,
"date_of_transfer": "2024-05-28",
"property_type": "S",
"tenure": "F",
"new_build": false,
"transaction_category": "A",
"display_address": "14 Maple Avenue, Bristol",
"property_sale_events": [...],
"property_listings": [...]
}
]
}Transaction history
Every completed sale, linked to the property's UPRN. Freehold or leasehold, new build or established: every transaction since 1995.
Response fields
Fields returned in each transaction object from the property_sales endpoint.
HM Land Registry Price Paid Data. Updated monthly. Covers England and Wales. Scotland and Northern Ireland use separate registers (not currently included).
| Field | Type | What it is |
|---|---|---|
| uprn | string | Unique Property Reference Number: the stable identifier across all transactions |
| price_paid | integer | Amount paid in pence (e.g. 55800000 = £558,000) |
| date_of_transfer | string | Completion date in ISO 8601 format (YYYY-MM-DD) |
| property_type | string | D (detached), S (semi), T (terraced), F (flat/maisonette), O (other) |
| tenure | string | F (freehold) or L (leasehold): tenure type at time of sale |
| new_build | boolean | Whether the property was newly built at the time of this transaction |
| transaction_category | string | A (standard), B (additional price paid), C (repossession), D (developer) |
| display_address | string | Human-readable property address from our address index |
curl "https://api.homedata.co.uk/property_sales/?uprn=100023336956" \ -H "Authorization: Api-Key YOUR_KEY"
import requests
r = requests.get(
"https://api.homedata.co.uk/property_sales/",
params={"uprn": "100023336956"},
headers={"Authorization": "Api-Key YOUR_KEY"},
)
sale = r.json()["results"][0]
print(f"Sold: £{sale['price_paid']/100:,.0f} on {sale['date_of_transfer']}")
print(f"Tenure: {'Freehold' if sale['tenure'] == 'F' else 'Leasehold'}")
const res = await fetch(
"https://api.homedata.co.uk/property_sales/?uprn=100023336956",
{ headers: { "Authorization": "Api-Key YOUR_KEY" } }
);
const { results } = await res.json();
const sale = results[0];
console.log(`Sold: £${(sale.price_paid / 100).toLocaleString()} on ${sale.date_of_transfer}`);
console.log(`Tenure: ${sale.tenure === 'F' ? 'Freehold' : 'Leasehold'}`);
More in Prices & transactions
Start building today.
Pay as you go, 100 tokens = £1, first top-up matched. Get your key and test with real data.