Zoopla Property Scraper
Pricing
Pay per usage
Zoopla Property Scraper
Extract property listings from Zoopla with prices, locations, property types, bedrooms, descriptions, agent details, URLs, and more. Ideal for UK real estate research, property market analysis, price monitoring, lead generation, and housing data collection.
Pricing
Pay per usage
Rating
5.0
(3)
Developer
Shahid Irfan
Maintained by CommunityActor stats
3
Bookmarked
57
Total users
5
Monthly active users
18 days ago
Last modified
Categories
Share
What does Zoopla Property Scraper do?
Zoopla Property Scraper collects structured UK property listings from a Zoopla search-results URL. Each dataset item can include the listing title, address, asking price, property type, bedrooms, bathrooms, reception rooms, description, images, listing links, and estate-agent branch details.
Use it for UK property market research, investment screening, listing inventory checks, price monitoring, agent research, and lead enrichment. Provide one Zoopla search URL, choose the maximum number of listings, and download the resulting Apify Dataset as JSON, CSV, Excel, or another supported format.
Why use Zoopla Property Scraper?
- Search-result collection - Start from an existing Zoopla search URL with the location and filters you need.
- Property-focused records - Receive listing, pricing, feature, image, URL, and branch information in one record.
- Useful normalized values - Use
priceValue,beds,baths,receptions, andpostalCodefor analysis. - Pagination by result target - The Actor creates as many search pages as needed to reach
results_wanted, subject to available results and duplicate removal. - Clean dataset items - Null and undefined values are removed recursively before records are saved.
- Proxy configuration - Use Apify Proxy settings when the source requires more reliable access, including UK residential proxy options.
What data can you extract from Zoopla?
The Actor returns source listing fields and normalized values for property analysis, including listing identity, location, pricing, property features, descriptions, dates, images, agent details, listing links, and search context.
How to use the Actor
- Open Zoopla and create a property search with the location, sale or rental mode, and filters you need.
- Copy the complete search-results URL.
- Open this Actor in Apify Console and enter the URL in
startUrl. - Optionally set
location, bedroom, price, and property-type filters. - Set
results_wantedand, when needed, configure Apify Proxy. - Run the Actor and inspect the dataset preview.
- Export the dataset or connect it to your workflow.
The Actor accepts one search URL per run. To collect several locations, run separate jobs or schedule separate inputs.
Supported input methods
- Apify Console - Enter the fields in the form-based input editor.
- Apify API or CLI - Send the same JSON object used in the examples below when starting a run.
- Local development - Place a JSON object in
INPUT.json; explicit Actor input values take precedence.
Input Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
startUrl | String | No | https://www.zoopla.co.uk/for-sale/property/london/?q=London&search_source=home&recent_search=true | One public Zoopla search-results URL. Use a complete URL containing the location and any source-supported search filters. |
location | String | No | london | Zoopla location slug or postcode. Overrides the URL location and updates q. |
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 price or rent amount, sent as price_min. |
maxPrice | Integer | No | - | Maximum price or rent amount, sent as price_max. |
propertyType | String | No | - | Zoopla property_type value, commonly houses or flats. |
results_wanted | Integer | No | 20 | Maximum number of unique listing records to save. Values below 1 are raised to 1. |
proxyConfiguration | Object | No | {"useApifyProxy": true} | Apify Proxy configuration. You can use settings such as useApifyProxy, apifyProxyGroups, countryCode, or custom proxyUrls where supported by your Apify account. |
Usage Examples
Basic London property search
Collect up to 20 unique listings from a Zoopla London search.
{"startUrl": "https://www.zoopla.co.uk/for-sale/property/london/?q=London&search_source=home&recent_search=true","results_wanted": 20}
Search another location
Use the complete Zoopla search URL for another location and increase the result target.
{"startUrl": "https://www.zoopla.co.uk/for-sale/property/birmingham/?q=Birmingham&search_source=home&recent_search=true","results_wanted": 56}
Apply location, bedroom, price, and property filters
Structured filters override matching values in startUrl while preserving other URL filters.
{"startUrl": "https://www.zoopla.co.uk/for-sale/property/london/?q=London&search_source=home&recent_search=true","location": "london","minBedrooms": 2,"maxBedrooms": 4,"minPrice": 300000,"maxPrice": 800000,"propertyType": "houses","results_wanted": 56}
Use a UK residential proxy
Enable an Apify residential proxy and request up to 250 listings for a larger market dataset.
{"startUrl": "https://www.zoopla.co.uk/for-sale/property/manchester/?q=Manchester&search_source=home&recent_search=true","results_wanted": 250,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"countryCode": "GB"}}
Output Data
Each saved item is one unique Zoopla listing. Fields are included when the source provides a usable value.
| Field | Type | Description |
|---|---|---|
listingId | String | Zoopla listing identifier used for deduplication. |
title | String | Listing title, such as a bedroom and property-type label. |
address | String | Public address text shown in the listing result. |
postalCode | String | Extracted UK postcode or postcode area when available. |
propertyType | String | Zoopla property type value. |
price | String | Formatted asking price. |
priceUnformatted | Number | Numeric price supplied by Zoopla when available. |
priceValue | Number | Numeric price parsed from the source price values. |
priceCurrency | String | Currency code, normally GBP for UK listings. |
beds | Number | Bedroom count when available. |
baths | Number | Bathroom count when available. |
receptions | Number | Reception-room count when available. |
sizeSqft | Number | Property size in square feet when available. |
summaryDescription | String | Short listing description. |
publishedOn | String | Publication date text when available. |
priceDrop | Object | Price-change details when supplied by Zoopla. |
features | Array | Structured property feature badges. |
tags | Array | Listing labels such as tenure information. |
underOffer | Boolean | Whether the source marks the listing as under offer. |
image | String | Main property image URL. |
featuredImageUrl | String | Normalized main image URL. |
imageData | Object | Source image metadata and responsive image variants. |
gallery | Array | Normalized gallery image URLs. |
galleryIds | Array | Gallery image identifiers from the source. |
branch | Object | Estate-agent branch details, including available name, phone, ID, and logo information. |
logoUrl | String | Estate-agent logo URL when available. |
url | String | Preferred absolute listing URL. |
detailUrl | String | Absolute listing detail URL. |
contactUrl | String | Listing contact URL when available. |
branchDetailsUrl | String | Estate-agent branch profile URL when available. |
searchContext | Object | Input URL, page number, total results, location, and search identifiers. |
searchResultsMeta | Object | Search-level metadata returned with the result set. |
pagination | Object | Source pagination values such as current page and total pages. |
flags | Object | Search flags returned by the source. |
scrapedAt | String | ISO timestamp for when the record was saved. |
Sample Output
{"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.","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"}
Data-quality behavior
- Unique listings - Records are deduplicated by
listingIdacross the pages processed in a run. - Null removal - Null and undefined values are removed recursively from objects and arrays before saving.
- Absolute URLs - Relative Zoopla and image URLs are converted to absolute URLs where possible.
- Normalized measures - Bedroom, bathroom, and reception counts are converted to numbers when the source value is numeric.
- Price normalization -
priceValueis parsed from numeric or formatted price values. It is omitted when no usable number is available. - Partial postcode matching -
postalCodecontains the full postcode when present, or a postcode area/outcode when that is all the source exposes. - Intentional omissions - Coordinate fields such as latitude, longitude, and
coordinates, along withposandimpressions, are removed from output records. - Source-dependent fields - Zoopla does not publish every field for every listing. Missing descriptions, images, agent details, room counts, or pricing metadata are omitted rather than filled with fabricated values.
- Result limits - The Actor may save fewer than
results_wantedrecords when pages contain fewer listings, duplicate listings, unavailable fields, source errors, or no additional results.
Limitations
- The input supports one Zoopla search-results URL per run. It does not accept a
startUrlsarray. - The Actor is designed for search-result pages. It does not provide a separate detail-page scraping mode for individual listing URLs.
- The number of pages is calculated from
results_wantedusing 28 listings per page. There is no independent page-limit input. - Results depend on what Zoopla makes publicly available at run time. Page structure, field names, listing availability, and access conditions can change.
- Proxy configuration can improve access reliability, but it cannot guarantee a complete result set.
- Structured filters cover location, bedroom range, price range, and the Zoopla
property_typevalue. Other advanced filters should remain instartUrl. - Coordinates and impressions are intentionally excluded from the saved output.
Tips for best results
- Use a Zoopla search URL copied after applying the filters you need.
- Start with
results_wantedset to20or another small value and review the dataset before increasing the volume. - Use one focused location per run for easier comparisons between datasets.
- Consider Apify residential proxy settings with
countryCodeset toGBfor larger or recurring UK runs. - Schedule repeat runs and compare
listingId,priceValue,underOffer,searchContext, andscrapedAtover time. - Expect optional fields to vary by listing. Use the fields present in the dataset rather than assuming every property has the same metadata.
Integrations and exports
Apify Datasets can be downloaded or connected to other workflows.
- JSON - Use structured records in applications, scripts, and data pipelines.
- CSV - Review listings in spreadsheet tools and perform bulk filtering.
- Excel - Share property research and market reports with business users.
- Google Sheets or Airtable - Maintain searchable listing and agent records.
- Webhooks - Trigger downstream processing after a run completes.
- Make or Zapier - Connect new datasets to notifications, CRM, and reporting workflows.
Frequently Asked Questions
Can I scrape several locations in one run?
No. This Actor accepts one startUrl per run. Use separate runs for separate locations or schedule multiple inputs.
Can I collect properties for rent as well as for sale?
Yes, when you provide a valid public Zoopla rental search-results URL. The source must return compatible listing data for the fields to be included.
How many listings will the Actor return?
The Actor attempts to save up to results_wanted unique listings. The final count can be lower when the source has fewer usable listings, duplicate records, or access errors.
Why is a field missing from one listing?
Zoopla does not publish every property attribute for every listing. The Actor removes unavailable values instead of inventing them.
Are coordinates included?
No. Coordinate-related fields, pos, and impressions are intentionally removed from the dataset.
Can I use a proxy?
Yes. Set proxyConfiguration.useApifyProxy to true and add the proxy group or country settings supported by your Apify account. UK residential settings are a practical choice for larger UK collection jobs.
Is scraping Zoopla legal?
You are responsible for following Zoopla's terms, applicable laws, privacy requirements, and any restrictions that apply to your intended use of the data. Collect and use public data responsibly.
Related Actors
- Onthemarket Property Scraper - Collect UK sale and rental property listings from OnTheMarket with pricing, features, images, and agent information.
- Zoopla Agent Scraper - Collect Zoopla estate-agent and branch records for lead generation, directory enrichment, and market research.
- Immobiliare.it Scraper - Collect property listings from an Italian real estate portal for international market comparisons.
Support
For issues or feature requests, use the Issues tab on the Actor page and include the input URL, run ID, and an example of the unexpected output when possible.
Legal Notice
This Actor is intended for legitimate collection and analysis of available property data. You are responsible for complying with website terms, applicable laws, privacy rules, and data-use requirements in your jurisdiction.