# Rightmove UK Property Scraper (`botflowtech/rightmove-uk-property-scraper`) Actor

Scrape UK property listings from Rightmove.co.uk for sale and rent. Get price, address, bedrooms, agent details, images, EPC ratings, and key features.

- **URL**: https://apify.com/botflowtech/rightmove-uk-property-scraper.md
- **Developed by:** [BotFlowTech](https://apify.com/botflowtech) (community)
- **Categories:** Real estate, Lead generation
- **Stats:** 0 total users, 0 monthly users, 0.0% runs succeeded, NaN 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 UK Property Scraper

Extract property listings — for sale and to rent — from [Rightmove.co.uk](https://www.rightmove.co.uk), the UK's largest property portal. This Actor collects structured data from search results pages and, optionally, visits each listing's detail page to capture the full description, all photos, agent contact information, floor area, tenure, EPC rating, council tax band, and nearest public transport stations. All data is pushed to an Apify Dataset for instant download in JSON, CSV, or Excel format.

---

### Use Cases

| Use Case | Description |
|---|---|
| **Property investment research** | Monitor asking prices and price reductions across postcodes or regions to identify undervalued assets. |
| **Rental market analysis** | Track rental prices and availability by bedroom count, area, or property type for yield calculations. |
| **Estate agent lead generation** | Build prospect lists of properties listed by competing agents or identify off-market opportunities. |
| **Price monitoring & alerts** | Run the Actor on a schedule and detect newly reduced listings within your target area. |
| **Portfolio benchmarking** | Compare your investment portfolio against live market data for accurate valuations. |
| **Academic & media research** | Aggregate housing data for journalism, academic papers, or housing affordability studies. |

---

### Input

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `searchUrl` | string | ✅ Yes | — | A Rightmove search results URL. Copy directly from your browser after applying filters on Rightmove. |
| `maxListings` | integer | No | `100` | Maximum number of listings to scrape (1 – 5,000). |
| `propertyType` | enum | No | `"both"` | `"sale"` for For Sale, `"rent"` for To Rent, `"both"` to scrape both channels using the same location. |
| `includeDetails` | boolean | No | `true` | Visit each listing page for richer data (slower). Set to `false` for fast, card-only extraction. |
| `maxConcurrency` | integer | No | `3` | Parallel requests (1 – 10). Keep at 3 or below to avoid rate limiting. |

#### Example Input

```json
{
  "searchUrl": "https://www.rightmove.co.uk/property-for-sale/find.html?locationIdentifier=REGION%5E87490&sortType=6&propertyTypes=detached&minBedrooms=3&maxPrice=600000",
  "maxListings": 200,
  "propertyType": "sale",
  "includeDetails": true,
  "maxConcurrency": 3
}
````

***

### Example Output

Each item in the dataset represents one property listing:

```json
{
  "id": "148392741",
  "listingUrl": "https://www.rightmove.co.uk/properties/148392741",
  "propertyType": "Detached house",
  "title": "4 bedroom detached house for sale",
  "price": "£575,000",
  "priceNumeric": 575000,
  "address": "Maple Avenue, Harrogate, North Yorkshire, HG2 8PQ",
  "bedrooms": 4,
  "bathrooms": 2,
  "summaryDescription": "A beautifully presented four-bedroom detached family home situated in one of Harrogate's most sought-after residential streets, offered with no onward chain.",
  "thumbnailUrl": "https://media.rightmove.co.uk/dir/crop/10:9-16:9/130k/129542/148392741/129542_HGT240231_IMG_00_0000_max_135x100.jpeg",
  "addedOrReducedDate": "Added on 27/03/2026",
  "channel": "sale",
  "fullDescription": "This impressive four-bedroom detached home sits on a generous plot with a south-facing rear garden. The ground floor comprises an entrance hall, spacious lounge, separate dining room, fitted kitchen/breakfast room, utility room, and a downstairs WC. Upstairs there are four well-proportioned bedrooms, an en-suite shower room to the master, and a family bathroom. The property benefits from gas central heating, double glazing throughout, a block-paved driveway providing off-street parking for three vehicles, and an integral double garage.",
  "images": [
    "https://media.rightmove.co.uk/130k/129542/148392741/129542_HGT240231_IMG_00_0000.jpeg",
    "https://media.rightmove.co.uk/130k/129542/148392741/129542_HGT240231_IMG_01_0000.jpeg",
    "https://media.rightmove.co.uk/130k/129542/148392741/129542_HGT240231_IMG_02_0000.jpeg"
  ],
  "agentName": "Dacre, Son & Hartley - Harrogate",
  "agentPhone": "01423 500000",
  "floorArea": "1,540 sq ft / 143 m²",
  "tenure": "Freehold",
  "keyFeatures": [
    "Four bedrooms",
    "En-suite shower room to master bedroom",
    "South-facing rear garden",
    "Integral double garage + driveway for 3 cars",
    "No onward chain",
    "Sought-after residential location"
  ],
  "epcRating": "C (72)",
  "councilTaxBand": "F",
  "nearestStations": [
    { "name": "Harrogate", "distance": "0.8", "unit": "miles" },
    { "name": "Hornbeam Park", "distance": "1.2", "unit": "miles" }
  ],
  "scrapedAt": "2026-04-01T14:22:05.321Z"
}
```

***

### Output Fields Explained

| Field | Type | Description |
|---|---|---|
| `id` | string | Rightmove's internal property ID |
| `listingUrl` | string | Full URL to the property listing |
| `propertyType` | string | Property sub-type (e.g. "Detached house", "Flat") |
| `title` | string | Listing headline title |
| `price` | string | Formatted price string (e.g. "£575,000" or "£1,250 pcm") |
| `priceNumeric` | number | Price as a plain integer for sorting/filtering |
| `address` | string | Full address as shown on Rightmove |
| `bedrooms` | number | Number of bedrooms |
| `bathrooms` | number | Number of bathrooms (if stated) |
| `summaryDescription` | string | Short description snippet from the search card |
| `thumbnailUrl` | string | URL of the first/thumbnail image |
| `addedOrReducedDate` | string | Date the listing was added or price was reduced |
| `channel` | string | `"sale"` or `"rent"` |
| `fullDescription` | string | Full listing description (detail page only) |
| `images` | string\[] | All listing photo URLs (detail page only) |
| `agentName` | string | Listing agent / estate agency name |
| `agentPhone` | string | Agent contact telephone number |
| `floorArea` | string | Floor area in sq ft / m² if stated |
| `tenure` | string | Freehold, Leasehold, or Share of Freehold |
| `keyFeatures` | string\[] | Bullet-point key features from the listing |
| `epcRating` | string | Energy Performance Certificate rating (A–G) |
| `councilTaxBand` | string | UK council tax band (A–H) |
| `nearestStations` | object\[] | Nearest train/tube/tram stations with distances |
| `scrapedAt` | string | ISO-8601 timestamp of when the record was scraped |

***

### Limitations

- **Public data only** — this Actor does not require a Rightmove login and only accesses publicly visible listings.
- **No Rightmove Plus / agent data** — content behind authenticated portals is not accessible.
- **24 results per page** — Rightmove's maximum. Pagination is handled automatically.
- **Rate limiting** — Rightmove may throttle heavy traffic. The Actor uses polite 1–2 s delays and automatically backs off 30 s on HTTP 429 responses.
- **Layout changes** — Rightmove periodically updates its HTML structure. If fields return `null` unexpectedly, the Actor's CSS selectors may need updating.
- **Maximum 1,000 results per search** — Rightmove caps search results at approximately 1,000 listings regardless of the total count. Use more specific search filters to target sub-1,000 result sets.

***

### Pricing

**$1.50 per 1,000 listings** scraped (detail pages included). Card-only mode (no detail page visits) uses roughly half the compute.

| Listings | Estimated Cost |
|---|---|
| 100 | ~$0.15 |
| 500 | ~$0.75 |
| 1,000 | ~$1.50 |
| 5,000 | ~$7.50 |

Pricing is based on Apify platform compute units consumed. Actual cost may vary with `maxConcurrency` and actor run duration.

***

### Getting Started

1. **Find your Rightmove search URL**: Go to [rightmove.co.uk](https://www.rightmove.co.uk), enter a location, apply your filters (property type, price range, bedrooms), and copy the URL from your browser's address bar.
2. **Paste the URL** into the `searchUrl` input field.
3. **Set `maxListings`** to how many listings you want.
4. **Run the Actor** — results appear in the Dataset tab in real-time.
5. **Download** as JSON, CSV, or Excel.

***

### Technical Details

- Built with [Apify SDK v3](https://docs.apify.com/sdk/js/) and [Crawlee](https://crawlee.dev/)
- Uses `CheerioCrawler` for fast HTML parsing
- User-Agent rotation across 5 realistic browser strings
- Automatic retry (3 attempts) with exponential-style back-off on rate limits
- Results stored in Apify Dataset (persistent, downloadable)
- Node.js 18+, TypeScript, ES Modules

# Actor input Schema

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

A Rightmove search results URL. Can be a for-sale or to-rent URL. Example: https://www.rightmove.co.uk/property-for-sale/find.html?locationIdentifier=REGION%5E87490\&sortType=6\&propertyTypes=\&includeSSTC=false

## `maxListings` (type: `integer`):

Maximum number of property listings to scrape. Rightmove returns 24 results per page.

## `propertyType` (type: `string`):

Which listing channel to scrape: for-sale listings, to-rent listings, or both. When set to 'both', the Actor will derive the alternate channel URL from the provided searchUrl.

## `includeDetails` (type: `boolean`):

If true, the Actor visits each listing's detail page to extract full description, all images, agent contact details, floor area, tenure, key features, EPC rating, council tax band, and nearest stations. Slower but significantly richer data. If false, only search-result card data is returned.

## `maxConcurrency` (type: `integer`):

Maximum number of simultaneous browser/HTTP connections. Keep low (≤3) to avoid triggering Rightmove's rate limiting.

## Actor input object example

```json
{
  "searchUrl": "https://www.rightmove.co.uk/property-for-sale/find.html?locationIdentifier=REGION%5E87490",
  "maxListings": 100,
  "propertyType": "both",
  "includeDetails": true,
  "maxConcurrency": 3
}
```

# 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("botflowtech/rightmove-uk-property-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("botflowtech/rightmove-uk-property-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 '{}' |
apify call botflowtech/rightmove-uk-property-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Rightmove UK Property Scraper",
        "description": "Scrape UK property listings from Rightmove.co.uk for sale and rent. Get price, address, bedrooms, agent details, images, EPC ratings, and key features.",
        "version": "0.1",
        "x-build-id": "wsXfhsYba2HRQOW9a"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/botflowtech~rightmove-uk-property-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-botflowtech-rightmove-uk-property-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/botflowtech~rightmove-uk-property-scraper/runs": {
            "post": {
                "operationId": "runs-sync-botflowtech-rightmove-uk-property-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/botflowtech~rightmove-uk-property-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-botflowtech-rightmove-uk-property-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",
                "required": [
                    "searchUrl"
                ],
                "properties": {
                    "searchUrl": {
                        "title": "Search URL",
                        "type": "string",
                        "description": "A Rightmove search results URL. Can be a for-sale or to-rent URL. Example: https://www.rightmove.co.uk/property-for-sale/find.html?locationIdentifier=REGION%5E87490&sortType=6&propertyTypes=&includeSSTC=false"
                    },
                    "maxListings": {
                        "title": "Max Listings",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum number of property listings to scrape. Rightmove returns 24 results per page.",
                        "default": 100
                    },
                    "propertyType": {
                        "title": "Property Type",
                        "enum": [
                            "sale",
                            "rent",
                            "both"
                        ],
                        "type": "string",
                        "description": "Which listing channel to scrape: for-sale listings, to-rent listings, or both. When set to 'both', the Actor will derive the alternate channel URL from the provided searchUrl.",
                        "default": "both"
                    },
                    "includeDetails": {
                        "title": "Include Full Listing Details",
                        "type": "boolean",
                        "description": "If true, the Actor visits each listing's detail page to extract full description, all images, agent contact details, floor area, tenure, key features, EPC rating, council tax band, and nearest stations. Slower but significantly richer data. If false, only search-result card data is returned.",
                        "default": true
                    },
                    "maxConcurrency": {
                        "title": "Max Concurrency",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Maximum number of simultaneous browser/HTTP connections. Keep low (≤3) to avoid triggering Rightmove's rate limiting.",
                        "default": 3
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
