# Savills Property Scraper (`nocodeventure/savills-property-scraper`) Actor

An Apify Actor that scrapes property listings from Savills real estate listings, extracting detailed information about properties for sale, rent, or recently sold.

- **URL**: https://apify.com/nocodeventure/savills-property-scraper.md
- **Developed by:** [No-Code Venture](https://apify.com/nocodeventure) (community)
- **Categories:** Real estate
- **Stats:** 2 total users, 1 monthly users, 96.6% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

## Savills Property Scraper

An Apify Actor that scrapes property listings from [Savills UK](https://search.savills.com), extracting detailed information about properties for sale, rent, or recently sold.

### Features

- 🏠 **Scrape property listings** - For sale, to rent, or sold properties
- 📊 **Detailed property data** - Address, price, bedrooms, bathrooms, size, EPC rating, and more
- 📄 **Brochure links** - Extracts view/download brochure URLs when available
- 🖼️ **Images & floorplans** - Collects property images and floorplan URLs (configurable limit)
- 🔧 **Flexible filtering** - Use URL parameters or input filters (filters override URL)
- ⚡ **Efficient scraping** - Opens property details in new tabs for reliable extraction
- 🎛️ **Performance tuning** - Control image extraction to optimize speed

### Input Configuration

#### Basic Usage

1. Go to [Savills search](https://search.savills.com) and configure your desired search
2. Copy the URL from your browser
3. Paste it into the `startUrls` input
4. Optionally override any filters using the input fields

#### Example Input

```json
{
    "startUrls": [
        {
            "url": "https://search.savills.com/list?SearchList=Id_20308+Category_TownVillageCity&Tenure=GRS_T_B&Currency=GBP&Category=GRS_CAT_RES"
        }
    ],
    "bedrooms": "GRS_B_3",
    "scrapeDetails": true,
    "maxListings": 10,
    "maxImages": 1
}
````

#### Input Options

| Field | Description |
|-------|-------------|
| `startUrls` | Savills search URLs to scrape |
| `listingType` | Override: For Sale, To Rent, or Sold Properties |
| `minPrice` / `maxPrice` | Override price range |
| `bedrooms` / `bathrooms` / `receptions` | Override room counts |
| `propertyTypes` | Filter by property type (house, flat, etc.) |
| `features` | Filter by amenities (garden, garage, etc.) |
| `maxListings` | Maximum properties to scrape (0 = unlimited) |
| `maxPages` | Maximum listing pages to process (0 = unlimited) |
| `maxImages` | Max images per property: 1 (default), 0 = unlimited, -1 = skip |
| `scrapeDetails` | Visit each property page for full details |

#### Filter Override Behavior

Filters set in the input will **override** the URL parameters:

- Leave as "Use URL Setting" (empty) to keep the URL value
- Select a specific value to override what's in the URL

### Output Data

Each property includes:

| Field | Description |
|-------|-------------|
| `propertyId` | Unique Savills property ID |
| `url` | Property detail page URL |
| `title` | Property title/name |
| `fullAddress` | Complete address |
| `postcode` | UK postcode |
| `price` | Numeric price value |
| `priceFormatted` | Formatted price string (e.g., "£1,650,000") |
| `priceType` | Guide Price, Offers Over, POA, etc. |
| `propertyType` | House, Flat, Bungalow, etc. |
| `bedrooms` | Number of bedrooms |
| `bathrooms` | Number of bathrooms |
| `receptions` | Number of reception rooms |
| `sizeSqFt` / `sizeSqM` | Property size |
| `description` | Property description |
| `keyFeatures` | Array of key features |
| `epcRating` | Energy Performance Certificate rating |
| `images` | Array of image URLs (limited by `maxImages`) |
| `floorplanUrl` | Floorplan image URL (extracted from Plans modal) |
| `viewBrochureUrl` | View brochure link |
| `downloadBrochureUrl` | Download brochure PDF link |
| `status` | Available, Under Offer, Sold |
| `agents` | Array of agent details (name, office, phone, photo) |
| `newDevelopment` | Whether it's a new development |
| `underOffer` | Whether the property is under offer |

### Usage Examples

#### Scrape properties for sale in a specific area

```json
{
    "startUrls": [
        {
            "url": "https://search.savills.com/list?SearchList=Id_20308+Category_TownVillageCity&Tenure=GRS_T_B&Currency=GBP&Category=GRS_CAT_RES"
        }
    ],
    "maxListings": 50
}
```

#### Scrape rentals with specific criteria

```json
{
    "startUrls": [
        {
            "url": "https://search.savills.com/list?SearchList=Id_20501+Category_TownVillageCity&Currency=GBP&Category=GRS_CAT_RES"
        }
    ],
    "listingType": "rent",
    "bedrooms": "GRS_B_2",
    "maxPrice": 3000,
    "maxListings": 20
}
```

#### Quick listing scan (no detail pages)

```json
{
    "startUrls": [
        {
            "url": "https://search.savills.com/list?SearchList=Id_20308+Category_TownVillageCity&Tenure=GRS_T_B&Currency=GBP&Category=GRS_CAT_RES"
        }
    ],
    "scrapeDetails": false,
    "maxPages": 5
}
```

#### Fast scraping (skip images)

```json
{
    "startUrls": [
        {
            "url": "https://search.savills.com/list?SearchList=Id_20308+Category_TownVillageCity&Tenure=GRS_T_B&Currency=GBP&Category=GRS_CAT_RES"
        }
    ],
    "maxImages": -1,
    "maxListings": 100
}
```

#### Get all images

```json
{
    "startUrls": [
        {
            "url": "https://search.savills.com/list?SearchList=Id_20308+Category_TownVillageCity&Tenure=GRS_T_B&Currency=GBP&Category=GRS_CAT_RES"
        }
    ],
    "maxImages": 0,
    "maxListings": 10
}
```

### Local Development

```bash
## Install dependencies
npm install

## Run locally
apify run

## Run with specific input
apify run --input='{"startUrls":[{"url":"..."}],"maxListings":5}'
```

### Deploy to Apify

```bash
## Login to Apify
apify login

## Deploy the Actor
apify push
```

### Technology

- **[Crawlee](https://crawlee.dev)** - Web scraping and browser automation library
- **[Playwright](https://playwright.dev)** - Browser automation
- **[Camoufox](https://github.com/AydinTheFirst/camoufox)** - Stealthy Firefox fork for anti-bot evasion
- **[Apify SDK](https://docs.apify.com/sdk/js)** - Actor development framework

### Resources

- [Apify Platform documentation](https://docs.apify.com/platform)
- [Crawlee documentation](https://crawlee.dev/docs)
- [Savills UK property search](https://search.savills.com)

### Disclaimer

**This tool is intended for research, development, and automation of publicly accessible data on the Savills UK platform.**
By using this Actor, you agree to comply with Savills' [Terms of Use](https://www.savills.co.uk/terms-of-use.aspx) and all applicable laws.

- Do not overload Savills' servers: set reasonable concurrency, delays, and limits on listings scraped.
- Respect robots.txt and refrain from scraping private or restricted data.
- Apify, the author, and contributors are not affiliated with Savills and take no responsibility for how this tool is used.
- You are solely responsible for any consequences arising from data extraction.

**Always check if scraping is permitted and avoid breaching any terms or local regulations!**

# Actor input Schema

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

Savills search result URLs to scrape. You can configure a search on savills.com and paste the URL here. Any filters set below will override parameters in the URL.

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

Type of property listings to scrape. Overrides the URL parameter if set.

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

Minimum property price. Overrides URL if set. For rentals, this is the price per period.

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

Maximum property price. Overrides URL if set.

## `currency` (type: `string`):

Currency for price display.

## `rentalPeriod` (type: `string`):

Price period for rental properties.

## `bedrooms` (type: `string`):

Number of bedrooms filter. Overrides URL if not set to 'Use URL Setting'.

## `bathrooms` (type: `string`):

Number of bathrooms filter. Overrides URL if not set to 'Use URL Setting'.

## `receptions` (type: `string`):

Number of reception rooms filter. Overrides URL if not set to 'Use URL Setting'.

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

Types of properties to include. Overrides URL if any selected.

## `minSize` (type: `integer`):

Minimum property size. Overrides URL if set.

## `maxSize` (type: `integer`):

Maximum property size. Overrides URL if set.

## `sizeUnit` (type: `string`):

Unit for property size measurements.

## `features` (type: `array`):

Filter by specific property features. Overrides URL if any selected.

## `furnishing` (type: `array`):

Furnishing options for rental properties. Overrides URL if any selected.

## `leaseType` (type: `array`):

Lease type options for rental properties. Overrides URL if any selected.

## `lifestyles` (type: `array`):

Lifestyle-related property filters. Overrides URL if any selected.

## `sortOrder` (type: `string`):

How to sort the search results. Overrides URL if not set to 'Use URL Setting'.

## `maxConcurrency` (type: `integer`):

Number of browser instances to run in parallel. Higher values speed up scraping but use more memory.

## `maxRequestsPerCrawl` (type: `integer`):

Maximum number of HTTP requests (0 = unlimited).

## `maxPages` (type: `integer`):

Maximum number of listing pages to process (0 = unlimited).

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

Maximum number of individual properties to scrape (0 = unlimited). This takes precedence over Max Listing Pages.

## `scrapeDetails` (type: `boolean`):

Whether to visit each property page for full details. Disabling this will only scrape basic info from listing pages.

## `maxImages` (type: `integer`):

Maximum number of images to extract per property. Set to 0 for unlimited images. Set to -1 to skip image extraction entirely (faster scraping).

## `proxyConfiguration` (type: `object`):

Proxy settings for anti-bot protection.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://search.savills.com/list?SearchList=Id_20308+Category_TownVillageCity&Tenure=GRS_T_B&Currency=GBP&Category=GRS_CAT_RES"
    }
  ],
  "currency": "GBP",
  "rentalPeriod": "Week",
  "sizeUnit": "SquareFeet",
  "maxConcurrency": 1,
  "maxRequestsPerCrawl": 100,
  "maxPages": 0,
  "maxListings": 2,
  "scrapeDetails": true,
  "maxImages": 1,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

No description

## `detailed` (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 = {
    "startUrls": [
        {
            "url": "https://search.savills.com/list?SearchList=Id_20308+Category_TownVillageCity&Tenure=GRS_T_B&Currency=GBP&Category=GRS_CAT_RES"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("nocodeventure/savills-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 = { "startUrls": [{ "url": "https://search.savills.com/list?SearchList=Id_20308+Category_TownVillageCity&Tenure=GRS_T_B&Currency=GBP&Category=GRS_CAT_RES" }] }

# Run the Actor and wait for it to finish
run = client.actor("nocodeventure/savills-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 '{
  "startUrls": [
    {
      "url": "https://search.savills.com/list?SearchList=Id_20308+Category_TownVillageCity&Tenure=GRS_T_B&Currency=GBP&Category=GRS_CAT_RES"
    }
  ]
}' |
apify call nocodeventure/savills-property-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Savills Property Scraper",
        "description": "An Apify Actor that scrapes property listings from Savills real estate listings, extracting detailed information about properties for sale, rent, or recently sold.",
        "version": "0.0",
        "x-build-id": "BsntLfU5E3VKyGyxO"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/nocodeventure~savills-property-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-nocodeventure-savills-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/nocodeventure~savills-property-scraper/runs": {
            "post": {
                "operationId": "runs-sync-nocodeventure-savills-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/nocodeventure~savills-property-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-nocodeventure-savills-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",
                "required": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Savills search result URLs to scrape. You can configure a search on savills.com and paste the URL here. Any filters set below will override parameters in the URL.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "listingType": {
                        "title": "Listing Type",
                        "enum": [
                            "",
                            "buy",
                            "rent",
                            "sold"
                        ],
                        "type": "string",
                        "description": "Type of property listings to scrape. Overrides the URL parameter if set."
                    },
                    "minPrice": {
                        "title": "Minimum Price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum property price. Overrides URL if set. For rentals, this is the price per period."
                    },
                    "maxPrice": {
                        "title": "Maximum Price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum property price. Overrides URL if set."
                    },
                    "currency": {
                        "title": "Currency",
                        "enum": [
                            "GBP",
                            "USD",
                            "EUR"
                        ],
                        "type": "string",
                        "description": "Currency for price display.",
                        "default": "GBP"
                    },
                    "rentalPeriod": {
                        "title": "Rental Period",
                        "enum": [
                            "Week",
                            "Month"
                        ],
                        "type": "string",
                        "description": "Price period for rental properties.",
                        "default": "Week"
                    },
                    "bedrooms": {
                        "title": "Bedrooms",
                        "enum": [
                            "",
                            "-1",
                            "GRS_B_1",
                            "GRS_B_2",
                            "GRS_B_3",
                            "GRS_B_4",
                            "GRS_B_5",
                            "GRS_B_6"
                        ],
                        "type": "string",
                        "description": "Number of bedrooms filter. Overrides URL if not set to 'Use URL Setting'."
                    },
                    "bathrooms": {
                        "title": "Bathrooms",
                        "enum": [
                            "",
                            "-1",
                            "GRS_BT_1",
                            "GRS_BT_2",
                            "GRS_BT_3",
                            "GRS_BT_4",
                            "GRS_BT_5"
                        ],
                        "type": "string",
                        "description": "Number of bathrooms filter. Overrides URL if not set to 'Use URL Setting'."
                    },
                    "receptions": {
                        "title": "Reception Rooms",
                        "enum": [
                            "",
                            "-1",
                            "GRS_REC_1",
                            "GRS_REC_2",
                            "GRS_REC_3",
                            "GRS_REC_4",
                            "GRS_REC_5"
                        ],
                        "type": "string",
                        "description": "Number of reception rooms filter. Overrides URL if not set to 'Use URL Setting'."
                    },
                    "propertyTypes": {
                        "title": "Property Types",
                        "type": "array",
                        "description": "Types of properties to include. Overrides URL if any selected.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "GRS_PT_ND",
                                "GRS_PT_DH",
                                "GRS_PT_SDH",
                                "GRS_PT_TH",
                                "GRS_PT_F",
                                "GRS_PT_BU",
                                "GRS_PT_CT",
                                "GRS_PT_L"
                            ],
                            "enumTitles": [
                                "New Development",
                                "Detached House",
                                "Semi-Detached House",
                                "Terraced House",
                                "Flat/Apartment",
                                "Bungalow",
                                "Cottage",
                                "Land"
                            ]
                        }
                    },
                    "minSize": {
                        "title": "Minimum Size",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum property size. Overrides URL if set."
                    },
                    "maxSize": {
                        "title": "Maximum Size",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum property size. Overrides URL if set."
                    },
                    "sizeUnit": {
                        "title": "Size Unit",
                        "enum": [
                            "SquareFeet",
                            "SquareMeter"
                        ],
                        "type": "string",
                        "description": "Unit for property size measurements.",
                        "default": "SquareFeet"
                    },
                    "features": {
                        "title": "Property Features",
                        "type": "array",
                        "description": "Filter by specific property features. Overrides URL if any selected.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "GRS_FTR_PRD",
                                "GRS_FTR_LL",
                                "GRS_FTR_B",
                                "GRS_FTR_CON",
                                "GRS_FTR_GAR",
                                "GRS_FTR_GDN",
                                "GRS_FTR_G",
                                "GRS_FTR_L",
                                "GRS_FTR_OSP",
                                "GRS_FTR_RT",
                                "GRS_FTR_TC",
                                "GRS_FTR_SP"
                            ],
                            "enumTitles": [
                                "Period Property",
                                "Listed Building",
                                "Balcony",
                                "Concierge",
                                "Garage",
                                "Garden",
                                "Gym",
                                "Lift",
                                "Off-Street Parking",
                                "Roof Terrace",
                                "Tennis Court",
                                "Swimming Pool"
                            ]
                        }
                    },
                    "furnishing": {
                        "title": "Furnishing (Rentals)",
                        "type": "array",
                        "description": "Furnishing options for rental properties. Overrides URL if any selected.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "GRS_FU_UF",
                                "GRS_FU_PF",
                                "GRS_FU_F",
                                "GRS_FU_BF"
                            ],
                            "enumTitles": [
                                "Unfurnished",
                                "Part Furnished",
                                "Furnished",
                                "Bills Included"
                            ]
                        }
                    },
                    "leaseType": {
                        "title": "Lease Type (Rentals)",
                        "type": "array",
                        "description": "Lease type options for rental properties. Overrides URL if any selected.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "GRS_LT_LT",
                                "GRS_LT_ST"
                            ],
                            "enumTitles": [
                                "Long Term",
                                "Short Term"
                            ]
                        }
                    },
                    "lifestyles": {
                        "title": "Lifestyle Preferences",
                        "type": "array",
                        "description": "Lifestyle-related property filters. Overrides URL if any selected.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "GRS_LS_WS",
                                "GRS_LS_PF"
                            ],
                            "enumTitles": [
                                "Waterside",
                                "Pet Friendly"
                            ]
                        }
                    },
                    "sortOrder": {
                        "title": "Sort Order",
                        "enum": [
                            "",
                            "SO_PCDD",
                            "SO_PCDA",
                            "SO_DD",
                            "SO_DA"
                        ],
                        "type": "string",
                        "description": "How to sort the search results. Overrides URL if not set to 'Use URL Setting'."
                    },
                    "maxConcurrency": {
                        "title": "Concurrent Browsers",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Number of browser instances to run in parallel. Higher values speed up scraping but use more memory.",
                        "default": 1
                    },
                    "maxRequestsPerCrawl": {
                        "title": "Max Requests per Crawl",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of HTTP requests (0 = unlimited).",
                        "default": 100
                    },
                    "maxPages": {
                        "title": "Max Listing Pages",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of listing pages to process (0 = unlimited).",
                        "default": 0
                    },
                    "maxListings": {
                        "title": "Max Listings",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of individual properties to scrape (0 = unlimited). This takes precedence over Max Listing Pages.",
                        "default": 2
                    },
                    "scrapeDetails": {
                        "title": "Scrape Property Details",
                        "type": "boolean",
                        "description": "Whether to visit each property page for full details. Disabling this will only scrape basic info from listing pages.",
                        "default": true
                    },
                    "maxImages": {
                        "title": "Max Images per Property",
                        "minimum": -1,
                        "type": "integer",
                        "description": "Maximum number of images to extract per property. Set to 0 for unlimited images. Set to -1 to skip image extraction entirely (faster scraping).",
                        "default": 1
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings for anti-bot protection.",
                        "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
                                    }
                                }
                            },
                            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
