{
  "openapi": "3.0.1",
  "info": {
    "title": "UK Property Data Scraper (Rightmove + Zoopla)",
    "description": "A reliable multi-portal scraper for UK property data. Extracts fully rendered listings from Rightmove and Zoopla using browser automation. Delivers structured, accurate property details for deal sourcing, investment analysis, and real estate applications.",
    "version": "0.0",
    "x-build-id": "UW6lZjZji6ldxCRAb"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/femstar~uk-property-data-scraper-rightmove-zoopla/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-femstar-uk-property-data-scraper-rightmove-zoopla",
        "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/femstar~uk-property-data-scraper-rightmove-zoopla/runs": {
      "post": {
        "operationId": "runs-sync-femstar-uk-property-data-scraper-rightmove-zoopla",
        "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/femstar~uk-property-data-scraper-rightmove-zoopla/run-sync": {
      "post": {
        "operationId": "run-sync-femstar-uk-property-data-scraper-rightmove-zoopla",
        "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": [
          "startUrls"
        ],
        "properties": {
          "site": {
            "title": "Property Site",
            "enum": [
              "rightmove",
              "zoopla"
            ],
            "type": "string",
            "description": "Which property site to scrape",
            "default": "rightmove"
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "One or more Rightmove search result URLs to scrape",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxItems": {
            "title": "Maximum Items",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum number of property listings to extract across all URLs and pages",
            "default": 200
          },
          "maxPages": {
            "title": "Maximum Pages per URL",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Maximum number of search result pages to process per URL",
            "default": 5
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy servers will be used to prevent detection and bypass restrictions"
          },
          "distressKeywords": {
            "title": "Distress Keywords",
            "type": "array",
            "description": "Keywords to detect in property descriptions that indicate potential distressed sales, investment opportunities, or motivated sellers",
            "items": {
              "type": "string"
            },
            "default": [
              "price reduced",
              "reduced",
              "reduction",
              "chain free",
              "no chain",
              "auction",
              "motivated",
              "motivated seller",
              "cash buyers",
              "cash buyers only",
              "needs renovation",
              "in need of renovation",
              "modernisation required",
              "modernization required",
              "period features to restore",
              "investment opportunity",
              "development potential",
              "refurbishment",
              "modernisation",
              "quick sale",
              "quick sale required",
              "urgent sale",
              "must sell",
              "probate",
              "probate sale",
              "executor sale",
              "deceased estate",
              "repossession",
              "below market value",
              "bmv",
              "needs work",
              "fixer upper",
              "project",
              "potential",
              "opportunity",
              "investment",
              "development",
              "conversion",
              "planning permission",
              "vacant possession",
              "tenanted",
              "tenanted investment",
              "rental income",
              "yield",
              "vendor relocated",
              "no onward chain",
              "under offer",
              "back on market"
            ]
          },
          "onlyDistressed": {
            "title": "Only Return Distressed Properties",
            "type": "boolean",
            "description": "If true, only returns properties that match at least one distress keyword. If false, returns all properties with distress scores.",
            "default": true
          },
          "propertyUrls": {
            "title": "Property URLs",
            "type": "array",
            "description": "Direct property page URLs to scrape (optional). Use this to scrape specific properties without searching.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "fullPropertyDetails": {
            "title": "Full Property Details",
            "type": "boolean",
            "description": "If true, visits each property detail page to extract comprehensive data (30+ fields). If false, only extracts data from search result cards.",
            "default": true
          },
          "monitoringMode": {
            "title": "Monitoring Mode",
            "type": "boolean",
            "description": "If true, only returns newly added properties compared to the previous run. Useful for daily monitoring.",
            "default": false
          },
          "enableDelistingTracker": {
            "title": "Enable Delisting Tracker",
            "type": "boolean",
            "description": "If true, tracks properties in a Key-Value store to identify when properties are removed from Rightmove.",
            "default": false
          },
          "addEmptyTrackerRecord": {
            "title": "Add Empty Tracker Record",
            "type": "boolean",
            "description": "If true, adds properties to the delisting tracker even if they don't exist yet. Used for initialization.",
            "default": false
          },
          "includePriceHistory": {
            "title": "Include Price History",
            "type": "boolean",
            "description": "If true, extracts price history from property detail pages. Note: This may slow down scraping significantly.",
            "default": false
          },
          "crossSiteDeduplication": {
            "title": "Cross-Site Deduplication",
            "type": "boolean",
            "description": "If true, identifies and merges duplicate properties that appear on multiple portals. Duplicates are detected by matching addresses.",
            "default": true
          },
          "siteConfig": {
            "title": "Site-Specific Configuration",
            "type": "object",
            "description": "Configure settings per property portal. Overrides global settings for specific sites.",
            "properties": {
              "rightmove": {
                "title": "Rightmove Configuration",
                "type": "object",
                "description": "Rightmove-specific settings",
                "editor": "json",
                "properties": {
                  "enabled": {
                    "title": "Enabled",
                    "type": "boolean",
                    "description": "Enable or disable Rightmove scraping",
                    "default": true
                  },
                  "maxPages": {
                    "title": "Max Pages",
                    "type": "integer",
                    "description": "Maximum pages to scrape for Rightmove",
                    "minimum": 1
                  },
                  "maxItems": {
                    "title": "Max Items",
                    "type": "integer",
                    "description": "Maximum items to extract from Rightmove",
                    "minimum": 1
                  },
                  "distressKeywords": {
                    "title": "Distress Keywords",
                    "type": "array",
                    "description": "Rightmove-specific distress keywords (merged with global)",
                    "editor": "stringList",
                    "items": {
                      "type": "string"
                    }
                  }
                }
              },
              "zoopla": {
                "title": "Zoopla Configuration",
                "type": "object",
                "description": "Zoopla-specific settings",
                "editor": "json",
                "properties": {
                  "enabled": {
                    "title": "Enabled",
                    "type": "boolean",
                    "description": "Enable or disable Zoopla scraping",
                    "default": true
                  },
                  "maxPages": {
                    "title": "Max Pages",
                    "type": "integer",
                    "description": "Maximum pages to scrape for Zoopla",
                    "minimum": 1
                  },
                  "maxItems": {
                    "title": "Max Items",
                    "type": "integer",
                    "description": "Maximum items to extract from Zoopla",
                    "minimum": 1
                  },
                  "distressKeywords": {
                    "title": "Distress Keywords",
                    "type": "array",
                    "description": "Zoopla-specific distress keywords (merged with global)",
                    "editor": "stringList",
                    "items": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}