{
  "openapi": "3.0.1",
  "info": {
    "title": "Zoopla Property Detail Scraper — Valuation, by URL or Address",
    "description": "Paste Zoopla URLs, listing IDs, or UK addresses and get a full property dossier: price, beds, tenure, lease and ground rent, council-tax band, EPC, photos, floor plans, and agent. Add Zoopla sale and rent valuation, sold-price history, price changes, and EV charging. Bulk Zoopla API.",
    "version": "1.0",
    "x-build-id": "Vebe16XRxiCVRjeIc"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sian.agency~zoopla-property-detail-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sian.agency-zoopla-property-detail-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/sian.agency~zoopla-property-detail-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sian.agency-zoopla-property-detail-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/sian.agency~zoopla-property-detail-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sian.agency-zoopla-property-detail-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": {
          "propertyUrls": {
            "title": "🏡 Zoopla Listing URLs",
            "uniqueItems": true,
            "type": "array",
            "description": "🏡 **LOOKUP BY URL:** Paste Zoopla listing-details links, one per line.\n\n📋 **How to get a URL:**\n1. Open any listing on zoopla.co.uk\n2. Copy the browser address — it looks like `https://www.zoopla.co.uk/for-sale/details/73767353/`\n3. Paste it here (Bulk edit accepts one URL per line)\n\n✅ **SUPPORTED:** `zoopla.co.uk/.../details/...` listing pages (for-sale, to-rent, new-homes)\n🚫 **NOT supported:** search-result pages like `zoopla.co.uk/for-sale/property/london/` — use our Zoopla Scraper for those\n\n💡 **TIP:** Mix and match with listing IDs and addresses below — duplicates are removed automatically.\n\n⚡ **TIER LIMITS:** FREE runs process up to 5 properties total; paid Apify plans are unlimited.",
            "items": {
              "type": "string"
            }
          },
          "listingIds": {
            "title": "🔢 Listing IDs",
            "uniqueItems": true,
            "type": "array",
            "description": "🔢 **LOOKUP BY LISTING ID:** The numeric ID from any Zoopla listing URL — the digits right after `/details/`.\n\n📋 **Example:** for `.../details/73767353/` the listing ID is `73767353`.\n\n💡 **TIP:** Ideal when your database already stores Zoopla IDs — the fastest, most exact lookup mode.\n\n⚡ **TIER LIMITS:** FREE runs process up to 5 properties total; paid Apify plans are unlimited.",
            "items": {
              "type": "string"
            }
          },
          "addresses": {
            "title": "📍 UK Addresses (with postcode)",
            "uniqueItems": true,
            "type": "array",
            "description": "📍 **LOOKUP BY ADDRESS:** Full UK addresses INCLUDING a postcode, one per line — resolves to a Zoopla sale and rent valuation for that address (no live listing required, off-market homes included).\n\n📋 **Format:** `street, town, POSTCODE` — e.g. `Cranley Close, Guildford, GU1 2JN`.\n\n⚠️ **A full UK postcode is required** (e.g. `SE1 0BQ`). Addresses without one are rejected.\n\n💡 **TIP:** Perfect for valuing a CSV of addresses — each resolves to `saleEstimate` + `rentEstimate` with a confidence band. Toggle the sold-price add-on for land-registry history too.\n\n⚡ **TIER LIMITS:** FREE runs process up to 5 properties total; paid Apify plans are unlimited.",
            "items": {
              "type": "string"
            }
          },
          "includeValuation": {
            "title": "💷 Zoopla valuation (add-on)",
            "type": "boolean",
            "description": "💷 **VALUATION ADD-ON:** For listing (URL / listing ID) lookups, fetches the Zoopla sale and rent estimate — current value, lower/upper band, confidence, and last-sale delta.\n\nℹ️ Address lookups already include the valuation in the base row, so this toggle has no extra effect on them.\n\n💰 Adds one enrichment charge per property (only when an estimate is returned).\n\n⚡ Available on paid Apify plans.",
            "default": false
          },
          "includeSoldPriceHistory": {
            "title": "📜 Sold-price history (add-on)",
            "type": "boolean",
            "description": "📜 **SOLD-PRICE ADD-ON:** Land-registry sale and historic-listing records for the property — dates, prices, beds/baths, and photos per past sale.\n\n💰 Adds one enrichment charge per property (only when history is returned).\n\n⚡ Available on paid Apify plans.",
            "default": false
          },
          "includePriceChanges": {
            "title": "📉 Price changes (add-on)",
            "type": "boolean",
            "description": "📉 **PRICE-CHANGE ADD-ON:** Dated price reductions and increases on the live listing — the market-timing signal for offers.\n\n💰 Adds one enrichment charge per property (only when the listing has recorded price changes). Applies to listing (URL / listing ID) lookups.\n\n⚡ Available on paid Apify plans.",
            "default": false
          },
          "includeEvCharging": {
            "title": "🔌 EV charging (add-on)",
            "type": "boolean",
            "description": "🔌 **EV-CHARGING ADD-ON:** The nearest public EV charge points to the listing — name, address, distance, and connector count for the 20 closest.\n\n💰 Adds one enrichment charge per property (only when charge points are returned). Applies to listing (URL / listing ID) lookups.\n\n⚡ Available on paid Apify plans.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}