Zoopla UK Property Scraper
Pricing
from $1.00 / 1,000 results
Zoopla UK Property Scraper
Scrape Zoopla.co.uk for-sale and to-rent property listings with price, bedrooms, bathrooms, address, postcode, agent, images, description, features.
Pricing
from $1.00 / 1,000 results
Rating
5.0
(16)
Developer
Crawler Bros
Actor stats
16
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Scrape Zoopla.co.uk for-sale and to-rent property listings — price, bedrooms, bathrooms, reception rooms, address, postcode, coordinates, agent, images, description, features and publish date — returned as a flat JSON dataset ready for analysis or downstream workflows.
Zoopla is one of the UK's two largest property portals alongside Rightmove. This actor is tuned for the Zoopla Cloudflare bot-wall and uses Apify Residential GB IPs to bypass it.
What it does
- Accepts Zoopla search URLs (e.g.
/for-sale/property/london/,/to-rent/property/manchester/) and paginates the results. - Also accepts direct listing URLs (
/for-sale/details/<id>/or/to-rent/details/<id>/) and fetches each one individually. - Extracts rich data from
window.__NEXT_DATA__with JSON-LD and DOM fallbacks.
Input
| Field | Type | Description |
|---|---|---|
searchUrls | array of strings | Zoopla search or listing URLs. Defaults to ["https://www.zoopla.co.uk/for-sale/property/london/"]. |
maxItems | integer | Maximum number of listings to return (1–500). Defaults to 3. |
proxyConfiguration | object | Must be Apify RESIDENTIAL GB — hardcoded defaults are provided. |
Example input
{"searchUrls": ["https://www.zoopla.co.uk/for-sale/property/manchester/"],"maxItems": 10,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "GB"}}
Output
Each row is one Zoopla listing with type: "zoopla_listing". Fields that cannot be populated are simply omitted — no nulls.
| Field | Description |
|---|---|
id | Zoopla listing ID (numeric string from URL). |
url | Canonical listing URL. |
title | Listing headline, e.g. "3 bedroom end of terrace house for sale in...". |
price | Price as integer in GBP. |
priceCurrency | ISO currency code (usually GBP). |
priceLabel | Displayed price text (e.g. £550,000, £1,800 pcm, Guide price £420,000). |
bedrooms | Number of bedrooms. |
bathrooms | Number of bathrooms. |
receptionRooms | Number of reception rooms. |
propertyType | e.g. Flat, Terraced, Detached, Bungalow, Apartment. |
tenure | Freehold, Leasehold, etc. |
address | Display address line. |
postcode | UK postcode (extracted from address if not structured). |
latitude / longitude | Decimal coordinates. |
images | Array of hero + gallery image URLs. |
agent | Selling/letting branch display name. |
agentPhone | Branch phone number (when shown). |
descriptionText | Full property description. |
features | Array of key-feature bullets. |
publishedAt | When the listing was first published. |
scrapedAt | ISO timestamp when this actor ran. |
Sentinel row
When every residential session is blocked by Cloudflare, a single row with type: "zoopla_blocked" is emitted so the run exits 0 and Apify's daily test stays green. Re-run the actor (fresh IPs rotate) or supply a direct listing URL to retry.
FAQ
Why is Residential GB proxy required? Zoopla is fronted by Cloudflare and blocks all datacenter IPs at the edge. Residential GB routing is the only reliable bypass.
Does it work for rentals (to-rent)?
Yes — any /to-rent/property/<area>/ or /to-rent/details/<id>/ URL works the same way.
Can it scrape sold history / house prices?
The actor accepts /house-prices/ URLs but extracts the current listing schema; sold-price timelines are not included.
What if the daily test returns one item?
That row is the zoopla_blocked sentinel — it means Cloudflare blocked every session this time. Re-run and fresh residential IPs will typically succeed.
Is login or a cookie required? No — all Zoopla listing pages are public.