{
  "openapi": "3.0.1",
  "info": {
    "title": "Rightmove Scraper - UK Property Listings & Agent Leads",
    "description": "Scrape Rightmove UK property listings for sale & to rent: price, beds/baths, address, geo, floor area, EPC, council tax, tenure, description, photos, nearest stations — plus estate-agent leads (branch, phone). New-listing & price-drop monitoring. No login, key or browser.",
    "version": "0.1",
    "x-build-id": "KYrhN7OHRsHbppsGv"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapesage~rightmove-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapesage-rightmove-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~rightmove-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapesage-rightmove-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~rightmove-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapesage-rightmove-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": {
          "searchType": {
            "title": "Listing type",
            "enum": [
              "for-sale",
              "to-rent"
            ],
            "type": "string",
            "description": "Scrape properties **for sale** or **to rent**. Applies to the `locations` searches below (start URLs keep their own channel).",
            "default": "for-sale"
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Places to search. Use plain names (`London`, `Manchester`, `Bristol`), outcodes/postcodes (`SW1A`, `M1`), station names, or Rightmove location identifiers (`REGION^87490`, `OUTCODE^2506`) — each is auto-resolved via Rightmove's own autocomplete. You can also paste a full Rightmove search URL here.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs (search or property pages)",
            "type": "array",
            "description": "Optional. Paste Rightmove **search-results URLs** (`/property-for-sale/find.html?...`, `/property-to-rent/find.html?...`) or individual **property URLs** (`/properties/<id>`). Search URLs are paginated and crawled with your filters baked in; property URLs are scraped in full detail.",
            "items": {
              "type": "string"
            }
          },
          "propertyUrls": {
            "title": "Property URLs / IDs",
            "type": "array",
            "description": "Optional. Direct Rightmove property URLs or numeric IDs (`https://www.rightmove.co.uk/properties/173885045` or `173885045`) to scrape the full detail record for each.",
            "items": {
              "type": "string"
            }
          },
          "minPrice": {
            "title": "Min price (£)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum price. For rentals this is per the listing's frequency (usually pcm). Leave empty for no minimum."
          },
          "maxPrice": {
            "title": "Max price (£)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum price. Leave empty for no maximum."
          },
          "minBedrooms": {
            "title": "Min bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum number of bedrooms (use 0 for studios)."
          },
          "maxBedrooms": {
            "title": "Max bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of bedrooms."
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Restrict to specific property types. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "detached",
                "semi-detached",
                "terraced",
                "flat",
                "bungalow",
                "land",
                "park-home"
              ],
              "enumTitles": [
                "Detached",
                "Semi-detached",
                "Terraced",
                "Flat / apartment",
                "Bungalow",
                "Land",
                "Park home"
              ]
            },
            "default": []
          },
          "radius": {
            "title": "Search radius (miles)",
            "enum": [
              "0.0",
              "0.25",
              "0.5",
              "1.0",
              "3.0",
              "5.0",
              "10.0",
              "15.0",
              "20.0",
              "30.0",
              "40.0"
            ],
            "type": "string",
            "description": "Expand the search around the location. `0` = this area only.",
            "default": "0.0"
          },
          "sortType": {
            "title": "Sort order",
            "enum": [
              "6",
              "10",
              "2",
              "1"
            ],
            "type": "string",
            "description": "How Rightmove orders the results before they are collected.",
            "default": "6"
          },
          "maxDaysSinceAdded": {
            "title": "Added in the last…",
            "enum": [
              "",
              "1",
              "3",
              "7",
              "14"
            ],
            "type": "string",
            "description": "Only listings added/updated within this many days. Great for fresh-stock monitoring.",
            "default": ""
          },
          "keywords": {
            "title": "Keywords",
            "type": "string",
            "description": "Optional free-text keyword filter (e.g. `garden`, `garage`, `sea view`)."
          },
          "includeSSTC": {
            "title": "Include Sold STC (for sale)",
            "type": "boolean",
            "description": "Include properties marked Sold Subject To Contract. Applies to for-sale searches.",
            "default": false
          },
          "includeLetAgreed": {
            "title": "Include Let Agreed (to rent)",
            "type": "boolean",
            "description": "Include properties marked Let Agreed. Applies to to-rent searches.",
            "default": false
          },
          "furnishTypes": {
            "title": "Furnish type (to rent)",
            "type": "array",
            "description": "Restrict rentals by furnishing. Applies to to-rent searches only.",
            "items": {
              "type": "string",
              "enum": [
                "furnished",
                "unfurnished",
                "partFurnished"
              ],
              "enumTitles": [
                "Furnished",
                "Unfurnished",
                "Part furnished"
              ]
            },
            "default": []
          },
          "includePropertyDetails": {
            "title": "Include full property details",
            "type": "boolean",
            "description": "Open each property page for the rich record: full description, all key features, floor area (sq ft & sq m), EPC count, council tax band, ground rent & service charge, tenure + years remaining on lease, nearest stations with distances, postcode, image & floorplan URLs, and the full agent profile. Turn off for a faster, cheaper listing-only run (still 30+ fields per card, including agent name & phone). Adds one page fetch per property.",
            "default": true
          },
          "deduplicateAgents": {
            "title": "Also output estate-agent leads",
            "type": "boolean",
            "description": "Emit one extra **lead record per unique estate-agent branch** found across the results (`type: \"agent\"`) — agent/brand name, branch, phone, branch address, profile & valuation URLs, and a sample listing. Perfect for B2B prospecting (proptech, mortgage, conveyancing, photography, EPC, cleaning).",
            "default": false
          },
          "maxResults": {
            "title": "Max properties (whole run)",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Global cap on the total number of properties emitted in this run. Rightmove returns up to ~1,000 results per individual search.",
            "default": 100
          },
          "monitorMode": {
            "title": "Monitoring mode — only new & changed",
            "type": "boolean",
            "description": "Remember the properties already returned and emit ONLY ones that are **new** or whose **price/status changed** since the last run (tagged `changeType` = `new` | `price_changed`, with `previousPrice` and `priceDelta`). Ideal for tracking fresh stock and price drops in a patch. Pairs with Apify Schedules — schedule the run, this flag handles the de-duplication.",
            "default": false
          },
          "monitorStoreName": {
            "title": "Monitor store name",
            "type": "string",
            "description": "Named key-value store that holds the 'already seen' properties for monitoring mode. Use a different name per tracked search to keep histories separate (lowercase letters, digits and hyphens).",
            "default": "rightmove-monitor"
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Maximum parallel requests. Keep it moderate to stay friendly to Rightmove's servers and avoid rate limiting.",
            "default": 5
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy settings. Rightmove serves clean pages to datacenter IPs, so the default Apify Proxy works well and keeps costs low. If you hit rate limiting on very large runs, switch to Residential.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}