{
  "openapi": "3.0.1",
  "info": {
    "title": "Rightmove, Zoopla & OnTheMarket UK Property Scraper",
    "description": "Scrapes UK property listings from Rightmove, Zoopla, and OnTheMarket in one run. Returns unified records with price, bedrooms, EPC rating, council tax band, tenure, leasehold details, agent info, and coordinates. Cross-portal coverage with price history from Zoopla.",
    "version": "0.1",
    "x-build-id": "VMBiBTdNRKQDGbGt1"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/jungle_synthesizer~rightmove-zoopla-onthemarket-uk-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-jungle_synthesizer-rightmove-zoopla-onthemarket-uk-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/jungle_synthesizer~rightmove-zoopla-onthemarket-uk-scraper/runs": {
      "post": {
        "operationId": "runs-sync-jungle_synthesizer-rightmove-zoopla-onthemarket-uk-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/jungle_synthesizer~rightmove-zoopla-onthemarket-uk-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-jungle_synthesizer-rightmove-zoopla-onthemarket-uk-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": {
          "sp_intended_usage": {
            "title": "What is the intended usage of this data?",
            "minLength": 1,
            "type": "string",
            "description": "What will this data feed? E.g. lead lists, KYB checks, price tracking."
          },
          "sp_improvement_suggestions": {
            "title": "How can we improve this crawler for you?",
            "minLength": 1,
            "type": "string",
            "description": "Provide any feedback or suggestions for improvements."
          },
          "sp_contact": {
            "title": "Contact email (optional)",
            "minLength": 1,
            "type": "string",
            "description": "We'll personally help with your use case. No spam."
          },
          "searchUrls": {
            "title": "Search URLs",
            "type": "array",
            "description": "List of Rightmove, Zoopla, or OnTheMarket search result URLs to scrape. Each URL should be a property search results page from any of the three portals. If omitted, a default UK-wide search is used.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "listingType": {
            "title": "Listing Type",
            "enum": [
              "sale",
              "rent",
              "both"
            ],
            "type": "string",
            "description": "Filter by listing type: 'sale', 'rent', or 'both'.",
            "default": "both"
          },
          "maxItems": {
            "title": "Max Items",
            "type": "integer",
            "description": "Maximum number of property records to return (across all portals combined). Default: 15.",
            "default": 15
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Same as 'Search URLs': search result URLs from Rightmove, Zoopla, or OnTheMarket. Both lists are used if both are filled.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Towns, cities, postcode areas (NW8) or full postcodes (NW8 7RG), one search per place on each portal in 'Portals'. Use instead of pasting URLs, or together with them. Max Items is shared evenly between the searches.",
            "items": {
              "type": "string"
            }
          },
          "portals": {
            "title": "Portals",
            "type": "array",
            "description": "Which portals to search for 'Locations'. Default: all three. Pasted search URLs always run on the portal they belong to.",
            "items": {
              "type": "string",
              "enum": [
                "rightmove",
                "zoopla",
                "onthemarket"
              ],
              "enumTitles": [
                "Rightmove",
                "Zoopla",
                "OnTheMarket"
              ]
            }
          },
          "propertyTypes": {
            "title": "Property Types",
            "type": "array",
            "description": "Only these property types, on every search and every portal. Leave empty for all types.",
            "items": {
              "type": "string",
              "enum": [
                "detached",
                "semi-detached",
                "terraced",
                "flat",
                "bungalow",
                "land"
              ],
              "enumTitles": [
                "Detached",
                "Semi-detached",
                "Terraced",
                "Flat / apartment",
                "Bungalow",
                "Land"
              ]
            }
          },
          "minPrice": {
            "title": "Min Price (GBP)",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest asking price (Listing Type 'sale') or lowest rent per month ('rent'), in GBP. Needs Listing Type 'sale' or 'rent'."
          },
          "maxPrice": {
            "title": "Max Price (GBP)",
            "minimum": 0,
            "type": "integer",
            "description": "Highest asking price (Listing Type 'sale') or highest rent per month ('rent'), in GBP. Needs Listing Type 'sale' or 'rent'."
          },
          "minBedrooms": {
            "title": "Min Bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Fewest bedrooms. 0 includes studios."
          },
          "maxBedrooms": {
            "title": "Max Bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Most bedrooms."
          },
          "radius": {
            "title": "Radius (miles)",
            "enum": [
              "0.25",
              "0.5",
              "1",
              "3",
              "5",
              "10",
              "15",
              "20",
              "30",
              "40"
            ],
            "type": "string",
            "description": "Also search this far around each location (or around a pasted search's place). Leave empty for the place itself."
          },
          "addedWithin": {
            "title": "Added Within",
            "enum": [
              "1",
              "3",
              "7"
            ],
            "type": "string",
            "description": "Only listings added to the portal within this many days. Leave empty for any age."
          },
          "sortBy": {
            "title": "Sort By",
            "enum": [
              "newest",
              "price_low_to_high",
              "price_high_to_low"
            ],
            "type": "string",
            "description": "Order of each search's results on every portal, so Max Items keeps the newest or the cheapest/dearest listings. Leave empty for each search's own order. On OnTheMarket, promoted listings are placed at the top of the first page whatever the order."
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Only listings whose title, description or features contain every one of these words or phrases (case-insensitive), on every portal. Listings are read until Max Items match, or about ten times Max Items (at least 100) have been checked. Leave empty for no keyword filter.",
            "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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}