# UK Sold House Prices — Every Residential Sale, England & Wales (`alaudinburki/uk-land-registry-sold`) Actor

HM Land Registry's Price Paid data as flat rows — price paid, date, property type, tenure, new-build flag and the full address. The official record of every residential sale. Free and key-less.

- **URL**: https://apify.com/alaudinburki/uk-land-registry-sold.md
- **Developed by:** [alaudin burki](https://apify.com/alaudinburki) (community)
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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 — Every Residential Sale, England & Wales

HM Land Registry's Price Paid data as flat rows — price paid, date, property type, tenure, new-build flag
and the full address. **The official record of every residential sale in England and Wales.** Free, no key.

### What you get

`transactionDate`, `pricePaidGbp`, `propertyType`, `estateType`, `newBuild`, `recordStatus`, `category`,
`houseName`, `houseNumber`, `street`, `locality`, `town`, `district`, `county`, `postcode`, `source`,
`fullAddress`, `id`.

### Sample output

```json
{ "transactionDate": "1996-12-19", "pricePaidGbp": 48000, "propertyType": "flat-maisonette",
  "estateType": "Leasehold", "recordStatus": "add",
  "fullAddress": "14, ANCHOR HOUSE, ANCHOR QUAY, NORWICH, NORWICH, NR3 3XP" }
```

### Why this is the property door that opens

Every **portal** in this space is walled — Rightmove 403, Idealista a captcha, ImmoScout 401, 99acres 403,
realtor.com 503. The **official register is open**, and it is better data: not asking prices, but **what
was actually paid**.

### Limitations — read before buying

- **England and Wales only.** Scotland has its own register (Registers of Scotland) and Northern Ireland
  another. This is not UK-wide.
- **Sold prices, not asking prices** — which is the strength, and also why nothing here reflects the live
  market.
- **`pricePaidGbp` is a whole pound number**, not a decimal and not pence.
- **`propertyType` is sometimes a slug** (`flat-maisonette`) and sometimes a label, because the underlying
  linked-data node does not always carry one. Both are returned as given.
- **`recordStatus` is `add`, `change` or `delete`** — derived from the linked-data node, because the API
  returns an object rather than the single letter you might expect.
- **`transactionDate` is normalised to ISO.** The API renders `Fri, 20 Dec 1996`.
- **Addresses are as recorded at the time of sale** and do not track renumbering or renaming.
- **The register is updated in arrears** — recent sales may not appear for weeks.

### Pricing

Pay per result.

### Fields

| Field | Type | What it holds |
|---|---|---|
| `transactionDate` | string | Date the transaction took place. |
| `pricePaidGbp` | number | Price paid in POUNDS STERLING, as recorded at the Land Registry. The figure excludes anything not registered as part of the sale, so it is not a full transaction value. |
| `propertyType` | string | Type of the property, in the Land Registry's own categories, e.g. terraced or flat-maisonette. |
| `estateType` | string | Whether the sale was freehold or leasehold. Leasehold carries ongoing ground rent and a lease term, so it is a materially different asset. |
| `newBuild` | string | Whether the property was newly built at the time of sale. A newly built flag, not a statement about the age of the structure now. |
| `recordStatus` | string | Status of this record in the register, e.g. addition or change. The register keeps superseded rows, so this says which one is current. |
| `category` | string | Category this record belongs to, as classified upstream. |
| `houseName` | string | House name where the property has one instead of a number. |
| `houseNumber` | number | House or building number on the street. Often absent outside Europe. |
| `street` | string | Street name, without the house number. |
| `locality` | string | Locality the property sits in, which is smaller than a town and not an administrative unit. |
| `town` | string | Town the property is in. |
| `district` | string | Administrative district the record falls under. |
| `county` | string | County name. |
| `postcode` | string | Postal code as the source writes it — not normalised, and formats differ per country. |
| `source` | string | Which upstream source produced this row. |
| `fullAddress` | string | The whole address as one string, formatted by the source rather than by this Actor. |

# Actor input Schema

## `postcode` (type: `string`):

Optional full or partial postcode, e.g. WA2 8SN.

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

Stop after this many rows.

## `maxPages` (type: `integer`):

Stop after this many pages.

## Actor input object example

```json
{
  "maxItems": 500,
  "maxPages": 5
}
```

# Actor output Schema

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

One row per item, with the 17 fields listed under Views.

# 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 = {
    "maxItems": 500,
    "maxPages": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("alaudinburki/uk-land-registry-sold").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 = {
    "maxItems": 500,
    "maxPages": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("alaudinburki/uk-land-registry-sold").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 '{
  "maxItems": 500,
  "maxPages": 5
}' |
apify call alaudinburki/uk-land-registry-sold --silent --output-dataset

```

## MCP server setup

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

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/ovtEeRvGze08bwV7u/builds/vVaYWcgN1g3PBN7QR/openapi.json
