# UK Sold Property Prices — Land Registry & House Price Index (`kaz_kakyo/uk-property-data`) Actor

Sold house prices by postcode, street, town, or district from official HM Land Registry data. Monitor new sales on a schedule, pull a property's full sale history, and get monthly average-price statistics. No key, no scraping, no proxies.

- **URL**: https://apify.com/kaz\_kakyo/uk-property-data.md
- **Developed by:** [Heim AI](https://apify.com/kaz_kakyo) (community)
- **Categories:** Real estate, AI, Automation
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 sale founds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## UK Sold Property Prices — Land Registry Price Paid & House Price Index

**Official HM Land Registry open data — no API key, no scraping, no proxies, no proxy surcharges.** Sold house prices for England & Wales by postcode, postcode district, street, town, or county, back to 1995. Monitor new sales on a schedule, pull a single property's complete sale history, and get monthly average-price statistics for any UK region.

### What it does

| Mode | Input | Output |
|---|---|---|
| `sold-prices` | postcode(s), postcode district, town, district, or county + optional date/price/type filters | Individual sale transactions |
| `new-sales-monitor` | an area + `sinceDays` window | Latest recorded sales, newest first — built for schedules |
| `property-history` | one postcode + house number/name | Every recorded sale of that property since 1995 |
| `area-stats` | UKHPI region slug + month range | Monthly average price, MoM/YoY change, sales volume, HPI |

Every mode is keyless — nothing to set up.

### What it's for

- **Deal-flow monitoring (investors, agents, sourcers).** Run `new-sales-monitor` on a **monthly schedule** for your patch (`postcodeDistrict: "BS3"`). Land Registry publishes registrations around month-end, so each run delivers what actually sold and for how much, before portals surface it. Dedupe by `transactionId` downstream.
- **Comparables (surveyors, lenders, conveyancers).** `sold-prices` for a postcode or district with `fromDate` and `propertyTypes` returns real registered prices, not asking prices.
- **Valuation context.** `property-history` shows a house's every prior sale; `area-stats` overlays the official House Price Index trend for the region.

### Example input

```json
{
    "mode": "new-sales-monitor",
    "postcodeDistrict": "SW11",
    "sinceDays": 60,
    "minPrice": 300000,
    "propertyTypes": ["terraced", "flat"],
    "maxItems": 500
}
```

### Example output item

```json
{
    "type": "sale",
    "transactionId": "3B5CE842-3211-EE3A-E063-4804A8C0D6F1",
    "price": 268500,
    "currency": "GBP",
    "date": "2025-07-18",
    "propertyType": "terraced",
    "estateType": "freehold",
    "newBuild": false,
    "category": "standardPricePaidTransaction",
    "paon": "8",
    "street": "SAXON WAY",
    "town": "BATH",
    "district": "BATH AND NORTH EAST SOMERSET",
    "postcode": "BA2 8TR",
    "address": "8 SAXON WAY, PEASEDOWN ST JOHN, BATH, BA2 8TR",
    "url": "https://landregistry.data.gov.uk/data/ppi/transaction/3B5CE842-3211-EE3A-E063-4804A8C0D6F1/current"
}
```

### Pricing

Pay per event: `sale-found` per transaction record, `stats-month` per UKHPI month-region record. Failed lookups are never charged. Set `maxItems` to cap spend.

### Data sources, coverage & fair use

- [HM Land Registry Price Paid Data](https://www.gov.uk/government/collections/price-paid-data) — every residential sale registered in **England and Wales**, updated monthly. Scotland and Northern Ireland are not covered (separate registers).
- [UK House Price Index](https://landregistry.data.gov.uk/app/ukhpi) — official monthly statistics, published with a ~2 month lag.

Contains HM Land Registry data © Crown copyright and database right 2026. This data is licensed under the [Open Government Licence v3.0](https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/).

**Know the data's limits:** transactions appear when *registered*, typically 2 weeks to 2 months after completion — the monitor is for market intelligence, not same-day alerts. Price Paid Data excludes court-ordered transfers and some non-market sales; `category` distinguishes standard sales from additional-price-paid records (buy-to-let portfolios, repossessions). This actor is not affiliated with HM Land Registry.

***

*Found this useful? A review on the [actor page](https://apify.com/kaz_kakyo/uk-property-data) helps other people find it — and tells me what to build next. Hit a problem? [Open an issue](https://apify.com/kaz_kakyo/uk-property-data/issues) and I'll fix it fast.*

### Telemetry

Each run records one anonymous telemetry event to the developer's own storage: a salted hash of the caller account ID (never the raw ID), the run origin (e.g. web console vs API), and a timestamp. No inputs, results, or personal data are collected - this only measures adoption (distinct and returning users).

# Actor input Schema

## `mode` (type: `string`):

All modes are keyless — official HM Land Registry open data. `sold-prices` searches transactions by area; `new-sales-monitor` returns recent sales for scheduled runs; `property-history` returns every recorded sale of one property; `area-stats` returns monthly UK House Price Index figures.

## `postcodes` (type: `array`):

Full postcodes, e.g. `SW11 5HY`. Used by `sold-prices` and (single entry) `property-history`.

## `postcodeDistrict` (type: `string`):

Postcode district or sector prefix, e.g. `SW11` or `BS3` — matches every postcode in the district. Used by `sold-prices` and `new-sales-monitor`. District searches default to the last 5 years unless `fromDate` is set.

## `town` (type: `string`):

Town or city name as recorded by Land Registry, e.g. `BATH`, `MANCHESTER`.

## `district` (type: `string`):

E.g. `CITY OF WESTMINSTER`, `BATH AND NORTH EAST SOMERSET`.

## `county` (type: `string`):

E.g. `GREATER LONDON`, `DEVON`.

## `houseNumber` (type: `string`):

The PAON for `property-history` mode — house number (`8`) or name (`ROSE COTTAGE`). Combine with one entry in Postcodes.

## `fromDate` (type: `string`):

Earliest transaction date, `YYYY-MM-DD`. Price Paid data goes back to 1995.

## `toDate` (type: `string`):

Latest transaction date, `YYYY-MM-DD`.

## `sinceDays` (type: `integer`):

`new-sales-monitor`: how many days back to look (default 45). Land Registry publishes monthly, so schedule monthly and dedupe by `transactionId`.

## `minPrice` (type: `integer`):

Only transactions at or above this price.

## `maxPrice` (type: `integer`):

Only transactions at or below this price.

## `propertyTypes` (type: `array`):

Filter to: `detached`, `semi-detached`, `terraced`, `flat`, `other`. Empty = all types.

## `newBuildOnly` (type: `boolean`):

Only newly built properties.

## `region` (type: `string`):

`area-stats` region slug, e.g. `united-kingdom`, `england`, `city-of-westminster`, `bath-and-north-east-somerset`. Find slugs at landregistry.data.gov.uk/app/ukhpi.

## `statsFrom` (type: `string`):

`area-stats`: first month, `YYYY-MM`. Defaults to 12 months before the latest published month.

## `statsTo` (type: `string`):

`area-stats`: last month, `YYYY-MM`. UKHPI publishes with a ~2 month lag.

## `maxItems` (type: `integer`):

Maximum records returned per run. Keeps cost predictable.

## Actor input object example

```json
{
  "mode": "sold-prices",
  "sinceDays": 45,
  "newBuildOnly": false,
  "region": "united-kingdom",
  "maxItems": 100
}
```

# Actor output Schema

## `sales` (type: `string`):

No description

## `areaStats` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "region": "united-kingdom"
};

// Run the Actor and wait for it to finish
const run = await client.actor("kaz_kakyo/uk-property-data").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "region": "united-kingdom" }

# Run the Actor and wait for it to finish
run = client.actor("kaz_kakyo/uk-property-data").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "region": "united-kingdom"
}' |
apify call kaz_kakyo/uk-property-data --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=kaz_kakyo/uk-property-data",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/5pj4ejSVXEciquY25/builds/Aw1N6FccYebWT02c4/openapi.json
