# Rightmove Address Finder (Land Registry + EPC) (`zealous_armada/rightmove-address-finder`) Actor

Turn a Rightmove listing URL into a full verified address + EPC energy rating. Uses UK Land Registry open data (free, no API key). The only Apify actor that combines Rightmove + Land Registry + EPC in one run. Essential for property due diligence & prospecting.

- **URL**: https://apify.com/zealous\_armada/rightmove-address-finder.md
- **Developed by:** [Naomi Braithwaite](https://apify.com/zealous_armada) (community)
- **Categories:** Automation, Lead generation, Real estate
- **Stats:** 1 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/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Rightmove Address Finder (Land Registry + EPC)

> **The only Apify actor that combines Rightmove data with UK Land Registry open data and EPC energy ratings — no API key required.** Turn a Rightmove listing into a fully verified property address, ownership history, and energy performance certificate in one run.

---

### What Does This Actor Do?

Rightmove listings often show abbreviated or incomplete addresses (e.g. "4-bed house in Kensington" without a street name). This actor enriches that data by cross-referencing:

1. **UK Land Registry Price Paid Data** — official government open data, completely free, no API key needed. Returns the full verified address including house number and street name.
2. **EPC Open Data (opendatacommunities.org)** — optional. Returns the property's current and potential energy efficiency rating.

**Pair it with Rightmove Scraper Pro** for a complete property intelligence pipeline: scrape listings → enrich with verified addresses + EPC → push to your CRM or spreadsheet.

---

### Why This Actor Is Unique

There is **no other actor on Apify** that does this. Property scrapers typically give you what Rightmove shows. This actor goes further:

| What You Start With | What You End Up With |
|---|---|
| Abbreviated Rightmove address | ✅ Full verified address (Land Registry) |
| No street number | ✅ House/flat number confirmed |
| No EPC data | ✅ Current + potential energy rating |
| No ownership history | ✅ Land Registry sale price history |
| Uncertain property identity | ✅ Title number & confirmed match |

---

### What Data Does It Return?

**From UK Land Registry (free, no API key):**
- Full verified address (house number, street, town, postcode)
- Most recent registered sale price
- Sale date
- Property type confirmation (detached, semi, flat, etc.)
- New build flag
- Freehold / leasehold status
- Land Registry title number

**From EPC Open Data (optional):**
- Current energy efficiency rating (A–G)
- Potential energy efficiency rating
- Current environmental impact rating
- Habitable rooms count
- Total floor area (m²)
- Property built form
- Heating type
- Glazing type
- Inspection date

---

### Quick Start

1. First run **Rightmove Scraper Pro** to get a dataset of listings
2. Pass that dataset ID (or a list of listing objects) as input to this actor
3. Set your EPC API email/key if you want EPC data (free registration at opendatacommunities.org)
4. Click **Start**
5. Results are returned as an enriched dataset with all original fields plus Land Registry + EPC data appended

**Works standalone too** — pass individual Rightmove URLs or property objects directly.

---

### Input Parameters

| Parameter | Type | Description |
|---|---|---|
| `datasetId` | String | Apify dataset ID from a previous Rightmove Scraper Pro run |
| `listings` | Array | Direct array of listing objects (alternative to datasetId) |
| `epcApiEmail` | String | Email for EPC API (optional — for energy rating data) |
| `epcApiKey` | String | API key for EPC open data (optional) |
| `maxConcurrency` | Number | Parallel requests (default: 5) |

---

### Pricing

**$5.00 per 1,000 results** — reflects the additional Land Registry and EPC API lookups performed for each property.

This is the only actor on Apify that performs this enrichment. Comparable commercial property data services charge £0.50–£5.00 per address lookup. At $5/1,000 you're paying **$0.005 per property** — a fraction of market rate.

---

### Use Cases

- 🏠 **Property investors** — Confirm the exact address before doing due diligence or making contact
- 📊 **Portfolio analysts** — Get EPC ratings at scale to assess upgrade costs and rental viability under new legislation
- 🤖 **Automated prospecting pipelines** — Combine with Rightmove Scraper Pro and Make.com to build a full monthly prospecting workflow
- 🏢 **Lettings agents** — Verify addresses and energy ratings for compliance purposes
- 🔍 **Researchers** — Cross-reference Rightmove listings with Land Registry records at scale
- 🧑‍💻 **Developers** — Enrich property portals or alert apps with verified address data

---

### How Land Registry Matching Works

The actor uses a multi-step fuzzy matching approach:

1. Extracts the postcode and property type from the Rightmove listing
2. Queries Land Registry Price Paid Data for all transactions at that postcode
3. Matches on property type, approximate price, and listing date
4. Returns the best match with a confidence score
5. Falls back to EPC data if no Land Registry match is found

Match rates are typically **85–95%** on standard residential properties. New builds and very recent listings may have lower match rates as Land Registry data has a 2–3 month lag.

---

### Combine With Rightmove Scraper Pro

These two actors are designed to work together as a pipeline:

````

Rightmove Scraper Pro
↓
\[dataset]
↓
Rightmove Address Finder (Land Registry + EPC)
↓
\[enriched dataset]
↓
Make.com / Google Sheets / CRM

````

Use Apify's **dataset chaining** or a **Make.com webhook** to connect them automatically. Full setup instructions available in the Issues tab.

---

### FAQ

**Do I need a Land Registry API key?**
No. The Land Registry Price Paid Data is fully open and free. No registration or API key required.

**Do I need an EPC API key?**
Yes, for EPC data. Registration is free at [opendatacommunities.org](https://opendatacommunities.org). Enter your email and key in the input — EPC lookups are optional.

**How accurate is the address matching?**
Typically 85–95% for standard residential properties in England and Wales. Scotland and Northern Ireland have separate land registers not covered by this actor.

**Does it work for rentals?**
Yes — it enriches any Rightmove listing (sale, rental, or new homes) with Land Registry data, though rental properties may have older transaction records.

**What if a property has no Land Registry match?**
The actor returns the original data unchanged and adds a `landRegistryMatch: false` flag so you can filter and review unmatched records.

---

### Support

Open an issue in the **Issues** tab. For pipeline setup with Rightmove Scraper Pro, see the companion actor's README.

*Built and maintained by Naomi Braithwaite*

# Actor input Schema

## `datasetId` (type: `string`):

The Apify dataset ID from a Rightmove Scraper run (e.g. nVQ4MO10OLiFyLuFE)
## `epcEmail` (type: `string`):

Email for EPC open data API — used as fallback when Land Registry has no match. Register free at epc.opendatacommunities.org
## `epcApiKey` (type: `string`):

API key for EPC open data API (your account password from epc.opendatacommunities.org)
## `onlyMatched` (type: `boolean`):

If true, only outputs properties where a house number was found. If false (default), outputs all properties with fullAddress set to null where not found.
## `delayMs` (type: `integer`):

Milliseconds to wait between API calls to avoid rate limiting. Default 300ms.

## Actor input object example

```json
{
  "datasetId": "nVQ4MO10OLiFyLuFE",
  "onlyMatched": false,
  "delayMs": 300
}
````

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("zealous_armada/rightmove-address-finder").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("zealous_armada/rightmove-address-finder").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call zealous_armada/rightmove-address-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=zealous_armada/rightmove-address-finder",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Rightmove Address Finder (Land Registry + EPC)",
        "description": "Turn a Rightmove listing URL into a full verified address + EPC energy rating. Uses UK Land Registry open data (free, no API key). The only Apify actor that combines Rightmove + Land Registry + EPC in one run. Essential for property due diligence & prospecting.",
        "version": "0.0",
        "x-build-id": "0bUSjTBVqaaWDAbDI"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/zealous_armada~rightmove-address-finder/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-zealous_armada-rightmove-address-finder",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/zealous_armada~rightmove-address-finder/runs": {
            "post": {
                "operationId": "runs-sync-zealous_armada-rightmove-address-finder",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/zealous_armada~rightmove-address-finder/run-sync": {
            "post": {
                "operationId": "run-sync-zealous_armada-rightmove-address-finder",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "datasetId"
                ],
                "properties": {
                    "datasetId": {
                        "title": "Rightmove Dataset ID",
                        "type": "string",
                        "description": "The Apify dataset ID from a Rightmove Scraper run (e.g. nVQ4MO10OLiFyLuFE)"
                    },
                    "epcEmail": {
                        "title": "EPC API Email (optional)",
                        "type": "string",
                        "description": "Email for EPC open data API — used as fallback when Land Registry has no match. Register free at epc.opendatacommunities.org"
                    },
                    "epcApiKey": {
                        "title": "EPC API Key (optional)",
                        "type": "string",
                        "description": "API key for EPC open data API (your account password from epc.opendatacommunities.org)"
                    },
                    "onlyMatched": {
                        "title": "Output only matched properties",
                        "type": "boolean",
                        "description": "If true, only outputs properties where a house number was found. If false (default), outputs all properties with fullAddress set to null where not found.",
                        "default": false
                    },
                    "delayMs": {
                        "title": "Delay between requests (ms)",
                        "type": "integer",
                        "description": "Milliseconds to wait between API calls to avoid rate limiting. Default 300ms.",
                        "default": 300
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
