# 🚀 Zoopla Sold House Prices Scraper · 5,000 Free Records/Month (`omkar-cloud/zoopla-sold-house-prices-scraper`) Actor

Zoopla Sold House Prices Scraper gets you HM Land Registry sold prices for any UK area ⚡ fast and 🎯 100% accurate — address, sale date & price, property attributes, plus Zoopla's sale & rent estimate for any address. 💰 $1 per 1,000 records, no start fee. First 5,000 records free every month 🚀

- **URL**: https://apify.com/omkar-cloud/zoopla-sold-house-prices-scraper.md
- **Developed by:** [Chetan Jain](https://apify.com/omkar-cloud) (community)
- **Categories:** Real estate, Automation, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Zoopla Sold House Prices Scraper

Zoopla Sold House Prices Scraper by Omkar Cloud gets you 🎯 accurate, 🔍 detailed UK sold house price data.

Zoopla uses Cloudflare bot protection to stop you from getting its data.

Zoopla Sold House Prices Scraper beats it, so you get the data, and can successfully complete your project.

**$1 per 1,000 sold records.** And with Apify's free plan you get $5 of credit every month, so your first **~5,000 sold records each month are free**.

This is an excellent Actor made by Omkar Cloud, which is Rated Excellent — [4.7 based on 30 reviews on Trustpilot](https://www.trustpilot.com/review/omkar.cloud).

👉 [**Try Zoopla Sold House Prices Scraper free**](https://apify.com/omkar-cloud/zoopla-sold-house-prices-scraper) — your first ~5,000 sold records are Free.

### What can I get

- 🏠 **Sold prices for any UK area** — HM Land Registry records by town, borough, outcode or postcode, most recent sales first
- 💷 **Every sale's essentials** — address, postcode, UPRN, coordinates, last sale date & price
- 🛏️ **Property attributes** — bedrooms, bathrooms, living rooms, property type, tenure & floor area
- 📈 **Zoopla value estimates** — sale estimate with range & confidence, rent estimate, energy rating & value change since the sale, for sold records or any address

### Why Zoopla Sold House Prices Scraper

Most other Zoopla scrapers fail you in one of four ways:

- 🗄️ **Inaccurate, cached, stale data**
- 🧩 **Low-detail data** — a price and a date, never the property or its current value
- 💸 **Pay more to get the same data** — monthly rentals whether you scrape 10 records or 10,000
- 🪦 **Works today, breaks next month** — nobody maintains it

Zoopla Sold House Prices Scraper is scraped live on every run, priced honestly, and actively maintained.

### Example: A Sold Record with Value Estimate

```json
{
  "area": "CR2 9BE",
  "uprn": "100020684061",
  "address": "45 Princes Avenue, South Croydon, CR2 9BE",
  "postcode": "CR2 9BE",
  "outcode": "CR2",
  "country": "England",
  "latitude": 51.3203197,
  "longitude": -0.0666388,
  "link": "https://www.zoopla.co.uk/property/uprn/100020684061/",
  "last_sale": { "date": "2026-05-28", "price": 600000, "currency": "GBP" },
  "attributes": {
    "bedrooms": 4,
    "bathrooms": 2,
    "living_rooms": 2,
    "property_type": "Semi-Detached House",
    "tenure": "Freehold",
    "floor_area_sq_m": 149
  },
  "energy_rating": "C",
  "sale_estimate": {
    "amount": 627000,
    "lower": 596000,
    "upper": 659000,
    "currency": "GBP",
    "confidence": "HIGH",
    "value_change": { "amount": 27000, "percentage": 4.5, "since_sale_date": "2026-05-28" },
    "updated_at": "2026-08-14"
  },
  "rent_estimate": { "amount": 2100, "lower": 1850, "upper": 2300, "currency": "GBP", "frequency": "per_month" },
  "live_listings": []
}
```

*Trimmed for readability.*

### Get Started with 5,000 Free Records

1. [Hit **Try for Free Button**](https://apify.com/omkar-cloud/zoopla-sold-house-prices-scraper) — the input is pre-filled with the "NW3" and "Manchester" area examples.
2. Enjoy your data 😎.

### Pricing

High value, Low price.

| What | Price | What you get |
|---|---|---|
| **Sold records** | **$1 per 1,000** | address, postcode, UPRN, coordinates, last sale date & price, bedrooms, bathrooms, living rooms, property type, tenure, floor area + Zoopla link |
| **Estimated records** | $3 per 1,000 | Everything above + Zoopla's sale estimate with low/high range & confidence, value change since the last sale, rent estimate, energy rating, outcode & live listings — for sold records (toggle) or for any address/UPRN you give |

No start fee — you pay only for the rows you get, and the estimate rate only when Zoopla actually returns a valuation (a home without one is billed as a plain sold record). Control your spend with **Max Sold Records per Area**: 1,000 records ≈ $1.

💡 Apify's free plan includes $5 of credit every month — about **5,000 free sold records, every month**.

👉 [**Scrape your first 5,000 sold records free**](https://apify.com/omkar-cloud/zoopla-sold-house-prices-scraper)

### Run It from Code

Grab your API token from [Integrations Settings here](https://console.apify.com/settings/integrations) and replace `<YOUR_API_TOKEN>` below.

**Python** (`pip install apify-client`)

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("omkar-cloud/zoopla-sold-house-prices-scraper").call(run_input={
    "areas": ["NW3"],
    "addValueEstimate": True,
    "maxResultsPerArea": 10,
})
for record in client.dataset(run["defaultDatasetId"]).iterate_items():
    estimate = record.get("sale_estimate") or {}
    print(record["address"], record["last_sale"]["price"], estimate.get("amount"))
```

**Node.js** (`npm install apify-client`)

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

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('omkar-cloud/zoopla-sold-house-prices-scraper').call({
    addresses: ['45 Princes Avenue, South Croydon, CR2 9BE'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### 💬 Have Questions? We Have Answers.

You're a business owner — we know how hard completing a project can be. So we offer full support: just message us and we'll reply ✅ with a solution within 1 working day.

[![Message Us on WhatsApp about Zoopla Sold House Prices Scraper](https://raw.githubusercontent.com/omkarcloud/assets/master/images/whatsapp-us.png)](https://api.whatsapp.com/send?phone=918178804274\&text=I%20need%20help%20using%20the%20Zoopla%20Sold%20House%20Prices%20Scraper%20actor.)

[![Ask Us by Email about Zoopla Sold House Prices Scraper](https://raw.githubusercontent.com/omkarcloud/assets/master/images/ask-on-email.png)](mailto:happy.to.help@omkar.cloud?subject=Help%20with%20Zoopla%20Sold%20House%20Prices%20Scraper%20actor\&body=I%20need%20help%20using%20the%20Zoopla%20Sold%20House%20Prices%20Scraper%20actor.)

### Related Actors

- 🏠 [**Zoopla Scraper**](https://apify.com/omkar-cloud/zoopla-scraper) — live UK listings for sale, to rent & new homes with full details.
- 🏢 [**Zoopla Agents Scraper**](https://apify.com/omkar-cloud/zoopla-agents-scraper) — estate agent branches with phones & listings.

### Popular Actors by Omkar Cloud

- [**G2 Product Scraper**](https://apify.com/omkar-cloud/g2-product-scraper) — G2 product details, ratings & AI-found contacts
- [**Website Email Contact Scraper**](https://apify.com/omkar-cloud/website-email-contact-scraper) — emails, phones & socials from any website
- [**AliExpress Product Scraper**](https://apify.com/omkar-cloud/aliexpress-product-scraper) — live product details, SKU variants, stock & shipping
- [**Booking Scraper**](https://apify.com/omkar-cloud/booking-scraper) — Booking.com hotels: prices, ratings, rooms & amenities
- [**Etsy Scraper**](https://apify.com/omkar-cloud/etsy-scraper) — Etsy products: prices, discounts, shops & variations

👉 [**Scrape your first 5,000 sold records free now**](https://apify.com/omkar-cloud/zoopla-sold-house-prices-scraper)

# Actor input Schema

## `areas` (type: `array`):

UK areas, postcodes or outcodes to get sold prices for — each is scraped separately, e.g. `NW3`, `london/croydon`, `Manchester`, `CR2 9BE`. Rows carry an `area` field so you can tell areas apart. Leave empty to only value the addresses below.

## `addresses` (type: `array`):

Full UK addresses including the postcode, or bare UPRNs (Unique Property Reference Numbers — every sold record carries one). Rows carry an `input_address` field so you can match them back.

## `maxResultsPerArea` (type: `integer`):

Maximum number of sold records to scrape per area (most recent sales first). Use this to control your cost (1,000 records ≈ $1). Zoopla lists at most 10,000 sales per area. Ignored for addresses.

## `addValueEstimate` (type: `boolean`):

When enabled, every sold record is also valued by Zoopla — current sale estimate with low/high range and confidence, value change since the last sale, rent estimate, energy rating, outcode, and any live listings for the property. Still one dataset row per record, billed once at the estimated-record rate instead of the standard rate (1,000 estimated records ≈ $3 vs $1 standard). Runs take longer because each property is looked up individually.

## Actor input object example

```json
{
  "areas": [
    "NW3",
    "Manchester"
  ],
  "addresses": [
    "45 Princes Avenue, South Croydon, CR2 9BE",
    "100020684061"
  ],
  "maxResultsPerArea": 100,
  "addValueEstimate": false
}
```

# Actor output Schema

## `results` (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 = {
    "areas": [
        "NW3",
        "Manchester"
    ],
    "maxResultsPerArea": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("omkar-cloud/zoopla-sold-house-prices-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 = {
    "areas": [
        "NW3",
        "Manchester",
    ],
    "maxResultsPerArea": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("omkar-cloud/zoopla-sold-house-prices-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 '{
  "areas": [
    "NW3",
    "Manchester"
  ],
  "maxResultsPerArea": 100
}' |
apify call omkar-cloud/zoopla-sold-house-prices-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,omkar-cloud/zoopla-sold-house-prices-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/nm8jjuIEUS85wvnbo/builds/IgOokMwXQTsEcBhQd/openapi.json
