# Bayut Dubai $0.8💰 URL Search | Location Filters | Rich Output (`abotapi/bayut-com-scraper`) Actor

From $0.8/1K. Extract property listings from bayut.com. Get fully-detailed listings with price, bedrooms, baths, area, geocoordinates, agent name + mobile + WhatsApp + email, agency profile, RERA/Trakheesi permit, full photo gallery, categorised amenities, and TruCheck verification dates.

- **URL**: https://apify.com/abotapi/bayut-com-scraper.md
- **Developed by:** [AbotAPI](https://apify.com/abotapi) (community)
- **Categories:** Real estate, Agents, Automation
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

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

## Bayut.com Scraper

Extract property listings from bayut.com — the UAE's largest property portal. Get fully-detailed listings with price, bedrooms, baths, area, geocoordinates, agent name + mobile + WhatsApp + email, agency profile, RERA/Trakheesi permit, full photo gallery, categorized amenities, and TruCheck verification dates.

### Why This Scraper?

- **50+ fields per listing** — including direct lat/lng, agent phone + WhatsApp, agency logo, RERA/Trakheesi permit number, TruCheck verification date, full photo gallery, and grouped amenities.
- **Two input modes** — pick city + filter from the form, or paste any bayut.com search URL you already refined in your browser.
- **Multi-URL with forward pagination** — paste many search URLs, each is walked page-by-page from where it starts.
- **For Sale and To Rent** — apartments, villas, townhouses, penthouses, hotel apartments, compounds, duplex, land, full/half floors, whole buildings, bulk units, commercial.
- **All seven emirates supported** — Dubai, Abu Dhabi, Sharjah, Ras Al Khaimah, Ajman, Fujairah, Umm Al Quwain.
- **TruCheck filter** — only return Bayut's vetted-by-RERA verified listings to skip agency spam.
- **Fast and lightweight** — HTTP-only with Chrome TLS fingerprinting (no headless browser). ~80 MB peak memory; tens of listings per second on a UAE residential proxy.
- **Resilient session management** — automatic session refresh and proxy rotation so a long run keeps producing results even when your residential pool ages.

### Data You Get

> Examples below are illustrative placeholders, not from a live listing.

| Field | Example |
|---|---|
| `externalID` | `00000001` |
| `url` | `https://www.bayut.com/property/details-00000001.html` |
| `purpose` | `for-sale` / `to-rent` |
| `propertyType` | `property` / `apartments` / `villas` / `townhouses` / … |
| `title` | `Sample Listing Title` |
| `titleArabic` | `<Arabic title placeholder>` |
| `price` (AED) | `1000000` |
| `currency` | `AED` |
| `rentFrequency` | `yearly` / `monthly` / `weekly` / `daily` (rent only) |
| `rooms`, `baths` | `2`, `2` |
| `area`, `areaUnit` | `100.0`, `sqm` |
| `furnishingStatus` | `furnished` / `unfurnished` / `partly-furnished` |
| `completionStatus` | `completed` / `off-plan` |
| `country`, `city` | `UAE`, `Dubai` |
| `neighbourhood` | `Sample Community` |
| `building` | `Sample Tower` |
| `latitude`, `longitude` | `25.0000`, `55.0000` |
| `isVerified` | `true` (TruCheck verified) |
| `verifiedAt`, `trucheckedAt` | Unix timestamps |
| `agentName`, `agentExternalID` | `Agent Name`, `0000000` |
| `phoneMobile`, `phonePhone` | `+971500000000`, `+97140000000` |
| `phoneWhatsapp`, `phoneProxy` | `971500000000`, `+97140000000` |
| `agencyName`, `agencyExternalID` | `Sample Agency`, `0000` |
| `agencyLogo` | `https://bayut-production.s3.eu-central-1.amazonaws.com/image/...` |
| `permitNumber` | `00000000000` (Trakheesi) |
| `referenceNumber` | `REF-0001` |
| `images[]` | Full gallery, high-res CDN URLs |
| `amenities[]` | Grouped by category (Features, Building, Health & Fitness, Recreation & Family, …) |
| `description` | Full seller description (when `fetchDetails=true`) |
| `paymentPlans[]` | For off-plan listings |
| `createdAt`, `updatedAt`, `reactivatedAt` | Unix timestamps |
| `scrapedAt` | ISO timestamp |

### How to Use

#### Search by City

```json
{
  "mode": "search",
  "locations": ["dubai"],
  "purpose": "for-sale",
  "propertyType": "apartments",
  "maxPages": 5,
  "fetchDetails": true
}
````

#### Search with Price + Bed Filters

```json
{
  "mode": "search",
  "locations": ["dubai/dubai-marina", "dubai/downtown-dubai"],
  "purpose": "for-sale",
  "propertyType": "apartments",
  "minPrice": 1500000,
  "maxPrice": 4500000,
  "minBedrooms": 2,
  "maxBedrooms": 3,
  "verifiedOnly": true,
  "sortBy": "price-asc",
  "maxPages": 10
}
```

#### Multi-City Sweep

```json
{
  "mode": "search",
  "locations": [
    "dubai",
    "abu-dhabi",
    "sharjah",
    "ras-al-khaimah",
    "ajman"
  ],
  "purpose": "to-rent",
  "propertyType": "villas",
  "rentFrequency": "yearly",
  "maxPages": 3
}
```

#### Multiple URLs (URL mode)

Open Bayut in your browser, refine filters, copy the resulting URL, paste each one here. URL mode supports many URLs in a single run; each is paginated forward independently. Filter-mode fields are ignored in URL mode.

```json
{
  "mode": "url",
  "urls": [
    "https://www.bayut.com/for-sale/villas/dubai/?price_min=5000000",
    "https://www.bayut.com/to-rent/apartments/abu-dhabi/?rent_frequency=yearly&rooms_in=2,3",
    "https://www.bayut.com/for-sale/property/sharjah/page-3/"
  ],
  "maxPages": 5,
  "fetchDetails": true
}
```

### Input Parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `search` | `search` (use filters) or `url` (paste URLs) |
| `locations` | string\[] | `["dubai"]` | City / area slugs (search mode). Examples: `dubai`, `abu-dhabi`, `dubai/dubai-marina`. |
| `urls` | string\[] | — | Bayut search URLs (URL mode). Multiple URLs supported with forward pagination per URL. |
| `purpose` | string | `for-sale` | `for-sale` or `to-rent` |
| `propertyType` | string | `property` | `property` (any), `apartments`, `villas`, `townhouses`, `penthouses`, `hotel-apartments`, `compounds`, `duplex`, `land`, `full-floors`, `half-floors`, `whole-buildings`, `bulk-units`, `commercial` |
| `minPrice`, `maxPrice` | int | — | Price range in AED |
| `minBedrooms`, `maxBedrooms` | int | — | Bedroom range (0 = studio) |
| `minArea`, `maxArea` | int | — | Area range in square feet |
| `furnishing` | string | `any` | `any`, `furnished`, `unfurnished` |
| `completionStatus` | string | `any` | `any`, `completed`, `off-plan` |
| `rentFrequency` | string | `any` | `any`, `yearly`, `monthly`, `weekly`, `daily` (rent only) |
| `verifiedOnly` | boolean | `false` | Only TruCheck-verified listings |
| `sortBy` | string | `popular` | `popular`, `newest`, `oldest`, `price-asc`, `price-desc`, `verified-score-desc` |
| `maxPages` | int | `1` | Pages to walk per URL / location (~24 listings per page) |
| `maxListings` | int | `0` | Hard cap across the whole run (0 = unlimited) |
| `fetchDetails` | bool | `true` | Adds description, amenities, full gallery, permit, payment plans |
| `proxy` | object | Apify residential AE | UAE residential strongly recommended |

### Output Example

> Sample shape — values are illustrative placeholders, not from a live listing.

```json
{
  "externalID": "00000001",
  "id": 10000000,
  "url": "https://www.bayut.com/property/details-00000001.html",
  "purpose": "for-sale",
  "propertyType": "property",
  "title": "Sample Listing Title",
  "price": 1000000,
  "currency": "AED",
  "rentFrequency": null,
  "rooms": 2,
  "baths": 2,
  "area": 100.0,
  "areaUnit": "sqm",
  "furnishingStatus": "unfurnished",
  "completionStatus": "completed",
  "country": "UAE",
  "city": "Dubai",
  "neighbourhood": "Sample Community",
  "building": "Sample Tower",
  "latitude": 25.0000,
  "longitude": 55.0000,
  "isVerified": true,
  "verificationStatus": "verified",
  "verifiedAt": 1700000000,
  "trucheckedAt": 1700000000,
  "agentName": "Agent Name",
  "agentExternalID": "0000000",
  "phoneMobile": "+971500000000",
  "phonePhone": "+97140000000",
  "phoneWhatsapp": "971500000000",
  "phoneProxy": "+97140000000",
  "agencyName": "Sample Agency",
  "agencyExternalID": "0000",
  "agencySlug": "sample-agency-0000",
  "permitNumber": "00000000000",
  "referenceNumber": "REF-0001",
  "images": [
    "https://images.bayut.com/thumbnails/000000000-800x600.jpeg"
  ],
  "imageCount": 10,
  "panoramaCount": 0,
  "videoCount": 0,
  "amenities": [
    {
      "group": "Features",
      "items": [
        { "slug": "balcony-or-terrace", "text": "Balcony or Terrace", "value": null },
        { "slug": "parking-spaces", "text": "Parking Spaces", "value": "1" }
      ]
    }
  ],
  "amenitiesFlat": ["balcony-or-terrace", "parking-spaces", "centrally-air-conditioned"],
  "description": "Full seller description text appears here when fetchDetails=true.",
  "createdAt": 1700000000,
  "updatedAt": 1700000000,
  "scrapedAt": "2026-01-01T00:00:00.000Z"
}
```

### Plan Requirement

**Residential proxy access is strongly recommended.** The actor will warn and fall back to a backup datacenter pool if your residential pool is unavailable, but first-attempt success on residential is far more reliable.

- **Recommended (Apify Starter or above):** Use Apify residential with `country: "AE"`. This is the default.
- **Free plan:** Apify Free does NOT include residential. Bring your own residential proxy URLs (Bright Data, Oxylabs, SmartProxy, IPRoyal) via the proxy field's "Custom proxy URLs" option.
- **Custom (BYO):** A non-residential pool may produce empty pages. The actor warns up front and still tries — residential is cheaper end-to-end.

# Actor input Schema

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

Search mode = pick city + property type + filters below. URL mode = paste any bayut.com search URL(s) you already refined in a browser. URL mode supports multiple URLs and walks pagination forward from each.

## `locations` (type: `array`):

Pick one or more emirates / cities. Use the Bayut city slug — e.g. 'dubai', 'abu-dhabi', 'sharjah', 'ras-al-khaimah', 'ajman', 'fujairah', 'umm-al-quwain'. For sub-areas use the slug as Bayut writes it in the URL, e.g. 'dubai/dubai-marina', 'dubai/downtown-dubai', 'dubai/jumeirah-village-circle-jvc'.

## `purpose` (type: `string`):

Pick for-sale or for-rent. Search mode only.

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

What kind of property to search for. 'property' includes everything residential. Search mode only.

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

Minimum price filter in AED. Leave empty for no minimum. Search mode only.

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

Maximum price filter in AED. Leave empty for no maximum. Search mode only.

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

Minimum bedrooms (0 = studio). Search mode only.

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

Maximum bedrooms. Search mode only.

## `minArea` (type: `integer`):

Minimum area in square feet. Search mode only.

## `maxArea` (type: `integer`):

Maximum area in square feet. Search mode only.

## `furnishing` (type: `string`):

Furnishing filter. Search mode only.

## `completionStatus` (type: `string`):

Completed = ready to move in. Off-plan = under construction / pre-launch. Search mode only.

## `rentFrequency` (type: `string`):

Only applies when purpose=to-rent.

## `verifiedOnly` (type: `boolean`):

Only return TruCheck-verified listings (Bayut's vetted-by-RERA badge). Useful to filter agency spam.

## `sortBy` (type: `string`):

How to order results. Search mode only — in URL mode the sort is taken from your pasted URL.

## `urls` (type: `array`):

One or more full bayut.com search URLs. Multi-URL supported — each URL is scraped independently with forward pagination. Filter-mode fields (city, propertyType, price, beds, etc.) are IGNORED in URL mode — paste the URL exactly as Bayut produced it. If your URL ends with `/page-N/`, scraping starts at page N and walks forward.

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

How many result pages to walk per location / URL. Bayut returns 24 listings per page. Default is 1 page (24 listings) so first runs stay cheap; raise this for bigger sweeps.

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

Hard cap across the whole run. 0 = unlimited (bounded only by Max pages).

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

Adds full description, amenities (categorized), Trakheesi/RERA permit number, the full photo gallery (vs SERP cover photo only), floor plans count, payment plans, off-plan completion details, and the contact email if exposed. Turn off for a faster/cheaper run with just the SERP fields (which already include lat/lng, agent phone, WhatsApp, basic agency info).

## `proxy` (type: `object`):

Apify residential proxy with country=AE is strongly recommended. Datacenter proxies often produce empty pages — residential IPs (especially UAE) give the most reliable results.

## Actor input object example

```json
{
  "mode": "search",
  "locations": [
    "dubai"
  ],
  "purpose": "for-sale",
  "propertyType": "property",
  "furnishing": "any",
  "completionStatus": "any",
  "rentFrequency": "any",
  "verifiedOnly": false,
  "sortBy": "popular",
  "urls": [
    "https://www.bayut.com/for-sale/property/dubai/"
  ],
  "maxPages": 1,
  "maxListings": 0,
  "fetchDetails": true,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "AE"
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "locations": [
        "dubai"
    ],
    "urls": [
        "https://www.bayut.com/for-sale/property/dubai/"
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "AE"
    }
};

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

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

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

```

## Python example

```python
from apify_client import ApifyClient

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

# Prepare the Actor input
run_input = {
    "locations": ["dubai"],
    "urls": ["https://www.bayut.com/for-sale/property/dubai/"],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "AE",
    },
}

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

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

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

```

## CLI example

```bash
echo '{
  "locations": [
    "dubai"
  ],
  "urls": [
    "https://www.bayut.com/for-sale/property/dubai/"
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "AE"
  }
}' |
apify call abotapi/bayut-com-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Bayut Dubai $0.8💰 URL Search | Location Filters | Rich Output",
        "description": "From $0.8/1K. Extract property listings from bayut.com. Get fully-detailed listings with price, bedrooms, baths, area, geocoordinates, agent name + mobile + WhatsApp + email, agency profile, RERA/Trakheesi permit, full photo gallery, categorised amenities, and TruCheck verification dates.",
        "version": "1.0",
        "x-build-id": "RBEnXkbPRq28qywOq"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/abotapi~bayut-com-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-abotapi-bayut-com-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/abotapi~bayut-com-scraper/runs": {
            "post": {
                "operationId": "runs-sync-abotapi-bayut-com-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/abotapi~bayut-com-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-abotapi-bayut-com-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "1. Search mode",
                        "enum": [
                            "search",
                            "url"
                        ],
                        "type": "string",
                        "description": "Search mode = pick city + property type + filters below. URL mode = paste any bayut.com search URL(s) you already refined in a browser. URL mode supports multiple URLs and walks pagination forward from each.",
                        "default": "search"
                    },
                    "locations": {
                        "title": "Cities / areas to search",
                        "type": "array",
                        "description": "Pick one or more emirates / cities. Use the Bayut city slug — e.g. 'dubai', 'abu-dhabi', 'sharjah', 'ras-al-khaimah', 'ajman', 'fujairah', 'umm-al-quwain'. For sub-areas use the slug as Bayut writes it in the URL, e.g. 'dubai/dubai-marina', 'dubai/downtown-dubai', 'dubai/jumeirah-village-circle-jvc'.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "purpose": {
                        "title": "Buy or rent? (Search mode)",
                        "enum": [
                            "for-sale",
                            "to-rent"
                        ],
                        "type": "string",
                        "description": "Pick for-sale or for-rent. Search mode only.",
                        "default": "for-sale"
                    },
                    "propertyType": {
                        "title": "Property type (Search mode)",
                        "enum": [
                            "property",
                            "apartments",
                            "villas",
                            "townhouses",
                            "penthouses",
                            "hotel-apartments",
                            "compounds",
                            "duplex",
                            "land",
                            "full-floors",
                            "half-floors",
                            "whole-buildings",
                            "bulk-units",
                            "commercial"
                        ],
                        "type": "string",
                        "description": "What kind of property to search for. 'property' includes everything residential. Search mode only.",
                        "default": "property"
                    },
                    "minPrice": {
                        "title": "Min price (AED)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum price filter in AED. Leave empty for no minimum. Search mode only."
                    },
                    "maxPrice": {
                        "title": "Max price (AED)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum price filter in AED. Leave empty for no maximum. Search mode only."
                    },
                    "minBedrooms": {
                        "title": "Min bedrooms",
                        "minimum": 0,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Minimum bedrooms (0 = studio). Search mode only."
                    },
                    "maxBedrooms": {
                        "title": "Max bedrooms",
                        "minimum": 0,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Maximum bedrooms. Search mode only."
                    },
                    "minArea": {
                        "title": "Min area (sqft)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum area in square feet. Search mode only."
                    },
                    "maxArea": {
                        "title": "Max area (sqft)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum area in square feet. Search mode only."
                    },
                    "furnishing": {
                        "title": "Furnishing (Search mode)",
                        "enum": [
                            "any",
                            "furnished",
                            "unfurnished"
                        ],
                        "type": "string",
                        "description": "Furnishing filter. Search mode only.",
                        "default": "any"
                    },
                    "completionStatus": {
                        "title": "Completion status (Search mode)",
                        "enum": [
                            "any",
                            "completed",
                            "off-plan"
                        ],
                        "type": "string",
                        "description": "Completed = ready to move in. Off-plan = under construction / pre-launch. Search mode only.",
                        "default": "any"
                    },
                    "rentFrequency": {
                        "title": "Rent frequency (Rent only)",
                        "enum": [
                            "any",
                            "yearly",
                            "monthly",
                            "weekly",
                            "daily"
                        ],
                        "type": "string",
                        "description": "Only applies when purpose=to-rent.",
                        "default": "any"
                    },
                    "verifiedOnly": {
                        "title": "TruCheck verified only (Search mode)",
                        "type": "boolean",
                        "description": "Only return TruCheck-verified listings (Bayut's vetted-by-RERA badge). Useful to filter agency spam.",
                        "default": false
                    },
                    "sortBy": {
                        "title": "Sort order (Search mode)",
                        "enum": [
                            "popular",
                            "newest",
                            "oldest",
                            "price-asc",
                            "price-desc",
                            "verified-score-desc"
                        ],
                        "type": "string",
                        "description": "How to order results. Search mode only — in URL mode the sort is taken from your pasted URL.",
                        "default": "popular"
                    },
                    "urls": {
                        "title": "Search URLs (URL mode)",
                        "type": "array",
                        "description": "One or more full bayut.com search URLs. Multi-URL supported — each URL is scraped independently with forward pagination. Filter-mode fields (city, propertyType, price, beds, etc.) are IGNORED in URL mode — paste the URL exactly as Bayut produced it. If your URL ends with `/page-N/`, scraping starts at page N and walks forward.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxPages": {
                        "title": "Max pages per search",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "How many result pages to walk per location / URL. Bayut returns 24 listings per page. Default is 1 page (24 listings) so first runs stay cheap; raise this for bigger sweeps.",
                        "default": 1
                    },
                    "maxListings": {
                        "title": "Max total listings",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Hard cap across the whole run. 0 = unlimited (bounded only by Max pages).",
                        "default": 0
                    },
                    "fetchDetails": {
                        "title": "Visit each listing's detail page",
                        "type": "boolean",
                        "description": "Adds full description, amenities (categorized), Trakheesi/RERA permit number, the full photo gallery (vs SERP cover photo only), floor plans count, payment plans, off-plan completion details, and the contact email if exposed. Turn off for a faster/cheaper run with just the SERP fields (which already include lat/lng, agent phone, WhatsApp, basic agency info).",
                        "default": true
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify residential proxy with country=AE is strongly recommended. Datacenter proxies often produce empty pages — residential IPs (especially UAE) give the most reliable results."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
