Address lookup with a UPRN on every result.
Autocomplete and postcode search across 36.6 million addresses in Great Britain. Each match comes with its UPRN, so the next call can be the whole property.
Search 2 tokens · property from 5 tokens · 100 tokens = £1 · no subscription
What it is
Two ways to find an address
Type-ahead as the user types, or every address at a postcode for a dropdown. Both return the same thing: the address, and its UPRN.
What comes back
A UPRN on every result
Full address, postcode, town and the UPRN, the permanent ID that every other dataset we hold is keyed on. Search is cheap; the property is where the value is.
Who it's for
The first call in most integrations
Checkout and registration forms, property portals, postcode dropdowns, cleaning a customer list.
Three ways to use it
Type-ahead, dropdown, or a list
All three start with the same 2-token search.
Type-ahead
Suggest addresses as the user types. Store the UPRN when they pick one, and you never have to match a free-text address again.
Code example →Postcode dropdown
“Enter your postcode, pick your address.” One call returns every address at the postcode, ready for a select.
Code example →Clean a list
Run each address through search, keep the UPRN, then pull the fields you want for every row.
Batch guide →A real response
What the search returns
Free-text in, matches out, each with the UPRN. Abbreviations, missing postcodes and typos are handled. The token cost is in the response header.
GET /address/find/?q=63+harvey+lane+norwich
→ {
"suggestions": [
{
"uprn": 100090904564,
"address": "63 Harvey Lane, Norwich",
"postcode": "NR7 0AG"
}
],
"count": 1
}
X-Tokens-Charged: 2
Compared
Address lookup is where most tools stop.
Every address service gives you a formatted address. Some give you the UPRN. Ours gives you the property behind it, from the same key.
- ✓A UPRN on every resultNot a geocode or a delivery point: the permanent ID the whole property record is keyed on.
- ✓The property, one call laterType, rooms, EPC, title, last sale, risk, planning. Up to 38 data sets from the UPRN you just got.
- ✓Pay as you go2 tokens a search, no licence, no minimum.
- ✓Self-serveSign up, get a key, make a call. No demo, no contract.
Reference
More about address lookup
The two endpoints and their code, how address billing works, who uses address lookup, practical patterns, and the embeddable widget.
Two endpoints. One goal.
Instant UK address autocomplete and postcode search. 36.6 million addresses: typeahead that works in form fields, checkout flows, and property search UIs. Every result returns a UPRN for downstream enrichment. Address find and postcode cost 2 tokens each, retrieve costs 5 tokens, transparent token weights that reflect real licensing costs.
Use find for typeahead autocomplete (user types, suggestions appear). Use postcode to list all addresses at a postcode (user selects from a dropdown). Both cost 2 tokens each: reflecting search licensing costs.
GET /address/find/ — autocomplete
Request: API key required
curl -G "https://api.homedata.co.uk/address/find/" \ -H "Authorization: Api-Key YOUR_API_KEY" \ --data-urlencode "q=10 Downing Street"
import requests
response = requests.get(
"https://api.homedata.co.uk/address/find/",
params={"q": "10 Downing Street"},
headers={"Authorization": "Api-Key YOUR_API_KEY"},
)
suggestions = response.json()["suggestions"]
for s in suggestions:
print(f"{s['address']} — UPRN {s['uprn']}")
const response = await fetch(
"https://api.homedata.co.uk/address/find/?q=10+Downing+Street",
{ headers: { Authorization: 'Api-Key YOUR_API_KEY' } }
);
const { suggestions } = await response.json();
suggestions.forEach(s =>
console.log(`${s.address} — UPRN ${s.uprn}`)
);
{
"suggestions": [
{
"uprn": 100023336956,
"address": "10 DOWNING STREET, LONDON, SW1A 2AA",
"postcode": "SW1A 2AA",
"town": "LONDON"
}
],
"count": 1
}
GET /address/postcode/{postcode}/ — postcode lookup
Request: API key required. Response truncated.
curl "https://api.homedata.co.uk/address/postcode/SW1A2AA/" \ -H "Authorization: Api-Key YOUR_API_KEY"
import requests
response = requests.get(
"https://api.homedata.co.uk/address/postcode/SW1A2AA/",
headers={"Authorization": "Api-Key YOUR_API_KEY"},
)
data = response.json()
print(f"{data['count']} addresses at {data['postcode']}")
const response = await fetch(
"https://api.homedata.co.uk/address/postcode/SW1A2AA/",
{ headers: { Authorization: 'Api-Key YOUR_API_KEY' } }
);
const data = await response.json();
console.log(`${data.count} addresses at ${data.postcode}`);
{
"postcode": "SW1A 2AA",
"count": 7,
"addresses": [
{
"uprn": 100023336956,
"address": "10 DOWNING STREET, LONDON",
"building_number": "10",
"street": "DOWNING STREET",
"town": "LONDON"
}
]
}
How address billing works
We follow the same model as Loqate and Stripe: search is lightweight, retrieve is where the value is. Address find costs 2 tokens and takes the same API key as every other endpoint. When the user selects an address and you call retrieve to get the enriched property data, that costs 5 tokens, reflecting the Royal Mail PAF and OS licensing behind every response.
Address find and postcode lookup cost 2 tokens each. Retrieve costs 5 tokens (Royal Mail PAF licensing). A typical find-then-retrieve workflow costs 7 tokens. See call weights →
The UPRN returned in every search result is the key that unlocks everything else: EPC rating, floor area, flood risk, solar potential, price history, and 40+ more data points. All of those are billed retrieve calls.
This is the same model as Stripe (publishable key for checkout, secret key for charges) or Mapbox (free tiles, paid geocoding). Pay as you go. Pay when you need data.
Who uses address lookup
Address autocomplete is the front door, the first API call in every integration.
Checkout & registration forms
Replace manual address entry with typeahead autocomplete. User types "10 Down…" and selects their full address from a dropdown. Reduce form abandonment, eliminate typos, and get a verified UPRN for every submission.
input → /find/?q=... → select → populate form fields
Property search portals
Build a "search by address" bar with instant results. Each suggestion includes the UPRN: use it to pull property details, photos, pricing, and risk data from the retrieve and enrichment endpoints.
search bar → /find/?q=... → select → /retrieve/{uprn}/
Postcode dropdown selectors
Classic "enter postcode, pick your address" pattern. The postcode endpoint returns all addresses at a postcode with building name, number, and street, ready for a <select> dropdown without any data transformation.
postcode input → /postcode/{code}/ → dropdown → selected UPRN
Data enrichment pipelines
Resolve address strings to UPRNs in batch. Take a CSV of addresses, run each through /find/, capture the UPRN, then enrich via /property/{uprn}/base/ with property type, EPC, floor area, and sold prices. No manual matching.
csv addresses → /find/ → UPRNs → /base/
How we compare
Address lookup is just the starting point. What happens after the user selects an address is where we're different.
- Address autocomplete only (getAddress, Postcodes.io): address search and postcode lookup; no UPRN, no property data, no EPC, price or risk.
- Homedata (address + property intelligence): address search (2 tokens), postcode lookup (2 tokens), a UPRN on every result, 40+ property fields via retrieve, and EPC, risk, solar and sold prices.
- Enterprise PAF/UPRN (Loqate, Ordnance Survey): address search, UPRN and geocoding; no property data; £5k+/year licence.
Practical patterns
Common integration patterns, all start with a lightweight address search (2 tokens).
Debounced typeahead in JavaScript
Standard pattern for a form input with autocomplete suggestions. Debounce at 200ms to avoid hammering the API on every keystroke.
let timer;
document.getElementById('address-input').addEventListener('input', (e) => {
clearTimeout(timer);
timer = setTimeout(async () => {
if (e.target.value.length < 2) return;
const res = await fetch(
`https://api.homedata.co.uk/address/find/?q=${encodeURIComponent(e.target.value)}`,
{ headers: { Authorization: 'Api-Key YOUR_API_KEY' } }
);
const { suggestions } = await res.json();
// Render suggestions as dropdown items
// On select: store suggestion.uprn for enrichment
}, 200);
});
Address → EPC → flood risk in three calls
Complete property intelligence from a single address search.
# 1. Find address (2 tokens) curl -G "https://api.homedata.co.uk/address/find/" --data-urlencode "q=10 Downing Street" \ -H "Authorization: Api-Key YOUR_API_KEY" # → uprn: 100023336956 # 2. Get EPC (API key required) curl "https://api.homedata.co.uk/epc-checker/100023336956/" \ -H "Authorization: Api-Key YOUR_API_KEY" # 3. Get flood risk (API key required) curl -G "https://api.homedata.co.uk/risks/flood/" \ --data-urlencode "uprn=100023336956" \ -H "Authorization: Api-Key YOUR_API_KEY"
Or just embed it
Don't want to build the autocomplete UI yourself? Use our pre-built address widget: one script tag, zero dependencies, works on any website. Configurable field mapping, custom styling, and callbacks for form integration.
Try it in your terminal
Try address search right now in your terminal. When you need property data, sign up for a free key — no credit card. Calls are paid from your token wallet: 100 tokens = £1.
curl "https://api.homedata.co.uk/address/find/?q=10+Downing+Street" \ -H "Authorization: Api-Key YOUR_API_KEY"
Explore more property data APIs
Does it cover the whole UK?
Great Britain: England, Scotland and Wales, 36.6 million addresses. Northern Ireland uses a separate register and is not included.
What is a UPRN?
The Unique Property Reference Number, an ID of up to 12 digits given to every addressable place in Great Britain. It never changes, so it is the safest key to store. More on UPRNs →
Can I search by postcode alone?
Yes. The postcode call returns every address at that postcode with UPRNs, which is what a “pick your address” dropdown needs.
How many results does a search return?
Up to 50 matches by default, best first, and up to 100 if you ask for more with the limit parameter. Most searches with a house number and street resolve to one.
What’s the difference between address find and property retrieve?
Address find searches a postcode or free-text address and returns matching addresses with the property identifier needed for the next call. Property retrieve uses that identifier to return data for one property. The address bundle returns address fields; base, core and complete bundles progressively add property, listing, sale, risk and comparable data.
Start with a search.
Search is 2 tokens, the property from 5. 100 tokens = £1, no subscription.