Property API Reference
HM Land Registry price paid data: search transactions, retrieve details, and compute statistics.
Base URL: https://api.govdata.dev/v1
Search Transactions
/v1/property/price-paid/search
Waiting for request...
Search property transactions by postcode, town, or district. At least one location parameter is required.
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
postcode |
string | No* | Full or partial postcode (e.g. SW1A 1AA or SW1A) |
town |
string | No* | Town or city name |
district |
string | No* | Local authority district |
property_type |
string | No | detached, semi_detached, terraced, flat |
page |
integer | No | Page number (default 1, 25 results per page) |
* At least one of postcode, town, or district is required.
curl -H "Authorization: Bearer YOUR_API_KEY" \ "https://api.govdata.dev/v1/property/price-paid/search?postcode=SW1A+1AA"
uri = URI("https://api.govdata.dev/v1/property/price-paid/search?postcode=SW1A+1AA") req = Net::HTTP::Get.new(uri) req["Authorization"] = "Bearer YOUR_API_KEY" res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |h| h.request(req) }
response = requests.get( "https://api.govdata.dev/v1/property/price-paid/search", headers={"Authorization": "Bearer YOUR_API_KEY"}, params={"postcode": "SW1A 1AA"} )
const url = new URL("https://api.govdata.dev/v1/property/price-paid/search"); url.searchParams.set("postcode", "SW1A 1AA"); const response = await fetch(url, { headers: { "Authorization": "Bearer YOUR_API_KEY" } });
Response
{ "data": { "transactions": [ { "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "price": 1250000, "date": "2024-11-15", "postcode": "SW1A 1AA", "property_type": "flat", "new_build": false, "tenure": "leasehold", "address": "FLAT 3, 12 DOWNING STREET, LONDON" } ], "pagination": { "page": 1, "per_page": 25, "total": 1 } }, "meta": { "api_version": "v1", "licence": "Open Government Licence v3.0", "source": "HM Land Registry", "source_url": "https://www.gov.uk/government/collections/price-paid-data" } }
Address Search
/v1/property/price-paid/address
Waiting for request...
Search property transactions by street address. Returns the sale history for a specific property or all transactions on a street.
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
street |
string | Yes | Street name (e.g. BIDSTON ROAD) |
number |
string | No | House number or name (e.g. 36 or THE OLD RECTORY) |
postcode |
string | No | UK postcode to narrow results |
town |
string | No | Town or city name |
from |
string | No | Start date in YYYY-MM-DD format |
to |
string | No | End date in YYYY-MM-DD format |
page |
integer | No | Page number (default 1, 25 results per page) |
curl -H "Authorization: Bearer YOUR_API_KEY" \ "https://api.govdata.dev/v1/property/price-paid/address?street=BIDSTON+ROAD&number=36"
uri = URI("https://api.govdata.dev/v1/property/price-paid/address?street=BIDSTON+ROAD&number=36") req = Net::HTTP::Get.new(uri) req["Authorization"] = "Bearer YOUR_API_KEY" res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |h| h.request(req) }
response = requests.get( "https://api.govdata.dev/v1/property/price-paid/address", headers={"Authorization": "Bearer YOUR_API_KEY"}, params={"street": "BIDSTON ROAD", "number": "36"} )
const url = new URL("https://api.govdata.dev/v1/property/price-paid/address"); url.searchParams.set("street", "BIDSTON ROAD"); url.searchParams.set("number", "36"); const response = await fetch(url, { headers: { "Authorization": "Bearer YOUR_API_KEY" } });
Response
{ "data": { "transactions": [ { "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "price": 185000, "date": "2022-06-10", "postcode": "CH43 2JZ", "property_type": "semi_detached", "new_build": false, "tenure": "freehold", "address": "36 BIDSTON ROAD, BIRKENHEAD" } ], "pagination": { "page": 1, "per_page": 25, "total": 1 } }, "meta": { "api_version": "v1", "licence": "Open Government Licence v3.0", "source": "HM Land Registry", "source_url": "https://www.gov.uk/government/collections/price-paid-data" } }
Get Transaction
/v1/property/price-paid/:id
Waiting for request...
Retrieve a single price paid transaction by its UUID.
curl -H "Authorization: Bearer YOUR_API_KEY" \ https://api.govdata.dev/v1/property/price-paid/a1b2c3d4-e5f6-7890-abcd-ef1234567890
id = "a1b2c3d4-e5f6-7890-abcd-ef1234567890" uri = URI("https://api.govdata.dev/v1/property/price-paid/#{id}") req = Net::HTTP::Get.new(uri) req["Authorization"] = "Bearer YOUR_API_KEY" res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |h| h.request(req) }
response = requests.get( "https://api.govdata.dev/v1/property/price-paid/a1b2c3d4-e5f6-7890-abcd-ef1234567890", headers={"Authorization": "Bearer YOUR_API_KEY"} )
const id = "a1b2c3d4-e5f6-7890-abcd-ef1234567890"; const response = await fetch(`https://api.govdata.dev/v1/property/price-paid/${id}`, { headers: { "Authorization": "Bearer YOUR_API_KEY" } });
Response
{ "data": { "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "price": 1250000, "date": "2024-11-15", "postcode": "SW1A 1AA", "property_type": "flat", "new_build": false, "tenure": "leasehold", "estate_type": "flat", "address": "FLAT 3, 12 DOWNING STREET, LONDON", "town": "LONDON", "district": "CITY OF WESTMINSTER", "county": "GREATER LONDON" }, "meta": { "api_version": "v1", "licence": "Open Government Licence v3.0", "source": "HM Land Registry", "source_url": "https://www.gov.uk/government/collections/price-paid-data" } }
Statistics
/v1/property/price-paid/statistics
Waiting for request...
Aggregate statistics (average, median, min, max) with breakdown by property type for a given area.
curl -H "Authorization: Bearer YOUR_API_KEY" \ "https://api.govdata.dev/v1/property/price-paid/statistics?postcode=SW1A"
uri = URI("https://api.govdata.dev/v1/property/price-paid/statistics?postcode=SW1A") req = Net::HTTP::Get.new(uri) req["Authorization"] = "Bearer YOUR_API_KEY" res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |h| h.request(req) }
response = requests.get( "https://api.govdata.dev/v1/property/price-paid/statistics", headers={"Authorization": "Bearer YOUR_API_KEY"}, params={"postcode": "SW1A"} )
const url = new URL("https://api.govdata.dev/v1/property/price-paid/statistics"); url.searchParams.set("postcode", "SW1A"); const response = await fetch(url, { headers: { "Authorization": "Bearer YOUR_API_KEY" } });
Response
{ "data": { "area": "SW1A", "transaction_count": 342, "overall": { "average": 2145000, "median": 1875000, "min": 285000, "max": 18500000 }, "by_type": { "flat": { "average": 1650000, "median": 1200000, "count": 256 }, "terraced": { "average": 3200000, "median": 2900000, "count": 52 }, "detached": { "average": 8750000, "median": 7500000, "count": 12 }, "semi_detached": { "average": 4100000, "median": 3800000, "count": 22 } } }, "meta": { "api_version": "v1", "licence": "Open Government Licence v3.0", "source": "HM Land Registry", "source_url": "https://www.gov.uk/government/collections/price-paid-data" } }
Price paid data is sourced from HM Land Registry and updated monthly. Contains HM Land Registry data licensed under the Open Government Licence v3.0.
Data Coverage
| Source | HM Land Registry Price Paid Data |
| Date range | 1 January 1995 – present |
| Records | ~28M transactions |
| Updated | Monthly |
| Limitations | England and Wales only. Excludes commercial property, right-to-buy below market value, gifts, and transfers at zero value. |