# UK House Sold Prices: Land Registry Data by Postcode (`transparent_meteorite/uk-land-registry-sold-prices`) Actor

Search UK house sold prices from HM Land Registry Price Paid Data by postcode, street, town or county, with date, property type and new-build filters, median/average prices and a new-sales monitor. Beta.

- **URL**: https://apify.com/transparent_meteorite/uk-land-registry-sold-prices.md
- **Developed by:** [Detroit Web Agent - Open Data](https://apify.com/transparent_meteorite) (community)
- **Categories:** Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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 Land Registry Sold Prices: House Price Data, Stats + New-Sales Monitor

Use this to look up UK house sold prices by postcode, street, town or county from HM Land Registry, with median prices and new-sales monitoring.

**Beta.** Verify any figure you act on at the linked official record. Built on the official HM Land Registry open data endpoint, local unit tests with recorded fixtures, and a live check of the endpoint before release. Open an issue on the Issues tab if a field looks wrong and we fix it fast.

### What it does

Search **sold house prices in England and Wales** from HM Land Registry's official Price Paid Data (open linked-data endpoint, no login, no scraping).

- **Search** by postcode, town, district or county, optionally narrowed to one street.
- **Filter** by date range (or "years back"), property type, new build, and a price range.
- **Stats:** one free summary row per place with count, median, average, min, max and a breakdown by property type.
- **Monitor mode:** turn on "only new sales since last run" and schedule the actor; each run delivers only sales not seen before (remembered in a named key-value store). A run with nothing new delivers and charges nothing.

### Things to know

- Town, district and county names are matched **exactly** as HM Land Registry records them (case-insensitive), e.g. `GREATER MANCHESTER`, `CITY OF WESTMINSTER`. A misspelt name returns no rows.
- Results are newest first. Property type, new build and price filters are applied after fetching; for very large areas add a date range so the matching sales are found quickly. If the actor stops scanning early it says so in the run log.
- Large areas with no date filter can take a minute or more because the public endpoint is slow on them.
- Stats are computed from the sales fetched in the run (the most recent matching sales up to your limit), not the whole history.
- Registration lags completion: sales usually appear in the data a few weeks to a couple of months after the sale date.
- The dataset covers England and Wales only (not Scotland or Northern Ireland).

### Use cases

- Estate agents, valuers and investors: comparable sold prices around an address.
- Lead generation for movers, removals, mortgage and home-services businesses: fresh completions in a postcode or town.
- Market monitoring: median price trends by area and property type.

### Example input

```json
{ "postcodes": ["M1 1AE"], "yearsBack": 3, "maxItems": 50 }
```

Monitor new sales weekly:

```json
{ "towns": ["LEEDS"], "propertyTypes": ["detached"], "monitorNewSales": true, "maxItems": 200 }
```

### Output fields

Sale rows: transactionId, price, currency, dateOfTransfer, propertyType, newBuild, tenure (freehold/leasehold), transactionCategory, address, postcode, paon, saon, street, locality, town, district, county, sourceUrl, source, scrapedAt.
Summary rows (`recordType: "summary"`): area, basedOn, count, medianPrice, averagePrice, minPrice, maxPrice, earliestSale, latestSale, byPropertyType.

### Pricing

Pay per event: $0.002 per sale record returned (about $2 per 1,000). Actor start $0.00005. Summary rows and already-seen sales are free. Set Maximum cost per run to cap spend.

### Licence and privacy

Contains HM Land Registry data (c) Crown copyright and database right. Licensed under the Open Government Licence v3.0, which permits reuse including commercially. The dataset contains property addresses and prices only; it has no buyer or seller names. The sourceUrl links the authoritative record.

### Output sample

Each result is one dataset item (JSON, CSV, Excel or via API). Shape taken from the actor's dataset schema; field names and meanings below, not live data:

| Field | Meaning |
|---|---|
| `recordType` |  |
| `dateOfTransfer` |  |
| `price` |  |
| `address` |  |
| `propertyType` |  |
| `newBuild` |  |
| `tenure` |  |
| `medianPrice` |  |
| `averagePrice` |  |
| `count` |  |
| `sourceUrl` |  |

### FAQ

**How do I try it quickly?** Press Start with the prefilled input; it is a small run.

**How is it priced?** Pay per event; see the Pricing section above or the Pricing tab. A small run costs very little.

**Is this a one-off or can it run on a schedule?** Both. Use Apify schedules or the API to run it repeatedly.

**What if the source is slow or fails?** Failed or rate-limited requests (HTTP 429 or 5xx, network errors) are retried up to 4 attempts with growing waits; if a source stays unavailable the run records a warning instead of returning invented results.

**Is the data legal to use?** The actor reads public data. You are responsible for using the results in line with applicable law and the source's terms.

### Alternatives to UK House Sold Prices

Other ways to get similar data, so you can choose what fits:

- **HM Land Registry Price Paid Data downloads**: official, bulk files
- **Rightmove sold prices**: consumer property portal
- **Zoopla**: consumer property portal

This actor's edge is pay-per-result pricing, no login and ready-to-use structured output. Compare on a small test run before you commit.

### Changelog

- **0.2** (2026-10-28): listing refresh (title, description, README sections, console prefills). No change to output fields.
- Earlier: initial release.

# Actor input Schema

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

Full UK postcodes, e.g. M1 1AE. One search per postcode. If given, towns, districts and counties are ignored.

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

Town names as recorded by HM Land Registry, e.g. LEEDS. Exact match.

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

Local authority district names, e.g. CITY OF WESTMINSTER. Exact match.

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

County names, e.g. WEST YORKSHIRE or GREATER LONDON. Exact match.

## `street` (type: `string`):

Narrow the area to one street name, e.g. NEWTON STREET. Exact match, combined with the town, district, county or postcode.

## `yearsBack` (type: `integer`):

Only sales in the last N years. Ignored if Date from is set.

## `dateFrom` (type: `string`):

Earliest transfer date, e.g. 2024-01-01.

## `dateTo` (type: `string`):

Latest transfer date.

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

Leave empty for all types.

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

Filter by the new-build flag.

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

Optional lower price bound.

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

Optional upper price bound.

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

Cap on sale records delivered (and charged) this run, split evenly across the places searched. Most recent first.

## `includeStats` (type: `boolean`):

Adds one free summary row per place: count, median, average, min, max and a breakdown by property type.

## `monitorNewSales` (type: `boolean`):

Skip sales delivered in a previous run (tracked in a named key-value store). Schedule the actor daily or weekly to be told about new sales. A repeat run with nothing new delivers and charges nothing.

## `stateStoreName` (type: `string`):

Named key-value store that remembers delivered sales. Change it to keep separate monitors or reset it.

## Actor input object example

```json
{
  "postcodes": [
    "M1 1AE"
  ],
  "newBuild": "any",
  "maxItems": 5,
  "includeStats": true,
  "monitorNewSales": false,
  "stateStoreName": "uk-sold-prices-seen"
}
```

# Actor output Schema

## `overview` (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": [
        "M1 1AE"
    ],
    "maxItems": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("transparent_meteorite/uk-land-registry-sold-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": ["M1 1AE"],
    "maxItems": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("transparent_meteorite/uk-land-registry-sold-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": [
    "M1 1AE"
  ],
  "maxItems": 5
}' |
apify call transparent_meteorite/uk-land-registry-sold-prices --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,transparent_meteorite/uk-land-registry-sold-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/Ufwxnt9YRa5aa4T9T/builds/5aEqadOhXNkyp4JRE/openapi.json
