# Rightmove Scraper — UK Property, Prices & Agent Leads (`logiover/rightmove-scraper`) Actor

Scrape Rightmove, the UK's largest property portal: price, address, bedrooms, bathrooms, tenure, coordinates, listing dates and the marketing agent with branch name and contact phone. Sale and rental. Keyless. JSON, CSV or Excel.

- **URL**: https://apify.com/logiover/rightmove-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** Real estate, Lead generation, Business
- **Stats:** 1 total users, 1 monthly users, 96.7% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 Scraper — UK Property, Prices & Agent Leads

Export listings from **Rightmove**, the UK's largest property portal — price, address, bedrooms, tenure, coordinates and the marketing agent's branch and phone — to JSON, CSV or Excel. Keyless, no login.

### What does Rightmove Scraper do?

Rightmove ships its result set as structured JSON inside the page, and this Actor reads that rather than the rendered cards. Prices come through as real numbers with a currency code, coordinates are exact to six decimals, and the payload exposes fields the cards never display.

The most valuable of those is the **marketing agent**: branch name, branch ID and a **contact telephone number** on every listing. That is what turns a property export into an estate-agency lead list — you can rank agencies by stock, by average asking price, or by how fast their listings turn over.

Sale and rental listings share one shape but differ in one place, and it matters: rentals put the payment period in `price.frequency`. Flattening that away makes "£1,800 per month" and "£1,800 per week" identical, so the frequency is kept as its own column.

### Who is it for?

- **Estate agencies** benchmarking competitor stock and pricing by area.
- **Proptech and CRM vendors** prospecting agency branches with contact numbers.
- **Property investors** filtering by price, beds and tenure across a radius.
- **Analysts** tracking asking-price movement and time-on-market.
- **Portal builders** who need a UK feed with coordinates.

### Use cases

- Build an agency lead list for a region, with branch names and phone numbers.
- Compare asking prices per bedroom across London postcodes.
- Track which listings were reduced this week using the update reason.
- Filter leasehold versus freehold stock for an investment thesis.
- Export coordinates to map inventory density by neighbourhood.

### Why use this Actor?

- **Agent contact included** — branch name, ID and telephone on every row.
- **Structured source** — typed prices and exact coordinates, not scraped text.
- **Sale and rental** through one channel switch, with the rental frequency preserved.
- **Tenure, size and property subtype** as their own columns.
- **Listing history signals** — first listed date, update reason, added or reduced.
- **Keyless** — no account, no token, no login.

### What data can you extract?

Every row carries the property ID and URL, title and full address, price with currency, label, qualifier and frequency, bedroom and bathroom counts, property subtype, display size, tenure, transaction type, summary text, latitude and longitude, the agent's branch name, ID and phone, listing update reason and date, first visible date, image and floorplan counts, plus auction and commercial flags.

### How to use it

1. Search your area on Rightmove and copy the **locationIdentifier** from the URL (e.g. `REGION^87490`).
2. Choose sale or rental.
3. Optionally set a price band, minimum bedrooms and a search radius.
4. Set **Maximum results** and run, then export JSON, CSV or Excel.

### Input example

```json
{
  "locationIdentifier": "REGION^87490",
  "channel": "buy",
  "minPrice": 300000,
  "maxPrice": 900000,
  "minBedrooms": 2,
  "maxResults": 1000
}
```

### Notes and limits

- Prices are asking prices. Some premium listings publish "POA" as the label while still carrying a numeric guide price in the payload — both are returned so you can decide which to trust.
- Rightmove's location identifiers are opaque codes; there is no free-text location search, so copy the code from a Rightmove search URL.
- Agent phone numbers are the branch's published marketing line, not a personal number.
- This Actor exports the search payload, not full property pages — open the property URL for the complete description, floorplans and EPC.
- You are responsible for how you use listing and agency data, including under UK GDPR and PECR when contacting agencies.

### FAQ

**Do I need a Rightmove account?**
No. Listings are public and this Actor needs nothing from you.

**Where do I get the location identifier?**
Run a search on Rightmove and copy `locationIdentifier` from the address bar — it looks like `REGION^87490` or `OUTCODE^2434`.

**Are rentals supported?**
Yes. Switch the channel to rent; `priceFrequency` then tells you whether the figure is weekly or monthly.

**Is the agent phone always present?**
It is the branch's advertised contact line and is present on essentially every listing, because Rightmove requires it for enquiries.

**How am I charged?**
Pay per result — you pay for the properties delivered.

# Actor input Schema

## `locationIdentifier` (type: `string`):

Rightmove's location code, e.g. REGION^87490 for London. Search on Rightmove and copy the locationIdentifier from the URL.

## `channel` (type: `string`):

Sale or rental listings.

## `minPrice` (type: `integer`):

Only return properties at or above this price. 0 disables the filter.

## `maxPrice` (type: `integer`):

Only return properties at or below this price. 0 disables the filter.

## `minBedrooms` (type: `integer`):

Only return properties with at least this many bedrooms. 0 disables the filter.

## `radiusMiles` (type: `integer`):

Search radius around the location. 0 uses Rightmove's default (this area only).

## `maxResults` (type: `integer`):

Stop after this many properties. Rightmove renders 24 per page and the Actor walks pages until the target is met.

## `proxyConfiguration` (type: `object`):

Rightmove serves its data inside the page; the default datacenter proxy is enough.

## Actor input object example

```json
{
  "locationIdentifier": "REGION^87490",
  "channel": "buy",
  "minPrice": 0,
  "maxPrice": 0,
  "minBedrooms": 0,
  "radiusMiles": 0,
  "maxResults": 500,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `propertyId` (type: `string`):

No description

## `title` (type: `string`):

No description

## `address` (type: `string`):

No description

## `propertyUrl` (type: `string`):

No description

## `priceAmount` (type: `string`):

No description

## `currency` (type: `string`):

No description

## `priceLabel` (type: `string`):

No description

## `priceQualifier` (type: `string`):

No description

## `priceFrequency` (type: `string`):

No description

## `bedrooms` (type: `string`):

No description

## `bathrooms` (type: `string`):

No description

## `propertySubType` (type: `string`):

No description

## `displaySize` (type: `string`):

No description

## `tenure` (type: `string`):

No description

## `transactionType` (type: `string`):

No description

## `summary` (type: `string`):

No description

## `latitude` (type: `string`):

No description

## `longitude` (type: `string`):

No description

## `agentBranch` (type: `string`):

No description

## `agentPhone` (type: `string`):

No description

## `agentBranchId` (type: `string`):

No description

## `listingUpdateReason` (type: `string`):

No description

## `listingUpdateDate` (type: `string`):

No description

## `firstVisibleDate` (type: `string`):

No description

## `addedOrReduced` (type: `string`):

No description

## `imageCount` (type: `string`):

No description

## `floorplanCount` (type: `string`):

No description

## `imageUrl` (type: `string`):

No description

## `isAuction` (type: `string`):

No description

## `isCommercial` (type: `string`):

No description

## `country` (type: `string`):

No description

## `source` (type: `string`):

No description

## `scrapedAt` (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 = {
    "locationIdentifier": "REGION^87490",
    "channel": "buy",
    "minPrice": 0,
    "maxPrice": 0,
    "minBedrooms": 0,
    "radiusMiles": 0,
    "maxResults": 500,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/rightmove-scraper").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 = {
    "locationIdentifier": "REGION^87490",
    "channel": "buy",
    "minPrice": 0,
    "maxPrice": 0,
    "minBedrooms": 0,
    "radiusMiles": 0,
    "maxResults": 500,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/rightmove-scraper").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 '{
  "locationIdentifier": "REGION^87490",
  "channel": "buy",
  "minPrice": 0,
  "maxPrice": 0,
  "minBedrooms": 0,
  "radiusMiles": 0,
  "maxResults": 500,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call logiover/rightmove-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,logiover/rightmove-scraper"
        }
    }
}

```

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/YcmkGJkqNcYGlRjza/builds/9MXjUiGM44rBAcPZn/openapi.json
