Zoopla Property Scraper avatar

Zoopla Property Scraper

Pricing

from $0.69 / 1,000 property listings

Go to Apify Store
Zoopla Property Scraper

Zoopla Property Scraper

Scrape Zoopla property listings by search URL, location, bedrooms, price, and property type. Extract price, size, beds, baths, agent, and photo data as JSON, CSV, or Excel.

Pricing

from $0.69 / 1,000 property listings

Rating

0.0

(0)

Developer

ParseBird

ParseBird

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Zoopla Property Scraper

Scrape Zoopla property listings for sale anywhere in the UK — no coding, no API key, no browser required. Point the Zoopla Property Scraper at a search URL, a location, or a postcode, and get structured price, size, bedroom, agent, and photo data as clean JSON, CSV, or Excel.

Search any UK city or postcode on Zoopla.co.uk, filter by bedrooms, price range, and property type, and get 30+ structured data fields per listing — including price history, floor size, agent contact details, and full photo galleries.

Copy to your AI assistant

Use the Apify Actor "parsebird/zoopla-property-scraper" to scrape Zoopla.co.uk property listings. Call it with the ApifyClient: from apify_client import ApifyClient; client = ApifyClient("<APIFY_TOKEN>"); run = client.actor("parsebird/zoopla-property-scraper").call(run_input={"startUrl": "https://www.zoopla.co.uk/for-sale/property/london/?q=London&search_source=home&recent_search=true", "results_wanted": 20}); items = client.dataset(run["defaultDatasetId"]).list_items().items. Key inputs: startUrl (string, a full Zoopla search-results URL), location (string, e.g. "london" or a postcode like "SW1A", overrides the URL's location), minBedrooms/maxBedrooms (integer), minPrice/maxPrice (integer, GBP), propertyType (string, "houses" or "flats"), results_wanted (integer, default 20), proxyConfiguration (object, default Apify Unblocker proxy for UK). Output fields per listing include listingId, title, address, postalCode, propertyType, price, priceValue, priceCurrency, beds, baths, receptions, sizeSqft, summaryDescription, priceDrop, features, tags, underOffer, image, gallery, branch (agent name/phone/id), url, detailUrl, contactUrl, pagination, and scrapedAt. Full API docs and schema: https://apify.com/parsebird/zoopla-property-scraper/api

What does Zoopla Property Scraper do?

Zoopla is one of the UK's largest property portals, listing hundreds of thousands of homes for sale and to rent. The Zoopla Property Scraper extracts structured data from Zoopla search results without you writing a single line of scraping code — it's a ready-to-run Zoopla API alternative for anyone who needs Zoopla data at scale.

With this Zoopla scraper you can:

  • 🔍 Search by any UK location or postcode — cities, towns, or postcode areas like SW1A
  • 🏠 Filter by minimum/maximum bedrooms, price range, and property type (houses or flats)
  • 🖼️ Pull full photo galleries, floor size, price-drop history, and estate agent contact details for every listing
  • 📈 Monitor a market over time by scheduling recurring runs and tracking price changes and new listings
  • 🔗 Integrate results directly into Google Sheets, Airtable, Make, Zapier, or your own pipeline via Apify's API and integrations

Unlike scraping Zoopla yourself with requests or Selenium, this Actor already handles Zoopla's Cloudflare bot protection, pagination, and the site's internal data format — you just provide a search URL or filters and get clean rows back.

What data can you extract from Zoopla?

FieldDescription
listingIdZoopla's unique listing identifier
titleListing title (e.g. "3 bed semi-detached house for sale")
addressFull address text as shown on Zoopla
postalCodeUK postcode or postcode area extracted from the address
propertyTypeZoopla property type (flat, terraced, semi_detached, detached, etc.)
price / priceValue / priceCurrencyFormatted and numeric asking price, with currency
beds / baths / receptionsBedroom, bathroom, and reception room counts
sizeSqftFloor size in square feet, when Zoopla provides it
priceDropPrice change history, when available
underOfferWhether the listing is marked under offer
branchEstate agent name, phone number, and branch ID
galleryFull-size URLs for every photo in the listing gallery
url / detailUrl / contactUrlAbsolute links to the listing and its contact form

See the Output example below for the full JSON shape, including features, tags, searchContext, and pagination metadata.

How to scrape Zoopla property listings

  1. Open the Zoopla Property Scraper on Apify and click Try for free.
  2. Paste a Zoopla search URL — for example, open zoopla.co.uk, run a search for the location you want, and copy the resulting URL into the startUrl field. Alternatively, just set the location field (city name or postcode).
  3. Set optional filtersminBedrooms, maxBedrooms, minPrice, maxPrice, and propertyType narrow the search without editing the URL by hand.
  4. Set results_wanted to the number of listings you need.
  5. Click Start and download your results as JSON, CSV, Excel, or HTML once the run finishes.

How much does it cost to scrape Zoopla?

The Zoopla Property Scraper uses pay-per-result pricing — you only pay for listings actually returned, not for compute time or failed requests. See the Pricing section below for the exact rate. Scraping 1,000 listings costs under a dollar; a typical run of 20–50 listings costs a few cents. Apify's free monthly platform credits cover a meaningful number of runs before any paid usage kicks in.

Input

ParameterTypeRequiredDefaultDescription
startUrlstringNoLondon search URLA public Zoopla search-results URL, including location and any filters supported by Zoopla's URL parameters
locationstringNolondonZoopla location slug (e.g. manchester) or UK postcode (e.g. SW1A). Overrides the location in startUrl and updates its q parameter
minBedroomsintegerNoMinimum bedrooms, sent as Zoopla's beds_min filter
maxBedroomsintegerNoMaximum bedrooms, sent as Zoopla's beds_max filter
minPriceintegerNoMinimum asking price in GBP, sent as price_min
maxPriceintegerNoMaximum asking price in GBP, sent as price_max
propertyTypestringNoAnyRestrict to houses or flats
results_wantedintegerNo20Maximum number of unique listings to save
proxyConfigurationobjectNoUnblocker (GB)Apify Proxy configuration; Zoopla requires Unblocker proxy for reliable access

Structured filters (minBedrooms, maxPrice, etc.) override matching values already present in startUrl, while any other filters in the URL are preserved.

Output example

{
"listingId": "72151138",
"title": "1 bed flat for sale",
"address": "Percy Road, London W12",
"postalCode": "W12",
"propertyType": "flat",
"price": "£419,500",
"priceUnformatted": 419500,
"priceValue": 419500,
"priceCurrency": "GBP",
"beds": 1,
"baths": 1,
"receptions": 1,
"sizeSqft": 409,
"summaryDescription": "Raised ground-floor Victorian one-bed flat with spacious reception, open plan kitchen, double bedroom, and stylish shower room.",
"underOffer": false,
"image": "https://lid.zoocdn.com/645/430/044b61a0b89c96aba420e595ddaae737d6644e70.jpg",
"branch": {
"branchId": 77168,
"name": "Nested",
"phone": "020 8128 9373"
},
"url": "https://www.zoopla.co.uk/for-sale/details/72151138/",
"detailUrl": "https://www.zoopla.co.uk/for-sale/details/72151138/",
"searchContext": {
"pageNumber": 1,
"pageNumberMax": 40,
"totalResults": 50000,
"searchLocation": "London",
"sourceUrl": "https://www.zoopla.co.uk/for-sale/property/london/?q=London&search_source=home&recent_search=true"
},
"scrapedAt": "2026-08-02T13:29:49.528Z"
}

Every run's results can be downloaded as JSON, CSV, Excel, XML, or HTML from the Apify Console, or pulled programmatically via the Apify API and dataset export formats.

Python

from apify_client import ApifyClient
client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("parsebird/zoopla-property-scraper").call(run_input={
"startUrl": "https://www.zoopla.co.uk/for-sale/property/london/?q=London&search_source=home&recent_search=true",
"minBedrooms": 2,
"maxBedrooms": 4,
"minPrice": 300000,
"maxPrice": 800000,
"propertyType": "houses",
"results_wanted": 50,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["address"], item["price"])

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<APIFY_TOKEN>' });
const run = await client.actor('parsebird/zoopla-property-scraper').call({
startUrl: 'https://www.zoopla.co.uk/for-sale/property/manchester/?q=Manchester&search_source=home&recent_search=true',
results_wanted: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Use cases

  • Market research — track average asking prices, bedroom counts, and size per square foot across UK cities and postcodes
  • Lead generation — build a list of estate agents and their listings for a given area
  • Investment analysis — filter by price range and property type to find deals matching an investment thesis
  • Price monitoring — schedule daily or weekly runs and compare priceDrop and price fields over time to catch reductions
  • Portfolio tracking — feed listing data into a spreadsheet or BI tool via CSV/Excel export or the API

Pricing

This Actor uses Apify's Pay-Per-Event (PPE) model — you pay only for listings actually returned.

EventPrice per eventPrice per 1,000
listing-scraped$0.00099$0.99

A run that returns 50 listings costs about $0.05. Apify accounts include monthly platform usage credits that cover a number of runs before any paid usage applies.

Scraping publicly available data, such as property listings visible without logging in, is generally considered legal in most jurisdictions, including under UK and EU law, as established in cases like hiQ Labs v. LinkedIn. This Actor only accesses publicly viewable Zoopla search-results pages. However, you are responsible for how you use the extracted data — always review Zoopla's Terms of Service and avoid using scraped data for spam, harassment, or in violation of GDPR when it includes personal data such as agent contact details. See Apify's web scraping legality guide for more detail.

FAQ

Do I need an API key or to log in to Zoopla? No. The Actor scrapes publicly available search-results pages and needs no Zoopla account or API key. You only need an Apify account to run it.

Why does this Actor need a residential/unblocker proxy? Zoopla is protected by Cloudflare and blocks most datacenter and even shared residential IPs. The default proxy configuration uses Apify's Unblocker proxy group, which is required for consistently successful runs.

Can I scrape a specific postcode instead of a city? Yes. Set location to a UK postcode area, e.g. SW1A, or paste a Zoopla search URL for that postcode into startUrl.

Does this Actor scrape rental listings? The default configuration targets for-sale listings. If you paste a to-rent Zoopla search URL into startUrl, the Actor will attempt to parse it using the same underlying data format, though field availability (e.g. rent frequency) may vary.

Can I schedule this Actor to run automatically? Yes. Use Apify's Scheduler to run it daily, weekly, or at any interval, and combine it with integrations like Google Sheets, Slack, or Make to get notified of new or changed listings.

What if a run returns 0 results? Zoopla's Cloudflare protection occasionally blocks even the Unblocker proxy. The Actor retries automatically with a fresh session; if a run still returns 0 results, try again or reduce results_wanted. If the issue persists, please open an issue on the Actor's Issues tab.

Can I access this Actor's data via API? Yes. Every run's dataset is available through the Apify API and the Actor's API tab, with client libraries for Python, JavaScript, and more.

Found a bug or have a feature request? Open an issue on the Actor's Issues tab in Apify Console — feedback is always welcome.