Zoopla APIzoopla.co.uk ↗
Search Zoopla sale and rental listings, retrieve full property details, query sold house prices, and find estate agents via a structured JSON API.
What is the Zoopla API?
This API exposes 5 endpoints covering Zoopla's UK property marketplace, including live sale and rental listings, sold house price history, and estate agent search. The search_properties_for_sale and search_properties_to_rent endpoints accept location slugs, bedroom counts, price ranges, and property type filters, returning paginated arrays of listings with address, price, listingId, and propertyType fields. Sold price data adds UPRN identifiers and full sale history per property.
curl -X GET 'https://api.parse.bot/scraper/662dcd36-9d0e-48ea-b79b-6506677690b8/search_properties_for_sale?page=1&radius=5&location=london&max_beds=4&min_beds=1&max_price=500000&min_price=100000&property_type=detached' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace zoopla-co-uk-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.zoopla_api import Zoopla, Listing, ListingDetail, SoldProperty, Agent, PropertyType, SoldPropertyType
zoopla = Zoopla()
# Search for detached properties for sale in London
for listing in zoopla.listings.search_for_sale(location="london", property_type=PropertyType.DETACHED, min_beds=2, limit=5):
print(listing.title, listing.price, listing.address)
# Get detailed info for a listing
detail = listing.details()
print(detail.display_address, detail.section, detail.property_type)
if detail.counts:
print(detail.counts.num_bedrooms, detail.counts.num_bathrooms)
if detail.branch:
print(detail.branch.branch_name, detail.branch.redirect_phone)
# Search rental listings
for rental in zoopla.listings.search_to_rent(location="manchester", property_type=PropertyType.FLAT, limit=3):
print(rental.title, rental.price_unformatted, rental.address)
# Search sold house prices for terraced properties
for sold in zoopla.soldproperties.search(location="bristol", property_type=SoldPropertyType.TERRACED, limit=5):
print(sold.address.full_address, sold.last_sale.price, sold.attributes.tenure)
# Find estate agents
for agent in zoopla.agents.search(location="oxford", limit=5):
print(agent.name, agent.display_address, agent.contact_number)
Search properties for sale in a specific UK location. Returns paginated results including featured and regular listings with price, address, property type, and listing metadata. Location is a slug matching Zoopla's URL structure (city, town, or postcode area). Pagination via page number; each page returns ~25 listings.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| radius | integer | Search radius in miles. |
| locationrequired | string | Location slug matching Zoopla URL structure (e.g., 'london', 'manchester', 'se1', 'oxford'). |
| max_beds | integer | Maximum number of bedrooms. |
| min_beds | integer | Minimum number of bedrooms. |
| max_price | integer | Maximum price in GBP. |
| min_price | integer | Minimum price in GBP. |
| property_type | string | Property type slug. |
{
"type": "object",
"fields": {
"page": "integer current page number",
"listings": "array of property listing objects with address, price, listingId, propertyType, title, publishedOn, priceUnformatted, etc.",
"location": "string location slug queried",
"total_results": "integer total count or null if unavailable"
},
"sample": {
"data": {
"page": 1,
"listings": [
{
"price": "£450,000",
"title": "3 bed terraced house for sale",
"address": "Lucerne Road, Thornton Heath CR7",
"sizeSqft": 1011,
"listingId": "73036018",
"listingType": "featured",
"publishedOn": "27th Apr 2026",
"propertyType": "terraced",
"numberOfImages": 15,
"priceUnformatted": 450000,
"summaryDescription": "Set on a popular residential street..."
}
],
"location": "london",
"total_results": null
},
"status": "success"
}
}About the Zoopla API
Sale and Rental Search
Both search_properties_for_sale and search_properties_to_rent take a required location slug — such as london, manchester, or a postcode district like se1 — alongside optional filters: min_price, max_price, min_beds, max_beds, property_type (e.g. detached, flat, bungalow), and radius in miles. Results are paginated via the page parameter and return a total_results count alongside a listings array. Each listing object includes address, price, listingId, propertyType, and title. Rental prices are per calendar month (pcm).
Listing Details and Sold Prices
get_property_listing_details accepts a Zoopla listing_id string and returns fields including title, section, listingId, publishedOn, propertyType, and displayAddress. The endpoint checks for-sale inventory first, then falls back to rental if the listing is not found in the sale index.
search_sold_house_prices returns historical transaction data for a location. Each result in the results array includes a uprn (Unique Property Reference Number), lastSale details, address, and property attributes. Bedroom and bathroom range filters (min_beds, max_beds, min_baths, max_baths) and a property_type code are supported. Pagination uses cursor-based page_info objects with hasPreviousPage, hasNextPage, startCursor, and endCursor fields in addition to an integer total_results count.
Estate Agent Search
search_estate_agents takes a location slug and returns an agents array where each agent object carries name, displayAddress, contactNumber, logo, and listingsStatistics. The response also includes a total agent count and a pagination object with pageNumber and pageTotal.
The Zoopla API is a managed, monitored endpoint for zoopla.co.uk — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when zoopla.co.uk changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official zoopla.co.uk API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a property price alert tool that monitors new
search_properties_for_saleresults for a postcode and price range. - Aggregate sold house price data by location using
search_sold_house_pricesto produce neighbourhood valuation trends. - Populate a rental comparison dashboard with
search_properties_to_rentresults filtered by bedroom count and monthly budget. - Create a property detail page that pulls
publishedOn,propertyType, anddisplayAddressfromget_property_listing_details. - Build an estate agent directory for a specific city using the
name,contactNumber, andlistingsStatisticsfields fromsearch_estate_agents. - Research investment opportunities by cross-referencing live sale listings with sold price history for the same location slug.
- Track listing inventory counts across UK cities by comparing
total_resultsvalues from repeated sale and rental searches.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Zoopla have an official developer API?+
What does `search_sold_house_prices` return beyond the sale price?+
uprn (Unique Property Reference Number), lastSale details covering the transaction, a full address, and a property attributes object. Pagination is cursor-based via a page_info object, unlike the integer-only paging used by the listing search endpoints.How does `get_property_listing_details` handle rental versus sale listings?+
listing_id string and the endpoint checks the for-sale index first. If no match is found there, it checks the rental index and returns the result from whichever section the listing belongs to. The section field in the response identifies which type was matched.Does the API return floor plans, EPC ratings, or full photo galleries for listings?+
title, displayAddress, propertyType, publishedOn, and section. Floor plans, EPC certificates, and photo galleries are not included in the current response shape. You can fork this API on Parse and revise get_property_listing_details to add those fields if the source exposes them.Can I filter `search_sold_house_prices` by a specific date range?+
location, bedroom and bathroom counts, and property_type. You can fork this API on Parse and revise the endpoint to add date-based filtering.