{
  "openapi": "3.0.1",
  "info": {
    "title": "Zoopla Scraper - UK Property Listings & Agents",
    "description": "Scrape Zoopla UK property listings for sale, to rent and new homes. Get prices, beds, baths, floor area, coordinates, agent name and phone, EPC, tenure, council tax and price history. Independent tool, not affiliated with Zoopla.",
    "version": "0.1",
    "x-build-id": "7OT8S5ERsiQwhZByG"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapesage~zoopla-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapesage-zoopla-scraper",
        "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/scrapesage~zoopla-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapesage-zoopla-scraper",
        "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/scrapesage~zoopla-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapesage-zoopla-scraper",
        "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",
        "properties": {
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "UK places to search on Zoopla - for example London, Manchester, Bristol, or an area like Wandsworth. Zoopla sometimes files a town under its county, in which case use the two-part form (west-yorkshire/leeds). If a location has no Zoopla search page the run says so instead of failing.",
            "items": {
              "type": "string"
            }
          },
          "section": {
            "title": "Section",
            "enum": [
              "for-sale",
              "to-rent",
              "new-homes"
            ],
            "type": "string",
            "description": "Which part of Zoopla to search.",
            "default": "for-sale"
          },
          "propertyType": {
            "title": "Property type",
            "enum": [
              "property",
              "houses",
              "flats",
              "bungalows",
              "farms-land",
              "cottages",
              "retirement",
              "shared-ownership",
              "student-accommodation"
            ],
            "type": "string",
            "description": "Narrow the search to one property type. Zoopla's robots.txt forbids a few section/type combinations (all rental cottages, new-build cottages and new-build shared ownership); those are skipped with an explanation rather than requested.",
            "default": "property"
          },
          "sort": {
            "title": "Sort order",
            "enum": [
              "",
              "newest_listings",
              "lowest_price",
              "highest_price"
            ],
            "type": "string",
            "description": "How Zoopla should order the results.",
            "default": ""
          },
          "includeDetails": {
            "title": "Open each property page for full detail",
            "type": "boolean",
            "description": "Off, every property comes from the results page: price, address, beds, baths, size, coordinates, agent name and phone, and the photo gallery. On, the actor also opens each property's own page and adds the full description, key features, EPC rating, tenure, council tax band, service charge, ground rent, floor plan, price history, nearest stations with distances and the exact postcode. It is much slower and is charged as a separate, dearer event.",
            "default": false
          },
          "maxPagesPerLocation": {
            "title": "Max pages per location",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Zoopla returns about 28 properties per page. Raise this to go deeper into each location.",
            "default": 3
          },
          "maxResults": {
            "title": "Max properties",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Stop after this many properties in total. 0 means no limit.",
            "default": 0
          },
          "minPrice": {
            "title": "Min price",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest price to include, in pounds. Sent to Zoopla as a search filter and re-checked on every record."
          },
          "maxPrice": {
            "title": "Max price",
            "minimum": 0,
            "type": "integer",
            "description": "Highest price to include, in pounds. For rentals this is the monthly rent."
          },
          "minBeds": {
            "title": "Min bedrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Only keep properties with at least this many bedrooms."
          },
          "maxBeds": {
            "title": "Max bedrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Only keep properties with no more than this many bedrooms."
          },
          "minBaths": {
            "title": "Min bathrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Only keep properties with at least this many bathrooms. Applied to the data, not to Zoopla's own filters."
          },
          "minSizeSqFt": {
            "title": "Min floor area (sq ft)",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep properties with at least this floor area. Not every agent publishes a size, and those properties are excluded when this is set."
          },
          "onlyPriceReduced": {
            "title": "Only price-reduced properties",
            "type": "boolean",
            "description": "Keep only properties Zoopla marks as reduced.",
            "default": false
          },
          "onlyWithFloorPlan": {
            "title": "Only properties with a floor plan",
            "type": "boolean",
            "description": "Keep only properties that have at least one floor plan.",
            "default": false
          },
          "excludeUnderOffer": {
            "title": "Exclude under offer / sold STC",
            "type": "boolean",
            "description": "Drop properties already under offer.",
            "default": false
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Zoopla search URLs to scrape directly, for example https://www.zoopla.co.uk/for-sale/property/london/. Accepts a plain URL, a {\"url\": …} object, or a {\"requestsFromUrl\": …} link to a text file. URLs on paths Zoopla's robots.txt disallows are skipped and named in the run message.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "urlsFromFile": {
            "title": "URLs from a file or pasted list",
            "type": "string",
            "description": "Paste Zoopla URLs one per line, or give one link to a .txt/.csv file, a Google Sheet, a Google Drive file or an Apify key-value-store record. Every URL found is added to Start URLs."
          },
          "outputFields": {
            "title": "Output fields",
            "uniqueItems": true,
            "type": "array",
            "description": "Pick the fields each row should carry. Leave empty for all of them. Detail-only fields are filled in only when \"Open each property page for full detail\" is on.",
            "items": {
              "type": "string",
              "enum": [
                "listingId",
                "url",
                "section",
                "title",
                "propertyType",
                "address",
                "price",
                "priceLabel",
                "priceCurrency",
                "rentPerWeek",
                "isPriceReduced",
                "firstListedOn",
                "priceReducedOn",
                "priceReductionLabel",
                "priceReductionPercent",
                "numBedrooms",
                "numBathrooms",
                "numLivingRooms",
                "sizeSqFt",
                "sizeSource",
                "summary",
                "latitude",
                "longitude",
                "agentName",
                "agentPhone",
                "agentLogoUrl",
                "agentProfileUrl",
                "branchId",
                "publishedOn",
                "availableFrom",
                "status",
                "underOffer",
                "isPremium",
                "listingType",
                "tags",
                "highlights",
                "imageUrl",
                "imageCount",
                "floorPlanCount",
                "videoCount",
                "images",
                "searchLocation",
                "sourceUrl",
                "page",
                "scrapedAt",
                "category",
                "postcode",
                "outcode",
                "incode",
                "streetName",
                "propertyNumberOrName",
                "postTown",
                "county",
                "region",
                "uprn",
                "priceQualifier",
                "pricePerSqFt",
                "isAuction",
                "priceHistory",
                "estimatedValue",
                "sizeLabel",
                "description",
                "keyFeatures",
                "tenure",
                "tenureCode",
                "councilTaxBand",
                "serviceCharge",
                "groundRent",
                "leaseRemaining",
                "materialInformation",
                "epcRating",
                "epcImageUrl",
                "hasEpc",
                "floorPlanUrl",
                "hasFloorPlan",
                "furnishedState",
                "chainFree",
                "isSharedOwnership",
                "isRetirementHome",
                "listingCondition",
                "listingStatus",
                "agentBrand",
                "agentIsDeveloper",
                "companyId",
                "memberType",
                "nearestStations",
                "smartTags",
                "brochureUrls",
                "staticMapUrl",
                "metaTitle"
              ],
              "enumTitles": [
                "Zoopla listing ID (listingId)",
                "Listing URL (url)",
                "Section (for sale / to rent / new homes) (section)",
                "Listing title (title)",
                "Property type (propertyType)",
                "Address (address)",
                "Price (price)",
                "Price as shown (priceLabel)",
                "Currency (priceCurrency)",
                "Rent per week (rentPerWeek)",
                "isPriceReduced (isPriceReduced)",
                "firstListedOn (firstListedOn)",
                "priceReducedOn (priceReducedOn)",
                "priceReductionLabel (priceReductionLabel)",
                "priceReductionPercent (priceReductionPercent)",
                "Bedrooms (numBedrooms)",
                "Bathrooms (numBathrooms)",
                "Living rooms (numLivingRooms)",
                "Floor area (sq ft) (sizeSqFt)",
                "Floor-area source (sizeSource)",
                "Short summary (summary)",
                "Latitude (latitude)",
                "Longitude (longitude)",
                "Agent name (agentName)",
                "Agent phone (agentPhone)",
                "Agent logo (agentLogoUrl)",
                "Agent profile URL (agentProfileUrl)",
                "Agent branch ID (branchId)",
                "Listed on (publishedOn)",
                "Available from (availableFrom)",
                "Status flag (status)",
                "Under offer (underOffer)",
                "Premium listing (isPremium)",
                "Listing placement (listingType)",
                "Tags (tags)",
                "Highlights (highlights)",
                "Main image (imageUrl)",
                "Image count (imageCount)",
                "Floor plan count (floorPlanCount)",
                "Video count (videoCount)",
                "Images (images)",
                "Search location (searchLocation)",
                "Source page URL (sourceUrl)",
                "Result page number (page)",
                "Scraped at (scrapedAt)",
                "Category (category)",
                "Full postcode (postcode)",
                "Postcode outcode (outcode)",
                "Postcode incode (incode)",
                "Street name (streetName)",
                "House number or name (propertyNumberOrName)",
                "Post town (postTown)",
                "County (county)",
                "Region (region)",
                "UPRN (uprn)",
                "Price qualifier (priceQualifier)",
                "Price per sq ft (pricePerSqFt)",
                "Auction listing (isAuction)",
                "Price history (priceHistory)",
                "Zoopla estimate (estimatedValue)",
                "Floor area as shown (sizeLabel)",
                "Full description (description)",
                "Key features (keyFeatures)",
                "Tenure (tenure)",
                "Tenure code (tenureCode)",
                "Council tax band (councilTaxBand)",
                "Service charge (serviceCharge)",
                "Ground rent (groundRent)",
                "Lease remaining (leaseRemaining)",
                "Material information (materialInformation)",
                "EPC rating (epcRating)",
                "EPC certificate image (epcImageUrl)",
                "Has an EPC (hasEpc)",
                "Floor plan image (floorPlanUrl)",
                "Has a floor plan (hasFloorPlan)",
                "Furnished state (furnishedState)",
                "Chain free (chainFree)",
                "Shared ownership (isSharedOwnership)",
                "Retirement home (isRetirementHome)",
                "New build or pre-owned (listingCondition)",
                "Listing status (listingStatus)",
                "Agent brand (agentBrand)",
                "Agent is a developer (agentIsDeveloper)",
                "Agent company ID (companyId)",
                "Agent member type (memberType)",
                "Nearest stations (nearestStations)",
                "Smart tags (smartTags)",
                "Brochure links (brochureUrls)",
                "Static map image (staticMapUrl)",
                "Zoopla page title (metaTitle)"
              ]
            }
          },
          "monitorMode": {
            "title": "Monitor mode - only new listings",
            "type": "boolean",
            "description": "Remember the listings already returned and emit only properties that are new since the last run. Ideal on a schedule for a new-listing alert.",
            "default": false
          },
          "monitorStoreName": {
            "title": "Monitor store name",
            "type": "string",
            "description": "Named key-value store holding the monitor's memory. Use different names to track different searches independently.",
            "default": "zoopla-monitor"
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}