Zoopla UK Property Listings Scraper avatar

Zoopla UK Property Listings Scraper

Pricing

from $0.70 / 1,000 listing scrapeds

Go to Apify Store
Zoopla UK Property Listings Scraper

Zoopla UK Property Listings Scraper

Zoopla UK property for sale or to rent by town, county or postcode. Newest first or most price-reduced first: price, reductions, date listed, beds, baths, tenure, floor area, coordinates, agent. Built for new-listing and price-drop alerts.

Pricing

from $0.70 / 1,000 listing scrapeds

Rating

0.0

(0)

Developer

Superslow Sloth

Superslow Sloth

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Returns UK property listings from Zoopla, for sale or to rent, as one flat row per property: the asking price, any price reduction, the date it was listed, bedrooms and bathrooms, tenure, floor area, coordinates and the agent.

Built for new-listing and price-drop alerts. Run it on a schedule with sort = newest_listings (or addedWithin = 24_hours) and you have a feed of what came on the market since the last run; run it with sort = most_reduced and you have the properties whose price just fell, with the amount, the percentage and the date of the cut.

Small input, no nested objects, no HTML. Its input mirrors the Rightmove Property Scraper from the same account, so the same locations, channel, price, bedroom, radius and sort settings work on both portals.

Input

fieldmeaning
locationsOne per line: a town, county, outcode or postcode (Bristol, Oxfordshire, BS8, BS8 1AA). A part of a larger area uses a slash: London/Islington, Bristol/Clifton.
channelbuy (default) or rent
sortnewest_listings (default), most_reduced, lowest_price, highest_price, or Zoopla's own default
addedWithinOnly properties first listed in the last 24 hours, 3, 7, 14 or 30 days
minPrice, maxPriceIn pounds; per month when renting. Any whole number
minBedrooms, maxBedrooms0 selects studios
radiusMiles beyond the area: 0.25, 0.5, 1, 3, 5, 10, 15, 20, 30 or 40
propertyTypeshouses, flats, bungalows
newHomesSales only: include (default), exclude, only
includeSSTCSales only: include sold-subject-to-contract and under-offer stock
maxItemsBudget for the whole run, in listings. Default 100
maxPagesPages per area. Default and ceiling 40
requestIntervalSecsPause between pages. Default 1
proxyConfigurationResidential Apify proxy, on by default; see limits

Every filter is a value Zoopla was seen to honour. Zoopla quietly ignores a value it does not know (a radius of 7 miles, a "listed within 2 hours"), so a typo would return the unfiltered search at full price; this actor offers only the values that changed the result set and refuses the rest before a request is spent.

Output

One item per property:

fieldmeaning
idZoopla's listing id: the number in the listing URL. What a repeated run joins on
urlThe listing on zoopla.co.uk, absolute
title, display_addressZoopla's headline (3 bed end terrace house for sale) and the address as printed
transaction_type, channelbuy/rent, and the part of Zoopla it lives in: for-sale, to-rent or new-homes
price, price_currencyAsking price in whole pounds; per month on a rental
price_frequencymonthly on a rental, null on a sale
price_display, price_qualifierThe price as printed (£410,000, £1,200 pcm) and Guide price, Offers over, Offers in region of, From
rent_per_week_displayRentals: Zoopla's weekly equivalent as printed, e.g. £276.92 pw
price_reducedtrue only when Zoopla gives a reduction figure
price_reduction_amount, price_reduction_percent, price_reduced_onThe latest cut: whole pounds, percent of the previous price, ISO date
published_onISO date the listing first went live
listing_flagZoopla's badge: Just added or Back to market
available_fromRentals: immediately or an ISO date
bedrooms, bathrooms, reception_roomsCounts. 0 bedrooms is a real answer on a studio
property_typeZoopla's slug: flat, semi_detached, terraced, detached, end_terrace, town_house, bungalow, land...
tenure, tagsFreehold/Leasehold/Share of Freehold when tagged, and every tag (Chain free, New home, Auction, Shared ownership, Retirement, Pets allowed)
floor_area_sqft, floor_area_sourceSquare feet, and where Zoopla got it - see below
latitude, longitudeZoopla's coordinates for the property
summary, image_url, image_count, floorplan_countZoopla's truncated blurb and lead photo, and how many photos and floorplans the listing has
agent_name, agent_phone, agent_url, agent_logo_url, agent_branch_idThe marketing agent or developer
featured_type, under_offerfeatured/weekly_featured for a slot an agent paid for; whether the property is under offer
search_locationThe area slug this row came from

Where the fields come from

Each Zoopla results page carries its listings in a schema.org ItemList (28 products per page): id, price, address, coordinates, bedrooms, bathrooms and floor area. That is the source for those fields. Zoopla's own page also embeds the listing cards it draws the visible page from, which hold what the ItemList leaves out: the price qualifier, reductions, the date listed, the badge, tags and the agent. They are joined to the ItemList by listing id. A listing whose card is missing from a page is still delivered, with those fields null.

Nulls, not zeros

A missing value is null, never 0. Land and parking have no bedroom count, and a quarter of listings have no floor area. price_reduced is null, not false, on a row whose card was missing, because false would claim a measurement.

floor_area_sqft is often an estimate

Of 812 listings with a floor area, 461 took it from comparable homes' energy certificates (comparables_epc) and 8 from a survey of comparables (comparables_survey). Only structured_data (the agent stated it), floorplan_derived and text_derived are the listing's own figure. Filter on floor_area_source before using the number as a fact about the property.

A reduction is only a reduction when there is a figure

Zoopla puts a price-history block on listings that were never cut; it says when the price was first set and nothing else. Those rows have price_reduced = false. price_reduction_percent is the cut as a percentage of the price before it (a £130,000 flat cut by £120,000 reads 48.0).

Limits worth knowing before you run it

  • 1,000 listings per area, always. Zoopla serves 25 results per page and 40 pages, then answers a 404. London reports "50,000" results, which is Zoopla's clip rather than a count. The run log lists the areas that stopped at the limit (stopped at Zoopla's page limit); for more, give several narrower areas, or add addedWithin, a price band or a radius. A page also carries 3 paid "featured" listings on top of its 25, so a full walk returns a few more than the area's count.
  • Residential proxy only. Zoopla sits behind Cloudflare. Measured 2026-10-20 a datacenter proxy was answered 403 "Just a moment..." on 5 of 5 requests, while residential exits were served on 10 of 11 over 32 minutes. A single address is also challenged after enough requests (roughly 80 pages in under an hour drew HTTP 429, and the limit cleared within a minute). The actor uses a real Chrome TLS fingerprint, treats a challenge as a refusal of the address (a 403 or 429, or a 200 holding the challenge page), switches to a fresh exit and retries. A page is about 0.5 MB, so residential bandwidth is the main cost of a run.
  • A search with no matches returns nothing, not its neighbours. When Zoopla finds no match it shows properties near the area instead. The actor reads the match count and does not emit or charge for those.
  • An unknown place is a failure. Zoopla answers it with its search page and HTTP 200; the run log reports Zoopla does not recognise that place. Some names resolve to nothing in a URL path: St Albans and the ambiguous St Ives both returned "No results found", which the run reports as
    Zoopla did not accept the search
    . Use the outcode (AL1) when a name fails.
  • Duplicates across pages and areas are skipped, and not charged. A featured listing can reappear in its own position on a later page; it is delivered once.
  • Zoopla can change its page at any time. The data is read from the page's embedded JSON, which is not a published API.

Pricing

Pay per event: a small charge when the run starts, plus one charge per listing delivered. Skipped duplicates and nearby results are not charged, and a run that returns nothing charges only the start event.