Recent Comparable Sales for Any UK Property
Find the nearest comparable sales for any UK property. Pass a UPRN — get back nearby sold and listed properties ordered by geographic proximity, with sold price, bedrooms, property type, and days on market. Built for AVMs, valuations, and market analysis.
Free tier: 100 requests/month. No credit card required.
UPRN in. Comps out.
One request returns up to 200 comparable properties within 0.5 miles, ordered by distance. Filter by bedrooms, property type, or event type (sold / listed / all).
curl "https://api.homedata.co.uk/api/comparables/100022612238/" \ -H "Authorization: Api-Key YOUR_API_KEY" # Optional filters: # ?bedrooms=3&property_type=Terraced&count=10 # ?event_type=sold&start_date=2024-01-01
{
"reference_uprn": 100022612238,
"filters": {
"bedrooms": [3],
"property_type": ["Terraced"],
"count": 10,
"start_date": "2024-03-14",
"end_date": "2025-03-14",
"event_type": "all"
},
"comparables": [
{
"uprn": 100022677605,
"address": "14 Maple Street, M20 2BH",
"bedrooms": 3,
"property_type": "Terraced",
"distance_meters": 83.4,
"sold_let_date": "2024-11-08",
"sold_let_price": 312000,
"transaction_type": "Sale",
"is_complete": true,
"listing_price": null,
"latest_listing": null,
"latest_sale": {
"sold_let_date": "2024-11-08",
"sold_let_price": 312000,
"is_complete": true
}
}
// ... more comparables
],
"total_results": 8,
"response_time_seconds": 0.043
}
Response fields
Each comparable object contains sale and listing data where available.
Top-level
| Field | Type | Description |
|---|---|---|
| reference_uprn | integer | The reference property UPRN |
| filters | object | Applied filters (bedrooms, type, dates) |
| comparables | array | Nearby properties, ordered by distance |
| total_results | integer | Number of comparables returned |
| response_time_seconds | float | PostGIS query execution time in seconds |
Each comparable
| Field | Type | Description |
|---|---|---|
| uprn | integer | Unique Property Reference Number |
| address | string | Full address string |
| bedrooms | integer | Number of bedrooms |
| property_type | string | Detached / Semi-Detached / Terraced / Flat |
| distance_meters | float | Distance from reference property in metres |
| sold_let_date | date | Date of completion (null if listed only) |
| sold_let_price | integer | Achieved sale price in GBP |
| transaction_type | string | Sale or Rental |
| is_complete | boolean | true if sale has completed |
| listing_price | integer | null | Asking price if currently listed |
| latest_listing | object | null | Latest listing details (status, source) |
| latest_sale | object | null | Most recent sale record |
Query parameters
All parameters are optional. Combine freely.
| Parameter | Type | Default | Description |
|---|---|---|---|
| bedrooms | integer (repeatable) | — | Filter by bedrooms. Repeat for multiple: ?bedrooms=3&bedrooms=4 |
| property_type | string (repeatable) | — | Detached, Semi-Detached, Terraced, or Flat. Repeat for multiple. |
| count | integer | 20 | Number of comparables to return. Max 200. |
| start_date | date | 1 year ago | Start of date window (YYYY-MM-DD) |
| end_date | date | today | End of date window (YYYY-MM-DD) |
| event_type | string | all | all (sold or listed), sold (completions only), listed (new listings only) |
Who uses comparables data
Comparables are the foundation of any property valuation workflow.
Automated valuations
AVMs use nearby sold prices as the input signal. Our API returns pre-ranked comparables ready for a median or weighted model.
Mortgage underwriting
Lenders need evidence of market value. Comparable sold prices within 0.5 miles in the last 12 months is the standard RICS benchmark.
Estate agent tools
Instant comparable report at point of valuation. Show vendors supporting evidence for the asking price recommendation.
Property investment
Check recent sold prices before making an offer. Filter to matching property type and bedroom count for like-for-like comparison.
Practical patterns
Common integrations in production.
Calculate median comparable price
const data = await fetch(
`https://api.homedata.co.uk/api/comparables/${uprn}/?bedrooms=3&event_type=sold`,
{ headers: { "Authorization": "Api-Key YOUR_API_KEY" } }
).then(r => r.json());
const prices = data.comparables
.filter(c => c.sold_let_price)
.map(c => c.sold_let_price)
.sort((a, b) => a - b);
const mid = Math.floor(prices.length / 2);
const median = prices.length % 2
? prices[mid]
: (prices[mid - 1] + prices[mid]) / 2;
console.log(`Median comp price: £${median.toLocaleString()}`);
Two-step: address → comparables
# Step 1: resolve address to UPRN (2 calls — no auth needed)
curl -G "https://api.homedata.co.uk/api/address/find/" \
--data-urlencode "q=14 Maple Street M20"
# → { "suggestions": [{ "uprn": 100022612238, ... }] }
# Step 2: get comparables for that UPRN
curl "https://api.homedata.co.uk/api/comparables/100022612238/" \
-H "Authorization: Api-Key YOUR_API_KEY"
Get your free API key
100 requests/month on the free tier. No credit card. From signup to first comparable in under 5 minutes.