Zoopla API: Search properties
Searches Zoopla homes for sale or to rent in a UK town, area or postcode, with price, bedroom, property type and sort options. Prices are in GBP; rents are monthly.
Unofficial. Not affiliated with or endorsed by Zoopla.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Sort optional
sort Result order, for example price_low_to_high.
price_low_to_high
One of
most_recent,price_low_to_high,price_high_to_low. Defaultmost_recent.- Location, required
location UK town, area or postcode, for example Bristol or BS1 4DJ.
Bristol
- Max Price optional
max_price Maximum price in GBP; monthly rent for rentals, for example 500000.
Not set
Number 0 or more.
- Min Price optional
min_price Minimum price in GBP; monthly rent for rentals, for example 250000.
Not set
Number 0 or more.
- Max Results optional
max_results Maximum number of properties to return, for example 25.
5
Whole number from 1 to 100. Default
25.- Listing Type optional
listing_type Whether to find homes for sale or to rent, for example to_rent.
for_sale (default)
One of
for_sale,to_rent.- Min Bedrooms optional
min_bedrooms Minimum bedrooms, for example 2.
2
Whole number 0 or more.
- Property Type optional
property_type Kind of home, for example flats.
flats
One of
any,houses,flats,bungalows,land. Defaultany.
Input as JSON
{ "sort": "price_low_to_high", "location": "Bristol", "max_results": 5, "min_bedrooms": 2, "property_type": "flats"}Output
{ "properties": [ { "price": 55000, "address": "Lakeshore Drive, Bristol, Somerset BS13", "bedrooms": 2, "currency": "GBP", "bathrooms": 2, "agent_name": "Andrews - Southville", "photo_link": "https://lid.zoocdn.com/645/430/85339261c3c5f78786aac7fb39a122672f3dff33.jpg" , "listed_date": "2025-07-15", "listing_link": "https://www.zoopla.co.uk/for-sale/details/70787909/" , "property_type": "maisonette", "price_qualifier": null, "zoopla_listing_id": "70787909" }, { "price": 75900, "address": "Lake Shore, Lake Shore Drive, Bristol BS13", "bedrooms": 2, "currency": "GBP", "bathrooms": 2, "agent_name": "Ocean - Knowle", "photo_link": "https://lid.zoocdn.com/645/430/0d63bacf2a9296d374539a4a13969a5767781fb7.jpg" , "listed_date": "2026-09-18", "listing_link": "https://www.zoopla.co.uk/for-sale/details/74272513/" , "property_type": "flat", "price_qualifier": null, "zoopla_listing_id": "74272513" }, { "price": 85000, "address": "Toynbee Road, Bristol BS4", "bedrooms": 2, "currency": "GBP", "bathrooms": 1, "agent_name": "Chappell & Matthews - Bristol Sales", "photo_link": "https://lid.zoocdn.com/645/430/428d2658e33155d492331d0eae2438085636dec2.jpg" , "listed_date": "2026-07-24", "listing_link": "https://www.zoopla.co.uk/for-sale/details/73809934/" , "property_type": "flat", "price_qualifier": null, "zoopla_listing_id": "73809934" } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"zoopla.co.uk/search_properties","input":{"sort":"price_low_to_high","location":"Bristol","max_results":5,"min_bedrooms":2,"property_type":"flats"}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "zoopla.co.uk/search_properties" , "input": { "sort": "price_low_to_high", "location": "Bristol", "max_results": 5, "min_bedrooms": 2, "property_type": "flats" }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "zoopla.co.uk/search_properties" , "input": { "sort": "price_low_to_high", "location": "Bristol", "max_results": 5, "min_bedrooms": 2, "property_type": "flats" } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run zoopla.co.uk/search_properties# with {"sort":"price_low_to_high","location":"Bristol","max_results":5,"min_bedrooms":2,"property_type":"flats"}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "location" ], "properties": { "sort": { "enum": [ "most_recent", "price_low_to_high", "price_high_to_low" ], "type": "string", "default": "most_recent", "description": "Result order, for example price_low_to_high." }, "location": { "type": "string", "description": "UK town, area or postcode, for example Bristol or BS1 4DJ." }, "max_price": { "type": "number", "minimum": 0, "description": "Maximum price in GBP; monthly rent for rentals, for example 500000." }, "min_price": { "type": "number", "minimum": 0, "description": "Minimum price in GBP; monthly rent for rentals, for example 250000." }, "max_results": { "type": "integer", "default": 25, "maximum": 100, "minimum": 1, "description": "Maximum number of properties to return, for example 25." }, "listing_type": { "enum": [ "for_sale", "to_rent" ], "type": "string", "default": "for_sale", "description": "Whether to find homes for sale or to rent, for example to_rent." }, "min_bedrooms": { "type": "integer", "minimum": 0, "description": "Minimum bedrooms, for example 2." }, "property_type": { "enum": [ "any", "houses", "flats", "bungalows", "land" ], "type": "string", "default": "any", "description": "Kind of home, for example flats." } }}Output schema
{ "type": "object", "required": [ "properties" ], "properties": { "properties": { "type": "array", "items": { "type": "object", "required": [ "address", "price", "currency", "price_qualifier", "bedrooms", "bathrooms", "property_type", "agent_name", "listed_date", "photo_link", "listing_link", "zoopla_listing_id" ], "properties": { "price": { "type": [ "number", "null" ], "description": "Price in GBP, or monthly rent in GBP." }, "address": { "type": [ "string", "null" ] }, "bedrooms": { "type": [ "integer", "null" ] }, "currency": { "enum": [ "GBP" ], "type": "string" }, "bathrooms": { "type": [ "integer", "null" ] }, "agent_name": { "type": [ "string", "null" ] }, "photo_link": { "type": [ "string", "null" ] }, "listed_date": { "type": [ "string", "null" ], "format": "date" }, "listing_link": { "type": "string" }, "property_type": { "type": [ "string", "null" ] }, "price_qualifier": { "type": [ "string", "null" ], "description": "Displayed price qualifier, such as Guide price, Offers over or pcm." }, "zoopla_listing_id": { "type": "string" } }, "additionalProperties": false } } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
zoopla.co.uk/search_properties- Returns
- address, price, price qualifier, bedrooms, bathrooms, property type, agent, listed date, photo, listing link
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method zoopla.co.uk/search_properties with the inputs above.
Ask your agent
- Find me 2+ bedroom flats to rent in Manchester under £1,400 a month, newest listings first
- What houses are for sale in Leeds between £250k and £400k with at least 3 bedrooms? Sort cheapest first.
- Show me the most expensive homes currently listed on Zoopla in SW3, top 10 please
- I'm looking for bungalows for sale near EX4 under £350,000 — list up to 30 with agent and listing date
- Search Zoopla for building land for sale around Cheltenham, priced from lowest to highest
See more
Searches Rightmove homes for sale or to rent around a town, area or postcode, with price, bedroom, property type, radius and under-offer filters, sorted by newest or price.
rightmove.co.uk/search_propertiesSearches Zillow homes for sale in a city and state, neighborhood or ZIP code, with optional price, bedroom, bathroom and property type filters and sort order, from Zillow's public search pages (up to 100 listings).
zillow.com/search_homesSearches Realtor.com homes for sale, for rent, or recently sold in a city, neighborhood or ZIP code, with optional price, bedroom, bathroom and home type filters and sort order. Rentals with price ranges use the lowest advertised rent; withheld sold prices are blank.
realtor.com/search_homesSearches Zillow rentals in a city, neighborhood, or ZIP code, with optional rent, bedroom, pet, and home-type filters. Listing details that Zillow does not show are null.
zillow.com/search_rentalsSearches Homes.com homes for sale in a US city, neighborhood, or ZIP code, with optional price, bedroom, bathroom and home type filters. Returns listings in site order; days on market is null when not shown.
homes.com/search_homesSearches Zumper apartments and homes for rent in a city or neighborhood. You can filter by price, bedrooms, pet policy and property type.
zumper.com/search_rentalsSearches Redfin homes for sale in a city, neighborhood or ZIP code, with price, home type, bed and bath filters and a sort order, returning each listing's price, size, status, photo and links.
redfin.com/search_homesLooks up Zillow housing market figures for a city and state or five-digit ZIP code: typical home value, one-year change, list and sale prices, inventory and listing activity.
zillow.com/get_housing_market