{
  "openapi": "3.0.1",
  "info": {
    "title": "OnTheMarket Scraper: UK Property Listings & Price Drop Monitor",
    "description": "Scrape OnTheMarket.com UK homes for sale, rentals, new homes & commercial property. Beats the 1,020-result cap, tracks new listings and price drops, optional tenure, service charge & council tax. Self-identifying, robots.txt-compliant. Pay per listing.",
    "version": "0.1",
    "x-build-id": "PMAEvQXvueQSWa8E2"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/tan_carrel_h1q~onthemarket-property-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-tan_carrel_h1q-onthemarket-property-monitor",
        "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/tan_carrel_h1q~onthemarket-property-monitor/runs": {
      "post": {
        "operationId": "runs-sync-tan_carrel_h1q-onthemarket-property-monitor",
        "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/tan_carrel_h1q~onthemarket-property-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-tan_carrel_h1q-onthemarket-property-monitor",
        "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": {
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "UK towns, areas, outcodes or postcodes, e.g. \"Leeds\", \"Didsbury\", \"M1\", \"SW1A 1AA\", \"Greater Manchester\". One search is run per location.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "searchUrls": {
            "title": "OnTheMarket search URLs (optional)",
            "type": "array",
            "description": "Paste OnTheMarket search result URLs instead of (or as well as) locations. Price and bedroom parameters in the URL are applied as filters; other parameters that OnTheMarket's robots.txt disallows are ignored.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "listingType": {
            "title": "For sale or to rent",
            "enum": [
              "for-sale",
              "to-rent"
            ],
            "type": "string",
            "description": "Search properties for sale or to rent. (New homes are for sale only.)",
            "default": "for-sale"
          },
          "category": {
            "title": "Property category",
            "enum": [
              "residential",
              "new-homes",
              "commercial"
            ],
            "type": "string",
            "description": "Residential homes, new-build developments, or commercial property (offices, retail, industrial, land). Commercial listings link out to LoopNet UK, so detail enrichment is not available for them.",
            "default": "residential"
          },
          "minPrice": {
            "title": "Minimum price (£)",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep listings priced at or above this (per month for rentals). Applied by the Actor, not the website."
          },
          "maxPrice": {
            "title": "Maximum price (£)",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep listings priced at or below this (per month for rentals)."
          },
          "minBedrooms": {
            "title": "Minimum bedrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Only keep listings with at least this many bedrooms."
          },
          "maxBedrooms": {
            "title": "Maximum bedrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Only keep listings with at most this many bedrooms."
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Only keep these types. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "house",
                "flat",
                "bungalow",
                "land",
                "commercial",
                "other"
              ],
              "enumTitles": [
                "Houses (detached, semi, terraced…)",
                "Flats & apartments",
                "Bungalows",
                "Land & plots",
                "Commercial units",
                "Other"
              ]
            },
            "default": []
          },
          "keywords": {
            "title": "Must mention any of (keywords)",
            "type": "array",
            "description": "Keep a listing only if its title, address or key features contain at least one of these words (case-insensitive), e.g. \"garden\", \"investment\", \"chain free\".",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Exclude if it mentions",
            "type": "array",
            "description": "Drop listings that contain any of these words, e.g. \"retirement\", \"shared ownership\".",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "recentlyAddedOnly": {
            "title": "Recently added only",
            "type": "boolean",
            "description": "Keep only listings flagged by OnTheMarket as recently added (about the last 7 days).",
            "default": false
          },
          "reducedOnly": {
            "title": "Reduced listings only",
            "type": "boolean",
            "description": "Keep only listings whose label says they were reduced.",
            "default": false
          },
          "maxItems": {
            "title": "Maximum listings",
            "minimum": 1,
            "type": "integer",
            "description": "Hard limit on listings delivered (and charged) in this run. Start small, e.g. 30.",
            "default": 50
          },
          "scrapeDetails": {
            "title": "Add detail-page data",
            "type": "boolean",
            "description": "Open each listing and add full description, postcode, tenure and lease years, ground rent, service charge, council tax band, EPC, broadband speed, nearest stations and schools, floorplan links, agent address and website. Charged as an extra event per listing (see pricing).",
            "default": false
          },
          "splitLargeSearches": {
            "title": "Split searches over 1,020 results",
            "type": "boolean",
            "description": "OnTheMarket only shows 34 pages (1,020 listings) per search. When a location has more, the Actor also searches its sub-areas to get past the cap. Duplicates are removed.",
            "default": true
          },
          "maxPagesPerSearch": {
            "title": "Max result pages per search",
            "minimum": 1,
            "maximum": 34,
            "type": "integer",
            "description": "30 listings per page; the website allows at most 34.",
            "default": 34
          },
          "includeAllImages": {
            "title": "Include all image URLs",
            "type": "boolean",
            "description": "Add an `images` array with every thumbnail URL from the search result. By default only the main image is returned. Images and descriptions are the property of OnTheMarket and the agents; do not republish them without permission.",
            "default": false
          },
          "includeAgentPhone": {
            "title": "Include agent branch phone number",
            "type": "boolean",
            "description": "Add the estate agent branch's business telephone number. Off by default to keep personal-data exposure low; only enable if you have a lawful use for it.",
            "default": false
          },
          "monitoringMode": {
            "title": "Monitoring mode",
            "enum": [
              "off",
              "new",
              "new_and_changed"
            ],
            "type": "string",
            "description": "For scheduled runs. The Actor remembers every listing it has seen (in a named key-value store in your own account). \"New listings only\" returns just listings not seen before; \"New listings and price changes\" also returns listings whose asking price went up or down. Off returns everything.",
            "default": "off"
          },
          "monitorId": {
            "title": "Monitor ID",
            "type": "string",
            "description": "Name of this watch list. Use different IDs for different searches (e.g. \"leeds-rentals\"). Runs with the same ID share history.",
            "default": "default"
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "How many pages are fetched at once. Keep it low: the Actor is polite by design.",
            "default": 3
          },
          "requestDelayMs": {
            "title": "Delay between requests (ms)",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Average pause before each request, per worker.",
            "default": 250
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Normally not needed: OnTheMarket pages load without a proxy. Enable Apify Proxy only if you see blocked (403) responses.",
            "default": {
              "useApifyProxy": 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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}