- Data
- MCP server
- Property record
- Sold-price history
Sold-price history
property_historyThe sale history of one property with per-sale detail and optional drill-downs; the readable version of the registry rows. Free.
Same call over REST
Property history/v1/property/{uprn}/historyNot connected yet? Connect your assistant. Sign in with your MarketCode account; no API key needed.
Reference
What property_history answers
The story of a property's sales. Each registered sale with its detail, in order, so a reader can see when it changed hands, for how much, how long each owner held it and what each sale implies against the market of its day. max_drilldowns bounds how much per-sale detail is fetched. It is free, because the source is HM Land Registry Price Paid Data under the Open Government Licence.
transactions_by_uprn returns the same sales as raw registry rows; use that when you only need the rows and this when you want them explained.
Reference
When to use it, and when not to
Use it for the narrative a report needs: the last sale as the anchor for a valuation, the holding period behind a nominal gain, a pattern of quick resales that hints at a flip or a problem. Carry an old sale to today with market_index_series. For the current estimated value against the last sale in one number use equity_estimate; for how the property was marketed between sales use listing_history.
Inputs
Before you call it
A UPRN. address_autocomplete (free) narrows the address; address_resolve (8 credits) returns the UPRN.
- uprn
- A UPRN is the Unique Property Reference Number every UK address carries. Narrow the address with address_autocomplete, which is free, then address_resolve returns the UPRN for 8 credits. property_summary and address_by_postcode return UPRNs too.
Example
An example call to property_history
Use the MarketCode tool property_history with {"uprn":"200003443835"} and show me the result.{
"uprn": "200003443835",
"country": "UK",
"data": {
"uprn": 200003443835,
"count": 0,
"transactions": [],
"cached": false,
"time_ms": 4.1
},
"credits_charged": 0
}A real response, captured from production and trimmed: arrays to three items, long strings shortened, volatile keys dropped.
Inputs
Arguments property_history takes
| Name | Type | Required | Description |
|---|---|---|---|
| uprn | string | Yes | |
| max_drilldowns | integer | No | Default: 8 |
Response
What comes back
| Field | Type | Example |
|---|---|---|
| uprn | string | 200003443835 |
| country | string | UK |
| data | object | |
| data.uprn | integer | 200003443835 |
| data.count | integer | 0 |
| data.transactions | array | |
| data.cached | boolean | false |
| data.time_ms | number | 4.1 |
| credits_charged | integer | 0 |
Fields observed in the example response above; a field the example did not exercise is not listed.
Reference
Things that catch people out
- No history is a real answer. A property last sold before 1995, or never sold, or held by a company since it was built, has no Price Paid rows. The response says so.
- Category B sales are not market prices. Transfers under a power of sale, right-to-buy and below-market transfers are in the registry and marked as such. Read the category before treating a price as evidence.
- Registration lags completion. The most recent sale may not be registered yet; a sale completed weeks ago can be missing and arrive next month.
- A new-build first sale is not a comparable for the resale market. The registry marks new builds; the first sale of a new flat carries a premium the second does not.
Usage
How to run property_history in your assistant
Ask your assistant in plain English, for example:
"Use the MarketCode tool property_history for <address or area>.
Show the result and the credits charged."
The arguments the assistant will send, for the example on this page:
{"uprn":"200003443835"}The connect steps for Claude, ChatGPT, Codex, Cursor and Claude Code are on the MCP page.
Skills
Skills that use property_history
- Property research: A sourced answer to any UK property question: the right tool for the job, the credit cost stated first, the wording rules that keep an estimate an estimate.
- Valuation report: An indicative valuation for one address: the range, the comparables and adjustments, the index position, the EPC, flood and planning context, and the reasoning, with every figure cited to the tool it came from.
- Due diligence report: A property due diligence report: title and ownership, history, EPC and council tax, flood and designations, nearby activity, cross-source disagreements and the cross-reference findings that join them, with a traffic light.
Price and licence
What it costs, and where the data comes from
property_history is free over MCP and over REST, and the two surfaces share one credit balance. Free calls need a signed-in account or an API key and appear in your usage, but they never touch your balance.
Credits are granted on sign-up and bought in packs; the pricing page lists every call.
Sources
- HM Land Registry
Price Paid Data
Open Government Licence v3 · England and Wales
Related
Tools used with property_history
- Registered sales for a propertyFree
transactions_by_uprnAll HMLR Price Paid records joined to this UPRN, newest first.Pairs with this - House price index seriesFree
market_index_seriesThe published house-price INDEX for one postcode district or local authority: the level per month (base period = 100), the forecast tail flagged, and provenance saying how the index was built.Pairs with this - Equity gain estimateFree
equity_estimateCurrent estimated value against the last recorded sale: gain in pounds and percent, and how long it has been held.Pairs with this - Listing history for a property3 credits
listing_historyEvery marketing snapshot for a property: asking price over time, price reductions, days listed, status changes, agent, image count and whether it had a floor plan.Pairs with this - Commercial property report: RV, indexes, yield, owner2 credits
commercial_propertyThe commercial property report, by UPRN or by VOA UARN: the hereditament as the 2026 rating list describes it (rateable value, sector, description), the sector's rent index across the 2010/2017/2023/2026 lists and its capital index (national, plus the local authority where one exists), an income-basis value that capitalises the RV at the district's commercial auction net yield — with the yield's receipt, and `not_available` where the district published none — the auction history at the address, the district's commercial auction market by quarter, the registered owner and the lease. Blocks that cannot be derived today say `not_available` with the reason (the RV history per hereditament; the VOA measured area). RV is a rating measure at the antecedent valuation date, not passing rent — say so when you quote the income-basis figure. UK only.Same category - Council tax bandFree
council_tax_bandVOA council tax band for a property, from the official list.Same category
Glossary
Terms used here
- Price Paid Data: HM Land Registry's record of every registered residential sale in England and Wales since 1995: price, date, address, type, tenure and whether it was a standard market sale.
- Comparable (comp): A recent sale or listing of a similar property nearby, used to support or challenge a valuation; MarketCode draws them from the same building and street first.
- Tenure (freehold and leasehold): How a property is held: freehold outright, or leasehold for a fixed term under a lease from the freeholder; recorded on every registered sale and every title.
FAQ
Questions about property_history
How much does `property_history` cost?
+
property_history is free over MCP and over REST, and the two surfaces share one credit balance. Free calls need a signed-in account or an API key and appear in your usage, but they never touch your balance.
Do I need to resolve the address first?
+
Yes. property_history takes a UPRN, not an address. Start with address_autocomplete (free) to narrow the address, then address_resolve (8 credits) to get the UPRN. An assistant with the MarketCode skills installed does both steps on its own.
Which assistants can run `property_history`?
+
Any MCP client: Claude (claude.ai, Claude Desktop, Claude Code), ChatGPT in developer mode, Codex and Cursor, each documented on the MCP page. You sign in with your MarketCode account over OAuth; there is no key to paste, and the connection is read-only.
Where does the data come from?
+
Read from HM Land Registry price paid data. Coverage is England and Wales.
Does `property_history` change anything?
+
No. The tool is annotated read-only on the server, so it never writes to your data or ours and an assistant can call it without a confirmation step.
What do the drill-downs add?
+
Per-sale context the raw row lacks: what the property's attributes were around that sale where the platform can say, and how the price sat against the area at the time. max_drilldowns caps how many sales are expanded.
How do I adjust an old sale to today?
+
Multiply by the ratio of index levels from market_index_series for the property's district or authority: price today = price then × index now / index then. The valuation's back-series does the same thing with the price-per-square-metre index.
Why does the history differ from a portal's sold-price page?
+
Portals show the same registry data, sometimes with a lag and occasionally with a mismatched address. Where the two disagree, the registry row here is the record; the portal's listing history is in listing_history.
Try property_history in your assistant.
30-minute call. We'll connect your assistant live on a real address.