# OpenProperties data guide

OpenProperties serves HM Land Registry's Price Paid Data under the Open
Government Licence v3.0. This guide explains what it holds, how records are
identified, where to start and how far to rely on each part. It is written
for AI assistants using the OpenProperties MCP server at https://openproperties.uk/mcp, and for
anyone else reading the data.

## What it holds

Every sale of a residential property in England and Wales recorded in HM
Land Registry's Price Paid Data, from 1 January 1995 to the latest monthly
release: price, date, address, property type, tenure, whether it was a new
build, and its category. Beside the sales:

- **Properties**: the sales recorded at one normalised address, with their
  count and first and last sale.
- **Locations**: the centre of each current postcode, from OS Code-Point
  Open, for properties and for find_nearby_sales.
- **Price statistics** for a full postcode, a postcode sector ("SW4 6", a few
  hundred homes), a postcode district ("SW4") or one street in it.

The codes in the data:

- `property_type`: D Detached, S Semi-detached, T Terraced, F Flat/maisonette, O Other
- `duration`: F Freehold, L Leasehold, U Unknown
- `ppd_category_type`: A Standard price paid entry, B Additional price paid entry

Not held:

- Sales in Scotland and Northern Ireland
- Transfers that were not sales at full market value
- Floor area, bedrooms, condition, plot size or any other description of the home
- Buyers' and sellers' names, and mortgages
- Asking prices, valuations and rents
- A position for each building: only the centre of its postcode
- UPRNs and INSPIRE ids, which are archived from the monthly look-up tables but not served

When each source last loaded, and the counts, are in https://openproperties.uk/mcp/status.json
and the get_dataset_status tool.

## Identifiers

Price Paid Data has no property identifier: each row is one sale. Sales that
share a normalised address are treated as one property, identified by its
**address path**: postcode district, street, house, and flat where there is
one.

- `sw4/stonhouse-street/165`
- `sw1a/downing-street/10/flat-2`

Each part is lowercase with runs of punctuation and spaces as one hyphen.
The district is used rather than the full postcode because HM Land Registry
records the postcode as it was at the sale and never revises it; keying on
the full postcode would split a house whose postcode was reorganised between
two sales. A property therefore lists every postcode its sales were recorded
under.

A **sale** is identified by HM Land Registry's transaction id, a GUID such as
C8A3A576-AB04-0425-E053-6C04A8C0947B, with or without braces. About 1.7% of
sales have no postcode, street or house number recorded, and so belong to no
property; they are still reachable by transaction id (get_sale) and by full
postcode (list_sales).

Every level of the address hierarchy is a page, and every page is also JSON
at the same URL with `.json` appended, with no key and no registration:

- https://openproperties.uk/sw4: every street in the district
- https://openproperties.uk/sw4/stonhouse-street: every property on the street
- https://openproperties.uk/sw4/stonhouse-street/165: one property's sales
- https://openproperties.uk/sw4/stonhouse-street/165/{transaction id}: one sale

The JSON URLs are this server's resource URIs. The search and fetch tools
use ids of the form `property:sw4/stonhouse-street/165`,
`sale:{transaction id}`, `street:sw4/stonhouse-street` and `district:SW4`.

## Where to start

- A specific address: lookup_address, or search_properties with its postcode;
  then get_property for the full sale history.
- An area (a full postcode, a sector or a district, optionally one street):
  get_price_statistics for trends, list_sales for individual sales.
- Around a point, across district boundaries: find_nearby_sales.
- Browsing: list_districts, list_district_streets, list_street_properties.
- Freshness and coverage: get_dataset_status.

Tools: `search_properties`, `lookup_address`, `get_property`, `get_sale`, `list_sales`, `find_nearby_sales`, `get_price_statistics`, `list_districts`, `list_district_streets`, `list_street_properties`, `get_dataset_status`, `search`, `fetch`, `send_feedback`. Prompts: `property_history`, `area_report`, `compare_areas`, `recent_comparables`.

Lists are capped and paged: pass `next_cursor` back as `cursor` for the next
page. A postcode district is the widest area any tool takes. Each database
query may run for 8 seconds, and a
request that is too broad returns advice on how to narrow it. At most
2 heavy requests (search_properties, search,
list_sales over a sector or district, find_nearby_sales and
get_price_statistics) run at once across the site, so a busy reply means try
again in a few seconds. Tool results are capped at
60,000 characters.

## Caveats

- England and Wales only. Scotland and Northern Ireland are not covered.
- Only sales for value lodged with HM Land Registry are recorded. Transfers that are not sales at full market value (gifts, transfers on divorce, right-to-buy sales at a discount, transfers under a court order) are not.
- Prices are whole pounds as recorded, not adjusted for inflation.
- A property is the set of sales recorded at one normalised address. It is an exact match on the address as recorded, so a re-spelling between two sales splits one building into two properties, and two dwellings recorded identically merge into one.
- Category B entries (from 14 October 2013) are repossessions, buy-to-let purchases identifiable by a mortgage, and transfers to non-private buyers such as companies. They can distort averages, so the statistics leave them out unless asked.
- Coordinates are the centre of the postcode (OS Code-Point Open), which usually covers a dozen or more addresses, never the building itself.
- A sale appears only once it has been registered, which can take weeks or months after completion, so the most recent months are always incomplete.

## Licence and attribution

The data is HM Land Registry Price Paid Data, reused under the Open
Government Licence v3.0 (https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/). Anything built with it
should give this attribution:

Contains HM Land Registry data © Crown copyright and database right. This data is licensed under the Open Government Licence v3.0.

Where a postcode location is used, add: Contains OS data © Crown copyright
and database right. Every tool result carries the attribution that applies
to it.

OpenProperties is an independent project and is not affiliated with HM Land
Registry. HM Land Registry's own records are the authoritative source: where
anything here differs from them, they take precedence.

## Feedback

send_feedback lets an assistant send the people who run OpenProperties a short note about these tools: something no tool could answer, an answer that was wrong or confusing, or an error that did not say what would work. Its description tells the assistant to show you the note and send it only once you agree.

What is kept: the note, its kind, the tool it names, the client's name and version, the protocol and server versions, and the time. Never your IP address: only a keyed hash of it, to limit each address to 10 notes a day. A note holding an email address, an IP address or a web address with a query string is refused. Notes are read only by the people who run OpenProperties, and deleted after 365 days.

## OpenCommons

OpenProperties is one of the OpenCommons sites. Their MCP servers keep one contract (identity, paging, results, errors and feedback), so an assistant connected to more than one finds the same conventions in each. Where a record has a counterpart on another of the sites, its result links to it under external_links.

- OpenCharities, UK charities from the three regulators' registers: England and Wales, Scotland and Northern Ireland: https://opencharities.uk/mcp
- OpenCompanies, UK companies, officers, owners and accounts from Companies House: https://opencompanies.uk/mcp
- OpenPostcodes, every live UK postcode from the ONS Postcode Directory, with its location, geographies and nearest services: https://openpostcodes.uk/mcp
