Skip to main content
29M UK properties, one API call. Get your API key →
API Documentation

UK property data,
built for developers

29 million properties. EPC ratings, sold prices, environmental risks, comparables, deprivation data. One API, consistent JSON, instant access.

Homedata holds the full listing-event chain (Added, Reduced, Sold STC, Withdrawn, Re-listed) UPRN-matched and address-matched across 30 years of history. Listing history is an enterprise dataset, arranged per customer.

Pay as you go: 100 tokens = £1, first top-up matched 100%.

GET /properties/10093609154/
// 200 OK
{
  "uprn": 10093609154,
  "full_address": "APARTMENT 1009, CHAPMAN HOUSE…",
  "postcode": "M3 5FH",
  "current_energy_efficiency": 84,
  "potential_energy_efficiency": 84,
  "last_epc_date": "2020-07-28",
  "last_sold_date": "2019-11-15",
  "construction_age_band": "2007-2011",
  "epc_floor_area": 56.0,
  "habitable_rooms": 3
}
29M
UK properties covered
30 yrs
Price history

Quickstart

From zero to first API call in under 5 minutes.

1

Create a free account

Sign up at homedata.co.uk/register. Your API key is generated instantly, no approval needed, no credit card required.

Create Free Account →
2

Copy your API key

Find your API key in your dashboard. All authenticated requests use the Api-Key header format.

HTTP header
Authorization: Api-Key hd_xxxxxxxxxxxxxxxxxxxx
3

Make your first request

Look up a property's EPC rating by its UPRN. Every addressable property in Great Britain has a UPRN: a unique number of up to 12 digits. The EPC endpoint takes the same API key as every other endpoint, and a lookup costs one token.

cURL
# EPC checker: 1 token
curl https://api.homedata.co.uk/epc-checker/100023336956/ \
  -H "Authorization: Api-Key YOUR_API_KEY"

# Every endpoint takes the same key
curl https://api.homedata.co.uk/properties/100023336956/ \
  -H "Authorization: Api-Key YOUR_API_KEY"
Python
import requests

API_KEY = "YOUR_API_KEY"
UPRN = "10093609154"

# EPC lookup: 1 token
headers = {"Authorization": f"Api-Key {API_KEY}"}
epc = requests.get(
    f"https://api.homedata.co.uk/epc-checker/{UPRN}/",
    headers=headers
).json()

print(f"EPC: {epc['current_energy_efficiency']}/100")
# → EPC: 84/100

# Every endpoint takes the same key
property_data = requests.get(
    f"https://api.homedata.co.uk/properties/{UPRN}/",
    headers=headers
).json()
JavaScript
const API_KEY = "YOUR_API_KEY";
const UPRN = "10093609154";
const BASE = "https://api.homedata.co.uk";

// EPC lookup: 1 token
const headers = { "Authorization": `Api-Key ${API_KEY}` };
const epc = await fetch(`${BASE}/epc-checker/${UPRN}/`, { headers })
  .then(r => r.json());

console.log(`EPC: ${epc.current_energy_efficiency}/100`);
// → EPC: 84/100

// Every endpoint takes the same key
const property = await fetch(`${BASE}/properties/${UPRN}/`, { headers })
  .then(r => r.json());

Not sure what a UPRN is? Read our UPRN guide →

Drop-in widgets

Or skip the code: embed a widget.

Browser-callable public keys with origin lock + scope. Drop two lines of HTML on a property page and render flood risk, EPC, crime stats or nearby schools: pulling from the same Homedata data API, no key in your client code.

your-page.html
<div data-homedata-flood-risk
     data-uprn="100023336956"></div>

<script src="https://homedata.co.uk/js/homedata-flood-risk.js"
        data-key="wt_your_public_key_here"
        defer></script>

What you can build

Every endpoint returns clean JSON with consistent error handling. All endpoints are versioned and backward-compatible.

EPC & energy

API key

Current and potential energy ratings, efficiency scores, floor area, construction age band, and certificate date.

GET /epc-checker/{uprn}/
View data →

Property Data

API key

Type, bedrooms, tenure, floor area, construction age, title data: bundled in one call via the Property tiers (Base / Core / Complete).

GET /property/{uprn}/core/
View data →

Comparables

API key

Nearest comparable sales by proximity. Filter by beds, type, date range. Arranged per customer rather than sold self-serve.

GET /comparables/{uprn}/
View data →

Environmental risks

API key

Flood, radon, noise, landfill, coal mining, air quality, invasive plants.

GET /risks/{risk_type}/
View data →

Price trends

API key

Monthly median asking prices by outcode with volatility scoring. 12-month rolling window.

GET /price_trends/{outcode}/
View data →

Deprivation index

API key

IMD data for any postcode in England. 10 domains: income, employment, health, crime, and more.

GET /deprivation/?postcode=
View data →

Live listings

Enterprise

Properties on the market right now, including price reductions as they happen. Arranged per customer rather than sold self-serve.

Talk to us →

Agent statistics

API key

Estate agent performance: listings, sales, average prices, time on market by area.

GET /agent_stats/
View data →

AVM valuations

API key

Sale price or monthly rent estimate from time-adjusted comparables, with a confidence score and the full evidence pack.

GET /valuations/estimate/
View docs →

Council tax

API key

Band + billing authority, or the full bundle with the yearly and monthly charge in £. England, Scotland and Wales.

GET /council_tax/{uprn}/
View docs →

Local area & amenities

API key

Nearby amenities (food, transport, green spaces…), NHS healthcare (GPs, dentists, pharmacies, hospitals), fuel and EV chargers.

GET /amenities/ · /healthcare/ · /fuel-stations/
View docs →

Planning applications

API key

Planning application history near a postcode or coordinate: references, statuses, decisions and dates.

GET /planning/search/
View docs →

Interactive API reference

OpenAPI 3.1

Full interactive API reference. Try endpoints live, generate client code in any language from the OpenAPI spec.

/docs/api-reference
Open API Reference →

Understanding UPRNs

Most of our API endpoints use a UPRN (Unique Property Reference Number): a 12-digit number that uniquely identifies every addressable location in the UK. There are 40 million of them.

If you have addresses but not UPRNs, use our address matching endpoint to convert them, or query the UPRN lookup tool to find test values.

Stable: a UPRN never changes even if the address does
Universal: works across all Homedata endpoints
Precise: uniquely identifies a flat within a converted house
UPRN → Address lookup
# Search for an address (2 tokens)
curl "https://api.homedata.co.uk/address/find/?q=10+Downing+Street" \
  -H "Authorization: Api-Key YOUR_API_KEY"

// Returns:
{
  "suggestions": [{
    "uprn": 100023336956,
    "address": "PRIME MINISTER & FIRST LORD OF THE TREASURY, 10 DOWNING STREET, LONDON, SW1A 2AA",
    "postcode": "SW1A 2AA",
    "town": "London"
  }],
  "count": 1
}

Authentication

All authenticated endpoints use Api-Key authentication. Pass your API key in the Authorization header.

Request format

Authorization: Api-Key hd_xxxxxxxxxxxxxxxxxxxx

Error responses

401 Missing or invalid API key
429 Rate limit exceeded: slow down and retry with backoff
404 Property not found for the given UPRN

Token weights

Every account reaches every endpoint. Each request spends its published weight from your token balance (100 tokens = £1):

Endpoint Tokens
Most lookups 1
Address find 2
Address retrieve 5
Comparables 10
Valuation 25

All token weights and monthly bonus tokens: See pricing →

Need something custom?

For large organisations, we offer dedicated infrastructure, white-label data feeds, custom rate limits, and bespoke endpoint development. Get in touch to discuss your requirements.

Why we built this

Built out of necessity

Homedata started because UK property data is a mess. To assemble one usable property record we were stitching together half a dozen obscure APIs: one for addresses, another for sold prices, separate ones for EPC, environmental risk, planning, council tax. Each had its own auth, its own rate limits, its own field names, its own update cadence.

Market data, the most useful part, was basically non-existent.

Listing events, days on market, price reductions, withdrawal patterns, sold-vs-asking ratios, the signals that actually move a deal, weren't in any of the public feeds. And the bits that did exist sat behind silently inconsistent UPRN matching: the same property could be a different identifier in two feeds, or missing entirely from one. Records didn't line up. Fields conflicted. Joining a sold price to an EPC to a flood-risk score reliably took weeks of glue code per integration, and the joins broke quietly when an upstream schema shifted.

We built Homedata to fix that for ourselves. One licensed feed, one canonical UPRN, every record matched and reconciled, every endpoint returning the same shape. Pay-as-you-go pricing is here because we wanted other developers to skip the work we had to do.

The Homedata Team Get your API key

Start building today

Pay as you go: 100 tokens = £1, no subscription needed. A monthly subscription earns up to 75% bonus tokens when you scale.