# UK House Prices - Land Registry Price Paid (`sterlingverify/uk-house-prices`) Actor

Get every recorded residential sale for a UK postcode or street from HM Land Registry Price Paid data (England & Wales, 1995 to now): price, date, address, property type, tenure and new-build flag, plus a median/mean/min/max summary per search. For lenders, proptech and affordability checks.

- **URL**: https://apify.com/sterlingverify/uk-house-prices.md
- **Developed by:** [Luke Mangan](https://apify.com/sterlingverify) (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

$0.50 / 1,000 sale record returneds

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 House Prices

**UK House Prices** gets sold house prices by postcode or street from HM Land Registry Price Paid data (England & Wales, 1995 to now), with a median/mean/min/max summary for each search.

**Best for:** Lenders and brokers, proptech products, affordability checks, property research and local market analysis.

### How to get sold house prices by postcode

1. Add searches to **Searches**: `{"postcode": "LS6 1AA"}` or `{"street": "Brudenell Road", "town": "Leeds"}`.
2. Optionally set **Sold since** and **Max sales per search**.
3. Click **Start** and download the sale rows and summary row.

### How it works

Uses HM Land Registry's public linked-data API for Price Paid Data (no key). Contains HM Land Registry data © Crown copyright and database right; licensed under the Open Government Licence v3.0, which allows commercial use with this attribution. Covers England and Wales only. Each search returns sale rows followed by one summary row. Invalid postcodes or failed searches return `ok: false` and are not charged.

### Output

`type, price, date, address, postcode, propertyType, tenure, newBuild, medianPrice, ok`

### Pricing (pay-per-event)

- `sale-record`: **$0.0005** per result ($0.5 / 1,000). Platform usage is included; you pay only for results.
- Example: 10,000 sale records cost $5.00.

### Example input

```json
{
  "searches": [
    {
      "postcode": "SW1A 2AA"
    },
    {
      "street": "Brudenell Road",
      "town": "Leeds"
    }
  ],
  "soldSince": "2020-01-01"
}
```

### Example output

Values below are illustrative.

```json
{
  "type": "sale",
  "price": 250000,
  "date": "2021-04-12",
  "address": "51, HEADINGLEY LANE, LEEDS",
  "postcode": "LS6 1AA",
  "propertyType": "semi-detached",
  "tenure": "Freehold",
  "newBuild": false,
  "medianPrice": 164894,
  "ok": true
}
```

### Use it via API, schedules and integrations

Run it in Apify Console, or call it from your own code with the Apify API or the Python and JavaScript clients. Save an input as a task and add a schedule to run it regularly, and send results to Slack, email, webhooks, Zapier, Make or n8n with Apify integrations. AI agents can find and run it through the Apify MCP server.

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("sterlingverify/uk-house-prices").call(run_input={"searches": [{"postcode": "LS6 1AA"}]})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

### FAQ

#### Does it cover Scotland and Northern Ireland?

No. HM Land Registry Price Paid data covers England and Wales only.

#### How recent is the data?

Price Paid data is published about 2 months after completion and excludes some sales, such as non-market transfers.

### Disclaimer

Price Paid data is published about 2 months after completion and excludes some sales (e.g. non-market transfers). Addresses are property addresses, not people, but don't combine them with personal data for marketing without a lawful basis under UK GDPR. Not affiliated with HM Land Registry.

### Related sterlingVerify tools

Part of the sterlingVerify UK payments, KYB and data toolkit on Apify Store:

- [UK Postcode Enricher](https://apify.com/sterlingverify/uk-postcode-enrich): bulk UK postcode lookup with geography and ONS codes
- [Bank of England Rates](https://apify.com/sterlingverify/boe-interest-rates): Bank Rate, SONIA and any Bank of England series
- [UK Company Check](https://apify.com/sterlingverify/uk-company-check): Companies House, VAT and UK sanctions KYB check in one call

# Actor input Schema

## `searches` (type: `array`):

List of {postcode} (full UK postcode) or {street, town}.

## `maxSalesPerSearch` (type: `integer`):

Most recent first.

## `soldSince` (type: `string`):

YYYY-MM-DD

## Actor input object example

```json
{
  "searches": [
    {
      "postcode": "LS6 1AA"
    }
  ],
  "maxSalesPerSearch": 50
}
```

# Actor output Schema

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

All results in the default dataset

# 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 = {
    "searches": [
        {
            "postcode": "LS6 1AA"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("sterlingverify/uk-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 = { "searches": [{ "postcode": "LS6 1AA" }] }

# Run the Actor and wait for it to finish
run = client.actor("sterlingverify/uk-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 '{
  "searches": [
    {
      "postcode": "LS6 1AA"
    }
  ]
}' |
apify call sterlingverify/uk-house-prices --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sterlingverify/uk-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/ujIq5oWpr9FZFRjMc/builds/OSTnWgDCqC7LZSdp6/openapi.json
