# Rightmove Scraper (`solidcode/rightmove-co-uk-scraper`) Actor

\[💰 $0.9 / 1K] Extract property listings from Rightmove.co.uk — buy, rent, and sold prices. Search by location or paste URLs, filter by price, bedrooms, property type, and radius. Get full details: agent contacts, photos, floorplans, EPC, council tax, and more.

- **URL**: https://apify.com/solidcode/rightmove-co-uk-scraper.md
- **Developed by:** [SolidCode](https://apify.com/solidcode) (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 $0.90 / 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.

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

Pull UK property listings from Rightmove.co.uk at scale — for-sale homes, rentals, and sold-price history with full agent contacts, photos, floorplans, EPC ratings, council tax bands, tenure, and nearest tube/train stations on every row. Built for UK property investors, estate agents tracking competitors, lead-gen teams, and proptech / data platforms that need fresh Rightmove data without hand-crafting search URLs or maintaining a parser.

### Why This Scraper?

- **All three Rightmove channels in one actor** — for-sale, to-rent, and sold-price history. Auto-detected from the URL or chosen with a single dropdown.
- **Type a city, town, or postcode — no URL building required** — "London", "SW1A 1AA", "Newcastle upon Tyne" all resolve straight to Rightmove's location automatically. Competing scrapers force you to hand-craft `OUTCODE`-style search URLs; this actor does the lookup for you.
- **Nine property-type filters wired to Rightmove's UI** — Houses, Flats, Bungalows, Land, Commercial, Farms, Parking, New Homes, or Any.
- **Eleven radius bands** — `This area only`, 0.25, 0.5, 1, 3, 5, 10, 15, 20, 30, and 40 miles. Mirrors the dropdown on Rightmove's own search page.
- **Up to ~1,000 listings per query** — paginates Rightmove's full search ceiling (42 pages of 24 listings) before the platform caps further results.
- **Branch contact card on every for-sale and rental row** — branch name, phone (when published by the agent), branch landing page, profile URL, listings URL, logo, address, and full agent description HTML.
- **EPC, council tax band, tenure, and ground rent on the same row** — no extra request, no nested dataset. Includes years remaining on lease for leaseholds and annual ground-rent / service-charge figures when published.
- **Nearest train and tube stations with walking distance** — name, distance, and station type (national rail, tube, light rail) per listing. Optional schools and price-history toggles too.
- **Honest `maxResults` cap** — exact integer, no rounding to 50. Set 73 and you get 73 (or one full final page over — never trimmed to under-deliver).

### Use Cases

**Investment & Portfolio Analysis**
- Compare for-sale asking prices against sold-price history to surface under-priced listings
- Build CMA-style comparable lists by postcode, radius, and bedroom count
- Track rental yields by combining `rent` channel data with `sold` channel purchase data
- Monitor price reductions (`listingUpdateReason: "Reduced"`) across a target area

**Estate Agent Competitive Intelligence**
- Pull every active instruction for a competing branch via `agent.listingsUrl`
- Benchmark instruction volume by postcode month over month
- Track average days on market and reduction frequency by branch
- Map an agent's branch network across the UK

**Lead Generation**
- Build outreach lists for renovation contractors targeting recently-listed properties
- Source mortgage broker leads from new-build and high-priced listings
- Power conveyancer and removal-company campaigns by postcode and listing date
- Surface landlord targets via the `to-rent` channel for property-management pitches
- Compare nearby schools alongside listings (toggle `includeNearestSchools` on)

**Market Research & Journalism**
- Quantify housing supply by region with bedroom-count and price-band breakdowns
- Track new-build inventory across England, Scotland, Wales, and Northern Ireland
- Build longitudinal price-per-sqft datasets for media and policy reports
- Compare leasehold vs. freehold composition by city

**Proptech & Data Products**
- Power valuation models with structured prices, sqft, EPC ratings, and tenure inputs
- Feed search portals with a fresh, normalised UK listing feed
- Build alerting systems triggered by new listings or price reductions in a target area
- Enrich existing CRM records with current Rightmove URLs and agent contacts

### Getting Started

#### Search by Location (simplest)

```json
{
    "searchLocation": "London",
    "channel": "buy",
    "maxResults": 50
}
````

#### Filtered Rental Search

Two-bed-plus rentals in Manchester under £1,500 pcm:

```json
{
    "searchLocation": "Manchester",
    "channel": "rent",
    "bedroomsMin": 2,
    "priceMax": 1500,
    "maxResults": 100
}
```

#### Sold-Price History

Pull the public sold-price record for a postcode area:

```json
{
    "searchLocation": "SW1A 1AA",
    "channel": "sold",
    "maxResults": 200
}
```

#### Full-Featured Search (filters + enrichment)

Three-bed houses around Oxford within five miles, sorted price-ascending, with price history and schools enabled:

```json
{
    "searchLocation": "Oxford",
    "channel": "buy",
    "propertyType": "houses",
    "bedroomsMin": 3,
    "bedroomsMax": 4,
    "priceMin": 400000,
    "priceMax": 800000,
    "radiusMiles": "5",
    "sortBy": "price-asc",
    "maxResults": 200,
    "includePriceHistory": true,
    "includeNearestSchools": true,
    "includeNearestStations": true
}
```

#### Paste a Rightmove URL

Search-results pages, individual property pages, and sold-price pages all work. Filters embedded in the URL — including draw-area polygons and Property Status — are honoured exactly:

```json
{
    "startUrls": [
        "https://www.rightmove.co.uk/property-for-sale/London.html",
        "https://www.rightmove.co.uk/properties/123456789",
        "https://www.rightmove.co.uk/house-prices/sw1a.html"
    ],
    "maxResults": 100
}
```

### Input Reference

#### What to Scrape

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `startUrls` | string\[] | `[]` | Paste Rightmove URLs directly. Supports search results, individual property pages (`/properties/123456789`), and sold-price pages (`/house-prices/...`). Channel is auto-detected from the URL. |
| `searchLocation` | string | `"London"` | Type a city, town, area, or postcode (e.g. "London", "Manchester", "SW1A 1AA"). Resolved to Rightmove's location automatically. Leave empty if using Start URLs. |

#### Search Filters

These apply to **Search Location** only — URLs carry their own filters.

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `channel` | select | `buy` | `For Sale (Buy)`, `To Rent`, or `Sold Prices`. |
| `propertyType` | select | `any` | `Any Type`, `Houses`, `Flats / Apartments`, `Bungalows`, `Land`, `Commercial`, `Farms`, `Parking`, or `New Homes`. |
| `bedroomsMin` | integer | *none* | Minimum bedrooms (0–10). |
| `bedroomsMax` | integer | *none* | Maximum bedrooms (0–10). |
| `priceMin` | integer | *none* | Minimum price in GBP. For rentals, this is monthly rent. |
| `priceMax` | integer | *none* | Maximum price in GBP. For rentals, this is monthly rent. |
| `radiusMiles` | select | `0` | Search radius: `This area only`, `0.25`, `0.5`, `1`, `3`, `5`, `10`, `15`, `20`, `30`, or `40` miles. |
| `sortBy` | select | `newest` | `Newest Listings`, `Oldest Listings`, `Price: Low to High`, or `Price: High to Low`. |

#### Options

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxResults` | integer | `100` | Hard cap on listings across all inputs. `0` = unlimited. Results may slightly overshoot if the cap falls mid-page — you get the full last page rather than a trimmed one. |
| `includePriceHistory` | boolean | `false` | Fetch the historical sold-price record for each listing's address when available. Adds an extra request per listing. |
| `includeNearestSchools` | boolean | `false` | Include nearby schools with Ofsted ratings, distance, and school type. |
| `includeNearestStations` | boolean | `true` | Include nearest train and tube stations with walking distance. |

### Output

Every listing is one flat row. The same shape applies across `buy`, `rent`, and `sold` — channel-specific fields (rental term, sold-date) populate when relevant and stay blank otherwise.

#### What's available per channel

| Field group | Buy | Rent | Sold |
|-------------|-----|------|------|
| Core (id, url, title, propertyType, bedrooms, price, displayAddress) | yes | yes | yes |
| Structured address (`postcode`, `outcode`, `incode`, `ukCountry`, `latitude`, `longitude`) | yes | yes | blank — Rightmove's sold-prices page does not expose these |
| Agent contact card (`agent.*`) | yes | yes | not applicable |
| Tenure, council tax, EPC, features, images, floorplans | yes | yes | not applicable |
| Sold-price record (`soldDate`, `soldPrice`, transaction history) | not applicable | not applicable | yes |

A few row-level notes:

- `agent.phone` is populated when the branch has published a landline. Some withdrawn or let-agreed listings omit the phone — the field is present but blank.
- `epc.potentialRating` is populated when Rightmove exposes the certificate's potential rating; many listings only publish the current rating, in which case `potentialRating` is blank.

#### Example: For-Sale Listing

```json
{
    "id": "123456789",
    "url": "https://www.rightmove.co.uk/properties/123456789",
    "channel": "buy",
    "title": "3 bed semi-detached house",
    "displayAddress": "Acacia Road, London, SW19",
    "postcode": "SW19 4HJ",
    "outcode": "SW19",
    "incode": "4HJ",
    "ukCountry": "England",
    "latitude": 51.4189,
    "longitude": -0.2014,
    "propertyType": "Semi-Detached",
    "bedrooms": 3,
    "bathrooms": 2,
    "sizeSqFeetMin": 1280,
    "sizeSqFeetMax": 1280,
    "price": 875000,
    "priceDisplay": "£875,000",
    "priceQualifier": "Guide Price",
    "currency": "GBP",
    "firstVisibleDate": "2026-04-12T09:14:00Z",
    "listingUpdateDate": "2026-05-01T11:02:00Z",
    "listingUpdateReason": "price_reduced",
    "displayStatus": "For Sale",
    "productLabel": "Premium",
    "tenure": "Freehold",
    "councilTaxBand": "E",
    "tags": ["Garden", "Off-Street Parking"],
    "features": ["Three double bedrooms", "Modern kitchen", "Private garden"],
    "epc": { "currentRating": "C", "potentialRating": "B", "certificateUrl": "https://..." },
    "images": ["https://media.rightmove.co.uk/img/1.jpg"],
    "floorplans": ["https://media.rightmove.co.uk/floorplan/1.jpg"],
    "agent": {
        "name": "Foxtons Wimbledon",
        "url": "https://www.rightmove.co.uk/estate-agents/agent/...",
        "phone": "020 1234 5678",
        "displayAddress": "12 The Broadway, Wimbledon, SW19 1RF",
        "profileUrl": "https://www.rightmove.co.uk/estate-agents/...",
        "listingsUrl": "https://www.rightmove.co.uk/property-for-sale/branch/..."
    },
    "nearestStations": [
        { "name": "Wimbledon", "distance": 0.4, "unit": "miles", "types": ["NATIONAL_TRAIN", "TUBE"] }
    ],
    "scrapedAt": "2026-05-07T10:30:00Z"
}
```

#### Core Fields

| Field | Type | Description |
|-------|------|-------------|
| `id` | string | Rightmove listing identifier |
| `url` | string | Canonical Rightmove URL |
| `channel` | string | `buy`, `rent`, or `sold` |
| `title` | string | Generated title (e.g. "3 bed semi-detached house") |
| `propertyType` | string | Sub-type (Semi-Detached, Flat, Bungalow, etc.) |
| `bedrooms` | integer | Number of bedrooms |
| `bathrooms` | integer | Number of bathrooms |
| `sizeSqFeetMin` | integer | Lower bound of internal size |
| `sizeSqFeetMax` | integer | Upper bound of internal size |
| `tags` | string\[] | Listing tags (`Garden`, `Parking`, etc.) |
| `description` | string | Plain-text description |
| `descriptionHtml` | string | HTML description |
| `features` | string\[] | Bullet-point key features |
| `scrapedAt` | string | ISO timestamp of extraction |

#### Address & Location

| Field | Type | Description |
|-------|------|-------------|
| `displayAddress` | string | Address as shown on the listing |
| `postcode` | string | Full UK postcode where available |
| `outcode` | string | Postcode prefix (e.g. `SW19`) |
| `incode` | string | Postcode suffix (e.g. `4HJ`) |
| `ukCountry` | string | England, Scotland, Wales, or Northern Ireland |
| `latitude` | number | Coordinate |
| `longitude` | number | Coordinate |

#### Pricing & Status

| Field | Type | Description |
|-------|------|-------------|
| `price` | integer | Numeric price in GBP |
| `priceDisplay` | string | Formatted price (`£725,000`, `£1,500 pcm`) |
| `priceQualifier` | string | `Guide Price`, `Offers Over`, `POA`, etc. |
| `secondaryPrice` | string | Weekly equivalent for rentals where shown |
| `currency` | string | Always `GBP` |
| `firstVisibleDate` | string | ISO timestamp of first listing |
| `listingUpdateDate` | string | ISO timestamp of last update |
| `listingUpdateReason` | string | `new`, `price_reduced`, `let_agreed`, etc. |
| `displayStatus` | string | `For Sale`, `Under Offer`, `Sold STC`, `Let Agreed` |
| `productLabel` | string | `Featured`, `Premium`, or `Standard` |
| `archived` | boolean | Listing archived |
| `published` | boolean | Listing published |
| `sold` | boolean | Listing has sold |

#### Tenure, Tax & Running Costs

| Field | Type | Description |
|-------|------|-------------|
| `tenure` | string | Freehold, Leasehold, or Share of Freehold |
| `yearsRemainingOnLease` | integer | Lease years remaining (leaseholds only) |
| `councilTaxBand` | string | A through H |
| `councilTaxExempt` | boolean | Property exempt from council tax |
| `councilTaxIncluded` | boolean | Council tax bundled in rent |
| `domesticRates` | string | Northern Ireland equivalent |
| `annualGroundRent` | integer | Annual ground rent in GBP |
| `annualServiceCharge` | integer | Annual service charge in GBP |
| `groundRentPercentageIncrease` | number | Stated annual escalator |
| `groundRentReviewPeriodInYears` | integer | Years between ground-rent reviews |

#### Rental-Specific Fields

Populated when `channel: "rent"`.

| Field | Type | Description |
|-------|------|-------------|
| `letAvailableDate` | string | Available-from date |
| `deposit` | integer | Required deposit in GBP |
| `minimumTermInMonths` | integer | Minimum tenancy length |
| `letType` | string | `Long term`, `Short term`, `Student` |
| `furnishType` | string | `Furnished`, `Unfurnished`, `Part Furnished` |

#### Energy, Highlights & Media

| Field | Type | Description |
|-------|------|-------------|
| `epc` | object | `{currentRating, potentialRating, certificateUrl}` |
| `highlights` | object | `electricity`, `broadband`, `water`, `sewerage`, `heating`, `accessibility`, `parking`, `garden`, `risks`, `obligations` |
| `images` | string\[] | All property photo URLs |
| `floorplans` | string\[] | All floorplan image URLs |
| `brochures` | string\[] | Linked brochure PDFs |

#### Agent Contact

| Field | Type | Description |
|-------|------|-------------|
| `agent.name` | string | Branch / agency display name |
| `agent.phone` | string | Branch contact number |
| `agent.url` | string | Branch landing page |
| `agent.profileUrl` | string | Agency profile page |
| `agent.listingsUrl` | string | Page listing every active instruction at this branch |
| `agent.displayAddress` | string | Branch street address |
| `agent.logoUrl` | string | Agency brand logo |
| `agent.descriptionHtml` | string | Agency description (HTML) |

#### Optional Sub-Collections

| Field | Type | Description |
|-------|------|-------------|
| `nearestStations` | object\[] | `[{name, distance, unit, types}]` — populated by default |
| `nearestSchools` | object\[] | `[{name, type, distance, ofstedRating}]` — populated when toggled on |
| `priceHistory` | object\[] | `[{date, price, event}]` — populated when toggled on |

### Tips for Best Results

- **Use full city names for ambiguous places.** "Newcastle" alone resolves to Newcastle in Northern Ireland — type "Newcastle upon Tyne" for the English city. Same applies to "Bromley" and any other shared place name.
- **Paste a Rightmove URL when you need a filter the input form doesn't expose.** Draw-area polygon searches, "Auction" property status, "Include Sold STC", and Rightmove's "Look 2 / 3 bedrooms" combinations all serialise into the URL — paste it as a `startUrls` entry and every URL parameter is honoured exactly.
- **Use `channel: "sold"` for true comparables.** Sold-price history is the gold standard for valuation work and CMA reports — actual transaction prices, not asking prices.
- **Rightmove caps any single search at roughly 1,000 listings.** For large areas, split the run into multiple postcodes or smaller radii rather than expecting one search to return more.
- **Keep `includePriceHistory` off unless you need it.** It adds an extra request per listing and roughly doubles run time. Default rows already include the most recent listing-update reason and date.
- **Sort by `oldest` to find stale listings.** Properties on the market for many months are often signs of price misalignment — useful for negotiation and for spotting overpriced inventory.
- **Set `radiusMiles` to expand commuter searches.** Buyers prepared to live within 5 or 10 miles of a city centre find materially better value once you step outside the immediate postcode.

### Pricing

**$3.00 per 1,000 results** — pay only for the listings returned. No compute charges — you only pay per result returned.

| Results | Estimated Cost |
|---------|----------------|
| 100 | $0.30 |
| 1,000 | $3.00 |
| 10,000 | $30.00 |
| 100,000 | $300.00 |

A "result" is one property listing row in the output dataset. Apify platform fees (storage, bandwidth) are billed separately by your Apify plan.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new results
- **Webhooks** — Trigger custom APIs on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This actor is intended for legitimate property research, market analysis, lead generation, and proptech use cases. Users are responsible for complying with Rightmove's Terms of Service, the UK Data Protection Act, and the GDPR when handling any personal data contained in agent contact fields. Do not use extracted data for spam, harassment, or any unlawful purpose.

# Actor input Schema

## `startUrls` (type: `array`):

Paste Rightmove URLs directly. Supports search results (e.g. /property-for-sale/London.html), individual property pages (/properties/123456789), and sold-price pages (/house-prices/...). The scraper auto-detects the channel (buy / rent / sold) from the URL. Filters in the URL are honored as-is — search filter settings below do NOT apply to URLs.

## `searchLocation` (type: `string`):

Type a city, town, area, or postcode (e.g. "London", "Manchester", "SW1A 1AA"). We resolve it to Rightmove's location automatically — no need to copy a URL. Leave empty if using Start URLs above.

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

What kind of listings to find. Only applies to Search Location — when using URLs, the channel is taken from the URL itself.

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

Filter by property category. Only applies to Search Location.

## `bedroomsMin` (type: `integer`):

Only include properties with at least this many bedrooms. Leave empty for any.

## `bedroomsMax` (type: `integer`):

Only include properties with at most this many bedrooms. Leave empty for any.

## `priceMin` (type: `integer`):

Only include properties at or above this price in GBP. For rentals, this is the monthly rent. Leave empty for no minimum.

## `priceMax` (type: `integer`):

Only include properties at or below this price in GBP. For rentals, this is the monthly rent. Leave empty for no maximum.

## `radiusMiles` (type: `string`):

Expand the search to include properties within this many miles of the location. Mirrors Rightmove's UI.

## `sortBy` (type: `string`):

Sort order for search results.

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

Maximum number of property listings to return across all URLs and searches. Set to 0 for unlimited. Note: results may slightly overshoot if the cap falls in the middle of a page — you get the full last page.

## `includePriceHistory` (type: `boolean`):

Fetch the historical sold-price record for each listing's address (if available). Adds an extra request per listing — slower but useful for investment analysis.

## `includeNearestSchools` (type: `boolean`):

Include nearby schools with Ofsted ratings, distance, and type (primary / secondary). Free — comes from the same property page.

## `includeNearestStations` (type: `boolean`):

Include the nearest train and tube stations with walking distance. Free — comes from the same property page.

## Actor input object example

```json
{
  "startUrls": [],
  "searchLocation": "London",
  "channel": "buy",
  "propertyType": "any",
  "radiusMiles": "0",
  "sortBy": "newest",
  "maxResults": 100,
  "includePriceHistory": false,
  "includeNearestSchools": false,
  "includeNearestStations": true
}
```

# Actor output Schema

## `overview` (type: `string`):

Compact table of scraped property listings with key fields.

## `details` (type: `string`):

Every field for every listing — agent contacts, EPC, council tax, lease info, full 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 = {
    "startUrls": [],
    "searchLocation": "London",
    "channel": "buy",
    "propertyType": "any",
    "radiusMiles": "0",
    "sortBy": "newest",
    "maxResults": 100,
    "includePriceHistory": false,
    "includeNearestSchools": false,
    "includeNearestStations": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/rightmove-co-uk-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 = {
    "startUrls": [],
    "searchLocation": "London",
    "channel": "buy",
    "propertyType": "any",
    "radiusMiles": "0",
    "sortBy": "newest",
    "maxResults": 100,
    "includePriceHistory": False,
    "includeNearestSchools": False,
    "includeNearestStations": True,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/rightmove-co-uk-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 '{
  "startUrls": [],
  "searchLocation": "London",
  "channel": "buy",
  "propertyType": "any",
  "radiusMiles": "0",
  "sortBy": "newest",
  "maxResults": 100,
  "includePriceHistory": false,
  "includeNearestSchools": false,
  "includeNearestStations": true
}' |
apify call solidcode/rightmove-co-uk-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Rightmove Scraper",
        "description": "[💰 $0.9 / 1K] Extract property listings from Rightmove.co.uk — buy, rent, and sold prices. Search by location or paste URLs, filter by price, bedrooms, property type, and radius. Get full details: agent contacts, photos, floorplans, EPC, council tax, and more.",
        "version": "1.0",
        "x-build-id": "PBx0k9IwwddjH09Vi"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/solidcode~rightmove-co-uk-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-solidcode-rightmove-co-uk-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/solidcode~rightmove-co-uk-scraper/runs": {
            "post": {
                "operationId": "runs-sync-solidcode-rightmove-co-uk-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/solidcode~rightmove-co-uk-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-solidcode-rightmove-co-uk-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": {
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Paste Rightmove URLs directly. Supports search results (e.g. /property-for-sale/London.html), individual property pages (/properties/123456789), and sold-price pages (/house-prices/...). The scraper auto-detects the channel (buy / rent / sold) from the URL. Filters in the URL are honored as-is — search filter settings below do NOT apply to URLs.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchLocation": {
                        "title": "Search Location",
                        "type": "string",
                        "description": "Type a city, town, area, or postcode (e.g. \"London\", \"Manchester\", \"SW1A 1AA\"). We resolve it to Rightmove's location automatically — no need to copy a URL. Leave empty if using Start URLs above."
                    },
                    "channel": {
                        "title": "Channel",
                        "enum": [
                            "buy",
                            "rent",
                            "sold"
                        ],
                        "type": "string",
                        "description": "What kind of listings to find. Only applies to Search Location — when using URLs, the channel is taken from the URL itself.",
                        "default": "buy"
                    },
                    "propertyType": {
                        "title": "Property Type",
                        "enum": [
                            "any",
                            "houses",
                            "flats",
                            "bungalows",
                            "land",
                            "commercial",
                            "farms",
                            "parking",
                            "new-homes"
                        ],
                        "type": "string",
                        "description": "Filter by property category. Only applies to Search Location.",
                        "default": "any"
                    },
                    "bedroomsMin": {
                        "title": "Minimum Bedrooms",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Only include properties with at least this many bedrooms. Leave empty for any."
                    },
                    "bedroomsMax": {
                        "title": "Maximum Bedrooms",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Only include properties with at most this many bedrooms. Leave empty for any."
                    },
                    "priceMin": {
                        "title": "Minimum Price (£)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include properties at or above this price in GBP. For rentals, this is the monthly rent. Leave empty for no minimum."
                    },
                    "priceMax": {
                        "title": "Maximum Price (£)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include properties at or below this price in GBP. For rentals, this is the monthly rent. Leave empty for no maximum."
                    },
                    "radiusMiles": {
                        "title": "Search Radius (miles)",
                        "enum": [
                            "0",
                            "0.25",
                            "0.5",
                            "1",
                            "3",
                            "5",
                            "10",
                            "15",
                            "20",
                            "30",
                            "40"
                        ],
                        "type": "string",
                        "description": "Expand the search to include properties within this many miles of the location. Mirrors Rightmove's UI.",
                        "default": "0"
                    },
                    "sortBy": {
                        "title": "Sort By",
                        "enum": [
                            "newest",
                            "oldest",
                            "price-asc",
                            "price-desc"
                        ],
                        "type": "string",
                        "description": "Sort order for search results.",
                        "default": "newest"
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of property listings to return across all URLs and searches. Set to 0 for unlimited. Note: results may slightly overshoot if the cap falls in the middle of a page — you get the full last page.",
                        "default": 100
                    },
                    "includePriceHistory": {
                        "title": "Include Price History",
                        "type": "boolean",
                        "description": "Fetch the historical sold-price record for each listing's address (if available). Adds an extra request per listing — slower but useful for investment analysis.",
                        "default": false
                    },
                    "includeNearestSchools": {
                        "title": "Include Nearest Schools",
                        "type": "boolean",
                        "description": "Include nearby schools with Ofsted ratings, distance, and type (primary / secondary). Free — comes from the same property page.",
                        "default": false
                    },
                    "includeNearestStations": {
                        "title": "Include Nearest Stations",
                        "type": "boolean",
                        "description": "Include the nearest train and tube stations with walking distance. Free — comes from the same property page.",
                        "default": true
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
