# Rightmove Scraper: Price Drops & Land Registry Sold Prices (`wellbuilt_zythem/rightmove-listings`) Actor

UK homes for sale on Rightmove by town, postcode district or search link, with Rightmove's own 'reduced on' date, new listings and price drops since your last run, and HM Land Registry sold prices in the same postcode district (median for the same property type). Optional full details.

- **URL**: https://apify.com/wellbuilt_zythem/rightmove-listings.md
- **Developed by:** [Carlos Escanez](https://apify.com/wellbuilt_zythem) (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 $1.80 / 1,000 rightmove scraper: price drops & land registry sold prices

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: Price Drops & Land Registry Sold Prices

Homes for sale on **Rightmove** by town, postcode district or search link, newest first, with three things other Rightmove scrapers do not give you:

- **Rightmove's own price-reduction flag and date** ("Reduced on 10/10/2026") on every listing, plus a filter to get only reduced homes.
- **What homes actually sold for nearby**, at two levels. Always: the **UK House Price Index** average for the home's local authority and property type (HM Land Registry, latest month). When the Land Registry's sales database answers: the sales registered in the home's **postcode district** in the last 12 months (count, median and average for the same property type), and the asking price compared with that median. Flats are compared with flats, terraced with terraced.
- **A memory between runs**: schedule it and get homes that are **new since your last run**, whose **price dropped since your last run**, and (optionally) homes that **left the market**.

Optional listing pages add the full postcode, size, lease years left, council tax band, service charge, agent phone, nearest station and the last five sales registered at that exact postcode.

### Example row (N5, 2026-10-18)

Two-bedroom flat on Grosvenor Avenue, asking **£625,000**. Land Registry: 158 flats sold in N5 in the last 12 months, median **£573,500**, so the asking price is **9 % above** the sold median. Lease 967 years, council tax band D, service charge £3,276 a year. Last sale at that postcode: a flat for £595,000 in January 2026.

### Input

```json
{
  "locations": ["N5", "Bristol", "https://www.rightmove.co.uk/property-for-sale/find.html?locationIdentifier=REGION%5E87490&minPrice=300000"],
  "pagesPerLocation": 3,
  "includeAreaSales": true,
  "includeDetails": false,
  "onlyChanges": false
}
```

- **Areas**: a town, a postcode district ("N5", "SW1A"), a Rightmove id ("OUTCODE^1683") or a Rightmove search link with your filters. Rightmove shows at most 42 pages (about 1,000 homes) per search, so for a big city give its postcode districts.
- **Rightmove filters**: price, bedrooms, property types, added in the last N days, include sold STC.
- **Only homes Rightmove marks as reduced**, **Asking price vs sold median, max %** (for example -10 keeps homes asking at least 10 % below what the same type sold for), **Only new listings and price drops since the last run**, **Include homes that left the market**.

### Output

| Field | Notes |
|---|---|
| `price`, `priceQualifier`, `propertyType`, `bedrooms`, `bathrooms`, `sizeSqFt`, `tenure` | from the search results |
| `rightmoveUpdate`, `rightmoveUpdateDate`, `isReducedByRightmove`, `reducedOn`, `firstListedAt` | Rightmove's own listing update: `new` or `price_reduced` |
| `outcode`, `outcodeSource` | postcode district from the address, or from the map pin via postcodes.io when the address has none (one in four) |
| `localAuthority`, `authorityIndexMonth`, `authorityAveragePrice`, `authorityAverageSameType`, `authorityAnnualChangePct`, `priceVsAuthorityAveragePct` | UK House Price Index for the local authority, always present |
| `sameTypeSales`, `sameTypeMedianPricePaid`, `sameTypeAveragePricePaid`, `priceVsSameTypeMedianPct` | Land Registry sales of the same property type in the postcode district, when its database answered (see below) |
| `areaSales`, `areaMedianPricePaid`, `areaLatestSaleDate`, `priceVsAreaMedianPct` | all property types in the district |
| `isNewSinceLastRun`, `previousPrice`, `priceChange`, `priceChangePct`, `firstSeenAt` | memory between runs |
| `postcode`, `listingHistory`, `tenureYearsLeft`, `councilTaxBand`, `annualServiceCharge`, `annualGroundRent`, `agentCompany`, `agentPhone`, `nearestStation`, `keyFeatures`, `description`, `recentSalesAtPostcode` | with **Open each listing's page** |
| `agent`, `latitude`, `longitude`, `image`, `images`, `summary`, `url` | |

Rows with `recordType: "off_market"` are homes seen in the previous run that are no longer listed; they are delivered only with **Include homes that left the market** and when every page of the area was read.

#### What this Actor does not deliver

- **The seller's name or contact.** Rightmove publishes the agent, not the owner.
- **The exact address.** Rightmove gives the street and, on the listing page, the full postcode; the house number is not published.
- **Sold prices for Scotland and Northern Ireland.** HM Land Registry covers England and Wales. Rightmove listings there come without the sold-price comparison.
- **This month's sales.** HM Land Registry publishes sales about 4 to 8 weeks after completion.
- **More than about 1,000 homes per search.** That is Rightmove's limit; split a city by postcode districts.

### Speed and cost

Measured on 2026-10-18 from Apify without a proxy:

- One result page (24 homes) in about a second. Listing pages: about 2 per second. The local-authority index: instant.
- The Land Registry sales database (SPARQL) is slow and sometimes refuses: 20-65 seconds per postcode district, two districts at a time, and on 2026-10-18 it answered 22 of 30 districts in a London run (the others gave 429 or 503). **Its results are kept for 7 days in the feed memory**, so a scheduled feed pays that cost once a week: a page of London took 5 minutes the first time and 42 seconds the next. At most 40 new districts per run; homes in districts without an answer still get the local-authority comparison.
- Measured on 2026-10-18: 5 pages of London (125 homes, 56 reduced by Rightmove) with 50 listing pages and the sales comparison took 18 minutes and $0.06 of platform cost the first time.

No proxy is needed.

### Pricing

Pay per event: `listing` for each home delivered, plus `listing_details` for each home whose page was opened. Off-market rows and the Land Registry comparison are included.

# Actor input Schema

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

One per line: a town ("Bristol"), a postcode district ("N5", "SW1A"), a Rightmove id ("OUTCODE^1683") or a Rightmove search link with your filters. Rightmove shows at most 42 pages (about 1,000 homes) per area: for a big city, give its postcode districts.

## `pagesPerLocation` (type: `integer`):

Result pages per area, 24 homes each, newest first. 1 to 42.

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

Rightmove search filter.

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

Rightmove search filter.

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

Rightmove search filter.

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

Rightmove search filter.

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

Rightmove search filter: detached, semi-detached, terraced, flat, bungalow, land, park-home.

## `maxDaysSinceAdded` (type: `integer`):

Rightmove search filter: 1, 3, 7 or 14.

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

Also list homes already under offer.

## `onlyReduced` (type: `boolean`):

Deliver only listings whose last update on Rightmove was a price reduction.

## `includeAreaSales` (type: `boolean`):

For each postcode district, the sales HM Land Registry registered in the last months: count and median price for the same property type, and the asking price compared with it. One query per district, 25 to 45 seconds each.

## `areaMonths` (type: `integer`):

1 to 36.

## `maxPriceVsSameTypeMedianPct` (type: `integer`):

Deliver only homes whose asking price is at most this % above the median sold price of the same type in their district. -10 keeps homes asking 10 % below it. Needs the Land Registry comparison.

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

Adds the full postcode, size, lease years left, council tax band, service charge, agent phone, nearest station, key features, description, and the last 5 sales HM Land Registry registered at that exact postcode. One extra request per home.

## `maxDetails` (type: `integer`):

Listing pages opened per run, at most 500.

## `onlyChanges` (type: `boolean`):

Deliver only homes not seen in the previous run of this feed, or whose price fell at least "Price drop %" since then. On the first run of an area, only homes Rightmove marks as reduced.

## `priceDropThresholdPct` (type: `integer`):

A home counts as a price drop when its price is at least this much lower than in the last run.

## `includeOffMarket` (type: `boolean`):

Also deliver homes seen in the previous run that are no longer listed (sold, withdrawn or re-listed), when all pages of the area were read.

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

Cap for the run. Empty for no cap.

## `stateStoreName` (type: `string`):

Key-value store that remembers the homes and prices seen. One name per feed, the same every run.

## `resetState` (type: `boolean`):

Start the feed memory from scratch in this run: everything will count as new.

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

Not needed: measured without proxy from Apify.

## Actor input object example

```json
{
  "locations": [
    "N5"
  ],
  "pagesPerLocation": 1,
  "includeSoldSTC": false,
  "onlyReduced": false,
  "includeAreaSales": true,
  "areaMonths": 12,
  "includeDetails": false,
  "maxDetails": 100,
  "onlyChanges": false,
  "priceDropThresholdPct": 1,
  "includeOffMarket": false,
  "stateStoreName": "rightmove-listings-seen",
  "resetState": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

No description

## `runSummary` (type: `string`):

No 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 = {
    "locations": [
        "N5"
    ],
    "pagesPerLocation": 1,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("wellbuilt_zythem/rightmove-listings").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": ["N5"],
    "pagesPerLocation": 1,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("wellbuilt_zythem/rightmove-listings").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": [
    "N5"
  ],
  "pagesPerLocation": 1,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call wellbuilt_zythem/rightmove-listings --silent --output-dataset

```

## MCP server setup

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

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/kYNMf3ux38tNgG21j/builds/EgTPJCgghNqlwm8Jv/openapi.json
