# UK Property Area Report: Sold Prices, Energy Ratings & Crime (`best_actors/uk-property-area-report`) Actor

One report per postcode district in England and Wales: Land Registry sold prices by property type with yearly change, EPC energy ratings and police.uk crime. Area-level, no addresses.

- **URL**: https://apify.com/best_actors/uk-property-area-report.md
- **Developed by:** [Lewis O'Rorke](https://apify.com/best_actors) (community)
- **Categories:** Real estate
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$30.00 / 1,000 area reports

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 Property Area Report: Sold Prices, Energy Ratings & Crime

**One report per postcode district in England and Wales: what homes actually
sold for (by property type, with the change on the previous year), how energy
efficient the local homes are, and how much crime is recorded nearby. All from
official government data, in one row per area.**

Type in postcode districts like `M20`, `BS9` or `SW11` and get a clean
side-by-side comparison in about 10 seconds per area.

***

### At a glance

| | |
|---|---|
| **You give it** | Postcode districts in England or Wales, e.g. M20, BS9, SW11 |
| **You get** | One report per district: sold prices by property type with yearly change, energy ratings and crime |
| **Price** | $0.03 per area report (you only pay for results) |
| **Data source** | HM Land Registry, the EPC register and police.uk (all official) |
| **Speed** | About 10 to 20 seconds per district |

***

### Who it is for

- **Property investors and landlords** comparing areas before buying
- **Estate and letting agents** writing area guides and valuations
- **Mortgage brokers and surveyors** sense-checking local prices
- **Relocation services and home movers** shortlisting areas
- **Installers and trades** (solar, insulation) finding areas with older, less efficient homes
- **Analysts and AI agents** needing quick, structured UK area data

***

### What you get for each district

| Field | What it means |
|---|---|
| `district`, `councils`, `country` | The area and its council |
| `sales` | Standard residential sales registered in the period |
| `median_price`, `mean_price`, `price_p25`, `price_p75` | Sold prices (£) |
| `detached_median_price` … `flat_median_price` (+ `_sales`) | Prices and counts by property type |
| `new_build_share`, `freehold_share` | Share of new builds and freeholds |
| `previous_period_median_price`, `median_price_change_pct` | The same period before, and the change |
| `epc_share_a_to_c`, `epc_share_d_to_g`, `epc_most_common_band` | Energy ratings of homes certified in the period |
| `crimes_within_1_mile`, `top_crime_types`, `crime_month` | Crime near the district centre in the latest published month |
| `data_note`, `crime_note` | Plain-English caveats |

**Area-level only.** No addresses, individual sales or full postcodes are output.

***

### How to use it

1. Add **postcode districts** (the first half of a postcode). Full postcodes
   work too; the Actor uses their district.
2. Choose the **period**: the last 3 to 36 months, compared with the same
   length of time before it.
3. Leave **energy ratings** and **crime** on, or switch them off for speed.

```json
{
  "areas": ["M20", "BS9", "SW11", "CF10"],
  "months": 12
}
```

#### Get your results

Click **Start**. Rows appear in the **Output** tab as they're found. Export them
as Excel, CSV or JSON, or send them straight to Google Sheets, a CRM or Slack
with Apify integrations (Zapier, Make, n8n, webhooks) or the API.

#### Run it on a schedule (optional)

Land Registry adds new sales every month. Schedule a monthly run of your areas to track how prices move.

***

### Good to know

- **England and Wales only.** Scotland and Northern Ireland have separate land
  registers; those districts are skipped and not charged.
- **Recent months are incomplete.** HM Land Registry registers sales 2 to 6
  months after completion, so compare median prices rather than sales counts.
- **Standard sales only.** Repossessions, buy-to-let company purchases and
  other non-market transfers are excluded so prices aren't skewed.
- **Crime gaps.** Some police forces (including Greater Manchester Police) don't
  currently publish to police.uk. Those areas say so instead of showing zero.

***

### Sample output

One row from a real run, trimmed to the main fields. Every field is described above.

```json
{
  "district": "LS6",
  "councils": [
    "Leeds"
  ],
  "sales": 259,
  "median_price": 275000,
  "median_price_change_pct": -1.8,
  "detached_median_price": 450000,
  "semi_detached_median_price": 325000,
  "terraced_median_price": 260000,
  "flat_median_price": 175000,
  "epc_share_d_to_g": 0.276,
  "crimes_within_1_mile": 413
}
```

***

### One-click examples

Open one of these ready-made tasks, check the inputs, and click **Start**. Each is a good starting point you can change.

- [Compare London areas: prices, energy ratings, crime](https://apify.com/best_actors/uk-property-area-report/london-areas-compared)
- [Compare Manchester suburbs: prices and energy ratings](https://apify.com/best_actors/uk-property-area-report/manchester-suburbs-compared)
- [Compare Bristol districts: prices, energy ratings, crime](https://apify.com/best_actors/uk-property-area-report/bristol-districts-compared)

***

### Pricing

| Event | Price |
|---|---|
| Area report | $0.03 |

For example, 10 districts cost $0.30.

You pay per area report. Unknown districts, Scottish or Northern Irish areas
and areas with no sales are not charged.

***

### FAQ

**What's a postcode district?**
The first half of a postcode: `M20` in `M20 3BH`. Each district covers a few thousand homes.

**Why is the price change sometimes empty?**
It needs at least 10 sales in both periods to be meaningful. Try a longer period.

**Can I get individual sales or addresses?**
No. The Actor returns area statistics only, which keeps it simple and within the EPC licence.

***

### Data sources and licence

- [HM Land Registry Price Paid Data](https://www.gov.uk/government/collections/price-paid-data)
- [Energy Performance of Buildings Register](https://get-energy-performance-data.communities.gov.uk/)
- [police.uk open data](https://data.police.uk/)
- [postcodes.io](https://postcodes.io/) for district centres and councils

Contains HM Land Registry data © Crown copyright and database right, licensed
under the Open Government Licence v3.0. Contains public sector information
licensed under the Open Government Licence v3.0.

# Actor input Schema

## `areas` (type: `array`):

Postcode districts (the first half of a postcode), e.g. M20, BS9, SW11. Full postcodes work too. England and Wales only, up to 50.

## `months` (type: `integer`):

Report on the last N months and compare with the N months before. 3 to 36.

## `includeEnergyRatings` (type: `boolean`):

Share of homes rated A to C and D to G in the district.

## `includeCrime` (type: `boolean`):

Crimes recorded within about a mile of the district centre in the latest month (police.uk).

## Actor input object example

```json
{
  "areas": [
    "M20",
    "BS9",
    "SW11"
  ],
  "months": 12,
  "includeEnergyRatings": true,
  "includeCrime": true
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `all` (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 = {
    "areas": [
        "M20",
        "BS9",
        "SW11"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("best_actors/uk-property-area-report").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 = { "areas": [
        "M20",
        "BS9",
        "SW11",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("best_actors/uk-property-area-report").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 '{
  "areas": [
    "M20",
    "BS9",
    "SW11"
  ]
}' |
apify call best_actors/uk-property-area-report --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,best_actors/uk-property-area-report"
        }
    }
}
```

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/ZdgIZyfAofnPnmbN4/builds/zgTcamzeeVk0wFef2/openapi.json
