# UK Sold House Prices: Land Registry Data (`digital_influx/uk-sold-house-prices`) Actor

Sold house prices in England and Wales from HM Land Registry: price, date, full address, property type, tenure and new build, for any postcode, town, district or county. Newest sales first, price stats per area, only-new mode for monthly tracking.

- **URL**: https://apify.com/digital_influx/uk-sold-house-prices.md
- **Developed by:** [Bruno Petrelli](https://apify.com/digital_influx) (community)
- **Categories:** Real estate, Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 sale saveds

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## UK Sold House Prices: Land Registry Data

Get the **sold prices of homes in England and Wales** for any postcode, town, district or county, straight from **HM Land Registry's Price Paid Data**, the official record of every residential sale since 1995. One row per sale: price, date, full address, property type, tenure and new build. Newest sales first, with the median and average price per area.

No login, no API key, no proxies: the data is open (Open Government Licence v3.0).

### Who uses it

- **Estate agents and valuers**: comparable sales (comps) for a street, a postcode or a town.
- **Property investors**: what homes really sold for, by type and tenure, before making an offer.
- **Proptech and data teams**: a clean feed of new sales every month for a model, a dashboard or a newsletter.
- **Researchers and journalists**: price trends for an area, from the official source.

### What you get

| Field | Example |
|---|---|
| `price` | 1200000 (pounds) |
| `date` | 2025-11-24, the date the sale completed |
| `address` | Flat 50 Princes Court, 88 Brompton Road, London, SW3 1ET |
| `saon`, `paon`, `street`, `locality`, `town`, `district`, `county`, `postcode`, `outwardCode` | The address in parts |
| `propertyType` | Detached, Semi-detached, Terraced, Flat or maisonette, Other |
| `tenure` | Freehold or Leasehold |
| `newBuild` | true for a newly built home |
| `transactionCategory` | Standard (a sale at market value) or Additional (repossessions, buy-to-let, sales to companies) |
| `area` | Which of your inputs found it |
| `landRegistryUrl` | The record on HM Land Registry's site |

The **OUTPUT** record of the run has, for each area: number of sales, median, average, minimum and maximum price, the median per property type, and the dates of the newest and oldest sale.

### Input

```json
{
  "postcodes": ["SW3"],
  "towns": ["Cambridge"],
  "maxSalesPerArea": 50
}
```

| Field | What it does |
|---|---|
| `postcodes` | Full postcodes (`SW1A 1AA`) or postcode districts (`SW3`, `M1`). |
| `towns`, `districts`, `counties` | Post towns (`MANCHESTER`), local authorities (`CITY OF WESTMINSTER`) or counties (`GREATER LONDON`), written as the Land Registry writes them. |
| `soldWithinMonths` | Sales of the last N months (default 12). Or set `fromDate` and `toDate` (YYYY-MM-DD) for any period since 1995. |
| `propertyTypes`, `minPrice`, `maxPrice`, `newBuild`, `tenure` | Filters. |
| `includeAdditionalTransactions` | Also repossessions, buy-to-let and sales to companies (off by default). |
| `maxSalesPerArea` | The newest N sales of each area. |
| `onlyNew` + `memoryName` | For scheduled runs: skip sales an earlier run already saved. A monthly schedule gives you the sales newly added to the register, including late ones. |

### Output example

```json
{
  "price": 1200000,
  "date": "2025-11-24",
  "address": "Flat 50 Princes Court, 88 Brompton Road, London, SW3 1ET",
  "saon": "Flat 50",
  "paon": "Princes Court, 88",
  "street": "Brompton Road",
  "town": "London",
  "district": "City of Westminster",
  "county": "Greater London",
  "postcode": "SW3 1ET",
  "outwardCode": "SW3",
  "propertyType": "Flat or maisonette",
  "newBuild": false,
  "tenure": "Leasehold",
  "transactionCategory": "Standard",
  "transactionId": "559C5AD5-5CBF-AFE3-E063-4804A8C004A4",
  "area": "SW3",
  "landRegistryUrl": "http://landregistry.data.gov.uk/data/ppi/transaction/559C5AD5-5CBF-AFE3-E063-4804A8C004A4/current"
}
```

### How much does it cost?

You pay per sale saved (see the Pricing tab): 1,000 sales cost about USD 1.50. Sales already saved by an earlier run and repeats are not charged. In the 12 months to October 2026, the SW3 postcode district had 171 standard sales; Cambridge had 190 in July 2026.

### Use it from AI agents (MCP)

Claude, ChatGPT, Cursor and any other MCP client can run this Actor as a tool: add `https://mcp.apify.com?tools=digital_influx/uk-sold-house-prices` as a remote MCP server and sign in with your Apify account. It is also one of the tools of US & UK Public Records MCP (`digital_influx/public-records-mcp`), by the same author, made for agents.

### Good to know

- **England and Wales only.** Scotland and Northern Ireland keep their own registers.
- **The newest month is incomplete.** Sales reach the register weeks after they complete, and HM Land Registry updates the data once a month (on the 20th working day). On 2026-10-01 the newest sales were from late August.
- **New builds arrive even later.** A newly built home is registered for the first time, which takes months: on 2026-10-01, Manchester had 89 new build sales in the last 12 months and none in the last 6. For new builds, ask for 12 months or more.
- **Big areas are read a month at a time.** A town, district or county is asked for month by month, newest first, until your cap is filled. The Land Registry's server is slow on big areas (a month of London flats takes about a minute), so for London use postcode districts or boroughs.
- **Spelling matters.** Towns, districts and counties must be written as the Land Registry writes them; a misspelt one finds nothing (the run summary says so).
- **Sale prices only.** No asking prices, rents, floor area or owner names.

### Licence and attribution

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

The address data in the Price Paid Data comes from Royal Mail and Ordnance Survey, who allow it to be used for personal and/or non-commercial use, or to display it to provide residential property price information services. For other uses, such as mailing lists, contact Royal Mail (address.management@royalmail.com). The attribution above is also in the OUTPUT record of every run.

### Personal data

The Price Paid Data has no names. Addresses and prices of homes are public under the licence above, for property price information. Do not use them to contact homeowners.

### Questions or ideas?

Open an issue on the Issues tab: we answer within a few days.

# Actor input Schema

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

Full postcodes (SW1A 1AA) or postcode districts (SW3, M1, SW1A). Each one is an area.

## `towns` (type: `array`):

Post towns as the Land Registry writes them (LONDON, MANCHESTER, CAMBRIDGE). Big towns are read a month at a time, newest first, until the cap per area is filled.

## `districts` (type: `array`):

Councils as the Land Registry writes them (CITY OF WESTMINSTER, LEEDS, BRISTOL, CITY OF).

## `counties` (type: `array`):

Counties as the Land Registry writes them (GREATER LONDON, KENT, WEST YORKSHIRE).

## `soldWithinMonths` (type: `integer`):

Sales of the last N months. The newest month is incomplete: sales reach the register weeks after they complete, and the data is updated monthly.

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

Instead of the months above: sales from this date (YYYY-MM-DD). Data starts in 1995.

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

Sales up to this date (YYYY-MM-DD). Empty = today.

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

Empty = all.

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

Empty = any.

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

Empty = any.

## `newBuild` (type: `string`):

New builds only, existing homes only, or both.

## `tenure` (type: `string`):

Freehold, leasehold or both.

## `includeAdditionalTransactions` (type: `boolean`):

Repossessions, buy-to-let mortgages and sales to companies (category B). Off = standard market sales only (category A).

## `maxSalesPerArea` (type: `integer`):

The newest sales of each area, up to this many (each one is charged).

## `onlyNew` (type: `boolean`):

For scheduled runs: skip sales an earlier run of yours (with the same memory key) already saved, so a monthly run gives you the sales newly added to the register, late ones included.

## `memoryName` (type: `string`):

Give each scheduled search its own key (letters, digits, dot, dash, underscore), so they do not share their memory.

## Actor input object example

```json
{
  "postcodes": [
    "SW3"
  ],
  "towns": [
    "Cambridge"
  ],
  "soldWithinMonths": 12,
  "newBuild": "any",
  "tenure": "any",
  "includeAdditionalTransactions": false,
  "maxSalesPerArea": 50,
  "onlyNew": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `summary` (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 = {
    "postcodes": [
        "SW3"
    ],
    "towns": [
        "Cambridge"
    ],
    "maxSalesPerArea": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("digital_influx/uk-sold-house-prices").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 = {
    "postcodes": ["SW3"],
    "towns": ["Cambridge"],
    "maxSalesPerArea": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("digital_influx/uk-sold-house-prices").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "postcodes": [
    "SW3"
  ],
  "towns": [
    "Cambridge"
  ],
  "maxSalesPerArea": 50
}' |
apify call digital_influx/uk-sold-house-prices --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,digital_influx/uk-sold-house-prices"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/glUT2TILxIH3eDcJy/builds/CCMZKCbNvkDjaxttM/openapi.json
