# rightmove sold prices (`noahadler/rightmove-sold-prices`) Actor

Rightmove sold prices from the UK house-prices page (default London). Each row is a sold-price record with GBP price, sold date, address and property id, plus type, bedrooms and tenure when Rightmove shows them. Not for-sale or to-rent ads, and not the owner name or phone.

- **URL**: https://apify.com/noahadler/rightmove-sold-prices.md
- **Developed by:** [Noah Adler](https://apify.com/noahadler) (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 $3.50 / 1,000 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.

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 sold prices

**Rightmove sold prices** from the public [house-prices](https://www.rightmove.co.uk/house-prices/london.html) page. Default place is **London**.

Each dataset row is one **sold price** printed on that page: GBP amount, sold date, address and property id. Property type, bedrooms and tenure are included when Rightmove shows them on the card. A home can have more than one past sale, so one card can produce more than one row. Older sales hidden behind “view more” are not on the results page and are not invented.

This is not a for-sale search and not a to-rent search. It does not return the owner name or phone.

> **Input:** `location` (place or a `/house-prices/{place}.html` URL) and `maxItems`.\
> **Output:** one dataset row per sold price.

The icon is a geometric mark in Rightmove green. It is not the Rightmove logo or wordmark.

***

### What you get

| Field | Meaning |
|-------|---------|
| `priceGbp` | Sold price in GBP |
| `soldDate` | Date printed next to that price |
| `address` | Address on the card |
| `propertyId` | Rightmove house-prices id |
| `propertyUrl` | House-prices detail URL |
| `propertyType` | Terraced, flat, and so on, when shown |
| `bedrooms` | Bedroom count when shown |
| `tenure` | Freehold or leasehold when shown |

***

### Input

| Field | Required | Description |
|-------|----------|-------------|
| `location` | No | Place (`london`) or a house-prices URL. Default `london`. |
| `maxItems` | No | Max sold-price rows, 1–200. Default 20. |
| `maxPages` | No | Result pages (`pageNumber`). Default 2. |
| `proxyConfiguration` | No | Off by default. If Rightmove blocks the run, it retries once with RESIDENTIAL GB. |

#### Try it example

```json
{
  "location": "london",
  "maxItems": 20
}
```

***

### Limitations

- Only the sold prices shown on the house-prices results, not a full deed archive.
- No owner name, no phone, no for-sale or to-rent ads.
- If the page is a live listing search, the run stops. It does not scrape those ads.

# Actor input Schema

## `location` (type: `string`):

UK place for https://www.rightmove.co.uk/house-prices/{place}.html, or that full URL. Example: london. Not a for-sale or to-rent search.

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

Maximum sold-price rows to return (1–200). One property can contribute more than one past sale.

## `maxPages` (type: `integer`):

House-prices result pages to open (pageNumber). Stops early when maxItems is reached.

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

Leave Apify Proxy off. If Rightmove blocks the run, the actor retries once with RESIDENTIAL GB.

## Actor input object example

```json
{
  "location": "london",
  "maxItems": 20,
  "maxPages": 2,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `soldPrices` (type: `string`):

GBP sold-price rows with address or property id.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("noahadler/rightmove-sold-prices").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

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

```

## MCP server setup

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

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/hiJ1ExMWAbgaSDgdU/builds/dNvfAUyq6Rgb5dM1y/openapi.json
