# 🚀 Zoopla Scraper · 5,000 Free Listings/Month (`omkar-cloud/zoopla-scraper`) Actor

Zoopla Scraper gets you Zoopla data ⚡ fast, 🎯 100% accurate and 🔍 ridiculously detailed — UK homes for sale, to rent & new homes, full listing details, EPC, floor plans & agent phone. 💰 $1 per 1,000 listings, no start fee. Scrape your first 5,000 listings free every month 🚀

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

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

Zoopla Scraper by Omkar Cloud gets you 🎯 accurate, 🔍 detailed Zoopla data.

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

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

**$1 per 1,000 listings.** And with Apify's free plan you get $5 of credit every month, so your first **~5,000 listings 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 Scraper free**](https://apify.com/omkar-cloud/zoopla-scraper) — your first ~5,000 listings are Free.

### What can I get

- 🏠 **For sale, to rent & new homes** — search any UK town, area, postcode or outcode; filter by price, bedrooms, property type, furnishing, date added, keywords & radius
- 📞 **Agent name & phone on every row** — plus price, beds, baths, floor area, photos, tags & the Zoopla link
- 📋 **Full details** — description, features, tenure, price history, EPC rating, coordinates, postcode & UPRN, nearest stations, service charge & council tax, floor plans
- 🔗 **Any listing URL** — paste zoopla.co.uk listing links and get the full profile back

### Why Zoopla Scraper

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

- 🗄️ **Inaccurate, cached, stale data**
- 🧩 **Low-detail data** — a few fields per listing, never the full picture
- 💸 **Pay more to get the same data**
- 🪦 **Works today, breaks next month** — nobody maintains it

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

### Example: A Full Zoopla Listing

```json
{
  "id": "74079940",
  "title": "2 bed flat for sale",
  "address": "Church Walk, London NW2",
  "link": "https://www.zoopla.co.uk/for-sale/details/74079940/",
  "section": "for-sale",
  "property_type": "flat",
  "published_at": "2026-08-27T07:42:54",
  "description": "A charming two-bedroom ground floor flat situated on the peaceful and picturesque Church Walk, NW2. Spanning over 600 sq ft, the property offers two well-proportioned double bedrooms and the added benefit of its own private entrance.",
  "features": ["Own Entrance", "Quiet Street", "Over 600sqft of Internal Space", "Ground Floor", "Period Facade", "Residents Parking"],
  "tags": ["Leasehold"],
  "bedrooms": 2,
  "bathrooms": 1,
  "living_rooms": 1,
  "floor_area": { "size_sqft": 646, "source": "structured_data" },
  "price": { "amount": 425000, "currency": "GBP", "label": "£425,000", "price_per_floor_area": { "internalValue": 658, "label": "£658/sq. ft" }, "is_auction": false },
  "tenure": "leasehold",
  "is_chain_free": false,
  "location": { "latitude": 51.561034, "longitude": -0.197528, "street_name": "Church Walk", "postcode": "NW2 2TJ", "outcode": "NW2", "town": "London", "uprn": "200228980" },
  "epc": { "rating": "C", "images": ["https://lid.zoocdn.com/645/430/0ce4f1e84c5ea2db57e1316b2a288d6507fab676.png"] },
  "nearest_stations": [
    { "name": "Cricklewood", "distance_miles": 0.7 },
    { "name": "Golders Green", "distance_miles": 0.8 }
  ],
  "property_info": [
    { "name": "Tenure", "value": "Leasehold (111 years)" },
    { "name": "Service charge", "value": "£600 per year" },
    { "name": "Ground rent", "value": "£250" }
  ],
  "media": {
    "images": ["https://lid.zoocdn.com/645/430/2ceaffdf3328428915bf741ae20a48ea0d3af506.jpg"],
    "floor_plans": ["https://lid.zoocdn.com/645/430/78fc53a54cefcf9cc0228473edfdc1765c692443.jpg"]
  },
  "agent": { "branch_id": 419, "name": "Chancellors - Hampstead", "brand_name": "Chancellors", "phone": "020 3478 2899", "lettings_phone": "020 3463 0166", "link": "https://www.zoopla.co.uk/find-agents/branch/chancellors-hampstead-london-419/" }
}
```

*Trimmed for readability.*

### Get Started with 5,000 Free Listings

1. [Hit **Try for Free Button**](https://apify.com/omkar-cloud/zoopla-scraper) — the input is pre-filled with a "London" and "Manchester" homes-for-sale search example.
2. Enjoy your data 😎.

### Pricing

High value, Low price.

| What | Price | What you get |
|---|---|---|
| **Standard listings** | **$1 per 1,000** | id, title, address, price, bedrooms, bathrooms, receptions, floor area, listed-on date, tags, photos, agent name & phone + search context |
| **Detailed listings** | $2.50 per 1,000 | Everything above + description, features, tenure, price history, EPC rating, coordinates, postcode & UPRN, nearest stations, service charge / council tax / ground rent, all photos, floor plans, agent brand & lettings phone |

No start fee — you pay only for the rows you get. Control your spend with **Max Listings per Location**: 1,000 listings ≈ $1.

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

👉 [**Scrape your first 5,000 listings free**](https://apify.com/omkar-cloud/zoopla-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-scraper").call(run_input={
    "locations": ["London"],
    "section": "for-sale",
    "bedsMin": 2,
    "priceMax": 500000,
    "scrapeListingDetails": True,
    "maxResultsPerLocation": 10,
})
for listing in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(listing["address"], listing["price"]["label"], listing["agent"]["phone"])
```

**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-scraper').call({
    listingUrls: ['https://www.zoopla.co.uk/for-sale/details/74017763/'],
});
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 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%20Scraper%20actor.)

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

### Related Actors

- 🏷️ [**Zoopla Sold House Prices Scraper**](https://apify.com/omkar-cloud/zoopla-sold-house-prices-scraper) — sold prices & value estimates for any UK address.
- 🏢 [**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 listings free now**](https://apify.com/omkar-cloud/zoopla-scraper)

# Actor input Schema

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

UK towns, areas, postcodes or outcodes (`London`, `Manchester`, `NW3`), Zoopla location slugs (`notting-hill`, `london/croydon`), or pasted zoopla.co.uk search-results URLs (their embedded filters and section are applied). Each is searched separately. Rows carry a `search_location` field so you can tell locations apart. Leave empty to scrape only listing URLs.

## `section` (type: `string`):

Which Zoopla listings to search: homes for sale, homes to rent, or new-build homes. A pasted search URL uses its own section.

## `priceMin` (type: `integer`):

Minimum price (GBP). For rentals this is the monthly rent.

## `priceMax` (type: `integer`):

Maximum price (GBP). For rentals this is the monthly rent.

## `bedsMin` (type: `integer`):

Minimum number of bedrooms.

## `bedsMax` (type: `integer`):

Maximum number of bedrooms.

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

Filter by property type. Leave on Any for all types.

## `furnishedState` (type: `string`):

Filter rentals by furnishing. Only applies to the To rent section — ignored for sales and new homes.

## `added` (type: `string`):

Only properties added within this window.

## `keywords` (type: `string`):

Free-text keywords to match in the listing (e.g. `garden`, `garage`, `chain free`).

## `radius` (type: `integer`):

Search radius in miles around the location (0–40).

## `sortBy` (type: `string`):

Result ordering.

## `listingUrls` (type: `array`):

Zoopla listing URLs like `https://www.zoopla.co.uk/for-sale/details/74017763/` or bare listing ids like `74017763`. Always scraped with full details (billed at the detailed-listing rate).

## `maxResultsPerLocation` (type: `integer`):

Maximum number of listings to scrape per location or search URL. Use this to control your cost (1,000 listings ≈ $1). Ignored for listing URLs.

## `scrapeListingDetails` (type: `boolean`):

When enabled, every search result is also scraped in full — description, features, tenure, price history, EPC rating, coordinates, postcode & UPRN, nearest stations, service charge / council tax / ground rent, all photos, floor plans, and the agent's brand & lettings phone. Still one dataset row per listing, billed once at the detailed-listing rate instead of the standard rate (1,000 detailed listings ≈ $2.50 vs $1 standard). Runs take longer because each listing page is fetched individually.

## Actor input object example

```json
{
  "locations": [
    "London",
    "Manchester"
  ],
  "section": "for-sale",
  "propertyType": "",
  "furnishedState": "",
  "added": "",
  "sortBy": "newest",
  "listingUrls": [
    "https://www.zoopla.co.uk/for-sale/details/74017763/",
    "74079940"
  ],
  "maxResultsPerLocation": 100,
  "scrapeListingDetails": 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 = {
    "locations": [
        "London",
        "Manchester"
    ],
    "maxResultsPerLocation": 100
};

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

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

```

## MCP server setup

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