# EPC Area Insights: Energy Ratings by Postcode District (`best_actors/epc-area-insights`) Actor

Official EPC energy-rating statistics for any area of England and Wales: how many homes and commercial buildings are rated A to G, by postcode district, council or constituency. Area-level only, no addresses.

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

## Pricing

$20.00 / 1,000 area analyseds

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

## EPC Area Insights: Energy Ratings by Postcode District

**See where the least energy-efficient homes and commercial buildings are, anywhere
in England and Wales. Official energy performance certificate (EPC) data,
turned into one row per postcode district, council or constituency: how many
buildings are rated A to G, and what share are D to G.**

Every home or building that is sold, let or built needs an EPC, and every
certificate is registered with the government. This Actor reads those
certificates for the areas you choose and tells you, district by district,
where poorly rated buildings are concentrated. That is exactly where
insulation, heat pumps, solar panels, new windows and energy advice are needed.

***

### At a glance

| | |
|---|---|
| **You give it** | Councils or parliamentary constituencies in England and Wales |
| **You get** | One row per postcode district, council or constituency: how many buildings are rated A to G |
| **Price** | $0.02 per area analysed (you only pay for results) |
| **Data source** | Official Energy Performance of Buildings Register (area statistics only, no addresses) |
| **Best for** | Solar, insulation and heat pump installers choosing where to market |

***

### Who it is for

- **Solar, heat pump, insulation and window installers** choosing where to
  leaflet, advertise or open a branch
- **Energy consultants and retrofit coordinators** sizing up local demand
- **Letting agents and landlords** tracking how their area compares
- **Councils, housing associations and researchers** monitoring energy efficiency
- **Marketing agencies** planning door-drops and local ad targeting

***

### What you get for each area

| Field | What it means |
|---|---|
| `area`, `area_type` | A postcode district (e.g. `BS9`), council or constituency |
| `within` | The council or constituency it was searched in |
| `building_type` | Homes (domestic) or commercial (non-domestic) |
| `certificates` | Certificates registered in the area in your period |
| `band_a` … `band_g` | How many were rated A, B, C, D, E, F and G |
| `share_band_a` … `share_band_g` | The same as shares (0 to 1) |
| `share_d_to_g`, `share_e_to_g`, `share_f_to_g` | The share of buildings that would benefit most from improvements |
| `share_a_to_c` | The share already efficient |
| `most_common_band` | The typical rating in the area |
| `certificates_per_month` | How active the local property market is |
| `new_build_share` | Homes only: how much of the activity is new builds |
| `period_start`, `period_end` | The period covered |

**No addresses, ever.** The EPC licence restricts address-level data to
specific purposes, so this Actor only returns area statistics. No addresses,
property references, full postcodes or certificate numbers are output.

***

### How to use it (step by step)

#### 1. Choose your areas

Type **councils** (e.g. `Bristol`, `Manchester`, `Cornwall`) and/or
**parliamentary constituencies** (e.g. `Bristol East`). Plain names are fine:
the Actor matches them to the official list, and if a name is ambiguous (like
`Newcastle`) it tells you the options.

#### 2. Choose buildings and detail

- **Buildings:** homes, commercial, or both.
- **One row per:** postcode district (most detailed), council or constituency.
- **Period:** the last N months (default 12), or exact dates.

#### 3. Click Start

Most runs finish in seconds. Sort by `share_d_to_g` to find your best areas,
then export to Excel, CSV or JSON.

***

### Ready-made examples

**Where are the least efficient homes in Bristol and Manchester?**

```json
{ "councils": ["Bristol", "Manchester"], "groupBy": "postcode_district", "monthsBack": 12 }
```

**Commercial buildings in Leeds, last 2 years, one row per council**

```json
{ "councils": ["Leeds"], "buildingType": "non_domestic", "groupBy": "council", "monthsBack": 24 }
```

**Compare constituencies**

```json
{ "constituencies": ["Bristol East", "Bristol West", "Bristol North West", "Bristol South"], "groupBy": "constituency" }
```

***

### Sample output

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

```json
{
  "area": "Leeds",
  "area_type": "council",
  "building_type": "domestic",
  "certificates": 21853,
  "share_a_to_c": 0.656,
  "share_d_to_g": 0.344,
  "share_f_to_g": 0.007,
  "most_common_band": "C",
  "certificates_per_month": 1681,
  "new_build_share": 0.082
}
```

***

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

- [Least efficient homes in Bristol, by district](https://apify.com/best_actors/epc-area-insights/epc-bristol-districts)
- [Least efficient homes in Manchester, by district](https://apify.com/best_actors/epc-area-insights/epc-manchester-districts)
- [EPC ratings across London boroughs](https://apify.com/best_actors/epc-area-insights/epc-london-boroughs)
- [Cornwall homes by energy rating](https://apify.com/best_actors/epc-area-insights/epc-cornwall-districts)
- [Commercial buildings in Leeds by EPC rating](https://apify.com/best_actors/epc-area-insights/epc-leeds-commercial)
- [Least efficient homes in Birmingham, by district](https://apify.com/best_actors/epc-area-insights/epc-birmingham-districts)
- [Home energy ratings in Cardiff and Swansea](https://apify.com/best_actors/epc-area-insights/epc-cardiff-swansea)
- [Home energy ratings across Yorkshire councils](https://apify.com/best_actors/epc-area-insights/epc-yorkshire-councils)
- [Compare Bristol's constituencies by EPC rating](https://apify.com/best_actors/epc-area-insights/epc-bristol-constituencies)
- [Least efficient homes in Newcastle, by district](https://apify.com/best_actors/epc-area-insights/epc-newcastle-districts)

***

### Pricing

| Event | Price |
|---|---|
| Area analysed | $0.02 |

For example, 20 areas cost $0.40.

You pay **per area analysed**. Areas with fewer certificates than your
minimum (default 20) are skipped and free, because shares from tiny samples
mislead. A council with no certificates in the period is free.

No account or API key needed. Works with AI agents, including x402
pay-per-call payments.

***

### Honest limits

- **England and Wales only.** Scotland and Northern Ireland keep separate registers.
- **It describes certificates registered in your period,** which means
  buildings recently sold, let, built or assessed. It's a strong guide to local
  housing stock, not a census of every building.
- **Districts are taken from each certificate's postcode,** within the council
  you searched. A district that crosses a council boundary appears once per council.
- **Certificates are added daily.** Today's are available from tomorrow.

***

### Data and licence

Energy performance of buildings data, England and Wales, published by the
Ministry of Housing, Communities and Local Government. Contains public sector
information licensed under the Open Government Licence v3.0. This Actor
returns area statistics only: no address-level data.

***

### FAQ

**Can I get the addresses of the poorly rated homes?**
No. The EPC licence restricts address data to specific purposes such as
property management, research and government schemes, and selling it as
leads would need separate licences. Use the district statistics to target
your marketing instead.

**Which council names can I use?**
Any of the 318 councils and 575 constituencies the register recognises. If a
name isn't recognised, the run tells you the closest matches.

**Something is wrong or missing.**
Open an issue on the Issues tab with your run link.

# Actor input Schema

## `councils` (type: `array`):

Local councils in England or Wales, e.g. Bristol, Manchester, Leeds, Cornwall. Plain names are fine; the Actor matches them to the official list.

## `constituencies` (type: `array`):

Optional. e.g. Bristol East, Leeds Central.

## `buildingType` (type: `string`):

Homes use domestic certificates; commercial buildings use non-domestic certificates.

## `groupBy` (type: `string`):

How finely to break the results down.

## `monthsBack` (type: `integer`):

Certificates registered in this period, up to yesterday. Ignored if you set dates below.

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

Optional start date.

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

Optional end date (yesterday at the latest).

## `minCertificates` (type: `integer`):

Areas with fewer certificates are skipped and not charged, because shares from tiny samples mislead.

## Actor input object example

```json
{
  "councils": [
    "Bristol",
    "Manchester"
  ],
  "buildingType": "domestic",
  "groupBy": "postcode_district",
  "monthsBack": 12,
  "minCertificates": 20
}
```

# Actor output Schema

## `areas` (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 = {
    "councils": [
        "Bristol",
        "Manchester"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("best_actors/epc-area-insights").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 = { "councils": [
        "Bristol",
        "Manchester",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("best_actors/epc-area-insights").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 '{
  "councils": [
    "Bristol",
    "Manchester"
  ]
}' |
apify call best_actors/epc-area-insights --silent --output-dataset

```

## MCP server setup

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

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/i4zeKZyGuc8a0SYD0/builds/51N1eGH9Yv2S4ZGHk/openapi.json
