Zoopla Scraper — UK Property API · Sale + Rent + Valuations avatar

Zoopla Scraper — UK Property API · Sale + Rent + Valuations

Pricing

from $3.00 / 1,000 property extracteds

Go to Apify Store
Zoopla Scraper — UK Property API · Sale + Rent + Valuations

Zoopla Scraper — UK Property API · Sale + Rent + Valuations

Zoopla scraper for UK property data — sale and rent listings with valuation estimates for both, plus market KPIs (median price, price per sqft, area breakdowns) and an HTML report. Search by location, with bulk-location input on paid runs.

Pricing

from $3.00 / 1,000 property extracteds

Rating

0.0

(0)

Developer

SIÁN OÜ

SIÁN OÜ

Maintained by Community

Actor stats

1

Bookmarked

15

Total users

6

Monthly active users

4 days ago

Last modified

Share

🇬🇧 Zoopla Property Scraper — UK Real Estate API · Sale · Rent · Full Property Details

Store - SIÁN Agency Store - Rightmove Scraper Store - Redfin Scraper Store - Zillow Scraper

Stable, API-backed UK property data from Zoopla. For-sale + to-rent listings, full per-listing property records (description, features, EPC, tenure, photos, points of interest), and completed sold-price comparables across England, Scotland, Wales and Northern Ireland — search by location, postcode, coordinates, pasted Zoopla URL, listing id, or street address. Per-listing valuation estimates (sale + rent), built-in market KPIs (median price, £/sqft, area breakdowns), and an HTML report. Built on a stable upstream tier so your scrapes don't break when Zoopla rotates its layout — and so UK property data extraction is just an API call, not a maintenance project.

By SIÁN Agency · Independent tool — not affiliated with Zoopla or Zoopla Property Group (ZPG).


🔎 What is the Zoopla Property Scraper — and when should you use it?

The Zoopla Property Scraper turns Zoopla's UK sale, rent and sold-price listings into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.

Use it when you need: UK for-sale and to-rent listings with price in GBP, beds, baths, receptions, floor area, address and postcode, coordinates, photos, and the estate-agent branch behind each one. Details mode returns the full record per property, adding the listing description, feature list, EPC rating, tenure and council tax band. Sold-price comparables, sale and rent valuation estimates, and median price and price per sqft KPIs come out of the same run.

Use something else when: you want a different UK portal, or you already know which properties you want. Use Rightmove Property Scraper for UK sale, rent and sold-price listings from Rightmove, with Land Registry sold prices stitched in. Use Zoopla Property Detail Scraper for a full dossier per Zoopla URL, listing ID or UK address when you already have the list. This actor covers the UK only.

🤖 Use with AI agents

Already connected to the Apify MCP server? Just ask for this Actor by name: sian.agency/zoopla-property-scraper

Your agent can pay for its own runs. This Actor is eligible for agentic payments, so an agent can discover it, run it and settle the bill over x402 (USDC on Base) or Skyfire — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.

Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

I want UK property listings, sold prices and valuation estimates from Zoopla using the Apify Actor `sian.agency/zoopla-property-scraper`.
Use it when I need: UK for-sale and to-rent listings with price in GBP, beds, baths, receptions, floor area, address and postcode, coordinates, photos, and the estate-agent branch behind each one. Details mode returns the full record per property, adding the listing description, feature list, EPC rating, tenure and council tax band. Sold-price comparables, sale and rent valuation estimates, and median price and price per sqft KPIs come out of the same run.
Don't use it when: you want a different UK portal, or you already know which properties you want — use rightmove-property-scraper or zoopla-property-detail-scraper instead.
How to call it: pick a `searchMode`: `bylocation` (free-text `location`), `byzip` (`postalCode`, outward code such as NW3), `bycoordinates` (`latitude` + `longitude` + `radius` in miles), `byurl` (a pasted Zoopla search URL in `zooplaUrl`), `bulklocations` (an array in `locations`, PAID), `soldprices` (`soldLocation` for completed-sale comparables), `agentbranches` (`agentLocation` or `branchIds`), or `details` (`listingIds`, `zooplaListingUrls` or `propertyAddresses` for full records). Set `listingType` to `sale`, `rent` or `both`, narrow with `propertyType` / `priceRange` / `bedsRange` / `tenure`, cap with `maxResults`, and add PAID enrichments via `includeEstimates`, `includeImages`, `includePoi`, `includeHistory`, `includePriceHistory` or `includeEvCharging`.
Start with this input:
{
"searchMode": "bylocation",
"listingType": "sale",
"location": "Hampstead, London",
"bedsRange": "min:2",
"priceRange": "min:500000,max:1500000",
"maxResults": 25
}
Ask me which UK location or postcode, and whether you want properties for sale or to rent, then run the Actor and summarise the results as a table.

Things you can ask your agent for:

  • Pull two-bed flats for sale in Hampstead under £1.5m and rank them by price per square foot.
  • Build a sold-price comparable set for NW3 to support a valuation.
  • List the estate-agent branches active in Oxford with their phone numbers and current stock.

Machine-readable API, MCP config and OpenAPI definition for this Actor are published at apify.com/sian.agency/zoopla-property-scraper.md.

🚀 What you get on every run

  • Full property records ✨ NEW — the biggest gap just closed: look up a property by listing id, listing URL, or street address and get the FULL record (description, features, EPC rating, tenure detail, floor plans, points of interest) — not just a search-result summary
  • Structured listings — propertyId, full address, GBP price, beds/baths/receptions, sqft, lat/lon, photos, estate-agent branch
  • Sold price history & comparables — pull what UK properties actually sold for, with full per-property sale history (historicSales[]) and Zoopla valuation estimates — the gold standard for comps and underwriting
  • For-sale + to-rent in one call — set listingType: both (PAID) and get both sides of the market in a single dataset
  • Auto-computed £/sqft — for every sale listing with usable floor area
  • Market KPIs — median price, price-distribution stats, area + property-type breakdowns, surfaced in a polished HTML report
  • 5 enrichment add-ons (optional, PAID) — valuation estimate, full-resolution images + floor plans, points of interest + transport links, property sale/listing history, advertised-price change timeline, and nearby EV charging stations — attach any combination to a listing
  • Estate-agent branch intelligence — profile any UK branch (name, address, phone, memberships, listing counts) and pull its complete for-sale + to-rent inventory; discovers branches by name/area directly, with automatic fallback if that path is unavailable
  • Retry-helper record — even on partial failures you get a JSON summary of what failed so you can rerun cheaply

🎯 Built for

  • Due-diligence teams — pull the FULL record for a shortlist of properties (description, EPC, tenure, floor plans) by id, URL, or address in one run
  • Buy-to-let investors — pull live comparables and sold-price comps (UK comps) for underwriting in seconds; compute yield from listingType: both runs
  • Estate agents & valuers — back up asking-price advice with real sold-price evidence for any street or postcode area
  • Mortgage brokers — generate 100-listing comp sets and sold-price comparables for valuation reports
  • PropTech teams — feed your AVM / rent-prediction models with consistent UK training data, including realised transaction history, points of interest, and full listing detail
  • Investment funds — schedule weekly sweeps of London / Manchester / Birmingham micro-markets

🧭 8 search modes

ModeBest for
Details ✨ NEWFull listing/property record by listing id, listing URL, or street address
By locationFree-text — "Hampstead, London", "Oxford", "NW3"
By postcodeUK postcode outward code (NW3, SW1A, M1, EC1A)
By coordinatesLat/lon + radius (miles) — e.g. for map-based UI
By URLPaste any Zoopla search URL — filters auto-read from the URL
Bulk locations (PAID)Sweep an array of locations in one run
Sold pricesCompleted-sale comparables + full sold-price history for any UK area
Agent branchesEstate-agent branch profiles + each branch's full for-sale / to-rent inventory

Live-listing modes share the same UK filter set: property type, tenure (freehold/leasehold/share-of-freehold), price/beds/baths/sqft ranges, new homes, chain-free, furnished state, pets allowed, bills included, and free-text keywords.


🏠 Details mode — full property records (NEW)

Every other mode above returns a search-result summary. Details mode returns the full record — the same depth of data you'd see on the actual listing page: description, full feature list, EPC rating, tenure detail, council tax band, floor plans, points of interest, and transport links.

Three ways in — mix freely in one run:

  1. Listing IDlistingIds: ["72743732"]/details/byid
  2. Listing URLzooplaListingUrls: ["https://www.zoopla.co.uk/for-sale/details/72743732/"]/details/byurl
  3. Street addresspropertyAddresses: ["10 Mansfield Road, NW3 2HN"] (must include the full postcode) → /details/byaddress, which returns a property-level record (beds/baths/tenure, sale + rent estimate, historic listings/sales) instead of one specific advertised listing — useful when you have an address but not a live listing id

What you get (listing id / URL):

{
"propertyId": "73109201",
"listingType": "sale",
"propertyTitle": "3 bed flat for sale",
"listingDescription": "An exceptional three-bedroom duplex apartment...",
"features": ["Three Bedrooms", "Two Bathrooms", "Private Patio Garden"],
"specs": { "beds": 3, "baths": 2, "epcRating": "C", "tenure": "share_of_freehold", "councilTaxBand": "G" },
"media": { "photoCount": 20, "photos": ["https://lc.zoocdn.com/..."], "floorPlans": [] },
"pointsOfInterest": [{ "title": "Swiss Cottage", "type": "london_underground_station", "distance": 0.3 }],
"publicationStatus": "Live"
}

FREE tier processes up to 5 property records per run; PAID is unlimited.


🧩 6 enrichment add-ons (PAID)

Attach any combination to a listing — search-mode row or details-mode row — each fires one extra API call, charged only on success. 5 new add-ons ✨ join the original valuation estimate:

Add-onInput flagAdds
Valuation estimateincludeEstimatesSale + rent estimate with confidence band
Full-resolution imagesincludeImagesFull photo set + floor plans (most useful on search rows, which only carry thumbnails)
Points of interestincludePoiNearby schools/stations + transport links
Property historyincludeHistoryThe property's historic listings + sold-price record (uprn/address-keyed)
Price-change historyincludePriceHistoryThe listing's own advertised-price change timeline
EV chargingincludeEvChargingNearby EV charging stations

🏷 Sold prices mode (NEW)

Pull completed-sale comparables — the prices UK properties actually sold for — for any area, alongside the live for-sale and to-rent modes. This is the data that powers real valuations, BTL underwriting, and "what's it worth?" analysis.

How to use it:

  1. Set Search Mode = soldprices.
  2. Type a free-text soldLocationLondon, Hampstead, London, Oxford, Oxfordshire, or an outward postcode like NW3. It's resolved to the right Zoopla area automatically.
  3. (Advanced) Skip resolution by passing a precise geoId slug directly (e.g. london, london/elm-row).
  4. Tune first (1–100) to control results per page, and maxResults for total volume.

What you get per comparable:

{
"propertyId": "5068790",
"address": { "full": "Elm Row, Hampstead, London NW3" },
"specs": { "beds": 3, "baths": 2, "receptions": 1 },
"tags": ["Freehold"],
"historicSales": [
{ "date": "2023-08-14", "price": 1985000 },
{ "date": "2015-03-02", "price": 1320000 }
],
"saleEstimate": { "current": 2216000, "lower": 1994000, "upper": 2438000, "confidence": "MEDIUM" },
"location": { "latitude": 51.5564, "longitude": -0.1782 },
"scrapedAt": "2026-06-14T11:05:43.123Z"
}

Every sold comparable carries its full sale history (historicSales[] — date + GBP sold price), Zoopla's current saleEstimate (and, where available, rentEstimate) with confidence band, plus address, beds/baths/receptions, tenure, property type, and coordinates — ready for mapping and valuation workflows.


🏢 Agent branches mode

Profile UK estate-agent branches and pull each branch's complete for-sale and to-rent inventory in one run — agent prospecting, competitor tracking, and instructions-per-branch analysis without any manual browsing.

Two ways in:

  1. By area — set Search Mode = agentbranches and type a free-text agentLocation (e.g. Oxford, Hampstead, London, NW3) — optionally narrowed with agentNameFilter (e.g. Foxtons). Branch discovery tries a direct name/area lookup first and automatically falls back to discovering branches from live listings in that area (including each branch's phone number) if that path is unavailable.
  2. Exact branches — pass branchIds directly: numeric ids (e.g. 61460) or full branch URLs from the branch.branchUrl field of any previous run. (Phone numbers are only available via area discovery.)

What you get per branch:

  • A branch profile row (listingType: "agent") — branch name, street address + postcode, phone (via area discovery), logo, branch URL, industry memberships (e.g. ARLA, TPO), and live for-sale / to-rent listing counts:
{
"branchId": "1990",
"listingType": "agent",
"propertyTitle": "Connells - Headington, Oxford",
"address": { "full": "129-131 London Road, Headington, Oxford", "postcode": "OX3 9HZ" },
"branch": { "name": "Connells - Headington, Oxford", "phone": "01865 360064", "branchUrl": "https://www.zoopla.co.uk/find-agents/branch/connells-headington-oxford-oxford-1990/" },
"memberships": [ { "memberOf": "arla" }, { "memberOf": "tpo" } ],
"forSaleCount": 20,
"forRentCount": 0
}
  • The branch's full inventory — every for-sale and to-rent listing lands as a regular listing row (price, beds/baths, £/sqft, photos, coordinates) tagged with its branchId, so market KPIs and the HTML report work out of the box.

Use maxResults to cap the rows per query (profile + inventory count toward the cap).


💰 Transparent pricing

Pay-per-event — no monthly subscription, no per-page overhead. Charged only on successful extraction. Apify subscription discounts apply automatically (Starter ≈ 67% off · Scale ≈ 71% off · Business ≈ 75% off vs Free).

EventFreeStarterScaleBusinessTriggered when
Run started$0.050$0.005$0.005$0.005Once per run
Property extracted$0.015$0.005$0.0045$0.004Per listing, sold comparable, or agent-branch profile pushed to the dataset
Valuation enriched$0.003$0.0027$0.0024Per successful full property record (details mode), and per successful enrichment add-on (estimate, images, points of interest, property history, price-change history, or EV charging)

Sold prices and agent branches reuse the per-property event — each sold comparable, branch profile, and branch-inventory listing is billed at the same "Property extracted" rate as a live listing. No separate surcharge. Details mode and every enrichment add-on reuse the "Valuation enriched" event — one charge per successful call, whichever add-on it was (or per full property record fetched in details mode). No separate surcharge per add-on type.

Free tier is built for low-volume testing — capped at 5 queries / 25 listings per run, no enrichment, no listingType: both. Paid tiers (Starter and up) unlock unlimited listings, bulk locations, valuation enrichment, and listingType: both.


📦 Sample output (sale)

{
"propertyId": "73109201",
"listingType": "sale",
"url": "https://www.zoopla.co.uk/for-sale/details/73109201/",
"thumbnailUrl": "https://lid.zoocdn.com/645/430/...jpg",
"propertyTitle": "3 bed flat for sale",
"address": { "full": "Lancaster Grove, Belsize Park, London NW3" },
"pricing": {
"price": 1850000,
"priceCurrency": "GBP",
"priceDisplay": "£1,850,000",
"priceShort": "£1.85m",
"pricePerSqft": 1390
},
"specs": { "beds": 3, "baths": 2, "receptions": 1, "sizeSqft": 1331 },
"location": { "latitude": 51.54644, "longitude": -0.171423 },
"branch": {
"name": "ADN Residential",
"phone": "020 8128 2227",
"branchUrl": "https://www.zoopla.co.uk/find-agents/branch/adn-residential-london-159325/"
},
"tags": ["Share of Freehold"],
"scrapedAt": "2026-05-05T17:05:43.123Z"
}

Note on tags: This array always exists on every record (empty [] when the listing has no tags). On for-sale listings it typically carries the tenure label (Freehold, Leasehold, Share of Freehold); on rental listings it's usually empty. Filter tenure is supported as an input parameter, but tenure is reported on output as a string inside tags[], not as its own structured field.

With includeEstimates: true (PAID), each listing additionally carries:

{
"estimate": {
"uprn": "5068790",
"saleEstimate": { "current": 2216000, "lower": 1994000, "upper": 2438000, "confidence": "MEDIUM" },
"rentEstimate": null
}
}

⚙️ Quick start

  1. Click "Try for free" above — paste any UK location, postcode, or Zoopla URL (or pick Sold prices mode for comparables).
  2. Run. First 25 listings are free.
  3. Check the dataset for your structured listings, and the HTML report in the key-value store for market KPIs.

For automation: schedule via Apify's built-in scheduler, or call our REST API with your Apify token.


❓ FAQ

Can I get the FULL listing record, not just search results? Yes — use the details search mode with a listingIds, zooplaListingUrls, or propertyAddresses entry. You get the full description, feature list, EPC rating, tenure detail, floor plans, points of interest, and transport links — the same depth as the live listing page.

Does this work for sold prices? Yes — use the soldprices search mode. Type a free-text soldLocation (or pass a geoId) and you get completed-sale comparables with full per-property sale history (historicSales[]) plus Zoopla valuation estimates. Live for-sale and to-rent listings are covered by the other five modes.

Can I scrape estate agent details? Yes — use the agentbranches search mode. Type a UK agentLocation (or pass exact branchIds) and you get a profile per branch (name, address, phone, memberships, listing counts) plus the branch's full for-sale and to-rent inventory. Branch name, phone, logo and branch-URL are also returned on every live listing in the other modes.

What about Northern Ireland / Scotland? Zoopla covers all four UK nations; this actor inherits that coverage — for both live listings and sold prices.

Why outward postcodes instead of full postcodes? Zoopla's slug-based search treats NW3 1AA as one literal — it usually returns 0 results. Outward codes (NW3, SW1A) resolve to area slugs and return real inventory. We auto-strip the inward code if you paste a full postcode.

Can I get the estate agent's email? Branch name, phone, logo and Zoopla branch-URL are returned. Email is not exposed by Zoopla's public surface.


⚠️ Trademark Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Zoopla, Zoopla Property Group (ZPG), or any of its subsidiaries. "Zoopla" is used solely in a descriptive sense to identify the public data source the Actor reads from. All trademarks are the property of their respective owners.


  • This actor reads only publicly visible Zoopla pages — no logins, no bypassing of paywalls.
  • You are responsible for complying with Zoopla's Terms of Service and applicable UK / EU data laws (UK GDPR, Data Protection Act 2018) when using the data.
  • Personal data of estate agents (e.g. branch phone) is included only as published on Zoopla's public site.

💬 Support

  • 🐛 Found a bug? File an issue in the Apify Console Issues tab
  • ⭐ Loving the tool? Leave a 5-star review — it helps us build more
  • 📧 apify@sian-agency.online

🧰 More from SIÁN Agency