# OnTheMarket Scraper (`solidcode/onthemarket-com-scraper`) Actor

\[💰 $1.7 / 1K] Extract UK property listings from OnTheMarket — for sale, to rent, and new homes. Search by location or paste URLs to get price, address, bedrooms, bathrooms, features, photos, agent contacts, and map coordinates.

- **URL**: https://apify.com/solidcode/onthemarket-com-scraper.md
- **Developed by:** [SolidCode](https://apify.com/solidcode) (community)
- **Categories:** Real estate, Developer tools, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.70 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## OnTheMarket Scraper

Pull UK property listings from OnTheMarket at scale — asking prices, full addresses, bedroom and bathroom counts, tenure, estate-agent contacts, map coordinates, and every photo URL for homes for sale, to rent, and newly built. Search by town, postcode, or area name, or paste OnTheMarket URLs straight from the site. Built for property investors, estate agencies, and proptech teams who need clean, structured UK listing data without copy-pasting from search pages one card at a time.

### Why This Scraper?

- **For sale, to rent, and new homes in one actor** — flip a single dropdown to switch listing mode, or mix all three in a run via pasted URLs.
- **13 property-type filters** — flats, detached, semi-detached, terraced, bungalows, town houses, cottages, character properties, mews, land & farms, and more, combinable in a single search.
- **10 search-radius bands** — tighten to "this area only" or widen from 1/4 mile out to 40 miles around any town or postcode.
- **Estate-agent contacts on every listing** — agency name and phone number captured alongside each property, ready for a lead list.
- **Map coordinates for every property** — latitude and longitude on each row, so listings drop straight onto a map or into a geospatial pipeline.
- **~26 fields per listing** — formatted price plus a numeric value and qualifier ("Guide Price", "OIEO"), tenure (Freehold/Leasehold with years remaining), days on market, feature bullets, and all photo URLs.
- **Rental-aware output** — monthly rent (pcm), short-term vs long-term tenancy filtering, and lettings fee details on every to-rent listing.
- **"Recently added" windows** — restrict to listings added in the last 24 hours, 3 days, or 7 days to catch fresh stock the moment it lists.
- **Two ways to start** — type a free-text location (town, city, postcode, or area) or paste refined OnTheMarket search URLs that carry their own filters.

### Use Cases

**Property Investment & Analysis**
- Track asking prices and price qualifiers across target towns and postcodes
- Spot reduced and "just added" stock the day it appears on the market
- Compare inventory by property type and tenure across areas
- Monitor days on market to gauge demand in a postcode

**Lead Generation for Agents**
- Build estate-agency contact lists with agency name and phone per listing
- Identify which branches dominate a given town or postcode
- Find newly listed competitor stock within the last 24 hours
- Source rental instructions by filtering to-rent listings in your patch

**Market Research**
- Map for-sale and rental inventory by area, radius, and price band
- Compare flats vs detached vs terraced supply across regions
- Track new-build availability in growth corridors
- Benchmark average asking prices by bedroom count

**Relocation & Property Search Tools**
- Power a home-search app with structured, filterable UK listings
- Plot listings on a map using built-in latitude and longitude
- Surface short-term lets for corporate and relocation clients
- Aggregate listings across multiple towns into one clean feed

### Getting Started

#### Search a Location

The simplest run — one town and the default for-sale mode:

```json
{
    "searchLocations": ["London"],
    "maxResults": 100
}
````

#### Filtered Rental Search

To-rent listings in Manchester, two-bed minimum, long-term tenancies only:

```json
{
    "listingType": "to-rent",
    "searchLocations": ["Manchester"],
    "minBedrooms": 2,
    "rentalLength": "long-term",
    "maxResults": 200
}
```

#### Full-Featured Search

For-sale houses near Leeds, price-banded, widened to 10 miles, fresh stock only:

```json
{
    "listingType": "for-sale",
    "searchLocations": ["Leeds", "LS1 4DY"],
    "radius": "10",
    "minPrice": 200000,
    "maxPrice": 475000,
    "minBedrooms": 2,
    "maxBedrooms": 4,
    "propertyTypes": ["detached", "semi-detached", "terraced"],
    "addedToSite": "7-days",
    "maxResults": 500
}
```

#### Using OnTheMarket URLs

Paste any OnTheMarket search or category URL — its filters are applied automatically:

```json
{
    "startUrls": [
        "https://www.onthemarket.com/for-sale/property/oxford/?max-bedrooms=4&prop-types=detached",
        "https://www.onthemarket.com/to-rent/property/bristol/"
    ],
    "maxResults": 300
}
```

### Input Reference

#### What to Scrape

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `listingType` | select | `For Sale` | What to find: For Sale, To Rent, or New Homes. Applies to Search Locations; ignored for Start URLs (the URL decides its own type). |
| `searchLocations` | string\[] | `["London"]` | Towns, cities, postcodes, or areas to search, e.g. "London", "Manchester", or "SW1A 1AA". One search runs per location. |
| `startUrls` | string\[] | empty | Paste OnTheMarket URLs directly — search or category pages. Any filters in the URL are applied automatically and override Search Locations and the filters below. |

#### Search Filters

These apply to Search Locations only. When using Start URLs, all filters come from the URL itself.

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `radius` | select | `This area only` | Expand each search to surrounding areas: This area only, or Within 1/4, 1/2, 1, 3, 5, 10, 15, 20, 30, or 40 miles. |
| `minPrice` | integer | none | Only include listings at or above this price (£). For rentals this is the monthly amount. |
| `maxPrice` | integer | none | Only include listings at or below this price (£). For rentals this is the monthly amount. |
| `minBedrooms` | integer | none | Only include listings with at least this many bedrooms (0–10). |
| `maxBedrooms` | integer | none | Only include listings with at most this many bedrooms (0–10). |
| `propertyTypes` | select\[] | all types | Limit results to one or more types: Houses, Flats / Apartments, Detached, Semi-detached, Terraced, Bungalows, Town houses, Cottages, Character properties, Mews, Land, Farms / Land, Mobile / park homes. |
| `addedToSite` | select | `Anytime` | Only listings added within: Anytime, Last 24 hours, Last 3 days, or Last 7 days. |
| `rentalLength` | select | `Any` | For To Rent searches only: Any, Short term, or Long term tenancies. Ignored for For Sale and New Homes. |

#### Options

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxResults` | integer | `200` | Maximum listings to collect across all searches and URLs. Set to 0 for unlimited. Start with 50–200 to test, then increase. |

### Output

Each listing becomes one flat row. Here's a representative for-sale result:

```json
{
    "id": 14820731,
    "url": "https://www.onthemarket.com/details/14820731/",
    "listingType": "for-sale",
    "title": "3 bedroom semi-detached house for sale",
    "address": "Mayfield Road, London SW19",
    "price": "£675,000",
    "priceValue": 675000,
    "priceQualifier": "Guide Price",
    "propertyType": "Semi-detached house",
    "bedrooms": 3,
    "bathrooms": 2,
    "tenure": "Freehold",
    "daysOnMarket": 4,
    "mainLabel": "Just added",
    "features": ["Three double bedrooms", "South-facing garden", "Off-street parking"],
    "images": [
        { "default": "https://media.onthemarket.com/properties/14820731/1.jpg", "webp": "https://media.onthemarket.com/properties/14820731/1.webp" }
    ],
    "agentName": "Smith & Co Estate Agents",
    "agentPhone": "020 1234 5678",
    "agentUrl": "https://www.onthemarket.com/agents/branch/smith-and-co/",
    "agentLogo": "https://media.onthemarket.com/agents/smith-and-co/logo.png",
    "latitude": 51.4221,
    "longitude": -0.2089,
    "feesLabel": null,
    "feesDescription": null,
    "sourceUrl": "https://www.onthemarket.com/for-sale/property/london/"
}
```

#### Core Fields

| Field | Type | Description |
|-------|------|-------------|
| `id` | number/string | OnTheMarket listing identifier |
| `url` | string | Direct link to the listing detail page |
| `listingType` | string | for-sale, to-rent, or new-homes |
| `title` | string | Listing headline, e.g. "3 bedroom semi-detached house for sale" |
| `mainLabel` | string | Card badge, e.g. "Just added", "Reduced" (nullable) |
| `daysOnMarket` | number | Days since the listing was added or reduced (nullable) |
| `sourceUrl` | string | The search or category URL this listing came from |

#### Address & Location

| Field | Type | Description |
|-------|------|-------------|
| `address` | string | Display address |
| `latitude` | number | Listing latitude (nullable) |
| `longitude` | number | Listing longitude (nullable) |

#### Pricing

| Field | Type | Description |
|-------|------|-------------|
| `price` | string | Full price string, e.g. "£675,000" or "£1,500 pcm (£346 pw)" |
| `priceValue` | number | Numeric price parsed from `price` (nullable) |
| `priceQualifier` | string | e.g. "Guide Price", "Offers Over", "OIEO" (nullable) |
| `feesLabel` | string | Rentals only: lettings fees label (nullable) |
| `feesDescription` | string | Rentals only: lettings fees detail (nullable) |

#### Property Details

| Field | Type | Description |
|-------|------|-------------|
| `propertyType` | string | e.g. "Semi-detached house", "Flat" |
| `bedrooms` | number | Bedroom count (nullable) |
| `bathrooms` | number | Bathroom count (nullable) |
| `tenure` | string | Freehold / Leasehold (with years remaining where listed); sale only (nullable) |
| `features` | string\[] | Feature and highlight bullets from the listing |

#### Media & Agent

| Field | Type | Description |
|-------|------|-------------|
| `images` | object\[] | Photo URLs for the listing, each with `default` and `webp` |
| `agentName` | string | Listing agency or branch name |
| `agentPhone` | string | Agency phone number (nullable) |
| `agentUrl` | string | Agency profile URL (nullable) |
| `agentLogo` | string | Agency logo image URL (nullable) |

### Tips for Best Results

- **Start small** — set `maxResults` to 50–200 on your first run to confirm the data matches your needs, then scale up.
- **Split big cities into postcode-area searches** — each individual search returns up to ~1,000 listings, so a busy city like London is best run as several postcode-district searches (e.g. "SW1", "SE1", "E1") to capture deeper inventory.
- **Replicate a refined on-site search with Start URLs** — set up the exact filters you want on OnTheMarket, then paste the resulting URL; its filters are applied for you, no need to re-enter them here.
- **Use "Last 24 hours" for fresh stock** — pair `addedToSite` with a tight location to build a daily new-listings feed before the rest of the market sees it.
- **Narrow filters to go deeper, not wider** — tightening price, bedroom, or property-type filters surfaces stock that the ~1,000-per-search ceiling would otherwise hide on a broad query.
- **Combine inputs** — mix several locations in `searchLocations` and pasted URLs in `startUrls` in the same run; everything lands in one dataset.
- **This actor covers the UK** — OnTheMarket is a UK property portal, so locations should be UK towns, cities, postcodes, or areas.

### Pricing

**From $1.70 per 1,000 results** — pay only for the listings you collect. No compute or time-based charges — you pay per result, plus a small fixed per-run start fee. Bronze, Silver, and Gold subscribers pay progressively less; the table below shows total cost at each discount tier.

| Results | No discount | Bronze | Silver | Gold |
|---------|-------------|--------|--------|------|
| 100 | $0.20 | $0.19 | $0.18 | $0.17 |
| 1,000 | $2.00 | $1.90 | $1.80 | $1.70 |
| 10,000 | $20.00 | $19.00 | $18.00 | $17.00 |
| 100,000 | $200.00 | $190.00 | $180.00 | $170.00 |

A "result" is any listing row in the output dataset. Platform fees (compute, storage) are additional and depend on your Apify plan.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new results
- **Webhooks** — Trigger custom integrations on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This actor is designed for legitimate property research, market analysis, and lead generation. You are responsible for complying with applicable laws and OnTheMarket's Terms of Service. Do not use extracted data for spam, harassment, or any unlawful purpose, and handle any personal data, including agent contact details, in line with UK data-protection rules.

# Actor input Schema

## `listingType` (type: `string`):

What kind of listings to find: properties for sale, properties to rent, or new-build homes. Only applies to Search Locations below — ignored when using Start URLs (the URL decides its own type).

## `searchLocations` (type: `array`):

Towns, cities, postcodes, or areas to search, e.g. "London", "Manchester", or "SW1A 1AA". One search runs per location. Leave empty if you are using Start URLs.

## `startUrls` (type: `array`):

Paste OnTheMarket URLs directly — search results, category pages, or individual listing pages. Any filters in the URL are applied automatically. When provided, these override Search Locations and the Search Filters below.

## `radius` (type: `string`):

Expand each search to include surrounding areas. Only applies to Search Locations.

## `minPrice` (type: `integer`):

Only include listings at or above this price. For rentals this is the monthly amount. Leave empty for no minimum.

## `maxPrice` (type: `integer`):

Only include listings at or below this price. For rentals this is the monthly amount. Leave empty for no maximum.

## `minBedrooms` (type: `integer`):

Only include listings with at least this many bedrooms. Leave empty for any.

## `maxBedrooms` (type: `integer`):

Only include listings with at most this many bedrooms. Leave empty for any.

## `propertyTypes` (type: `array`):

Limit results to one or more property types. Leave empty to include all types.

## `addedToSite` (type: `string`):

Only include listings added to OnTheMarket within this time window.

## `rentalLength` (type: `string`):

For To Rent searches only — filter by short-term or long-term tenancies. Ignored for For Sale and New Homes.

## `maxResults` (type: `integer`):

Maximum number of listings to collect across all searches and URLs. Set to 0 for unlimited. OnTheMarket returns up to ~1,000 listings per individual search — narrow your filters (price, bedrooms, property type) or split a large area into smaller locations to go deeper. Tip: start with 50-200 to test, then increase.

## Actor input object example

```json
{
  "listingType": "for-sale",
  "searchLocations": [
    "London"
  ],
  "radius": "this-area-only",
  "addedToSite": "anytime",
  "rentalLength": "any",
  "maxResults": 200
}
```

# Actor output Schema

## `overview` (type: `string`):

Table of property listings with key fields.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "listingType": "for-sale",
    "searchLocations": [
        "London"
    ],
    "radius": "this-area-only",
    "addedToSite": "anytime",
    "rentalLength": "any",
    "maxResults": 200
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/onthemarket-com-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "listingType": "for-sale",
    "searchLocations": ["London"],
    "radius": "this-area-only",
    "addedToSite": "anytime",
    "rentalLength": "any",
    "maxResults": 200,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/onthemarket-com-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "listingType": "for-sale",
  "searchLocations": [
    "London"
  ],
  "radius": "this-area-only",
  "addedToSite": "anytime",
  "rentalLength": "any",
  "maxResults": 200
}' |
apify call solidcode/onthemarket-com-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=solidcode/onthemarket-com-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "OnTheMarket Scraper",
        "description": "[💰 $1.7 / 1K] Extract UK property listings from OnTheMarket — for sale, to rent, and new homes. Search by location or paste URLs to get price, address, bedrooms, bathrooms, features, photos, agent contacts, and map coordinates.",
        "version": "1.0",
        "x-build-id": "78PJ8RuaTo6lDKfzI"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/solidcode~onthemarket-com-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-solidcode-onthemarket-com-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/solidcode~onthemarket-com-scraper/runs": {
            "post": {
                "operationId": "runs-sync-solidcode-onthemarket-com-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/solidcode~onthemarket-com-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-solidcode-onthemarket-com-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": {
                    "listingType": {
                        "title": "Listing Type",
                        "enum": [
                            "for-sale",
                            "to-rent",
                            "new-homes"
                        ],
                        "type": "string",
                        "description": "What kind of listings to find: properties for sale, properties to rent, or new-build homes. Only applies to Search Locations below — ignored when using Start URLs (the URL decides its own type)."
                    },
                    "searchLocations": {
                        "title": "Search Locations",
                        "type": "array",
                        "description": "Towns, cities, postcodes, or areas to search, e.g. \"London\", \"Manchester\", or \"SW1A 1AA\". One search runs per location. Leave empty if you are using Start URLs.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Paste OnTheMarket URLs directly — search results, category pages, or individual listing pages. Any filters in the URL are applied automatically. When provided, these override Search Locations and the Search Filters below.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "radius": {
                        "title": "Search Radius",
                        "enum": [
                            "this-area-only",
                            "0.25",
                            "0.5",
                            "1",
                            "3",
                            "5",
                            "10",
                            "15",
                            "20",
                            "30",
                            "40"
                        ],
                        "type": "string",
                        "description": "Expand each search to include surrounding areas. Only applies to Search Locations."
                    },
                    "minPrice": {
                        "title": "Minimum Price (£)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include listings at or above this price. For rentals this is the monthly amount. Leave empty for no minimum."
                    },
                    "maxPrice": {
                        "title": "Maximum Price (£)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include listings at or below this price. For rentals this is the monthly amount. Leave empty for no maximum."
                    },
                    "minBedrooms": {
                        "title": "Minimum Bedrooms",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Only include listings with at least this many bedrooms. Leave empty for any."
                    },
                    "maxBedrooms": {
                        "title": "Maximum Bedrooms",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Only include listings with at most this many bedrooms. Leave empty for any."
                    },
                    "propertyTypes": {
                        "title": "Property Types",
                        "type": "array",
                        "description": "Limit results to one or more property types. Leave empty to include all types.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "houses",
                                "flat",
                                "detached",
                                "semi-detached",
                                "terraced",
                                "bungalows",
                                "town-house",
                                "cottage",
                                "character-property",
                                "mews",
                                "land",
                                "farms-land",
                                "mobile-park-homes"
                            ],
                            "enumTitles": [
                                "Houses",
                                "Flats / Apartments",
                                "Detached",
                                "Semi-detached",
                                "Terraced",
                                "Bungalows",
                                "Town houses",
                                "Cottages",
                                "Character properties",
                                "Mews",
                                "Land",
                                "Farms / Land",
                                "Mobile / park homes"
                            ]
                        }
                    },
                    "addedToSite": {
                        "title": "Added to Site",
                        "enum": [
                            "anytime",
                            "24-hours",
                            "3-days",
                            "7-days"
                        ],
                        "type": "string",
                        "description": "Only include listings added to OnTheMarket within this time window."
                    },
                    "rentalLength": {
                        "title": "Tenancy Length",
                        "enum": [
                            "any",
                            "short-term",
                            "long-term"
                        ],
                        "type": "string",
                        "description": "For To Rent searches only — filter by short-term or long-term tenancies. Ignored for For Sale and New Homes."
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of listings to collect across all searches and URLs. Set to 0 for unlimited. OnTheMarket returns up to ~1,000 listings per individual search — narrow your filters (price, bedrooms, property type) or split a large area into smaller locations to go deeper. Tip: start with 50-200 to test, then increase.",
                        "default": 200
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
