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

Scrape Rightmove properties for sale or to rent anywhere in the UK: price, bedrooms, address, coordinates, agent and phone, photos, key features, date added. Description, tenure, council tax, floorplans and stations free. Export JSON/CSV/Excel, use the API, schedule it or connect n8n or Zapier.

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

## Pricing

from $1.05 / 1,000 properties

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

### What is Rightmove Scraper?

**Rightmove Scraper** pulls properties from [rightmove.co.uk](https://www.rightmove.co.uk), the UK's biggest property portal — **for sale or to rent** — for any town, city, area, postcode, postcode district or station, or straight from a Rightmove search URL you already filtered in the browser. Every property comes back as one clean, flat row: price as a number and as shown, bedrooms, bathrooms, property type, tenure, floor area, full address, coordinates, status (Available, Sold STC, Let agreed), date added or reduced, the estate agent with branch phone number, all photos in full size and the agent's key features.

Switch on **property page details** — free, no extra charge — and each property also gets its **full description, full postcode, lease years left, council tax band, service charge and ground rent, floorplans, EPC graph, brochures, nearest stations, room sizes and utilities**, and for rentals the **deposit, furnishing, let type and minimum term**.

No login, no cookies, no browser. The Actor reads the same JSON rightmove.co.uk loads when you turn a page, so 1,000 properties take about half a minute. Rightmove shows at most 1,008 properties per search — ask for more and the Actor splits a big search by price range by itself. Export to JSON, CSV or Excel, call it through the API, schedule it, or plug it into Make, n8n, Zapier or Google Sheets.

### What data can Rightmove Scraper extract?

| Field | Example |
|---|---|
| 🏠 `title`, `address` | 2 bedroom apartment for sale, Flat 44, 1 Cooper Avenue, Birmingham, B31 |
| 📍 `latitude`, `longitude`, `distanceMiles` | 52.394193, -1.987662 |
| 💷 `price`, `priceText`, `priceQualifier`, `currency` | 210000, £210,000, Guide Price, GBP |
| 💷 To rent: `priceFrequency`, `monthlyRent`, `availableFrom` | monthly, 1600, 2026-11-15 |
| 🛏 `bedrooms`, `bathrooms` | 2, 2 |
| 🏷 `propertyType`, `propertySubType`, `tenure` | Flat, Apartment, Leasehold |
| 📐 `sqft`, `sqm` | 576, 54 |
| 🚦 `status`, `listingType` | Available, Sold STC, Let agreed (or another status Rightmove shows), forSale |
| ⏱ `addedOrReduced`, `listingUpdateReason`, `listingUpdateDate`, `firstVisibleDate`, `daysOnMarket` | Added on 17/10/2026, new, 5 |
| 🧑‍💼 `agentName`, `agentBranch`, `agentPhone`, `agentUrl`, `agentLogoUrl` | A P Morgan, Longbridge, 0121 387 6717 |
| 🖼 `imageUrl`, `images`, `imageCount`, `floorplanCount`, `virtualTourCount` | full-size photo links, 9, 1 |
| ✅ `keyFeatures`, `summary`, `label` | Allocated Parking Space · Master Bedroom with En-Suite |
| 🔖 `id`, `url`, `isNewHome`, `isAuction`, `isFeatured`, `isPremiumListing` | 94426824 |
| ➕ Details: `description`, `postalCode`, `outcode`, `country` | full text, B31 2GT, England |
| ➕ Details: `leaseYearsRemaining`, `councilTaxBand`, `annualServiceCharge`, `annualGroundRent`, `pricePerSqft` | 245, B, 1100, 364.58 |
| ➕ Details: `floorplans`, `epcGraphUrl`, `brochures`, `virtualTours`, `rooms`, `features` | Lounge/Dining Room 5.31 x 3.60 |
| ➕ Details: `stations` | Longbridge Station, NATIONAL_TRAIN, 0.34 miles |
| ➕ Details, to rent: `deposit`, `furnished`, `letType`, `minimumTermMonths`, `secondaryPrice` | 7600, Unfurnished, Long term |

Fields Rightmove does not show for a property are left out of its row instead of being filled with empty values.

### How much does it cost to scrape Rightmove?

Pay per result — no monthly rent, no start fee:

| Event | Price | Results per $1 |
|---|---|---|
| Property (with property page details when you switch them on) | $0.00105 on every plan | ~950 properties |

The [Apify Free plan](https://apify.com/pricing) gives you $5 of credit every month — about **4,700 properties**, with or without details, without paying anything. Set **Max cost per run** when you start a run and the Actor stops cleanly at that amount: every row you get is paid for, nothing more. Error rows, "no results" rows and the summary row are free.

### How to scrape Rightmove properties

1. Click **Try for free** and open the Actor's input.
2. In **Locations**, type places the way you type them on Rightmove: `Manchester`, `Clapham, South West London`, `SW1A 1AA`, `M1` or `Cambridge Station`. Or paste Rightmove URLs into **Rightmove URLs**.
3. Pick **For sale** or **To rent**.
4. Add filters if you need them: price, bedrooms, property types, radius, added in the last N days, Sold STC / Let agreed, must have, don't show, furnishing.
5. Set **Max properties in total** and, if you want description, tenure, council tax and stations, switch on **Add property page details (free)**.
6. Click **Start** and download the results as JSON, CSV or Excel, or read them through the API.

### ⬇️ Input

```json
{
    "locations": ["Manchester", "SW1A 1AA"],
    "listingType": "forSale",
    "minPrice": 200000,
    "maxPrice": 400000,
    "minBedrooms": 3,
    "propertyTypes": ["detached", "semi-detached"],
    "radiusMiles": 1,
    "addedWithinDays": 7,
    "sort": "newest",
    "maxItems": 500,
    "includeDetails": true
}
```

Rightmove URLs keep all their filters: searches (`https://www.rightmove.co.uk/property-for-sale/find.html?locationIdentifier=REGION%5E904&minBedrooms=3&maxPrice=300000`), to-rent searches (`/property-to-rent/find.html?…`), pages like `/property-to-rent/London-87490/2-bed-flats.html` and single property pages (`/properties/94402467`).

### ⬆️ Output

One property with property page details (from a real run, lists shortened):

```json
{
  "type": "property",
  "id": 94426824,
  "url": "https://www.rightmove.co.uk/properties/94426824",
  "title": "2 bedroom apartment for sale",
  "address": "Flat 44, 1 Cooper Avenue, Birmingham, West Midlands, B31",
  "price": 210000,
  "priceText": "£210,000",
  "currency": "GBP",
  "bedrooms": 2,
  "bathrooms": 2,
  "propertyType": "Flat",
  "propertySubType": "Apartment",
  "tenure": "Leasehold",
  "sqft": 576,
  "sqm": 54,
  "latitude": 52.394193,
  "longitude": -1.987662,
  "listingType": "forSale",
  "status": "Available",
  "addedOrReduced": "Added on 17/10/2026",
  "firstVisibleDate": "2026-10-17T10:51:13Z",
  "daysOnMarket": 5,
  "keyFeatures": ["Two Double Bedroom Apartment", "Allocated Parking Space", "Master Bedroom with En-Suite Shower Room"],
  "agentName": "A P Morgan",
  "agentBranch": "Longbridge",
  "agentPhone": "0121 387 6717",
  "agentUrl": "https://www.rightmove.co.uk/estate-agents/agent/A-P-Morgan/Longbridge-237203.html",
  "imageUrl": "https://media.rightmove.co.uk/property-photo/3a9c7f699/94426824/3a9c7f699df89da8a9cbf28296c9510f.jpeg",
  "imageCount": 9,
  "floorplanCount": 1,
  "description": "Small home. Big location. Everything Longbridge has to offer, right on your doorstep.\n\nThis bright, beautifully presented two double bedroom apartment is set on the third floor…",
  "postalCode": "B31 2GT",
  "country": "England",
  "leaseYearsRemaining": 245,
  "councilTaxBand": "B",
  "annualServiceCharge": 1100,
  "pricePerSqft": 364.58,
  "floorplans": ["https://media.rightmove.co.uk/property-floorplan/6eb898c56/94426824/6eb898c565d8de565387bc39bd19efb9.jpeg"],
  "epcGraphUrl": "https://media.rightmove.co.uk/property-epc/9c255841c/94426824/9c255841cda726f366e7b7e196130e5b.png",
  "stations": [{ "name": "Longbridge Station", "types": ["NATIONAL_TRAIN"], "distanceMiles": 0.34 }],
  "rooms": [{ "name": "Lounge/Dining Room", "description": "5.31 x 3.60" }],
  "features": { "parking": ["Allocated"] },
  "searchLocation": "Birmingham"
}
```

A rental row adds `"priceText": "£5,500 pcm", "priceFrequency": "monthly", "monthlyRent": 5500, "availableFrom": "2026-09-01"` and, with details, `"deposit": 7600, "furnished": "Unfurnished", "letType": "Long term"`.

### Use cases

#### Property investors

Pull every property under your budget in your target towns each morning, with tenure, lease years, service charge and ground rent, and spot price reductions through `addedOrReduced` and `listingUpdateReason`.

#### Estate agents and lettings agents

Watch competitors' stock by branch, see what goes Sold STC or Let agreed, and build valuation comparables from price, size, bedrooms and postcode.

#### Mortgage brokers, conveyancers, removals and trades

Build lead lists from new listings with the agent's branch phone number and the property's area, refreshed daily with **Only new properties**.

#### Analysts and proptech teams

Feed typed rows into dashboards and models — coordinates for maps, `monthlyRent` for yields, stations and council tax bands for scoring.

#### AI agents

One call returns flat JSON with stable field names, so an AI agent (through the Apify API or MCP) can answer "which 2-bed flats under £1,500 pcm near Cambridge Station were added this week?" with real listings.

### Integrations

- **API**: start runs and read results from any language — see the API tab; Python (`apify-client`) and JavaScript (`apify-client`) are a few lines.
- **No-code**: Make, n8n, Zapier and Google Sheets connectors; webhooks when a run finishes.
- **Schedules**: run daily with **Only new properties** to get a feed of new listings, paid only for what is new.
- **MCP**: use the Actor as a tool from Claude, Cursor or any MCP client through Apify's MCP server.
- **Other portals**: the field names match our [Redfin Scraper](https://apify.com/lergassy/redfin-scraper) and [ImmoScout24 Scraper](https://apify.com/lergassy/immoscout24-scraper) where the meaning is the same (`price`, `latitude`, `longitude`, `listingType`, `status`, `images`, `imageCount`, `postalCode`, `daysOnMarket`), so you can merge portals in one table.

### Migrating from another Rightmove scraper?

| You used | Put it here |
|---|---|
| `startUrls` / `searchUrls` / `startUrl` with Rightmove links | `startUrls` (filters in the link are kept) |
| `searchLocation` / `search` | `locations` (a list — several places per run) |
| `searchLocationIdentifier` (`REGION^87490`) | `locations` — an identifier works there too |
| `channel: BUY / RENT`, `searchMode: propertySale / propertyRent` | `listingType: forSale / forRent` |
| `minPrice`, `maxPrice`, `minBeds` / `minBedrooms`, `maxBeds` / `maxBedrooms` | `minPrice`, `maxPrice`, `minBedrooms`, `maxBedrooms` |
| `propertyType` / `searchPropertyTypes` | `propertyTypes` |
| `radius` / `searchRadius` | `radiusMiles` |
| `maxDaysSinceAdded` | `addedWithinDays` |
| `includeSSTC` / `includeLetAgreed` | `includeSoldSTC` (covers both) |
| `sortType` (6, 2, 1, 10) | `sort` (newest, priceDesc, priceAsc, oldest) |
| `moreDetails` / `fetchFullDetails` / `includeDetails` | `includeDetails` (free here) |
| `maxItems` / `maxResults` | `maxItems` |
| `monitoringMode` / `monitoring` | `onlyNewRowsStore` |

### Troubleshooting

- **A place returns a different town** — type it the way Rightmove's own search box suggests it (with the county or area), give a postcode, or paste the Rightmove search URL. The town the Actor picked is in `searchLocation`.
- **No results** — you get a free row saying which place and filters found nothing; loosen the filters.
- **A weekly rent is below my minimum price** — Rightmove compares rents per month; see `monthlyRent` (weekly × 52 / 12).
- **Fewer properties than "match on Rightmove"** — raise **Max properties in total**; above 1,008 the Actor splits the search by price.
- **Properties out of order** — the first row of every results page is Rightmove's paid "featured property" (`isFeatured: true`); it matches your filters but not the sort.
- **A row has a `note`** — Rightmove did not open that property's page this time, so its details are missing; the search fields are complete.

### ❓ FAQ

#### Is it legal to scrape Rightmove?

The Actor collects only public listing information that anyone can see on rightmove.co.uk without logging in. Scraping public data is generally legal, but you are responsible for how you use it: check Rightmove's terms, respect UK GDPR (agent names and phone numbers are business contact data, but still personal data in some cases) and do not republish listing photos or descriptions as your own.

#### Do I need a Rightmove account or proxies?

No. The Actor works without login and handles blocking itself: it goes direct first and steps up to residential proxies and an unblocker only for search pages that get refused.

#### Are property page details really free?

Yes. They cost one extra page per property, which makes the run slower (about 50 properties in 5 seconds instead of 3), but the price per property stays the same.

#### Does it give price history or sold prices?

No. A Rightmove listing does not publish its own price history, and sold house prices are a separate part of the site. You get the current price, the qualifier and when the listing was added or last reduced.

#### Which areas does it cover?

All of the UK that Rightmove covers: England, Scotland, Wales and Northern Ireland, residential sale and rent. Commercial and overseas searches are not supported.

#### Can I get only new listings every day?

Yes — give **Only new properties — memory name** any name and schedule the Actor. Properties delivered before under that name are skipped and not charged.

### Your feedback

Something missing or wrong? Open an issue on the Actor's **Issues** tab — we read every one and usually fix within days.

### You might also like

| Actor | What it does |
|---|---|
| [Redfin Scraper](https://apify.com/lergassy/redfin-scraper) | US homes for sale, sold and for rent from Redfin |
| [ImmoScout24 Scraper](https://apify.com/lergassy/immoscout24-scraper) | German apartments and houses to rent and buy from ImmoScout24 |
| [Zillow Scraper](https://apify.com/lergassy/zillow-scraper) | US homes for sale, sold and for rent from Zillow |

# Actor input Schema

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

Give this or <code>startUrls</code>. One UK place per line, typed the way you would type it in Rightmove's search box: a town or city (<code>Manchester</code>), an area (<code>Clapham, South West London</code>), a postcode (<code>SW1A 1AA</code>), a postcode district (<code>M1</code>) or a station (<code>Cambridge Station</code>). All places are searched in one run.

## `listingType` (type: `string`):

Search properties for sale, or properties to rent (monthly or weekly rent).

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

Stop after this many properties across all locations. Rightmove itself shows at most 1,008 properties per search; ask for more and the Actor splits a big search by price range by itself. With several locations the limit is shared fairly.

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

Also open every property's own page and add its full description, full postcode, tenure and lease years left, council tax band, service charge and ground rent, size in sq ft / sq m, floorplans, EPC graph, brochures, nearest stations, rooms, utilities and (for rentals) deposit, furnishing and minimum term. No extra charge; the run is slower (one more page per property).

## `minPrice` (type: `integer`):

Only properties priced at least this much in pounds — the asking price for sale, the monthly rent (pcm) to rent.

## `maxPrice` (type: `integer`):

Only properties priced at most this much in pounds (monthly rent to rent).

## `minBedrooms` (type: `integer`):

At least this many bedrooms (0 = studio, up to 10).

## `maxBedrooms` (type: `integer`):

At most this many bedrooms (0 = studios only, up to 10).

## `propertyTypes` (type: `array`):

Only these kinds of property — Rightmove's own groups. Leave empty for all.

## `radiusMiles` (type: `number`):

Also include properties up to this many miles around the place. Rightmove's choices are 0.25, 0.5, 1, 3, 5, 10, 15, 20, 30 and 40 — another number is rounded to the nearest. Empty or 0 = this area only.

## `addedWithinDays` (type: `integer`):

Only properties added — or reduced in price — on Rightmove in the last N days (Rightmove's own "Added to site" filter). Rightmove's choices are 1, 3, 7 and 14 days — another number is rounded up to the next one.

## `includeSoldSTC` (type: `boolean`):

Rightmove hides properties already sold subject to contract or under offer (for sale) and let agreed (to rent) by default. Switch on to include them too — their status is in the <code>status</code> field.

## `mustHave` (type: `array`):

Only properties with all of these, as Rightmove tags them.

## `dontShow` (type: `array`):

Leave out properties of these kinds.

## `furnishTypes` (type: `array`):

To rent only: furnished, part furnished or unfurnished. Leave empty for all.

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

Order in which Rightmove returns properties — matters when you take fewer than all of them. "Newest" is Rightmove's "Newest listed" (recently added or reduced first).

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

Give this or <code>locations</code>. Paste Rightmove pages exactly as you set them up in the browser: a search with its filters (<code>https://www.rightmove.co.uk/property-for-sale/find.html?locationIdentifier=REGION%5E904\&minBedrooms=2</code>), a to-rent search, a page like <code>…/property-for-sale/London-87490/2-bed-houses.html</code>, or single property pages (<code>https://www.rightmove.co.uk/properties/94402467</code>). Filters in the address win over the fields above.

## `onlyNewRowsStore` (type: `string`):

Give this run a name — <code>my-manchester-watch</code> — and the Actor remembers every property it delivered under that name. Every later run with the same name writes and charges <b>only properties you have not received before</b>. Schedule the Actor daily to get a feed of new listings. Leave empty to get everything found, every time.

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

Not needed: the Actor reaches Rightmove directly and switches to a residential proxy, then to an unblocker, by itself only for search pages that get blocked. Set your own proxy only if you must — then it is used for every request.

## `includeRunSummary` (type: `boolean`):

One extra free row at the end with the run's totals: rows delivered, free rows, what was charged and how much in US dollars. It carries type "notice", so a filter on the data rows skips it. Switch off if your pipeline cannot tolerate an extra row.

## Actor input object example

```json
{
  "locations": [
    "Manchester"
  ],
  "listingType": "forSale",
  "maxItems": 50,
  "includeDetails": false,
  "includeSoldSTC": false,
  "sort": "newest",
  "includeRunSummary": true
}
```

# Actor output Schema

## `properties` (type: `string`):

One row per Rightmove property (type "property"), plus free rows for problems (type "error") and the run summary (type "notice").

## `allFields` (type: `string`):

Every field of every row, including images, key features and the property page details.

# 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"
    ],
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("lergassy/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"],
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("lergassy/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"
  ],
  "maxItems": 50
}' |
apify call lergassy/rightmove-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,lergassy/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/t62ckF8dInhKwIr0P/builds/W656VmjwUHfCyY9kH/openapi.json
