# The Ultimate Property Scraper (`thescrapelab/the-ultimate-property-scraper`) Actor

Scrape clean, structured property listings from multiple real estate websites in one run.
Built for scale with smart filtering (price, beds, baths, size, market, country), duplicate control, and output-ready records for database pipelines.

- **URL**: https://apify.com/thescrapelab/the-ultimate-property-scraper.md
- **Developed by:** [Inus Grobler](https://apify.com/thescrapelab) (community)
- **Categories:** E-commerce, Lead generation, Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 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

## Ultimate Scraper Properties

Scrape property listings from major real-estate websites and return clean structured rows to the Apify dataset.

### Quick Start

For most runs, only use these fields:
- `countries` or `websites`
- `markets`
- `pagesPerRun`
- optional filters like `areaQuery`, `propertyTypeQuery`, `minPrice`, `maxPrice`

Example: sale listings in the UAE.

```json
{
  "countries": ["AE"],
  "markets": ["for-sale"],
  "pagesPerRun": 1
}
````

Example: a few specific websites only.

```json
{
  "websites": ["propertyfinderuae", "betterhomesuaeproperty", "providentuaeproperty"],
  "markets": ["for-sale"],
  "pagesPerRun": 1,
  "propertyTypeQuery": "apartment",
  "minBedrooms": 2
}
```

### Main Inputs

- `countries`
  Best starting point. Runs production-ready websites in the selected countries.
- `websites`
  Optional. Use this if you want to force specific websites.
- `markets`
  Usually just `for-sale`. Add `to-rent` only if you also want rental listings.
- `areaQuery`
  Matches suburb, city, location, title, or address.
- `propertyTypeQuery`
  Example: `apartment`, `house`, `villa`, `land`.
- `minPrice`, `maxPrice`
  Filter by price in the listing's own currency.
- `minBedrooms`, `maxBedrooms`
- `minBathrooms`, `maxBathrooms`
- `minSizeM2`, `maxSizeM2`
- `pagesPerRun`
  How many pages to scrape per website in this run.
- `maxListings`
  Optional cap on output rows per website. `0` means no cap.
- `comboConcurrency`
  How many website jobs to run in parallel.
- `minDelay`, `maxDelay`
  Optional global override. If omitted, each scraper uses its own tuned default pacing, which is faster for HTTP sources and slower for sensitive browser sources.

### How Selection Works

- If `websites` is empty, the actor uses `countries`.
- If both `countries` and `websites` are empty, the actor uses a lightweight default.
- If both are set, `countries` narrows the selected `websites`.

### Output

Main output fields:

- `source`, `source_site`
- `country_code`, `country_name`, `currency_code`
- `listing_id`, `url`, `title`
- `property_type`, `market`
- `location`, `suburb`, `city`
- `price`, `price_text`, `price_context`
- `bedrooms`, `bathrooms`, `floor_size_m2`, `erf_size_m2`

Pricing is split cleanly:

- `price` is numeric only
- `currency_code` stores the currency separately

### Notes

- Output rows are deduplicated before they are pushed to the dataset.
- Low-quality placeholder rows are dropped.
- Some websites may need residential proxies if they tighten anti-bot protection.
- When Apify pay-per-event pricing is enabled, the actor charges the `property_source` event once per unique website source scraped in that run.
- The event is declared in `.actor/pay_per_event.json` and should be enabled in the actor's Apify monetization settings.

### If Output Is Empty

- Try one country or one website first.
- Increase `pagesPerRun` from `1` to `2` or `3`.
- Remove strict filters and run again.

# Actor input Schema

## `countries` (type: `array`):

Best starting point. Leave websites empty to run the production-ready websites in these countries.

## `websites` (type: `array`):

Optional. Choose specific websites. If left empty, the actor uses countries or a lightweight default.

## `markets` (type: `array`):

Usually just for-sale. Add to-rent if you also want rental listings.

## `areaQuery` (type: `string`):

Optional text filter. Matches suburb, city, location, title, or address.

## `propertyTypeQuery` (type: `string`):

Optional. Example: apartment, house, villa, land.

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

Optional minimum price in the listing's own currency. Use 0 to ignore.

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

Optional maximum price in the listing's own currency. Use 0 to ignore.

## `minBedrooms` (type: `number`):

Optional minimum bedrooms. Use 0 to ignore.

## `maxBedrooms` (type: `number`):

Optional maximum bedrooms. Use 0 to ignore.

## `minBathrooms` (type: `number`):

Optional minimum bathrooms. Use 0 to ignore.

## `maxBathrooms` (type: `number`):

Optional maximum bathrooms. Use 0 to ignore.

## `minSizeM2` (type: `number`):

Optional minimum size in square metres. Use 0 to ignore.

## `maxSizeM2` (type: `number`):

Optional maximum size in square metres. Use 0 to ignore.

## `pagesPerRun` (type: `integer`):

How many pages to scrape per website in this run.

## `maxListings` (type: `integer`):

Optional cap on output rows per website. Use 0 for no cap.

## `comboConcurrency` (type: `integer`):

How many website jobs to run in parallel. Higher is faster but heavier.

## Actor input object example

```json
{
  "countries": [],
  "websites": [
    "property24"
  ],
  "markets": [
    "for-sale"
  ],
  "areaQuery": "",
  "propertyTypeQuery": "",
  "minPrice": 0,
  "maxPrice": 0,
  "minBedrooms": 0,
  "maxBedrooms": 0,
  "minBathrooms": 0,
  "maxBathrooms": 0,
  "minSizeM2": 0,
  "maxSizeM2": 0,
  "pagesPerRun": 1,
  "maxListings": 1,
  "comboConcurrency": 1
}
```

# Actor output Schema

## `dataset_items` (type: `string`):

No description

## `dataset_overview` (type: `string`):

No description

## `dataset_csv` (type: `string`):

No description

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("thescrapelab/the-ultimate-property-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("thescrapelab/the-ultimate-property-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 '{}' |
apify call thescrapelab/the-ultimate-property-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "The Ultimate Property Scraper",
        "description": "Scrape clean, structured property listings from multiple real estate websites in one run.\nBuilt for scale with smart filtering (price, beds, baths, size, market, country), duplicate control, and output-ready records for database pipelines.",
        "version": "0.0",
        "x-build-id": "aaeP40PtMqyGv3VFr"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/thescrapelab~the-ultimate-property-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-thescrapelab-the-ultimate-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/thescrapelab~the-ultimate-property-scraper/runs": {
            "post": {
                "operationId": "runs-sync-thescrapelab-the-ultimate-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/thescrapelab~the-ultimate-property-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-thescrapelab-the-ultimate-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": {
                    "countries": {
                        "title": "Countries",
                        "type": "array",
                        "description": "Best starting point. Leave websites empty to run the production-ready websites in these countries.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "AE",
                                "BH",
                                "BR",
                                "CA",
                                "CH",
                                "DK",
                                "EG",
                                "ES",
                                "FI",
                                "FR",
                                "GB",
                                "IE",
                                "IT",
                                "KZ",
                                "MA",
                                "MX",
                                "NG",
                                "NL",
                                "NZ",
                                "PH",
                                "PK",
                                "PL",
                                "PT",
                                "QA",
                                "RO",
                                "SA",
                                "SE",
                                "TR",
                                "UA",
                                "US",
                                "ZA"
                            ],
                            "enumTitles": [
                                "United Arab Emirates (AE)",
                                "Bahrain (BH)",
                                "Brazil (BR)",
                                "Canada (CA)",
                                "Switzerland (CH)",
                                "Denmark (DK)",
                                "Egypt (EG)",
                                "Spain (ES)",
                                "Finland (FI)",
                                "France (FR)",
                                "United Kingdom (GB)",
                                "Ireland (IE)",
                                "Italy (IT)",
                                "Kazakhstan (KZ)",
                                "Morocco (MA)",
                                "Mexico (MX)",
                                "Nigeria (NG)",
                                "Netherlands (NL)",
                                "New Zealand (NZ)",
                                "Philippines (PH)",
                                "Pakistan (PK)",
                                "Poland (PL)",
                                "Portugal (PT)",
                                "Qatar (QA)",
                                "Romania (RO)",
                                "Saudi Arabia (SA)",
                                "Sweden (SE)",
                                "Turkey (TR)",
                                "Ukraine (UA)",
                                "United States (US)",
                                "South Africa (ZA)"
                            ]
                        },
                        "default": []
                    },
                    "websites": {
                        "title": "Websites (Optional)",
                        "type": "array",
                        "description": "Optional. Choose specific websites. If left empty, the actor uses countries or a lightweight default.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "property24",
                                "privateproperty",
                                "hemnetse",
                                "rightmoveukproperty",
                                "onthemarketuk",
                                "casait",
                                "century21usproperty",
                                "centriscaproperty",
                                "imovirtualptproperty",
                                "daftieproperty",
                                "mercadolibrearproperty",
                                "mercadolibremxproperty",
                                "mercadolibredoproperty",
                                "mercadolibregtproperty",
                                "mercadolibrehnproperty",
                                "mercadolibreniproperty",
                                "mercadolibrepaproperty",
                                "mercadolibreecproperty",
                                "mercadolibrepyproperty",
                                "mercadolibresvproperty",
                                "vivarealbrproperty",
                                "olxbrproperty",
                                "propertynewsni",
                                "propertypalni",
                                "craigslistusproperty",
                                "redfinusproperty",
                                "coldwellbankerusproperty",
                                "newhomesourceusproperty",
                                "movotousproperty",
                                "harusproperty",
                                "zillowusproperty",
                                "estatelyusproperty",
                                "royallepagecaproperty",
                                "srealityczproperty",
                                "dotpropertyph",
                                "etuovifiproperty",
                                "vuokraovifiproperty",
                                "lamudiph",
                                "lamudimxproperty",
                                "argenproparproperty",
                                "bayutbhproperty",
                                "bayutsaproperty",
                                "betterhomesuaeproperty",
                                "emiratesestateuaeproperty",
                                "engeluaeproperty",
                                "mubawabmaproperty",
                                "papfrproperty",
                                "fazwazth",
                                "providentuaeproperty",
                                "zooplaukproperty",
                                "fundanlproperty",
                                "boligsidendkproperty",
                                "fotocasaesproperty",
                                "propertyfinderbhproperty",
                                "propertyfinderuae",
                                "propertyfinderegproperty",
                                "propertyfinderqaproperty",
                                "propertyfindersaproperty",
                                "propertygurumyproperty",
                                "propertygurusgproperty",
                                "otodompl",
                                "myhomeieproperty",
                                "homegatechproperty",
                                "emlakjettrproperty",
                                "pisosesproperty",
                                "propertyprongproperty",
                                "quintoandarbrproperty",
                                "realestateconzproperty",
                                "rumah123idproperty",
                                "gumtreeukproperty",
                                "olxptproperty",
                                "olxkzproperty",
                                "olxegproperty",
                                "olxpkproperty",
                                "olxroproperty",
                                "olxuaproperty",
                                "olxuzproperty",
                                "suumojpproperty",
                                "sothebysuaeproperty",
                                "squareyardsuaeproperty",
                                "zameenpkproperty",
                                "bayutomproperty",
                                "bayutuaeproperty",
                                "dotpropertyidproperty",
                                "dotpropertymyproperty",
                                "dotpropertyvnproperty",
                                "fazwazaeproperty",
                                "fazwazarproperty",
                                "fazwazegproperty",
                                "fazwazidproperty",
                                "fazwazmxproperty",
                                "fazwazpeproperty",
                                "fazwazphproperty",
                                "fazwazvnproperty",
                                "lamudipkproperty",
                                "mercadolibreclproperty",
                                "mercadolibrecoproperty",
                                "mercadolibrecrproperty",
                                "mercadolibrepeproperty",
                                "mercadolibreuyproperty",
                                "mercadolibreveproperty",
                                "buyrentkenyaproperty",
                                "dotpropertythproperty",
                                "dubizzlebhproperty",
                                "dubizzlejoproperty",
                                "dubizzlelbproperty",
                                "dubizzleomproperty",
                                "dubizzleqaproperty",
                                "olxbgproperty",
                                "olxplproperty",
                                "propertycozwproperty"
                            ],
                            "enumTitles": [
                                "Property24 (ZA)",
                                "Private Property (ZA)",
                                "Hemnet (SE)",
                                "Rightmove UK (GB)",
                                "OnTheMarket UK (GB)",
                                "Casa.it (IT)",
                                "Century 21 US Property (US)",
                                "Centris Canada Property (CA)",
                                "Imovirtual Portugal (PT)",
                                "Daft Ireland Property (IE)",
                                "Mercado Libre Property Argentina (AR)",
                                "Mercado Libre Property Mexico (MX)",
                                "Mercado Libre Property Dominican Republic (DO)",
                                "Mercado Libre Property Guatemala (GT)",
                                "Mercado Libre Property Honduras (HN)",
                                "Mercado Libre Property Nicaragua (NI)",
                                "Mercado Libre Property Panama (PA)",
                                "Mercado Libre Property Ecuador (EC)",
                                "Mercado Libre Property Paraguay (PY)",
                                "Mercado Libre Property El Salvador (SV)",
                                "Viva Real Brazil Property (BR)",
                                "OLX Brazil Property (BR)",
                                "Propertynews NI (GB)",
                                "PropertyPal NI (GB)",
                                "Craigslist US Property (US)",
                                "Redfin US Property (US)",
                                "Coldwell Banker US Property (US)",
                                "NewHomeSource US Property (US)",
                                "Movoto US Property (US)",
                                "HAR US Property (US)",
                                "Zillow US Property (US)",
                                "Estately US Property (US)",
                                "Royal LePage Canada Property (CA)",
                                "Sreality Czech Property (CZ)",
                                "DotProperty Philippines (PH)",
                                "Etuovi Finland Property (FI)",
                                "Vuokraovi Finland Property (FI)",
                                "Lamudi Philippines (PH)",
                                "Lamudi Mexico Property (MX)",
                                "Argenprop Argentina Property (AR)",
                                "Bayut Bahrain Property (BH)",
                                "Bayut Saudi Arabia Property (SA)",
                                "Betterhomes UAE Property (AE)",
                                "Emirates.Estate UAE Property (AE)",
                                "Engel & Volkers UAE Property (AE)",
                                "Mubawab Morocco Property (MA)",
                                "PAP France Property (FR)",
                                "FazWaz Thailand (TH)",
                                "Provident UAE Property (AE)",
                                "Zoopla UK Property (GB)",
                                "Funda Netherlands Property (NL)",
                                "Boligsiden Denmark Property (DK)",
                                "Fotocasa Spain Property (ES)",
                                "Property Finder Bahrain Property (BH)",
                                "Property Finder UAE (AE)",
                                "Property Finder Egypt (EG)",
                                "Property Finder Qatar Property (QA)",
                                "Property Finder Saudi Arabia Property (SA)",
                                "PropertyGuru Malaysia (MY)",
                                "PropertyGuru Singapore (SG)",
                                "Otodom Poland (PL)",
                                "MyHome Ireland Property (IE)",
                                "Homegate Switzerland Property (CH)",
                                "Emlakjet Turkey Property (TR)",
                                "Pisos Spain Property (ES)",
                                "PropertyPro Nigeria Property (NG)",
                                "QuintoAndar Brazil Property (BR)",
                                "RealEstate NZ Property (NZ)",
                                "Rumah123 Indonesia Property (ID)",
                                "Gumtree UK Property (GB)",
                                "OLX Portugal Property (PT)",
                                "OLX Kazakhstan Property (KZ)",
                                "Dubizzle Egypt Property (EG)",
                                "OLX Pakistan Property (PK)",
                                "OLX Romania Property (RO)",
                                "OLX Ukraine Property (UA)",
                                "OLX Uzbekistan Property (UZ)",
                                "SUUMO Japan Property (JP)",
                                "Sotheby's UAE Property (AE)",
                                "Square Yards UAE Property (AE)",
                                "Zameen Pakistan Property (PK)",
                                "Bayut Oman Property (OM)",
                                "Bayut UAE Property (AE)",
                                "DotProperty Indonesia (ID)",
                                "DotProperty Malaysia (MY)",
                                "DotProperty Vietnam (VN)",
                                "FazWaz UAE (AE)",
                                "FazWaz Argentina (AR)",
                                "FazWaz Egypt (EG)",
                                "FazWaz Indonesia (ID)",
                                "FazWaz Mexico (MX)",
                                "FazWaz Peru (PE)",
                                "FazWaz Philippines (PH)",
                                "FazWaz Vietnam (VN)",
                                "Lamudi Pakistan Property (PK)",
                                "Mercado Libre Property Chile (CL)",
                                "Mercado Libre Property Colombia (CO)",
                                "Mercado Libre Property Costa Rica (CR)",
                                "Mercado Libre Property Peru (PE)",
                                "Mercado Libre Property Uruguay (UY)",
                                "Mercado Libre Property Venezuela (VE)",
                                "BuyRentKenya Property (KE)",
                                "DotProperty Thailand (TH)",
                                "Dubizzle Bahrain Property (BH)",
                                "Dubizzle Jordan Property (JO)",
                                "Dubizzle Lebanon Property (LB)",
                                "Dubizzle Oman Property (OM)",
                                "Dubizzle Qatar Property (QA)",
                                "OLX Bulgaria Property (BG)",
                                "OLX Poland Property (PL)",
                                "Property.co.zw Property (ZW)"
                            ]
                        },
                        "default": [
                            "property24"
                        ]
                    },
                    "markets": {
                        "title": "Markets",
                        "type": "array",
                        "description": "Usually just for-sale. Add to-rent if you also want rental listings.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "for-sale",
                                "to-rent"
                            ]
                        },
                        "default": [
                            "for-sale"
                        ]
                    },
                    "areaQuery": {
                        "title": "Area / City / Suburb",
                        "type": "string",
                        "description": "Optional text filter. Matches suburb, city, location, title, or address.",
                        "default": ""
                    },
                    "propertyTypeQuery": {
                        "title": "Property Type",
                        "type": "string",
                        "description": "Optional. Example: apartment, house, villa, land.",
                        "default": ""
                    },
                    "minPrice": {
                        "title": "Min Price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Optional minimum price in the listing's own currency. Use 0 to ignore.",
                        "default": 0
                    },
                    "maxPrice": {
                        "title": "Max Price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Optional maximum price in the listing's own currency. Use 0 to ignore.",
                        "default": 0
                    },
                    "minBedrooms": {
                        "title": "Min Bedrooms",
                        "type": "number",
                        "description": "Optional minimum bedrooms. Use 0 to ignore.",
                        "default": 0
                    },
                    "maxBedrooms": {
                        "title": "Max Bedrooms",
                        "type": "number",
                        "description": "Optional maximum bedrooms. Use 0 to ignore.",
                        "default": 0
                    },
                    "minBathrooms": {
                        "title": "Min Bathrooms",
                        "type": "number",
                        "description": "Optional minimum bathrooms. Use 0 to ignore.",
                        "default": 0
                    },
                    "maxBathrooms": {
                        "title": "Max Bathrooms",
                        "type": "number",
                        "description": "Optional maximum bathrooms. Use 0 to ignore.",
                        "default": 0
                    },
                    "minSizeM2": {
                        "title": "Min Size (m²)",
                        "type": "number",
                        "description": "Optional minimum size in square metres. Use 0 to ignore.",
                        "default": 0
                    },
                    "maxSizeM2": {
                        "title": "Max Size (m²)",
                        "type": "number",
                        "description": "Optional maximum size in square metres. Use 0 to ignore.",
                        "default": 0
                    },
                    "pagesPerRun": {
                        "title": "Pages Per Website",
                        "minimum": 1,
                        "type": "integer",
                        "description": "How many pages to scrape per website in this run.",
                        "default": 1
                    },
                    "maxListings": {
                        "title": "Max Results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Optional cap on output rows per website. Use 0 for no cap.",
                        "default": 1
                    },
                    "comboConcurrency": {
                        "title": "Website Concurrency",
                        "minimum": 1,
                        "type": "integer",
                        "description": "How many website jobs to run in parallel. Higher is faster but heavier.",
                        "default": 1
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
