{
  "openapi": "3.0.1",
  "info": {
    "title": "Zoopla UK Property Listings Scraper",
    "description": "Zoopla UK property for sale or to rent by town, county or postcode. Newest first or most price-reduced first: price, reductions, date listed, beds, baths, tenure, floor area, coordinates, agent. Built for new-listing and price-drop alerts.",
    "version": "0.1",
    "x-build-id": "z7ct94QWgFKezHICZ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/superslowsloth~zoopla-listings/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-superslowsloth-zoopla-listings",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/superslowsloth~zoopla-listings/runs": {
      "post": {
        "operationId": "runs-sync-superslowsloth-zoopla-listings",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/superslowsloth~zoopla-listings/run-sync": {
      "post": {
        "operationId": "run-sync-superslowsloth-zoopla-listings",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "locations"
        ],
        "properties": {
          "locations": {
            "title": "Areas",
            "type": "array",
            "description": "Where to search, one per line: a town, a county, an outcode or a full postcode, e.g. \"Bristol\", \"Oxfordshire\", \"BS8\", \"BS8 1AA\". A part of a larger area is written with a slash, e.g. \"London/Islington\" or \"Bristol/Clifton\". Zoopla's own spelling applies, and a name it cannot resolve (\"St Albans\" and the ambiguous \"St Ives\" were measured failing) is reported as a failure, never answered with another place's listings; use the outcode instead, e.g. \"AL1\". A property that two areas both return is delivered and charged once.",
            "items": {
              "type": "string"
            }
          },
          "channel": {
            "title": "For sale or to rent",
            "enum": [
              "buy",
              "rent"
            ],
            "type": "string",
            "description": "Which part of Zoopla to search. \"buy\" reads property for sale (new-build lots are included unless you exclude them below), \"rent\" reads property to rent, priced per calendar month.",
            "default": "buy"
          },
          "sort": {
            "title": "Sort order",
            "enum": [
              "newest_listings",
              "most_reduced",
              "lowest_price",
              "highest_price",
              ""
            ],
            "type": "string",
            "description": "How Zoopla orders the results before they are read. \"Newest listed first\" is what makes a repeated run a new-listing feed. \"Most price-reduced first\" is the price-drop feed. Zoopla's own default puts agents' paid listings first and is not useful for monitoring.",
            "default": "newest_listings"
          },
          "addedWithin": {
            "title": "Listed within",
            "enum": [
              "",
              "24_hours",
              "3_days",
              "7_days",
              "14_days",
              "30_days"
            ],
            "type": "string",
            "description": "Only properties first listed within this window. Combine \"24 hours\" with a daily schedule for a feed of what came on the market since the last run.",
            "default": ""
          },
          "minPrice": {
            "title": "Minimum price",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest price to include, in pounds; per calendar month when renting. Any whole number is accepted."
          },
          "maxPrice": {
            "title": "Maximum price",
            "minimum": 0,
            "type": "integer",
            "description": "Highest price to include, in pounds; per calendar month when renting. Any whole number is accepted."
          },
          "minBedrooms": {
            "title": "Minimum bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Fewest bedrooms to include. 0 is a real value and selects studios."
          },
          "maxBedrooms": {
            "title": "Maximum bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Most bedrooms to include."
          },
          "radius": {
            "title": "Search radius (miles)",
            "enum": [
              "0",
              "0.25",
              "0.5",
              "1",
              "3",
              "5",
              "10",
              "15",
              "20",
              "30",
              "40"
            ],
            "type": "string",
            "description": "How far beyond the area to search. Zoopla accepts only these steps and quietly ignores any other value, so only these are offered. A radius makes overlapping areas likely, which is fine: a property matched twice is delivered and charged once.",
            "default": "0"
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Restrict to certain property types, using Zoopla's names: houses, flats, bungalows. One per line; leave empty for every type, land included. Zoopla's other categories (land, farms, park homes) are not selectable here because Zoopla answers them with an empty page.",
            "items": {
              "type": "string"
            }
          },
          "newHomes": {
            "title": "New-build homes",
            "enum": [
              "include",
              "exclude",
              "only"
            ],
            "type": "string",
            "description": "Sales only. \"include\" is Zoopla's default and mixes developers' new-build lots in with resale homes; \"exclude\" removes them; \"only\" returns nothing else. Ignored when renting.",
            "default": "include"
          },
          "includeSSTC": {
            "title": "Include sold subject to contract",
            "type": "boolean",
            "description": "Sales only. Include properties already under offer or sold STC, which Zoopla hides by default (3,786 homes for sale in Bristol become 7,002). This actor always states the choice explicitly, so a change to Zoopla's default cannot quietly change what a saved run returns.",
            "default": false
          },
          "maxItems": {
            "title": "Maximum listings",
            "minimum": 1,
            "type": "integer",
            "description": "Budget for the whole run, across every area, not per area. A property that matches more than one of your searches, or that Zoopla repeats in a paid featured slot, is delivered and charged once.",
            "default": 100
          },
          "maxPages": {
            "title": "Maximum pages per area",
            "minimum": 1,
            "maximum": 40,
            "type": "integer",
            "description": "How deep to walk a single area. A page carries 25 results plus 3 featured listings agents paid to insert. Zoopla itself stops at page 40 (about 1,000 listings) however many match, so 40 is the ceiling; narrower areas or filters reach further than a deeper walk.",
            "default": 40
          },
          "requestIntervalSecs": {
            "title": "Seconds between pages",
            "minimum": 0,
            "maximum": 60,
            "type": "integer",
            "description": "How long to wait between result pages. Zoopla sits behind Cloudflare, which challenged a single address after roughly 80 page requests in under an hour; a refusal is answered by switching to a fresh address and retrying, and a longer pause trades wall-clock time for fewer retries.",
            "default": 1
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Zoopla is behind Cloudflare. Measured 2026-10-20: a datacenter proxy was challenged (\"Just a moment...\", HTTP 403) on 5 of 5 requests, while residential exits were served 10 of 11 over 32 minutes, so RESIDENTIAL is the default and changing it will most likely produce an empty run.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}