Free UK land data API
Sold prices, land guide values, registered parcels and planning constraints for any point in England. No key, no sign-up, JSON in, attribution out.
We built this for developers, researchers and AI agents that need honest UK land data and keep ending up with whichever source has the most aggressive marketing. It is the same data that powers our Plot Reports and valuation tool: HM Land Registry price-paid data, INSPIRE polygons and planning.data.gov.uk designations, all Open Government Licence, with our own calculations on top.
github.com/BuyLandUK/land-data-api
OpenAPI spec, README documentation and runnable examples in curl, Node and Python.
github.com/BuyLandUK/land-data-mcp
MCP server for Claude, Cursor and other assistants: npx -y github:BuyLandUK/land-data-mcp
- No API key. Rate limit 120 requests per minute per IP;
429withRetry-Afterbeyond that. - Attribution required. Every response carries
attributionandsource_url. Show the attribution and link to the source URL wherever the data is displayed. - Read-only, no SLA. Responses cache for 5 minutes. It is a free service run by a small company; if you need volume or a guarantee, talk to us.
- Machine-readable spec: /api/v1/openapi.json (OpenAPI 3.1). Site overview for LLMs: /llms.txt.
- Coverage: England for parcels and constraints; England and Wales for sold prices and values.
- Code: spec and examples at BuyLandUK/land-data-api; an MCP server for Claude, Cursor and other assistants at BuyLandUK/land-data-mcp.
GET /sold-prices
HM Land Registry price-paid sales at a postcode (or the nearest postcodes when there are none), each uprated to today's value with the UK House Price Index.
| postcode | required — any full UK postcode |
| limit | optional — 1 to 25, default 10 |
curl "https://buyland.co.uk/api/v1/sold-prices?postcode=CW5%207PX&limit=3"Example response
{
"postcode": "CW5 7PX",
"scope": "nearby",
"district": "Cheshire East",
"region": "North West",
"count": 3,
"sales": [
{
"price_paid": 250000,
"date": "May 2009",
"address": "Bridgemere Wildlife Park, Bridgemere",
"estimated_today": { "value": 412000, "uplift_pct": 64.8, "index_month": "2026-06", "region_index": "North West" }
}
],
"source_url": "https://buyland.co.uk/property-valuation?postcode=CW5%207PX",
"attribution": "Data provided by BuyLand.co.uk ... Open Government Licence v3.0."
}GET /land-value
A guide value range for a plot from regional per-acre rates, land type and planning status. Plots under 0.05 acres switch to the small-plot (adjacency) model.
| postcode | required |
| acres | required — 0.0001 to 10000 |
| land_type | optional — Agricultural (default), Woodland, Pasture, Equestrian, Residential Plot, Commercial, Mixed |
| planning | optional — true if residential planning permission exists |
| road_access | optional — true/false |
curl "https://buyland.co.uk/api/v1/land-value?postcode=GL7%205NX&acres=2.5&land_type=Pasture"Example response
{
"postcode": "GL7 5NX",
"acres": 2.5,
"land_type": "Pasture",
"planning": false,
"low": 21000,
"mid": 27000,
"high": 34000,
"price_per_acre": 10800,
"region": "South West",
"method": "regional-floor",
"factors": [{ "label": "Pasture in the South West", "impact": "" }],
"note": "Indicative guide value only. ...",
"source_url": "https://buyland.co.uk/valuation",
"attribution": "..."
}GET /property-value
An indicative value for a dwelling, from HM Land Registry sales at (or near) the postcode uprated to today with the UK House Price Index. Not a survey or mortgage valuation.
| postcode | required |
| bedrooms | optional — 1 to 6, default 3 |
| bathrooms | optional — 1 to 4, default 1 |
curl "https://buyland.co.uk/api/v1/property-value?postcode=CW5%207PX&bedrooms=4"Example response
{
"postcode": "CW5 7PX",
"bedrooms": 4,
"bathrooms": 1,
"found": true,
"low": 630000,
"mid": 700000,
"high": 770000,
"comparables_used": 2,
"comparables_scope": "postcode",
"district": "Cheshire East",
"region": "North West",
"method": "index-uprated-comparables",
"note": "Indicative value for a dwelling from local sold prices ...",
"source_url": "https://buyland.co.uk/property-valuation?postcode=CW5%207PX",
"attribution": "..."
}Land value or property value? Choosing the right one
The two valuation endpoints answer different questions and give very different numbers for the same postcode. /land-value prices the ground: bare fields, paddocks, woodland, plots. /property-value prices a dwelling: what a house or flat there sells for. Running the wrong one is the commonest way to get a wildly wrong answer.
- If you know the land type, decide directly: a house, flat or bungalow →
/property-value; field, paddock, woodland, garden strip, building plot →/land-value(withplanning=trueif consent exists). - If you only have a location, call
/parcelfirst. It returnsbuildings_count(mapped buildings inside the registered parcel) and asuggested_valuationfield that says which endpoint to use, plus the parcel'sarea_acresto pass to/land-value. - A house with grounds is both:
/property-valuefor the dwelling and/land-valuefor any land beyond a normal garden (roughly 0.4 acres). Don't add the two mechanically; the site's valuation tool handles that case. - Plots under 0.05 acres (garden slivers, verges) are priced on what they unlock for the neighbour, not per acre —
/land-valueswitches to that model automatically.
Both endpoints return method so you can tell a caller how the number was produced, and source_url for the page that explains it.
GET /parcel
The registered-land parcel (HM Land Registry INSPIRE polygon) containing a point, with area, simplified GeoJSON geometry, the number of mapped buildings inside it, and which valuation endpoint fits.
| lat | required — WGS84 latitude |
| lng | required — WGS84 longitude |
| postcode | optional — loads the local authority's parcels if we haven't cached that area yet |
curl "https://buyland.co.uk/api/v1/parcel?lat=53.0066&lng=-2.4257&postcode=CW5%207PX"Example response
{
"found": true,
"inspire_id": "20765559",
"area_sqm": 2501,
"area_acres": 0.618,
"centroid": { "lat": 53.00664, "lng": -2.42570 },
"buildings_count": 0,
"suggested_valuation": "land-value",
"geometry": { "type": "Polygon", "coordinates": [[[-2.4262, 53.0064], ...]] },
"note": "INSPIRE polygons show the indicative extent of a registered title, not the legal boundary. ...",
"source_url": "https://buyland.co.uk/report?lat=53.0066&lng=-2.4257",
"attribution": "..."
}GET /constraints
Which national planning designations intersect a small square around a point: flood zone, green belt, AONB, national park, conservation area, listed buildings, scheduled monuments, SSSI, ancient woodland, TPO zones, common land, Article 4 areas and the brownfield register. 13 of the 35 checks in a Plot Report.
| lat | required |
| lng | required |
| radius_m | optional — half-width of the square in metres, 5 to 250, default 25 |
curl "https://buyland.co.uk/api/v1/constraints?lat=51.2287&lng=-0.4000&radius_m=50"Example response
{
"lat": 51.2287,
"lng": -0.4,
"radius_m": 50,
"checks": [
{ "key": "flood_zone", "title": "Flood zone (rivers & sea)", "present": false, "entities": [] },
{ "key": "green_belt", "title": "Green belt", "present": true, "entities": [{ "name": "Mole Valley", "reference": "...", "dataset": "green-belt" }] },
{ "key": "aonb", "title": "National Landscape (AONB)", "present": true, "entities": [{ "name": "Surrey Hills", "reference": "...", "dataset": "area-of-outstanding-natural-beauty" }] },
{ "key": "sssi", "title": "SSSI", "present": true, "entities": [{ "name": "Hackhurst and White Downs SSSI", "reference": "...", "dataset": "site-of-special-scientific-interest" }] }
],
"flagged": ["green_belt", "aonb", "sssi"],
"note": "13 of the 35 checks in a BuyLand Plot Report ...",
"source_url": "https://buyland.co.uk/report?lat=51.2287&lng=-0.4",
"attribution": "..."
}Quick starts
JavaScript (browser or Node 18+):
const r = await fetch("https://buyland.co.uk/api/v1/sold-prices?postcode=SW1A%201AA");
const data = await r.json();
console.log(data.sales[0], data.attribution);Python:
import requests
r = requests.get("https://buyland.co.uk/api/v1/constraints", params={"lat": 51.2287, "lng": -0.4})
data = r.json()
print(data["flagged"], data["source_url"])For LLM tool use, point your agent at the OpenAPI spec:
https://buyland.co.uk/api/v1/openapi.jsonWhat is deliberately not here
Anything that costs a statutory fee. Official title registers, title plans and filed deeds are ordered through the site at cost (£7.50 per document, the HM Land Registry fee plus 50p) and never through this API. The full Plot Report (35 checks, planning history, access, structures, valuation, narrative) is likewise a product, not an endpoint: the constraints endpoint gives you the free third of it and links to the rest.
Attribution and licences
Sold prices contain HM Land Registry data © Crown copyright and database right 2026. Parcels are derived from HM Land Registry INSPIRE Index Polygons © Crown copyright and database rights. Designations come from planning.data.gov.uk (MHCLG and contributing bodies). All are licensed under the Open Government Licence v3.0. Valuations and constraint groupings are BuyLand's own work and are provided as indicative information, not advice.
Use the attribution string from each response, and link to its source_url. If you build something with this, we'd genuinely like to hear about it: info@buyland.co.uk.