Zoopla Property Scraper
Pricing
from $0.69 / 1,000 property listings
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
Maintained by CommunityActor 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?
| Field | Description |
|---|---|
listingId | Zoopla's unique listing identifier |
title | Listing title (e.g. "3 bed semi-detached house for sale") |
address | Full address text as shown on Zoopla |
postalCode | UK postcode or postcode area extracted from the address |
propertyType | Zoopla property type (flat, terraced, semi_detached, detached, etc.) |
price / priceValue / priceCurrency | Formatted and numeric asking price, with currency |
beds / baths / receptions | Bedroom, bathroom, and reception room counts |
sizeSqft | Floor size in square feet, when Zoopla provides it |
priceDrop | Price change history, when available |
underOffer | Whether the listing is marked under offer |
branch | Estate agent name, phone number, and branch ID |
gallery | Full-size URLs for every photo in the listing gallery |
url / detailUrl / contactUrl | Absolute 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
- Open the Zoopla Property Scraper on Apify and click Try for free.
- 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
startUrlfield. Alternatively, just set thelocationfield (city name or postcode). - Set optional filters —
minBedrooms,maxBedrooms,minPrice,maxPrice, andpropertyTypenarrow the search without editing the URL by hand. - Set
results_wantedto the number of listings you need. - 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
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
startUrl | string | No | London search URL | A public Zoopla search-results URL, including location and any filters supported by Zoopla's URL parameters |
location | string | No | london | Zoopla location slug (e.g. manchester) or UK postcode (e.g. SW1A). Overrides the location in startUrl and updates its q parameter |
minBedrooms | integer | No | — | Minimum bedrooms, sent as Zoopla's beds_min filter |
maxBedrooms | integer | No | — | Maximum bedrooms, sent as Zoopla's beds_max filter |
minPrice | integer | No | — | Minimum asking price in GBP, sent as price_min |
maxPrice | integer | No | — | Maximum asking price in GBP, sent as price_max |
propertyType | string | No | Any | Restrict to houses or flats |
results_wanted | integer | No | 20 | Maximum number of unique listings to save |
proxyConfiguration | object | No | Unblocker (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 ApifyClientclient = 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
priceDropandpricefields 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.
| Event | Price per event | Price 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.
Is it legal to scrape Zoopla?
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.
Related Actors
- Daft.ie Property Scraper — the equivalent scraper for Ireland's largest property portal
- Domain.com.au Property Scraper — Australian property listings
- Realestate.com.au Scraper — a second major Australian property portal
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.