# Rightmove Scraper (`kawsar/rightmove-scraper`) Actor

Rightmove scraper that extracts UK property listings from any search URL, giving investors, agents, and analysts structured data including prices, addresses, bedrooms, agent details, and coordinates.

- **URL**: https://apify.com/kawsar/rightmove-scraper.md
- **Developed by:** [Kawsar](https://apify.com/kawsar) (community)
- **Categories:** Real estate, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 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 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 Scraper: Extract UK Property Listings from Any Search

Rightmove scraper that pulls property data from any search URL on rightmove.co.uk. Point it at a sales search, rental listings, new builds, or sold prices and it pages through all the results, extracting price, address, bedroom count, property type, agent details, GPS coordinates, and image links per listing. No API key needed.

### Use cases

- **Property investment research**: collect asking prices, bedroom counts, and locations across a target area to compare yields without spreadsheet copy-paste
- **Rental market analysis**: track listed rents in a postcode or region over time and spot price movements
- **Estate agent lead generation**: extract agent names and branch details from active listing pages
- **Portfolio monitoring**: run the scraper on a saved Rightmove search to keep a dataset of competing listings up to date
- **Price map data**: pull latitude and longitude alongside prices to feed a geographic visualization tool
- **Academic and media research**: gather structured property listing data for housing affordability studies

### What data does this actor extract?

Each extracted property record contains:

```json
{
    "propertyId": "123456789",
    "url": "https://www.rightmove.co.uk/properties/123456789",
    "address": "14 Church Lane, Bristol, BS1 1AA",
    "price": "£425,000",
    "priceAmount": 425000,
    "priceQualifier": "Guide price",
    "propertyType": "Semi-detached",
    "bedrooms": 3,
    "bathrooms": 1,
    "summary": "A well-presented three bedroom semi-detached house in a sought-after residential street.",
    "agentName": "Smith & Partners - Bristol Central",
    "agentAddress": "42 High Street, Bristol",
    "imageUrls": [
        "https://media.rightmove.co.uk/dir/100k/99999/123456789/123456789_IMG_01.jpeg"
    ],
    "floorplanUrl": "https://media.rightmove.co.uk/dir/100k/99999/123456789/123456789_FLP_01.jpeg",
    "latitude": 51.4545,
    "longitude": -2.5879,
    "addedOrReduced": "Added today",
    "listingStatus": "available",
    "scrapedAt": "2025-06-15T10:23:45.123456+00:00"
}
````

| Field | Type | Description |
|-------|------|-------------|
| `propertyId` | string | Rightmove internal property ID |
| `url` | string | Direct link to the listing on rightmove.co.uk |
| `address` | string | Display address as shown on the listing |
| `price` | string | Price text as displayed (e.g. "£425,000") |
| `priceAmount` | number | Numeric price value without currency symbol |
| `priceQualifier` | string | Price qualifier if present (e.g. "Guide price", "Offers over") |
| `propertyType` | string | Property subtype (e.g. "Detached", "Semi-detached", "Flat") |
| `bedrooms` | integer | Number of bedrooms |
| `bathrooms` | integer | Number of bathrooms |
| `summary` | string | Short listing description |
| `agentName` | string | Estate agent branch name |
| `agentAddress` | string | Estate agent branch display name or address |
| `imageUrls` | array | List of property image URLs |
| `floorplanUrl` | string | Floorplan image URL (empty if unavailable) |
| `latitude` | number | Property latitude |
| `longitude` | number | Property longitude |
| `addedOrReduced` | string | When the listing was added or last reduced |
| `listingStatus` | string | Listing status (e.g. "available", "sold STC", "let agreed") |
| `scrapedAt` | string | ISO 8601 timestamp of extraction |
| `sourceUrl` | string | The Rightmove search URL that produced this result |

### Input

The actor accepts one search URL or a list of them. Results from all URLs are combined in one dataset run.

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchUrl` | string | | Single Rightmove search URL. Use this for a quick one-URL run. |
| `searchUrls` | array | | List of Rightmove search URLs (one per line in the UI). Use this to scrape multiple areas or filter sets in one run. |
| `maxItems` | integer | 100 | Maximum listings to extract **per search URL** (hard cap: 1000). With 3 URLs and maxItems=50, you get up to 150 total. |
| `timeoutSecs` | integer | 300 | Overall actor timeout in seconds (max: 3600) |
| `requestTimeoutSecs` | integer | 60 | Per-page load timeout in seconds |
| `proxyConfiguration` | object | Datacenter (Anywhere) | Proxy type and location for requests. Supports Datacenter, Residential, Special, and custom proxies. Optional. |

At least one of `searchUrl` or `searchUrls` must be provided.

#### Single URL example

```json
{
    "searchUrl": "https://www.rightmove.co.uk/property-for-sale/find.html?locationIdentifier=REGION%5E87490&sortType=6&propertyTypes=&mustHave=&dontShow=&furnishTypes=&keywords=",
    "maxItems": 100,
    "proxyConfiguration": { "useApifyProxy": true }
}
```

#### Multiple URLs example

```json
{
    "searchUrls": [
        "https://www.rightmove.co.uk/property-for-sale/find.html?locationIdentifier=REGION%5E87490&sortType=6",
        "https://www.rightmove.co.uk/property-for-sale/find.html?locationIdentifier=REGION%5E61280&sortType=6",
        "https://www.rightmove.co.uk/property-to-rent/find.html?locationIdentifier=REGION%5E87490&sortType=6"
    ],
    "maxItems": 300,
    "proxyConfiguration": { "useApifyProxy": true }
}
```

Each result includes a `sourceUrl` field so you can tell which search URL produced each property.

`maxItems` applies per URL. With 3 URLs and `maxItems=50` you get up to 150 total results.

If you provide both `searchUrl` and `searchUrls`, they are merged and deduplicated. Duplicate URLs are only scraped once.

### Integrations

Connect Rightmove Scraper with other apps and services using [Apify integrations](https://apify.com/integrations). You can integrate with Make, Zapier, Slack, Airbyte, GitHub, Google Sheets, Google Drive, and many more. You can also use [webhooks](https://docs.apify.com/integrations/webhooks) to trigger actions whenever results are available.

### FAQ

**What kind of Rightmove search URLs does this actor accept?**
Any public Rightmove search URL works: for-sale, to-rent, new homes, and commercial. Just run your search on rightmove.co.uk with whatever filters you want, then copy the URL from the address bar.

**How many properties can it extract per run?**
Up to 1000 per run. Rightmove paginates results in groups of 24, so the actor steps through each page automatically until it hits your `maxItems` limit or runs out of results.

**Will it get blocked by Rightmove?**
Rightmove does rate-limit automated traffic. Using residential proxies (available in the proxy settings) reduces the chance of blocks. On Datacenter proxies, runs of a few hundred properties generally complete without issues.

**Does it scrape individual listing detail pages?**
No. It extracts the data Rightmove embeds on the search results page, which covers price, address, bedrooms, bathrooms, agent details, images, coordinates, and listing status. If you need the full listing description or EPC data, you would need to follow the listing URL separately.

**Can I schedule it to run automatically?**
Yes. Use Apify's built-in scheduler to run the actor on a set interval and build a time series of listing data.

### Get started

Run Rightmove Scraper on any UK property search. Paste your Rightmove search URL, set a result limit, and the actor handles the rest. Results appear in the Apify dataset viewer as structured JSON ready for export to CSV, Google Sheets, or any downstream tool.

# Actor input Schema

## `searchUrl` (type: `string`):

One Rightmove search URL to scrape. Copy it from your browser after running a property search on rightmove.co.uk. Use 'Search URLs' below to provide multiple URLs in one run.

## `searchUrls` (type: `array`):

List of Rightmove search URLs to scrape in one run. Paste one URL per line. Results from all URLs are combined in the dataset. Each result includes a 'sourceUrl' field showing which URL it came from.

## `maxItems` (type: `integer`):

Maximum number of property listings to extract per search URL. If you provide 3 URLs with maxItems=50, you can get up to 150 results total. Default is 100. Hard maximum is 1000.

## `timeoutSecs` (type: `integer`):

Overall actor timeout in seconds. Actor stops and saves partial results when this limit is reached.

## `requestTimeoutSecs` (type: `integer`):

Maximum time in seconds to wait for a single page to load before giving up.

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

Select proxies to use for requests. Helps avoid IP blocking and rate limits. Datacenter proxies are fastest; Residential proxies are harder to detect.

## Actor input object example

```json
{
  "searchUrl": "https://www.rightmove.co.uk/property-to-rent/find.html?locationIdentifier=REGION%5E87490&sortType=6",
  "searchUrls": [
    "https://www.rightmove.co.uk/property-for-sale/find.html?locationIdentifier=REGION%5E87490&sortType=6",
    "https://www.rightmove.co.uk/property-for-sale/find.html?locationIdentifier=REGION%5E61280&sortType=6"
  ],
  "maxItems": 100,
  "timeoutSecs": 300,
  "requestTimeoutSecs": 60,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "searchUrl": "https://www.rightmove.co.uk/property-for-sale/find.html?locationIdentifier=REGION%5E87490&sortType=6&propertyTypes=&mustHave=&dontShow=&furnishTypes=&keywords=",
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("kawsar/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 = {
    "searchUrl": "https://www.rightmove.co.uk/property-for-sale/find.html?locationIdentifier=REGION%5E87490&sortType=6&propertyTypes=&mustHave=&dontShow=&furnishTypes=&keywords=",
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("kawsar/rightmove-scraper").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 '{
  "searchUrl": "https://www.rightmove.co.uk/property-for-sale/find.html?locationIdentifier=REGION%5E87490&sortType=6&propertyTypes=&mustHave=&dontShow=&furnishTypes=&keywords=",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call kawsar/rightmove-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Rightmove Scraper",
        "description": "Rightmove scraper that extracts UK property listings from any search URL, giving investors, agents, and analysts structured data including prices, addresses, bedrooms, agent details, and coordinates.",
        "version": "0.0",
        "x-build-id": "lLxUe9BbnZe9qwKSp"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/kawsar~rightmove-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-kawsar-rightmove-scraper",
                "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/kawsar~rightmove-scraper/runs": {
            "post": {
                "operationId": "runs-sync-kawsar-rightmove-scraper",
                "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/kawsar~rightmove-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-kawsar-rightmove-scraper",
                "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",
                "properties": {
                    "searchUrl": {
                        "title": "Search URL (single)",
                        "type": "string",
                        "description": "One Rightmove search URL to scrape. Copy it from your browser after running a property search on rightmove.co.uk. Use 'Search URLs' below to provide multiple URLs in one run."
                    },
                    "searchUrls": {
                        "title": "Search URLs (multiple)",
                        "type": "array",
                        "description": "List of Rightmove search URLs to scrape in one run. Paste one URL per line. Results from all URLs are combined in the dataset. Each result includes a 'sourceUrl' field showing which URL it came from.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of property listings to extract per search URL. If you provide 3 URLs with maxItems=50, you can get up to 150 results total. Default is 100. Hard maximum is 1000.",
                        "default": 100
                    },
                    "timeoutSecs": {
                        "title": "Actor timeout (seconds)",
                        "minimum": 30,
                        "maximum": 3600,
                        "type": "integer",
                        "description": "Overall actor timeout in seconds. Actor stops and saves partial results when this limit is reached.",
                        "default": 300
                    },
                    "requestTimeoutSecs": {
                        "title": "Page load timeout (seconds)",
                        "minimum": 10,
                        "maximum": 180,
                        "type": "integer",
                        "description": "Maximum time in seconds to wait for a single page to load before giving up.",
                        "default": 60
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Select proxies to use for requests. Helps avoid IP blocking and rate limits. Datacenter proxies are fastest; Residential proxies are harder to detect."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
