# Rightmove Scraper — UK property price, address, beds, agent (`monishskds/rightmove`) Actor

Scrapes property listings from Rightmove search results, for sale or to rent. Returns address, price, property type, bedrooms, estate agent, and listing date for every result on a search page — one row per listing, ready for filtering and analysis.

- **URL**: https://apify.com/monishskds/rightmove.md
- **Developed by:** [Monish Saravana Kumar Divya Sundari](https://apify.com/monishskds) (community)
- **Categories:** Real estate, Other, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 property listeds

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/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

Scrapes property listings from Rightmove search results
(`rightmove.co.uk/property-for-sale/find.html`), for sale or to rent.

Give it a Rightmove location identifier and it returns one row per listing on
that results page.

### Fields returned

| Field | Type | Description |
|---|---|---|
| `propertyUrl` | string | Site-relative link to the listing, e.g. `/properties/91211238` |
| `address` | string | Address as published by the marketing agent |
| `priceGbp` | number | Asking price in pounds. Omitted on "POA" listings |
| `propertyType` | string | Flat, House, Terraced, Detached, Land, Penthouse, and so on |
| `bedrooms` | number | Bedroom count. Omitted on land and commercial listings |
| `estateAgent` | string | The marketing agency |
| `listedOn` | string | Date added or reduced, as `YYYY-MM-DD`. Omitted where Rightmove shows no date |
| `summary` | string | The listing blurb shown on the search card |

Every row also carries `sourceUrl` and `scrapedAt`.

Fields that do not apply to a listing are omitted from the row rather than
returned empty, so you can test for presence directly.

### Sample output row

```json
{
  "propertyUrl": "/properties/91211238#/?channel=RES_BUY",
  "address": "Brighton Road, Sutton, SM2",
  "priceGbp": 425000,
  "propertyType": "Flat",
  "bedrooms": 3,
  "estateAgent": "Foxtons, New Malden",
  "listedOn": "2026-07-22",
  "summary": "This 3 bedroom flat is set in beautiful gardens and is positioned just moments away from lush parks and amenities. It features elegant and well-lit interiors, as well as access to a lovely private balcony."
}
```

### Input

```json
{
  "locationIdentifiers": ["REGION^87490"],
  "channel": "sale",
  "index": 0
}
```

| Field | Description |
|---|---|
| `locationIdentifiers` | Rightmove location codes. Required. |
| `channel` | `sale` (default) or `rent`. |
| `index` | Result offset. Rightmove pages in steps of 24, so `0`, `24`, `48`. |

To find a location identifier: run a search on rightmove.co.uk and copy the
`locationIdentifier` value out of the address bar. `REGION^87490` is London.

To page through a whole region, run once per `index` value. A run fetches at
most 200 pages.

### Typical use

Re-running the same search on a schedule and diffing the results is what this is
for — new listings, price reductions, and time-on-market all fall out of
comparing two runs. `listedOn` and `priceGbp` are the two fields that make that
work.

### What it does not do

- No images, no full property description pages, no map or street-view data.
- No agent phone numbers or personal contact details.
- One results page per run input, not the whole region in one call.

### Reliability

Selectors anchor on Rightmove's stable test attributes rather than its CSS class
names, which carry a build hash and change on every deployment. That one choice
is the difference between an actor that breaks every few weeks and one that does
not.

Every field is validated against a schema on each run, with a run-level check
that prices have not vanished across the whole result set. A nightly check runs
against the live site, so breakage is surfaced within a day.

# Actor input Schema

## `locationIdentifiers` (type: `array`):

Location identifiers such as "REGION^87490". Find one by searching Rightmove and copying the locationIdentifier value from the URL. One results page is fetched per identifier.

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

Choose whether to search properties for sale or to rent.

## `index` (type: `integer`):

Zero-based result offset. Rightmove paginates in steps of 24.

## Actor input object example

```json
{
  "locationIdentifiers": [
    "REGION^87490"
  ],
  "channel": "sale",
  "index": 0
}
```

# 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 = {
    "locationIdentifiers": [
        "REGION^87490"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("monishskds/rightmove").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 = { "locationIdentifiers": ["REGION^87490"] }

# Run the Actor and wait for it to finish
run = client.actor("monishskds/rightmove").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 '{
  "locationIdentifiers": [
    "REGION^87490"
  ]
}' |
apify call monishskds/rightmove --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/qwdgCc2GrVXAocfp6/builds/Dflb5ivq6WWPw7sxO/openapi.json
