{
  "openapi": "3.0.1",
  "info": {
    "title": "OnTheMarket Scraper - UK Property, EPC, Tenure & Agents",
    "description": "Scrape OnTheMarket UK listings: price, tenure, EPC rating, council tax band, beds and baths, agent contacts and coordinates. For sale and to rent, any location.",
    "version": "1.0",
    "x-build-id": "C50SsbNjTGNC1NQQe"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sian.agency~onthemarket-property-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sian.agency-onthemarket-property-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~onthemarket-property-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sian.agency-onthemarket-property-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~onthemarket-property-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sian.agency-onthemarket-property-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": {
          "operation": {
            "title": "🎯 What do you want to scrape?",
            "enum": [
              "search",
              "detail"
            ],
            "type": "string",
            "description": "Pick one per run. Property Search returns listing rows for any UK location, filter set or estate-agent branch; Property Detail takes OnTheMarket property URLs and returns the full record including EPC, tenure, council tax band, broadband, stations and schools.",
            "default": "search"
          },
          "locations": {
            "title": "📍 UK locations",
            "type": "array",
            "description": "OnTheMarket location slugs to search, exactly as they appear in the site's own URL: london, manchester, bristol, edinburgh, cardiff, milton-keynes. Postal districts work too: e14, sw1a, m1. One search runs per location, so three locations return roughly three times the rows — and that is how you get past the ~1,020-property ceiling OnTheMarket puts on any single search.",
            "default": [
              "london"
            ],
            "items": {
              "type": "string"
            }
          },
          "channel": {
            "title": "🏷️ Sale or rent",
            "enum": [
              "for-sale",
              "to-rent",
              "new-homes"
            ],
            "type": "string",
            "description": "Which OnTheMarket channel to search. For-sale prices are the asking price; to-rent prices are monthly (pcm) with the weekly figure kept alongside.",
            "default": "for-sale"
          },
          "maxResults": {
            "title": "🔢 Max properties",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Stop after this many properties across all locations. Each search request returns up to 30 rows, so the run stops at the first page that crosses your limit.",
            "default": 100
          },
          "includeDetails": {
            "title": "📄 Add full property details",
            "type": "boolean",
            "description": "Read each property's own page to add EPC rating and date, tenure, council tax band, broadband speed, nearest stations and schools, floorplans and the full description. Costs one extra request per property and bills the Property Detail event on top of the search row. Leave it off and you pay for listing rows only.",
            "default": false
          },
          "propertyUrls": {
            "title": "🔗 Property URLs",
            "type": "array",
            "description": "Used by the Property Detail operation: OnTheMarket property URLs to expand, e.g. https://www.onthemarket.com/details/19275782/. A bare property ID works too.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "searchUrls": {
            "title": "🌐 Search URLs",
            "type": "array",
            "description": "Paste OnTheMarket search URLs instead of filling the fields below, and every filter in the URL is read straight off it — including filters this form does not expose, such as auction, retirement or shared-ownership. Estate-agent branch URLs work here too (https://www.onthemarket.com/agents/branch/<branch>/properties/), which returns that agent's whole stock.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "minPrice": {
            "title": "💵 Min price",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest price to include, in pounds. For rentals this is the monthly (pcm) figure. 0 means no lower bound.",
            "default": 0
          },
          "maxPrice": {
            "title": "💰 Max price",
            "minimum": 0,
            "type": "integer",
            "description": "Highest price to include, in pounds. For rentals this is the monthly (pcm) figure. 0 means no upper bound.",
            "default": 0
          },
          "minBedrooms": {
            "title": "🛏️ Min bedrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Fewest bedrooms to include. 0 means no lower bound.",
            "default": 0
          },
          "maxBedrooms": {
            "title": "🛌 Max bedrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Most bedrooms to include. 0 means no upper bound.",
            "default": 0
          },
          "propertyType": {
            "title": "🏠 Property type",
            "enum": [
              "any",
              "detached",
              "semi-detached",
              "terraced",
              "flats-apartments",
              "bungalows",
              "town-house",
              "maisonette",
              "cottage",
              "mews",
              "character-property",
              "farms-estates",
              "land"
            ],
            "type": "string",
            "description": "Restrict to one property type. To combine several, paste a search URL with a repeated prop-types parameter instead — OnTheMarket takes prop-types=detached&prop-types=terraced, and silently ignores a comma-separated list.",
            "default": "any"
          },
          "radius": {
            "title": "📏 Search radius (miles)",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Widen the search to this many miles around the location. 0 searches the location itself only.",
            "default": 0
          },
          "keywords": {
            "title": "🔑 Must mention",
            "type": "string",
            "description": "Only return properties whose listing mentions this word, e.g. garden, garage, annexe, sea view. Leave empty to take everything.",
            "default": ""
          },
          "addedSince": {
            "title": "🆕 Added since",
            "enum": [
              "any",
              "24-hours",
              "3-days",
              "7-days",
              "14-days"
            ],
            "type": "string",
            "description": "Only properties added to OnTheMarket in this window. This is the cheap way to run the actor on a schedule: 'Last 24 hours' on Bristol cut 3,477 properties to 28, so you pay for new stock only.",
            "default": "any"
          },
          "includeUnderOffer": {
            "title": "🤝 Include under offer",
            "type": "boolean",
            "description": "Add properties already under offer or sold subject to contract. Useful for market analysis — it roughly doubles the result set — and noise if you are hunting available stock.",
            "default": false
          },
          "sortBy": {
            "title": "↕️ Sort by",
            "enum": [
              "recommended",
              "newest",
              "price-high",
              "price-low"
            ],
            "type": "string",
            "description": "'Most recent' is what you want for monitoring, because the newest stock lands on page 1 and your row budget is spent on it. 'Recommended' is OnTheMarket's own default and puts promoted listings first.",
            "default": "recommended"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}