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

Scrape Rightmove properties to rent or buy anywhere in the UK: price, bedrooms, bathrooms, address and postcode, GPS, key features, agent and phone, photos, date added and price-reduced flag. Fast, filters, new-listing alerts. From $1 per 1,000 listings.

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

## Pricing

from $0.80 / 1,000 listings

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Rightmove Scraper

Get property listings from **Rightmove**, the UK's largest property portal, as a clean, spreadsheet-ready dataset: homes to rent or buy anywhere in England, Scotland and Wales. Each listing includes the price (with per-month or per-week rent), bedrooms and bathrooms, address and postcode district, **GPS coordinates**, key features, the estate agent with their **branch phone number**, photos, the date it was added and a **price-reduced flag**. Export to JSON, CSV or Excel, send to Google Sheets, or call it as an API.

**Built for** buy-to-let investors and analysts tracking prices and yields, estate and letting agents watching competitors, relocation and proptech teams, and anyone who wants new or reduced listings the moment they appear.

### Why this scraper

- **Fast and cheap.** Results are read straight from Rightmove's pages without a browser, so a run is quick and costs very little to run.
- **Plain-word locations.** Type `Manchester`, `Camden`, `Bristol` or a postcode district like `SW18`. The Actor finds the matching Rightmove area. Or paste any Rightmove search URL with your filters.
- **Price-cut tracking.** Every listing says whether it was just reduced (`priceReduced`) and shows Rightmove's "Added on…/Reduced on…" text, so you can spot motivated sellers and landlords.
- **Agent contact included.** Agent brand, branch name and branch phone number come with every listing.
- **Filters.** Rent or buy, flats or houses, price range, bedrooms, newest first.
- **New-listing alerts.** Schedule it with *Only new listings* and each run returns only listings you haven't received yet, so you pay only for new ones.
- **Price-change tracking.** Turn on *Changes only* and schedule it: each run returns only listings that are new, whose price, rent, size, rooms or title changed (with the old and new values, e.g. `"changes": {"price.amount": {"old": 1450, "new": 1395}}`), or that were taken down (`changeType: "removed"`). Unchanged listings are skipped and not charged. Each changed listing also carries `priceHistory` (dated prices across runs).
- **Price-cut feed.** Turn on *Price drops only* and schedule it daily: you get only listings whose price went down, with old and new price and the history.

### How to use it

1. Add **Locations** (e.g. `Manchester`, `Camden`) and choose **Rent or buy** and **Property type** (flat or house).
2. Optionally set **price** and **bedrooms** filters and **Sort by: Newest listed**.
3. Press **Start**. Download results from the **Output** tab, or connect an integration.

#### Example input

```json
{
  "locations": ["Manchester", "Camden"],
  "offerType": "rent",
  "propertyType": "apartment",
  "maxPrice": 2000,
  "minRooms": 2,
  "sort": "newest",
  "maxItems": 500
}
```

### What you get

| Field | Description |
|-------|-------------|
| `title`, `url`, `id` | E.g. "2 bedroom flat, Purley Avenue, Brent Cross, NW2", link to the listing, Rightmove id |
| `offerType`, `propertyType`, `listingKind` | `rent` / `sale`; `apartment` / `house`; Rightmove's own type (Flat, Terraced…) |
| `price`, `priceText` | `{amount, currency, period}` and the price exactly as shown (e.g. "£2,578 pcm") |
| `bedrooms`, `bathrooms`, `sizeText` | Size details |
| `address` | `{text, postcode, country}`; postcode is the district (e.g. `NW2`) |
| `latitude`, `longitude` | Coordinates |
| `keyFeatures`, `summary` | The agent's bullet points and short description |
| `agentCompany`, `agentName`, `agentPhone`, `agentLogo` | Estate agent, branch and branch phone |
| `priceReduced`, `addedOrReduced` | Price-cut flag and "Added on…/Reduced on…" text |
| `images`, `imageCount`, `hasFloorplan`, `hasVirtualTour` | Photos |
| `availableFrom`, `publishedAt`, `updatedAt`, `promoted` | Dates and featured-listing flag |

### Pricing

Pay per result: about **$1 per 1,000 listings** (lower on higher Apify plans) plus a tiny start fee. Duplicates, filtered-out listings and (with *Only new listings*) already-delivered listings are free. See the **Pricing** tab for exact rates, and set a maximum charge per run to cap spend.

On Apify's **free plan** each run returns up to 200 listings, enough to try it out. Any paid Apify plan removes the limit.

### FAQ

**How many listings can I get per search?** Rightmove shows up to 42 pages (about 1,000 listings) per search. For more, split by area (boroughs, postcode districts) or price bands.

**Does it include the agent's phone number?** Yes, the branch phone Rightmove shows on each listing. Use it within UK GDPR and PECR rules.

**Is it legal?** The Actor collects publicly listed property ads. You're responsible for how you use the data under the laws that apply to you.

### Support

Found a problem or need a field that isn't there yet? Open an issue on the **Issues** tab with your input and what you expected. Requests decide what gets built next.

# Actor input Schema

## `locations` (type: `array`):

Towns, cities, London boroughs or postcode districts in plain words, e.g. `Manchester`, `Camden`, `SW18`, one per line.

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

What kind of property.

## `offerType` (type: `string`):

Listings for rent or for sale.

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

Or paste Rightmove search result pages from your browser, with any filters you set there. Each is crawled as given.

## `minPrice` (type: `number`):

Lowest monthly rent or purchase price.

## `maxPrice` (type: `number`):

Highest monthly rent or purchase price.

## `minRooms` (type: `number`):

Minimum number of bedrooms.

## `maxRooms` (type: `number`):

Maximum number of bedrooms.

## `sort` (type: `string`):

Order of results.

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

Maximum number of listings to return in total.

## `maxPagesPerSearch` (type: `integer`):

Result pages to read per location or search URL (24 listings per page; Rightmove shows up to 42 pages).

## `onlyNew` (type: `boolean`):

Return only listings that no earlier run with the same input has delivered. Ideal for alerts — you pay only for new listings.

## `changesOnly` (type: `boolean`):

Return only listings that are new, changed or gone since the last run with the same input (or monitor name): changed listings carry `changeType: "changed"` and `changes` with the old and new price, rent, size, rooms or title; listings that disappeared come as `changeType: "removed"`. Schedule it to track price cuts. The first run returns everything as new.

## `priceDropsOnly` (type: `boolean`):

Only listings whose price went down since the last run with the same input (or monitor name), each with `changes` (old → new price) and `priceHistory`. Schedule it daily for a price-cut feed. The first run records prices and returns nothing.

## `monitorName` (type: `string`):

Optional name for the “only new” history, so several monitors can run side by side.

## `delivery` (type: `object`):

Webhook: {"webhookUrl": "https://…", "format": "json" | "slack" | "discord", "onlyWhenResults": true, "includeItems": 10}. Google Sheets: {"spreadsheetId": "<id from the sheet URL>", "sheetName": "Sheet1"} plus the service account key below; share the sheet with the service account's e-mail first. Leave empty to only save results in the dataset.

## `googleServiceAccountJson` (type: `string`):

Only for Google Sheets delivery: paste the service account's JSON key. Stored encrypted; the account sees only sheets you share with it.

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

Apify's standard proxy is enough for Rightmove.

## `tenantId` (type: `string`):

Optional label used to keep separate histories for different clients or teams.

## `debug` (type: `boolean`):

Save extra diagnostics with the run.

## Actor input object example

```json
{
  "locations": [
    "Manchester"
  ],
  "propertyType": "apartment",
  "offerType": "rent",
  "sort": "default",
  "maxItems": 200,
  "maxPagesPerSearch": 10,
  "onlyNew": false,
  "changesOnly": false,
  "priceDropsOnly": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "debug": false
}
```

# Actor output Schema

## `results` (type: `string`):

The produced items (default dataset items).

# 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 = {
    "locations": [
        "Manchester"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("tacps126/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 = {
    "locations": ["Manchester"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("tacps126/rightmove-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "locations": [
    "Manchester"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call tacps126/rightmove-scraper --silent --output-dataset

```

## MCP server setup

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

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/GxjOngW4HAvL4BN6B/builds/1WzhWOGHyHnhFpRY6/openapi.json
