50+ Attributes for Any UK Postcode — One API Call
Pass a UK postcode. Get back a complete area profile — ONS Census 2021 demographics, deprivation index, sold price history, nearby school count, public transport links, and broadband speed. All in one call, instead of five.
Free tier: 100 requests/month. No credit card required.
Five calls, reduced to one.
Building a property portal, mortgage app, or area comparison tool? You used to stitch together deprivation, crime, price trends, schools, transport, and broadband separately — six round-trips, six response schemas to parse.
The Postcode Profile endpoint bundles all of that into a single structured response. One call, consistent schema, cached at the postcode level.
curl "https://api.homedata.co.uk/api/postcode-profile/" \
-G \
--data-urlencode "postcode=SW1A 2AA" \
-H "Authorization: Api-Key YOUR_API_KEY"
{
"postcode": "SW1A 2AA",
"area": "City of Westminster",
"deprivation": {
"imd_rank": 26542,
"imd_decile": 9,
"income_score": 0.041,
"crime_score": 0.193
},
"crime": {
"monthly_avg": 4.2,
"rate_per_1000": 8.1,
"latest_month": "2024-11"
},
"property_prices": {
"avg_sale_price": 1240000,
"median_sale_price": 895000,
"transactions_12m": 47,
"currency": "GBP"
},
"schools": {
"within_1km": 6,
"ofsted_outstanding": 2,
"ofsted_good": 3
},
"transport": {
"stops_500m": 12,
"nearest_tube": "Westminster",
"nearest_rail": "Victoria"
},
"broadband": {
"avg_download_mbps": 148.3,
"full_fibre_available": true
},
"census": {
"source": "ONS Census 2021",
"msoa_code": "E02000001",
"tenure": {
"owned_outright_pct": 28.4,
"owned_mortgage_pct": 14.2,
"private_rented_pct": 47.1
},
"age_bands": {
"age_0_15_pct": 10.3,
"age_16_29_pct": 24.7,
"age_30_44_pct": 28.9
},
"ethnicity": {
"white_british_pct": 38.2,
"asian_pct": 14.6
},
"car_availability": {
"no_car_pct": 52.3,
"one_car_pct": 30.1
}
}
}
Built for area comparison use cases
One endpoint does the heavy lifting. You focus on the UI.
Property portals
Show area scores on listing pages — deprivation, transport, and schools at a glance. One call per listing, cached at the postcode level.
Mortgage & lending
Area risk scoring for underwriting. Deprivation, crime, and price trend data in a single structured payload. No stitching required.
Relocation tools
Compare areas side-by-side. School quality, commute links, safety scores, and price context — everything buyers ask about, pre-assembled.
Response fields
| Field | Type | Description |
|---|---|---|
| deprivation.imd_rank | integer | IMD 2019 national rank (1=most deprived, 32,844=least) |
| deprivation.imd_decile | integer | 1–10 decile (1=most deprived 10%) |
| crime.monthly_avg | float | Average monthly crime incidents at this location (Police UK) |
| property_prices.avg_sale_price | integer | Average sold price in this outcode over last 12 months (£) |
| schools.within_1km | integer | GIAS-registered schools within 1km of postcode centroid |
| schools.ofsted_outstanding | integer | Ofsted Outstanding-rated schools within 1km |
| transport.stops_500m | integer | NaPTAN public transport stops within 500m |
| broadband.avg_download_mbps | float | Ofcom median download speed for this postcode (Mbps) |
| broadband.full_fibre_available | boolean | Whether FTTP is available at this postcode |
| census.source | string | Data source: "ONS Census 2021" (England & Wales; null for Scotland) |
| census.msoa_code | string | ONS MSOA area code covering this postcode (e.g. E02000001) |
| census.tenure.*_pct | float | Tenure breakdown: owned outright, owned with mortgage, shared ownership, social rented, private rented, rent free (% of households) |
| census.age_bands.*_pct | float | Age distribution: 0–15, 16–29, 30–44, 45–64, 65+ (% of usual residents) |
| census.ethnicity.*_pct | float | Ethnic group breakdown: White British, White other, Mixed, Asian, Black, other (% of usual residents) |
| census.car_availability.*_pct | float | Household car ownership: no car, one car, two or more cars (% of households) |
| census.occupation_ns_sec.*_pct | float | NS-SeC occupation: managerial/professional, intermediate, routine/manual, never worked (% of residents 16+) |
Code examples
Python
import requests
res = requests.get(
"https://api.homedata.co.uk/api/postcode-profile/",
params={"postcode": "SW1A 2AA"},
headers={"Authorization": "Api-Key YOUR_API_KEY"}
)
profile = res.json()
print(profile["sold_prices"]["median_sold_price"])
print(profile["schools"]["total"])
# Census 2021 demographics
census = profile.get("census") or {}
print(census.get("tenure", {}).get("private_rented_pct"))
print(census.get("ethnicity", {}).get("white_british_pct"))
JavaScript
const res = await fetch(
"https://api.homedata.co.uk/api/postcode-profile/"
+ "?postcode=" + encodeURIComponent("SW1A 2AA"),
{ headers: { "Authorization": "Api-Key YOUR_API_KEY" } }
);
const profile = await res.json();
console.log(profile.transport.stops_500m);
Replace five API calls with one
Free tier included. No credit card. Takes two minutes to integrate.