# Dubizzle Scraper — Property, Cars & Brokers (`muhammadafzal/dubizzle-search-detail-brokers`) Actor

Scrape public Dubizzle UAE property and car searches, enrich listing detail pages, or collect property broker profiles. Returns normalized records for market research and lead qualification. Not for private, authenticated, or messaging data. Search records cost $0.004; detail records cost $0.012.

- **URL**: https://apify.com/muhammadafzal/dubizzle-search-detail-brokers.md
- **Developed by:** [Muhammad Afzal](https://apify.com/muhammadafzal) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 86.7% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 search or broker results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## Dubizzle Scraper — Property, Cars & Brokers

**Dubizzle Scraper** extracts public UAE property listings, used-car listings, listing details, and property broker profiles. It is built for real-estate analysts, PropTech teams, car dealers, valuation researchers, and lead-qualification workflows needing a predictable flat dataset.

Use it for public market research, inventory monitoring, comparable-property analysis, used-car price intelligence, and broker-directory research. Do not use it for private account data, authenticated-only fields, messaging users, or bypassing access controls. Every row includes a source URL and extraction time so downstream systems can retain provenance.

The Actor has three deliberate modes:

- `search` collects property or used-car results from a Dubizzle search page.
- `details` extracts one or more individual public listing pages.
- `brokers` collects public property-agent directory or profile records.

Search and broker records cost **$0.004 per returned record**. Detail-enriched records cost **$0.012 per returned record**. Apify also applies its low synthetic Actor-start event.

### What data can I extract with Dubizzle Scraper?

The output stays consistent across runs. Fields that do not apply to a record type are returned as `null` or an empty array, which makes the dataset safe to load into SQL, spreadsheets, BI tools, and AI-agent workflows.

| Group | Important fields |
|---|---|
| Core | `recordType`, `listingId`, `url`, `title`, `description`, `section`, `category` |
| Price and place | `price`, `currency`, `emirate`, `locality`, `latitude`, `longitude` |
| Property | `propertyType`, `bedrooms`, `bathrooms`, `areaSqft`, `furnished`, `completionStatus`, `amenities` |
| Cars | `vehicleMake`, `vehicleModel`, `vehicleYear`, `mileageKm`, `bodyType`, `fuelType`, `transmission`, `regionalSpecs` |
| Seller and broker | `sellerType`, `sellerName`, `agencyName`, `phone`, `whatsapp`, `email`, `brokerName`, `brokerProfileUrl`, `listingsCount` |
| Media and time | `imageUrl`, `photoUrls`, `postedAt`, `updatedAt`, `scrapedAt` |
| Quality | `isVerified`, `isFeatured`, `warnings`, `sourceUrl` |

Phone, WhatsApp, and email are returned only when Dubizzle exposes them publicly in the page or browser-loaded response. A `null` value means the field was not publicly present in that run; it does not mean the seller has no contact method.

### Use cases for Dubizzle property, car, and broker data

- Build UAE property comparable datasets by emirate, neighborhood, property type, bedroom count, asking price, and floor area.
- Monitor new or removed inventory by scheduling the same filtered search URL and comparing `listingId` or `url` between datasets.
- Analyze used-car asking prices by make, model, year, mileage, seller type, and regional specification.
- Research public real-estate broker and agency presence before manual qualification.
- Feed normalized records into BigQuery, Snowflake, PostgreSQL, Airtable, Google Sheets, Make, Zapier, or n8n.
- Give an AI agent a narrow data tool with predictable fields and a clear maximum result count.

This Actor is not a messaging or outreach tool. Contact fields must not be used for spam, harassment, or activity that violates UAE law, privacy law, anti-spam rules, Dubizzle policies, or the rights of data subjects.

### How to use Dubizzle Scraper

#### Search property or used cars

The most reliable workflow is to open Dubizzle in a browser, apply the filters you need, and paste the resulting public search URL into `startUrls`. This preserves filters that may not be represented by the simplified structured fields.

```json
{
  "mode": "search",
  "startUrls": [
    { "url": "https://dubai.dubizzle.com/en/motors/used-cars/" }
  ],
  "maxResults": 50,
  "maxPages": 5,
  "fetchDetails": false
}
````

If `startUrls` is empty, the Actor builds a basic URL from `location`, `section`, `propertyType`, and `searchQuery`:

```json
{
  "mode": "search",
  "location": "dubai",
  "section": "property-for-sale",
  "propertyType": "residential/apartment",
  "searchQuery": "Dubai Marina",
  "maxResults": 20
}
```

#### Extract individual listing details

Use `details` with public listing URLs when the full description, gallery, seller, property attributes, or vehicle attributes matter. Details mode always attempts detail-page extraction and charges the `detail-result` event only for returned rows.

```json
{
  "mode": "details",
  "startUrls": [
    { "url": "https://dubai.dubizzle.com/property-for-sale/residential/apartment/2026/5/13/example-1/" }
  ],
  "maxResults": 1
}
```

#### Extract property brokers

Use the directory URL for multiple brokers or pass individual property-agent profile URLs. Set `fetchDetails` to `true` when each profile should be visited for fields not present on the directory card.

```json
{
  "mode": "brokers",
  "startUrls": [
    { "url": "https://uae.dubizzle.com/en/property-agents/" }
  ],
  "maxResults": 25,
  "maxPages": 3,
  "fetchDetails": true
}
```

### Output example

```json
{
  "recordType": "listing",
  "mode": "details",
  "listingId": "17461454",
  "url": "https://dubai.dubizzle.com/property-for-sale/residential/apartment/2026/5/13/example-1/",
  "title": "Marina View | 2BR Corner Unit",
  "description": "Two-bedroom apartment with marina views.",
  "section": "property-for-sale",
  "category": "Apartment",
  "price": 2450000,
  "currency": "AED",
  "emirate": "Dubai",
  "locality": "Dubai Marina",
  "bedrooms": 2,
  "bathrooms": 3,
  "areaSqft": 1340,
  "vehicleMake": null,
  "brokerName": null,
  "agencyName": "Example Properties",
  "sourceUrl": "https://dubai.dubizzle.com/property-for-sale/residential/apartment/2026/5/13/example-1/",
  "scrapedAt": "2026-07-13T12:00:00.000Z",
  "warnings": []
}
```

The complete schema is declared in `.actor/dataset_schema.json`. A separate `OUTPUT` key in the run's default key-value store contains record counts, charged-event totals, request diagnostics, warnings, and the dataset ID.

### How much will scraping Dubizzle cost?

| Event | Price | Trigger |
|---|---:|---|
| `apify-actor-start` | $0.00005 | Synthetic event applied automatically by Apify, scaled by memory |
| `search-result` | $0.004 | One search-card or broker-directory record written to the dataset |
| `detail-result` | $0.012 | One record enriched from an individual listing or broker page |

Examples, excluding the tiny synthetic start event:

- 20 search results cost at most **$0.08**.
- 100 search results cost at most **$0.40**.
- 20 detailed records cost at most **$0.24**.
- 50 detailed records cost at most **$0.60**.

`maxResults` is both a dataset and billing guard. The Actor also honors Apify's run-level maximum charge and maximum paid dataset item environment limits. It shows the maximum possible record-event cost in the status message before crawling begins.

### Reliability and technical design

Dubizzle currently protects public pages with Imperva. Ordinary HTTP clients and datacenter IPs can receive a “Pardon Our Interruption” page instead of listing data. This Actor therefore uses Playwright, consistent Crawlee sessions, cookies persisted per session, slow browser timing, UAE Apify Residential proxy routing in cloud runs, browser-loaded JSON interception, JSON-LD parsing, and DOM selector fallbacks.

The Actor rotates a session after challenge pages, HTTP 403, or HTTP 429. If detail enrichment fails after retries, a search-card record can still be returned with a warning rather than losing the entire batch. If every request is blocked and no record can be produced, the run fails honestly with an actionable terminal status instead of pretending that a zero-row dataset is success.

Target sites change. A public field can disappear, move, or become interaction-gated. Schedule small canary runs and review `OUTPUT.warnings` before a large recurring workflow.

### API examples

JavaScript:

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('YOUR_USERNAME/dubizzle-search-detail-brokers').call({
  mode: 'search',
  location: 'dubai',
  section: 'motors',
  searchQuery: 'Toyota Corolla',
  maxResults: 20
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

Python:

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("YOUR_USERNAME/dubizzle-search-detail-brokers").call(run_input={
    "mode": "brokers",
    "maxResults": 20,
    "fetchDetails": False,
})
items = client.dataset(run["defaultDatasetId"]).list_items()["items"]
print(items)
```

### FAQ

#### How many results can I scrape with Dubizzle Scraper?

One run accepts `maxResults` from 1 to 1,000 and `maxPages` from 1 to 100. Start with 20 records to confirm the target URL and output fields, then increase gradually. A filtered Dubizzle URL is usually more reliable than an extremely broad search.

#### Can I integrate Dubizzle Scraper with other apps?

Yes. Use Apify datasets, webhooks, schedules, Make, Zapier, n8n, Google Sheets, or the Apify API. Every record is normalized JSON and can also be exported as CSV, Excel, XML, or RSS through Apify storage endpoints.

#### Can I use Dubizzle Scraper with the Apify API?

Yes. Call the Actor with the JavaScript, Python, CLI, or HTTP client and read the default dataset after the run finishes. The examples above show the minimum workflow.

#### Can I use Dubizzle Scraper through an MCP Server?

Yes. Add `YOUR_USERNAME/dubizzle-search-detail-brokers` to the hosted Apify MCP server. The declared input and dataset schemas help an AI agent select the correct mode, construct input, understand the returned fields, and paginate the dataset.

#### Do I need proxies to scrape Dubizzle?

Cloud runs should use UAE Apify Residential proxy sessions, which this Actor configures automatically. Local runs without that proxy commonly receive an Imperva challenge and are intended for parser or schema development, not reliability validation.

#### Is it legal to scrape Dubizzle data?

Dubizzle's current [Platform Terms of Use](https://www.dubizzle.com/legalhub/terms/) expressly prohibit scraping, crawler use, database compilation, and attempts to bypass robot exclusions. This Actor is an independent technical tool and is not affiliated with, endorsed by, or sponsored by Dubizzle. Before using it, obtain any permission you need and ensure your use complies with Dubizzle's terms, UAE law, applicable privacy and database laws, contractual restrictions, and the rights of listing owners and brokers. Public visibility does not automatically create a right to copy, republish, resell, or contact people. The Actor must not be used for spam, harassment, discriminatory profiling, or access to non-public data.

#### Your feedback

When reporting a problem, include the run ID, operation mode, public input URL, expected field, and whether the issue was an Imperva block or a parsing mismatch. Never post API tokens, cookies, private seller data, or personal credentials in an issue.

# Actor input Schema

## `mode` (type: `string`):

Use this when choosing between search pages, individual listing details, or property brokers. Accepted values are search, details, and brokers; for example, details enriches direct listing URLs. Defaults to search. This is not a Dubizzle category filter.

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

Use this when you already have Dubizzle search, listing, or property-agent URLs. Add full public HTTPS URLs such as https://dubai.dubizzle.com/en/motors/used-cars/. Defaults to an empty list, which builds a search or brokers URL from the fields below. This field does not accept Bayut or Property Finder URLs.

## `location` (type: `string`):

Use this when structured search mode should target one UAE emirate or the national site. Select a slug such as dubai or abu-dhabi. Defaults to dubai. This field is ignored when Dubizzle URLs are supplied.

## `section` (type: `string`):

Use this when structured search mode should collect sale property, rental property, or used cars. Accepted values include property-for-sale and motors; for example, motors builds the used-cars search. Defaults to property-for-sale. This is not used by details or brokers mode.

## `propertyType` (type: `string`):

Use this when structured property search needs a Dubizzle path segment. Enter a path such as residential, residential/apartment, or commercial. Defaults to residential. This field is ignored for motors, direct URLs, details, and brokers.

## `searchQuery` (type: `string`):

Use this when structured search should include free-text keywords. Enter plain text such as Toyota Corolla or Dubai Marina. Defaults to an empty string, meaning no keyword restriction. This is not a full Dubizzle URL.

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

Use this to cap dataset records and record-event charges. Enter an integer from 1 to 1000; for example, 20 limits the run to twenty rows. Defaults to 20. This is a run-wide cap, not a per-page limit.

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

Use this to cap pagination for search and broker directories. Enter an integer from 1 to 100; for example, 5 visits at most five result pages. Defaults to 5. This does not limit direct detail URLs.

## `fetchDetails` (type: `boolean`):

Use this when search or broker rows need fields available only on profile/detail pages. Enable it to visit each result URL; a detail-result costs $0.012 instead of the $0.004 search-result. Defaults to false for faster automated health checks. This does not change details mode, which always extracts detail pages.

## Actor input object example

```json
{
  "mode": "search",
  "startUrls": [
    {
      "url": "https://dubai.dubizzle.com/en/property-for-sale/residential/"
    }
  ],
  "location": "dubai",
  "section": "motors",
  "propertyType": "residential/apartment",
  "searchQuery": "Toyota Corolla",
  "maxResults": 20,
  "maxPages": 5,
  "fetchDetails": true
}
```

# Actor output Schema

## `results` (type: `string`):

All normalized property, car, and broker dataset records.

## `summary` (type: `string`):

Counts, charged record events, warnings, and crawl diagnostics for this run.

# 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 = {
    "mode": "search",
    "startUrls": [],
    "location": "dubai",
    "section": "property-for-sale",
    "propertyType": "residential",
    "searchQuery": "",
    "maxResults": 20,
    "maxPages": 5,
    "fetchDetails": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("muhammadafzal/dubizzle-search-detail-brokers").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 = {
    "mode": "search",
    "startUrls": [],
    "location": "dubai",
    "section": "property-for-sale",
    "propertyType": "residential",
    "searchQuery": "",
    "maxResults": 20,
    "maxPages": 5,
    "fetchDetails": False,
}

# Run the Actor and wait for it to finish
run = client.actor("muhammadafzal/dubizzle-search-detail-brokers").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 '{
  "mode": "search",
  "startUrls": [],
  "location": "dubai",
  "section": "property-for-sale",
  "propertyType": "residential",
  "searchQuery": "",
  "maxResults": 20,
  "maxPages": 5,
  "fetchDetails": false
}' |
apify call muhammadafzal/dubizzle-search-detail-brokers --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=muhammadafzal/dubizzle-search-detail-brokers",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Dubizzle Scraper — Property, Cars & Brokers",
        "description": "Scrape public Dubizzle UAE property and car searches, enrich listing detail pages, or collect property broker profiles. Returns normalized records for market research and lead qualification. Not for private, authenticated, or messaging data. Search records cost $0.004; detail records cost $0.012.",
        "version": "1.0",
        "x-build-id": "EJbfLqofInjDDWjzF"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/muhammadafzal~dubizzle-search-detail-brokers/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-muhammadafzal-dubizzle-search-detail-brokers",
                "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/muhammadafzal~dubizzle-search-detail-brokers/runs": {
            "post": {
                "operationId": "runs-sync-muhammadafzal-dubizzle-search-detail-brokers",
                "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/muhammadafzal~dubizzle-search-detail-brokers/run-sync": {
            "post": {
                "operationId": "run-sync-muhammadafzal-dubizzle-search-detail-brokers",
                "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": {
                    "mode": {
                        "title": "Operation mode",
                        "enum": [
                            "search",
                            "details",
                            "brokers"
                        ],
                        "type": "string",
                        "description": "Use this when choosing between search pages, individual listing details, or property brokers. Accepted values are search, details, and brokers; for example, details enriches direct listing URLs. Defaults to search. This is not a Dubizzle category filter.",
                        "default": "search"
                    },
                    "startUrls": {
                        "title": "Dubizzle URLs",
                        "type": "array",
                        "description": "Use this when you already have Dubizzle search, listing, or property-agent URLs. Add full public HTTPS URLs such as https://dubai.dubizzle.com/en/motors/used-cars/. Defaults to an empty list, which builds a search or brokers URL from the fields below. This field does not accept Bayut or Property Finder URLs.",
                        "default": [],
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "location": {
                        "title": "UAE location",
                        "enum": [
                            "uae",
                            "dubai",
                            "abu-dhabi",
                            "sharjah",
                            "ajman",
                            "ras-al-khaimah",
                            "fujairah",
                            "umm-al-quwain",
                            "al-ain"
                        ],
                        "type": "string",
                        "description": "Use this when structured search mode should target one UAE emirate or the national site. Select a slug such as dubai or abu-dhabi. Defaults to dubai. This field is ignored when Dubizzle URLs are supplied.",
                        "default": "dubai"
                    },
                    "section": {
                        "title": "Listing section",
                        "enum": [
                            "property-for-sale",
                            "property-for-rent",
                            "motors"
                        ],
                        "type": "string",
                        "description": "Use this when structured search mode should collect sale property, rental property, or used cars. Accepted values include property-for-sale and motors; for example, motors builds the used-cars search. Defaults to property-for-sale. This is not used by details or brokers mode.",
                        "default": "property-for-sale"
                    },
                    "propertyType": {
                        "title": "Property path",
                        "type": "string",
                        "description": "Use this when structured property search needs a Dubizzle path segment. Enter a path such as residential, residential/apartment, or commercial. Defaults to residential. This field is ignored for motors, direct URLs, details, and brokers.",
                        "default": "residential"
                    },
                    "searchQuery": {
                        "title": "Search keywords",
                        "type": "string",
                        "description": "Use this when structured search should include free-text keywords. Enter plain text such as Toyota Corolla or Dubai Marina. Defaults to an empty string, meaning no keyword restriction. This is not a full Dubizzle URL.",
                        "default": ""
                    },
                    "maxResults": {
                        "title": "Maximum records",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Use this to cap dataset records and record-event charges. Enter an integer from 1 to 1000; for example, 20 limits the run to twenty rows. Defaults to 20. This is a run-wide cap, not a per-page limit.",
                        "default": 20
                    },
                    "maxPages": {
                        "title": "Maximum search pages",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Use this to cap pagination for search and broker directories. Enter an integer from 1 to 100; for example, 5 visits at most five result pages. Defaults to 5. This does not limit direct detail URLs.",
                        "default": 5
                    },
                    "fetchDetails": {
                        "title": "Enrich each result",
                        "type": "boolean",
                        "description": "Use this when search or broker rows need fields available only on profile/detail pages. Enable it to visit each result URL; a detail-result costs $0.012 instead of the $0.004 search-result. Defaults to false for faster automated health checks. This does not change details mode, which always extracts detail pages.",
                        "default": 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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
