Zoopla UK Property Scraper avatar

Zoopla UK Property Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Zoopla UK Property Scraper

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

Crawler Bros

Maintained by Community

Actor stats

16

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

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

FieldTypeDescription
searchUrlsarray of stringsZoopla search or listing URLs. Defaults to ["https://www.zoopla.co.uk/for-sale/property/london/"].
maxItemsintegerMaximum number of listings to return (1–500). Defaults to 3.
proxyConfigurationobjectMust 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.

FieldDescription
idZoopla listing ID (numeric string from URL).
urlCanonical listing URL.
titleListing headline, e.g. "3 bedroom end of terrace house for sale in...".
pricePrice as integer in GBP.
priceCurrencyISO currency code (usually GBP).
priceLabelDisplayed price text (e.g. £550,000, £1,800 pcm, Guide price £420,000).
bedroomsNumber of bedrooms.
bathroomsNumber of bathrooms.
receptionRoomsNumber of reception rooms.
propertyTypee.g. Flat, Terraced, Detached, Bungalow, Apartment.
tenureFreehold, Leasehold, etc.
addressDisplay address line.
postcodeUK postcode (extracted from address if not structured).
latitude / longitudeDecimal coordinates.
imagesArray of hero + gallery image URLs.
agentSelling/letting branch display name.
agentPhoneBranch phone number (when shown).
descriptionTextFull property description.
featuresArray of key-feature bullets.
publishedAtWhen the listing was first published.
scrapedAtISO 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.