# 🚀 Zoopla Agents Scraper · 2,500 Free Branches/Month (`omkar-cloud/zoopla-agents-scraper`) Actor

Zoopla Agents Scraper gets you every estate agent branch in any UK location ⚡ fast and 🎯 100% accurate — phone, address, logo, listing stats, full profiles & live listings. Ready-to-call UK estate agent leads. 💰 $2 per 1,000 branches, no start fee. First 2,500 branches free every month 🚀

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

## Pricing

from $2.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 Agents Scraper

Zoopla Agents Scraper by Omkar Cloud gets you 🎯 accurate, 🔍 detailed UK estate agent leads from Zoopla.

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

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

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

### What can I get

- 📍 **Every agent branch in a location** — name, address, phone, logo & description, for sales and/or lettings agents
- 📊 **Listing stats per branch** — available listings, average asking price & weeks on market, for sale and to rent
- 🏢 **Full branch profiles** — postcode, coordinates, memberships, social links & opening times
- 🏠 **Live listings per branch** — price, beds, baths, listed date & photo for each branch's for-sale or to-rent stock

### Why Zoopla Agents Scraper

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

- 🗄️ **Inaccurate, cached, stale data**
- 🧩 **Low-detail data** — a name and a link, never the phone number or the listing stats
- 💸 **Pay more to get the same data** — monthly rentals and start fees
- 🪦 **Works today, breaks next month** — nobody maintains it

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

### Example: A Zoopla Estate Agent Branch

```json
{
  "row_type": "branch",
  "location": "London",
  "branch_id": 73315,
  "name": "/Sinclair Hammelton - Hayes",
  "link": "https://www.zoopla.co.uk/find-agents/branch/sinclair-hammelton-hayes-hayes-73315/",
  "address": "57 Station Approach, Hayes",
  "postcode": "BR2 7EB",
  "outcode": "BR2",
  "latitude": 51.376397,
  "longitude": 0.011508,
  "phone": "020 8115 4722",
  "logo": "https://st.zoocdn.com/zoopla_static_agent_logo_(684007).png",
  "is_featured": true,
  "description": "When it comes to selling or letting your property, the staff at Sinclair Hammelton understand that no two clients are the same. Not everyone requires or indeed needs a high-profile marketing campaign, and so we listen carefully to each client's individual requirements. ...",
  "memberships": [
    { "name": "The Property Ombudsman", "link": "https://www.zoopla.co.uk/tips/agent-affiliation-tpo/" }
  ],
  "listings_statistics": {
    "residential": {
      "for_sale": { "available_listings": 29, "average_asking_price": 911517, "average_weeks_on_market": 18 },
      "to_rent": null
    },
    "commercial": { "for_sale": null, "to_rent": null }
  }
}
```

*Trimmed for readability. Standard rows carry everything except postcode, outcode, coordinates, memberships, social links and opening times — those come with full profiles.*

With **Scrape Each Branch's Live Listings** on, every listing of the branch is its own row:

```json
{
  "row_type": "listing",
  "location": "London",
  "branch_id": 73315,
  "branch_name": "/Sinclair Hammelton - Hayes",
  "section": "for-sale",
  "id": "74070066",
  "title": "3 bed detached bungalow for sale",
  "link": "https://www.zoopla.co.uk/for-sale/details/74070066/",
  "summary": "Guide price: £775,000- £800,000. Situated on the sought-after Lakes Road in Keston, we are delighted to offer to the market this modern ...",
  "price": { "amount": 775000, "currency": "GBP", "label": "£775,000", "qualifier": "Guide price" },
  "bedrooms": 3,
  "bathrooms": 2,
  "living_rooms": 2,
  "listed_on": "2026-08-26",
  "is_under_offer": false,
  "phone": "020 8115 4722",
  "media": { "main_image": "https://lid.zoocdn.com/645/430/f96f9d75ea498676a3bd009eb21412f47ecca21c.jpg", "main_image_caption": "1487392 (3).Jpg" }
}
```

### Get Started with 2,500 Free Branches

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

### Pricing

High value, Low price.

| What | Price | What you get |
|---|---|---|
| **Standard branches** | **$2 per 1,000** | branch id, name, address, phone, logo, description, featured flag, listing statistics (available listings, average asking price & weeks on market — for sale and to rent) + location context |
| **Detailed branches** | $3 per 1,000 | Everything above + postcode, outcode, latitude/longitude, memberships, social links, opening times |
| **Listings** | $2 per 1,000 | One row per live listing of a branch — title, price, bedrooms, bathrooms, living rooms, listed date, under-offer flag, phone, main photo & link, with the branch's id and name |

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

💡 Apify's free plan includes $5 of credit every month — about **2,500 free branches (or 1,666 detailed branches), every month**.

👉 [**Scrape your first 2,500 branches free**](https://apify.com/omkar-cloud/zoopla-agents-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-agents-scraper").call(run_input={
    "locations": ["Manchester"],
    "scrapeBranchDetails": True,
    "maxResultsPerLocation": 10,
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row["name"], row["phone"], row["postcode"])
```

**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-agents-scraper').call({
    locations: ['London'],
    searchType: 'lettings',
    scrapeBranchListings: true,
    listingsSection: 'to-rent',
});
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 Agents 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%20Agents%20Scraper%20actor.)

[![Ask Us by Email about Zoopla Agents Scraper](https://raw.githubusercontent.com/omkarcloud/assets/master/images/ask-on-email.png)](mailto:happy.to.help@omkar.cloud?subject=Help%20with%20Zoopla%20Agents%20Scraper%20actor\&body=I%20need%20help%20using%20the%20Zoopla%20Agents%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. $1 per 1,000 listings.
- 💷 [**Zoopla Sold House Prices Scraper**](https://apify.com/omkar-cloud/zoopla-sold-house-prices-scraper) — sold prices & value estimates for any UK address.

### 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 2,500 branches free now**](https://apify.com/omkar-cloud/zoopla-agents-scraper)

# Actor input Schema

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

UK locations to find estate agents in, as free text (e.g. `London`, `Birmingham`, `Manchester`, `SW1A`). Rows carry a `location` field so you can tell searches apart. Leave empty to scrape only branch URLs.

## `searchType` (type: `string`):

Filter to sales or lettings agents. Leave on All for both.

## `branchUrls` (type: `array`):

Zoopla branch page URLs and/or numeric branch ids — you can mix them. Branch pages are always scraped with the full profile (billed at the detailed-branch rate).

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

Maximum number of branches to scrape per location. Use this to control your cost (1,000 branches ≈ $2). Zoopla paginates 25 branches per page, up to 200 pages per location. Ignored for branch URLs.

## `scrapeBranchDetails` (type: `boolean`):

When enabled, every search result is also fetched from its branch page and merged into the row — postcode, outcode, latitude/longitude, memberships (e.g. The Property Ombudsman), social links, and opening times. Still one dataset row per branch, billed once at the detailed-branch rate instead of the standard rate (1,000 detailed branches ≈ $3 vs $2 standard). Runs take longer because each branch page is fetched individually.

## `scrapeBranchListings` (type: `boolean`):

When enabled, every branch's live listings are fetched too and pushed as their own dataset rows (`row_type: "listing"`) carrying the `branch_id` and `branch_name` they belong to — title, price, bedrooms, bathrooms, living rooms, listed date, under-offer flag, phone, main photo, and link. Listing rows are billed at the standard rate (1,000 listings ≈ $2).

## `listingsSection` (type: `string`):

Which listings to return for each branch: properties for sale or properties to rent. Only used when Scrape Each Branch's Live Listings is enabled.

## `maxListingsPerBranch` (type: `integer`):

Maximum number of listing rows to push per branch. Zoopla's branch page exposes the branch's featured listings for the section, so a branch may return fewer than this cap. Only used when Scrape Each Branch's Live Listings is enabled.

## Actor input object example

```json
{
  "locations": [
    "London",
    "Birmingham"
  ],
  "searchType": "",
  "branchUrls": [
    "https://www.zoopla.co.uk/find-agents/branch/sinclair-hammelton-hayes-hayes-73315/",
    "https://www.zoopla.co.uk/find-agents/branch/100-key-properties-essex-116171/",
    "58113"
  ],
  "maxResultsPerLocation": 100,
  "scrapeBranchDetails": false,
  "scrapeBranchListings": false,
  "listingsSection": "for-sale",
  "maxListingsPerBranch": 25
}
```

# 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",
        "Birmingham"
    ],
    "maxResultsPerLocation": 100,
    "maxListingsPerBranch": 25
};

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

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

```

## MCP server setup

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