Zoopla
UK property: homes and commercial for sale and to rent, full listing detail, Land-Registry sold prices and estate agents.
/zoopla/v1/location_searchfreeResolve a free-text place, postcode or station into the canonical Zoopla area path every other action takes. An unambiguous name returns one match; an ambiguous one ('Richmond', 'Kingston') returns every candidate Zoopla offers.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| query | required | — | Town, district, postcode, outcode or station name. |
| section = for_sale | optional | for_sale · to_rent · new_homes · commercial_sale · commercial_rent | Which Zoopla market to search. The two commercial markets take their own property_type values (offices, retail-premises, industrial-sites, hospitality, land) and carry a floor-area range rather than bedrooms. |
/zoopla/v1/search2 creditsSearch Zoopla listings in an area — homes for sale, homes to rent, new-build developments, or commercial property for sale or to rent — with the filters the site itself exposes: price band, minimum/maximum beds, minimum baths, property type, floor-area band, search radius, listed-within, free-text keyword, features, sold/auction inclusion and sort order. 25 listings a page.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| geo | required | — | Where to look: a Zoopla area path ('sw9', 'surrey/richmond', 'london/clapham'), a full Zoopla URL, or just a place name or postcode ('Leeds', 'SW9 9EF'). Zoopla's own slugs are not guessable — Leeds is 'west-yorkshire/leeds' while Liverpool is plain 'liverpool' — so a plain name is resolved for you and the path used comes back as `area` (with `area_resolved_from` set). Use location_search when a name is ambiguous, e.g. Richmond. |
| section = for_sale | optional | for_sale · to_rent · new_homes · commercial_sale · commercial_rent | Which Zoopla market to search. The two commercial markets take their own property_type values (offices, retail-premises, industrial-sites, hospitality, land) and carry a floor-area range rather than bedrooms. |
| page = 1 | optional | 1– | 1-based page. Zoopla serves 25 listings a page and stops at page 40 (returned as page_cap); narrow the area or the filters to reach more. |
| price_min | optional | 0– | Minimum price in GBP — the asking price, or the MONTHLY rent when section=to_rent (set price_frequency=per_week to read it as weekly). |
| price_max | optional | 0– | Maximum price in GBP, same basis as price_min. |
| beds_min | optional | 0–10 | Minimum bedrooms (2 means 2 or more; 0 includes studios). |
| beds_max | optional | 0–10 | Maximum bedrooms. |
| baths_min | optional | 0–10 | Minimum bathrooms (2 means 2 or more). |
| floor_area_min | optional | 0– | Minimum internal floor area in square FEET (Zoopla's own unit on listings; the sold register uses square metres). |
| floor_area_max | optional | 0– | Maximum internal floor area in square feet. |
| property_type | optional | houses · flats · detached · semi_detached · terraced · bungalows · land · park_home · farms_land · offices · retail-premises · industrial-sites · hospitality · land | One property type. The first nine apply to for_sale / to_rent / new_homes; offices, retail-premises, industrial-sites, hospitality and land apply to the two commercial sections. Zoopla takes a single value here — passing two does not union them, so ask for one type per call. |
| radius | optional | 0 · 0.25 · 0.5 · 1 · 3 · 5 · 10 · 15 · 20 · 30 · 40 | Widen the search around the area, in miles. Zoopla accepts only these steps. |
| added | optional | 24_hours · 3_days · 7_days · 14_days · 30_days | Only listings Zoopla published within this window. |
| keywords | optional | — | Free-text term Zoopla matches inside the listing (e.g. 'garden', 'balcony', 'garage'). Max 80 characters. |
| features | optional | has_garden · has_parking_garage · has_balcony_terrace · has_fireplace · has_porter_security | Require these features. Several are combined with AND. |
| new_homes | optional | include · exclude · only | How new-build listings are treated inside a for-sale search. |
| sort = recommended | optional | recommended · newest_listings · highest_price · lowest_price · most_reduced | Result ordering. These are the only orders Zoopla offers. |
| include_sold = false | optional | — | Also return Sold STC / Under Offer listings (for-sale only). |
| auctions_only = false | optional | — | Only properties going to auction. |
| furnished_state | optional | furnished · unfurnished · part_furnished | RENT only: furnishing. |
| price_frequency | optional | per_month · per_week | RENT only: how price_min/price_max are read. Rows always come back with both the monthly price and Zoopla's own weekly figure. |
| student_only = false | optional | — | RENT only: student accommodation. |
| shared_only = false | optional | — | RENT only: shared accommodation / rooms. |
| bills_included = false | optional | — | RENT only: bills included in the rent. |
| available_from | optional | — | RENT only: Zoopla's availability filter (e.g. 'now' or a date). |
| max_rotations = 4 | optional | 1–8 | How hard to retry when the site refuses a request. |
/zoopla/v1/property_detail2 creditsOne Zoopla listing in full: price (rent in both frequencies), full description, key features, tenure, service charge, ground rent, council tax band, EPC rating and certificate, floorplans, every image, nearest stations with distances, coordinates, postcode and the marketing agent.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| listing_id | required | — | Zoopla listing id — the digits in a /details/<id>/ URL, or any search row's listing_id. A full Zoopla listing URL also works. |
| max_rotations = 4 | optional | 1–8 | How hard to retry when the site refuses. |
/zoopla/v1/sold_prices2 creditsZoopla's Land-Registry sold-price register for an area: every recorded address with its UPRN, last sale date and price, bedrooms, bathrooms, receptions, tenure and floor area in square metres. 25 addresses a page, newest sale first.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| geo | required | — | Where to look: a Zoopla area path ('sw9', 'surrey/richmond', 'london/clapham'), a full Zoopla URL, or just a place name or postcode ('Leeds', 'SW9 9EF'). Zoopla's own slugs are not guessable — Leeds is 'west-yorkshire/leeds' while Liverpool is plain 'liverpool' — so a plain name is resolved for you and the path used comes back as `area` (with `area_resolved_from` set). Use location_search when a name is ambiguous, e.g. Richmond. |
| page = 1 | optional | 1– | 1-based page. Zoopla serves 25 listings a page and stops at page 40 (returned as page_cap); narrow the area or the filters to reach more. |
| max_rotations = 4 | optional | 1–8 | How hard to retry when the site refuses. |
/zoopla/v1/property_history1 creditOne address by UPRN: every sale Zoopla holds from the Land Registry with its price, date and percentage change, plus the property's own past Zoopla listings with their asking prices, photos and floorplans, its EPC rating, tenure and floor area.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| uprn | required | — | The UPRN from a sold_prices row (or the digits in a /property/uprn/<uprn>/ URL). |
| max_rotations = 4 | optional | 1–8 | How hard to retry when the site refuses. |
/zoopla/v1/agent1 creditOne estate-agent branch: address, memberships, opening times, website, its own for-sale and to-rent averages and weeks-on-market, and the properties it currently has listed on Zoopla. A new-homes branch id resolves to the housebuilder's development instead (kind='developer'): its price and bedroom range, its plots and the schools, stations and shops Zoopla lists nearby.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| branch_id | required | — | Zoopla branch id (a search row's agent.branch_id) or a full /find-agents/branch/... URL. |
| max_rotations = 4 | optional | 1–8 | How hard to retry when the site refuses. |
/zoopla/v1/agent_search1 creditThe estate or letting agents covering an area, with each branch's average asking price, average weeks on market and live listing count.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| geo | required | — | Where to look: a Zoopla area path ('sw9', 'surrey/richmond', 'london/clapham'), a full Zoopla URL, or just a place name or postcode ('Leeds', 'SW9 9EF'). Zoopla's own slugs are not guessable — Leeds is 'west-yorkshire/leeds' while Liverpool is plain 'liverpool' — so a plain name is resolved for you and the path used comes back as `area` (with `area_resolved_from` set). Use location_search when a name is ambiguous, e.g. Richmond. |
| kind = all | optional | all · estate · letting | Which kind of agent to list. |
| page = 1 | optional | 1– | 1-based page. Zoopla serves 25 listings a page and stops at page 40 (returned as page_cap); narrow the area or the filters to reach more. |
| max_rotations = 4 | optional | 1–8 | How hard to retry when the site refuses. |
curl -X POST https://api.reefapi.com/zoopla/v1/location_search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"Clapham, London"}'{
"ok": true,
"data": { /* the result */ },
"meta": {
"latency_ms": 240,
"record_count": 12,
"completeness_pct": 100
},
"error": null
}