# Property Finder Scraper | UAE Saudi Egypt Bahrain Qatar (`lentic_clockss/property-finder-uae-scraper`) Actor

Scrape Property Finder UAE, Saudi Arabia, Egypt, Bahrain & Qatar listings for sale or rent. Extract prices, beds, RERA, agents & images. Property Finder API alternative.

- **URL**: https://apify.com/lentic\_clockss/property-finder-uae-scraper.md
- **Developed by:** [kane liu](https://apify.com/lentic_clockss) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 1 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 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.

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/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

## Property Finder Scraper — UAE, Saudi, Egypt, Bahrain & Qatar

**Scrape Property Finder sale and rent listings across the Middle East — then download structured real estate data as Excel, CSV, or JSON.**

This Actor is a practical **Property Finder API alternative** for market research, investor screening, rental comps, and lead lists. Choose a market such as **UAE** or **Saudi Arabia**, pick **Buy**, **Rent**, or **Commercial**, and get listing rows with prices, beds, baths, area, RERA / permits, agents, brokers, amenities, and photos when present on the detail page.

- Pull **homes for sale** and **apartments for rent** from [Property Finder UAE](https://www.propertyfinder.ae), [Saudi Arabia](https://www.propertyfinder.sa), [Egypt](https://www.propertyfinder.eg), [Bahrain](https://www.propertyfinder.bh), and [Qatar](https://www.propertyfinder.qa)
- Enrich search results with **detail-page fields** (description, amenities, RERA, agent / broker, images)
- Filter by **property type** (apartment, villa, office-space, …) — or paste known **search / detail URLs**
- Export to **Excel / CSV / JSON**, or connect Make, n8n, Zapier, Python, or MCP
- **Pay per event** — Actor start + each Dataset listing; no subscription

---

### What does the Property Finder Scraper do?

It turns a Property Finder search into a clean Apify Dataset of property listings across five MENA markets.

Under the hood, the Actor:

1. Builds the Property Finder search URL for your market, channel, and property type
2. Collects listing cards from the search results page (`#__NEXT_DATA__`)
3. Opens detail pages to enrich each row with description, amenities, RERA, and media
4. Writes normalized records you can download or push into automations

Residential proxy matched to the market is recommended (prefilled). Fetching uses **curl_cffi** TLS impersonation with **Playwright Chromium** fallback — plain `requests` / bare curl are blocked by CloudFront.

---

### What data can you extract from Property Finder?

| Data point | Buy / Rent | Commercial |
| --- | :---: | :---: |
| Title & listing URL | ✅ | ✅ |
| List price or rent + period | ✅ | ✅ |
| Beds / baths / size (sqft) | ✅ | ✅ |
| Plot size & plot dimensions | — | ✅ |
| Payment methods / cheques / service fee | ✅ | ✅ |
| Property details map (type, age, …) | ✅ | ✅ |
| Property type & channel | ✅ | ✅ |
| Address / location tree | ✅ | ✅ |
| GPS coordinates (when shown) | ✅ | ✅ |
| Agent email & phone | ✅ | ✅ |
| Broker email & phone | ✅ | ✅ |
| Contact options (email / phone / WhatsApp) | ✅ | ✅ |
| RERA / permit fields | ✅ | ✅ |
| Amenities & photo gallery | ✅ | ✅ |
| Platform tags (verified, featured, …) | ✅ | ✅ |
| Completion / furnished | ✅ | — |

Every Dataset row also includes `scrapedAt` and `source` = `propertyfinder`. Top-level convenience fields: `agentEmail`, `agentPhone`, `brokerEmail`, `brokerPhone`. An `OUTPUT` / `RUN_SUMMARY` record in the key-value store reports counts and warnings.

**Out of scope:** Turkey ([zingat.com](https://www.zingat.com)), login walls, map APIs, lead-form submits, Partner API — see `TECH_DEBT.md`.

Fetching uses **curl_cffi** TLS impersonation with optional **Playwright** browser fallback when CloudFront blocks.

---

### What you can do with it

#### 1. Scrape apartments for sale in the UAE

Set `market` to `AE`, `channel` to `BUY`, and `propertyType` to `apartment`. Get structured rows with price, beds, baths, size, address, and a direct listing URL — ready for comps or investor shortlists.

#### 2. Scrape rental villas and apartments

Set `channel` to `RENT`. Rows include rent amount, `pricePeriod` (yearly / monthly), beds/baths, and furnished status when present.

#### 3. Scrape commercial offices and warehouses

Set `channel` to `COMMERCIAL_BUY` or `COMMERCIAL_RENT`, and `propertyType` to `office-space`, `warehouse`, `retail`, or `shop`.

#### 4. Enrich known Property Finder detail URLs

Paste one or more Property Finder detail URLs into **Start URLs** to skip search and fetch full LDP `propertyResult` directly.

#### 5. Feed real estate data into automations

Schedule the Actor and send the Dataset to Sheets, Slack, CRM, Make, n8n, Zapier, or an AI agent via Apify MCP / API.

---

### How to scrape Property Finder (no code required)

1. Click **Try for free**
2. Choose a **market** (`AE` / `SA` / `EG` / `BH` / `QA`)
3. Choose a **channel** (Buy, Rent, Commercial buy, Commercial rent)
4. Optionally set **property type**, max listings, and whether to open detail pages
5. Keep **Apify RESIDENTIAL** proxy enabled (country matched to the market)
6. Click **Start** — open the **Dataset** tab when the run finishes

Start with `maxItems: 5–10` to verify the market, then scale up.

<details>
<summary>For developers: minimal input</summary>

```json
{
  "market": "AE",
  "channel": "BUY",
  "propertyType": "apartment",
  "maxItems": 10,
  "scrapeDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "AE"
  }
}
````

</details>

***

### Markets covered

| Code | Site | Currency | Proxy country |
| --- | --- | --- | --- |
| `AE` | [propertyfinder.ae](https://www.propertyfinder.ae) | AED | AE |
| `SA` | [propertyfinder.sa](https://www.propertyfinder.sa) | SAR | SA |
| `EG` | [propertyfinder.eg](https://www.propertyfinder.eg) | EGP | EG |
| `BH` | [propertyfinder.bh](https://www.propertyfinder.bh) | BHD | BH |
| `QA` | [propertyfinder.qa](https://www.propertyfinder.qa) | QAR | QA |

Use `markets: ["BH", "QA"]` or `market: "all"` for multi-country runs (`maxItems` is fair-split). Turkey (`zingat.com`) is out of scope.

***

### Pricing — how much does it cost to scrape Property Finder?

**Pay per event. No subscription.**

| Event | Price | When charged |
| --- | ---: | --- |
| `apify-actor-start` | **$0.005** | When a normal run starts (scaled by allocated memory GB) |
| `apify-default-dataset-item` (`result`) | **$2.50 / 1,000** ($0.0025 each) | Each listing written to the default Dataset |

**User pays platform usage costs: Yes** — compute, residential proxy, and other platform usage are billed to the user in addition to event charges.

**Example product charges (events only):**

| Scenario | Approx. event charge |
| --- | ---: |
| Canary: 10 listings | $0.005 + 10 × $0.0025 = **$0.030** |
| City scan: 100 listings | $0.005 + $0.25 = **$0.255** |
| 1,000 listings | $0.005 + $2.50 = **$2.505** |

Platform usage (especially residential proxy) is separate and depends on run duration and memory.

***

### Input

| Field | Description |
| --- | --- |
| `market` / `markets` | `AE`, `SA`, `EG`, `BH`, `QA`, or `all` |
| `channel` | `BUY`, `RENT`, `COMMERCIAL_BUY`, `COMMERCIAL_RENT` |
| `propertyType` / `propertyTypes` | e.g. `apartment`, `villa`, `office-space` (`all` = every type in channel) |
| `locationId` | Optional Property Finder `l` id; omit for national search |
| `maxItems` / `maxPages` | Caps (1–2000 / 1–100) |
| `scrapeDetails` | Enrich each card from the listing detail page |
| `startUrls` | Optional SRP or LDP URLs (overrides market/channel/type) |
| `proxyConfiguration` | Apify RESIDENTIAL / market country recommended |

Open the **Input** tab in Console for the full form and tooltips.

***

### Output example

You can download the Dataset as **JSON, CSV, Excel, or HTML**.

```json
{
  "id": "116374983",
  "url": "https://www.propertyfinder.ae/en/plp/buy/apartment-for-sale-abu-dhabi-masdar-city-oasis-residences-oasis-2-116374983.html",
  "source": "propertyfinder",
  "market": "AE",
  "channel": "BUY",
  "category": "apartment",
  "title": "Bright & Spacious | Prime Location | Stables View",
  "price": "AED 1,310,000",
  "priceAmount": 1310000,
  "currency": "AED",
  "numBedrooms": 2,
  "numBathrooms": 2,
  "size": 1200,
  "sizeUnit": "sqft",
  "propertyType": "Apartment",
  "address": "Oasis 2, Oasis Residences, Masdar City, Abu Dhabi",
  "sourceLayer": "srp+ldp",
  "scrapedAt": "2026-07-19T02:00:00+00:00"
}
```

Core fields include `id`, `url`, `market`, `channel`, `category`, `title`, `price` / `priceAmount` / `currency`, beds/baths/size, `address`, `agent`, `broker`, `rera`, `amenities`, `images`, plus `scrapedAt` and `source`.

***

### Live View endpoints

When Standby / Live View is enabled, the Actor exposes a small OpenAPI surface for readiness and discovery:

| Endpoint | Purpose |
| --- | --- |
| `GET /` | Readiness / service info |
| `GET /health` | Health check |
| `GET /input-example` | Low-cost example input |
| `GET /openapi.json` | Deployed OpenAPI document |

Scraping still runs through a **normal Actor run** — Live View does not scrape Property Finder by itself.

***

### Connect from code

Actor ID: `lentic_clockss/property-finder-uae-scraper`

```python
from apify_client import ApifyClient

client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("lentic_clockss/property-finder-uae-scraper").call(
    run_input={
        "market": "AE",
        "channel": "BUY",
        "propertyType": "apartment",
        "maxItems": 10,
        "proxyConfiguration": {
            "useApifyProxy": True,
            "apifyProxyGroups": ["RESIDENTIAL"],
            "apifyProxyCountry": "AE",
        },
    }
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item.get("title"), item.get("priceAmount"), item.get("url"))
```

Use the same Actor ID in Make, n8n, Zapier, or Apify MCP for AI-agent workflows.

***

### FAQ

#### Is there a free Property Finder API?

Property Finder does not offer a simple public listing API for bulk export. This Actor gives you structured sale and rent data through Apify runs, Dataset exports, and integrations.

#### Can I scrape both residential and commercial listings?

Yes. Use `channel` `BUY` / `RENT` for residential, or `COMMERCIAL_BUY` / `COMMERCIAL_RENT` for commercial. Run twice (or schedule two tasks) if you need both in one pipeline.

#### Can I scrape Bahrain and Qatar in one run?

Yes. Set `markets: ["BH", "QA"]` with a shared channel and property type. `maxItems` is fair-split across search URLs.

#### Why is a residential proxy recommended?

Property Finder sits behind CloudFront / AWS WAF. Automation-style clients often get 403. Apify RESIDENTIAL with a country matched to the market (`AE` / `SA` / `EG` / `BH` / `QA`) is recommended for reliable cloud runs.

#### Can I schedule daily Property Finder scrapes?

Yes. Create an Apify schedule with the same input and send the Dataset to Sheets, Slack, a CRM, or your pipeline.

#### Is it legal to scrape Property Finder?

Use this Actor for legitimate research and analysis only. Respect Property Finder terms of use and applicable law. Results may include publicly displayed listing information; do not use personal data without a lawful basis. Call / WhatsApp / Email lead forms are not clicked.

***

### Related Actors

- [Dot Property Scraper](https://apify.com/lentic_clockss/dot-property-th-scraper) — TH / PH / MY / VN sale & rent listings
- [Realtor.com Scraper](https://apify.com/lentic_clockss/realtor-com-scraper) — US for-sale and rental listings by city

Browse all Actors: [apify.com/lentic\_clockss](https://apify.com/lentic_clockss)

# Actor input Schema

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

Property Finder search (SRP) or listing detail (LDP) URLs for AE/SA/EG/BH/QA. Search URLs override market/channel/type when provided.

## `market` (type: `string`):

Primary country market. Use all for AE+SA+EG+BH+QA. Ignored when markets is set.

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

Optional multi-select of markets. Overrides market when non-empty.

## `channel` (type: `string`):

BUY / RENT (residential) or COMMERCIAL\_BUY / COMMERCIAL\_RENT.

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

Single category slug. Use all/properties for every type in the channel (omit t=). Type IDs are resolved per market.

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

Optional multi-select categories. Overrides propertyType when non-empty.

## `locationId` (type: `integer`):

Optional Property Finder `l` location id. Leave empty/0 for national search (recommended).

## `locationSlug` (type: `string`):

Optional city/area slug preset (e.g. dubai, riyadh, jeddah, lusail). Used when locationId is empty.

## `locale` (type: `string`):

URL locale prefix. Leave empty for market default (en).

## `maxItems` (type: `integer`):

Maximum property records to save (fair-split across markets/types).

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

Maximum SRP pages per search URL (~25 listings per page). Uses external `page=N`.

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

Fetch each listing LDP and merge `#__NEXT_DATA__` propertyResult (includes agent/broker email & phone when public).

## `enableBrowserFallback` (type: `boolean`):

If curl\_cffi is blocked by CloudFront/WAF, fall back to Playwright Chromium.

## `requestDelayMillis` (type: `integer`):

Politeness delay between HTTP requests.

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

Max concurrent HTTP fetches for detail pages.

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

Apify Proxy recommended on cloud. Country defaults to the primary market (AE/SA/EG/BH/QA).

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.propertyfinder.ae/en/search?c=1&t=1"
    }
  ],
  "market": "AE",
  "markets": [],
  "channel": "BUY",
  "propertyType": "all",
  "propertyTypes": [],
  "locale": "",
  "maxItems": 25,
  "maxPages": 1,
  "scrapeDetails": true,
  "enableBrowserFallback": true,
  "requestDelayMillis": 800,
  "maxConcurrency": 2,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `listings` (type: `string`):

Normalized Property Finder listing records from SRP and optional LDP enrichment.

## `runSummary` (type: `string`):

Counts, engine, and timestamps for the 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 = {
    "startUrls": [
        {
            "url": "https://www.propertyfinder.ae/en/search?c=1&t=1"
        }
    ],
    "locationSlug": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("lentic_clockss/property-finder-uae-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://www.propertyfinder.ae/en/search?c=1&t=1" }],
    "locationSlug": "",
}

# Run the Actor and wait for it to finish
run = client.actor("lentic_clockss/property-finder-uae-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://www.propertyfinder.ae/en/search?c=1&t=1"
    }
  ],
  "locationSlug": ""
}' |
apify call lentic_clockss/property-finder-uae-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Property Finder Scraper | UAE Saudi Egypt Bahrain Qatar",
        "description": "Scrape Property Finder UAE, Saudi Arabia, Egypt, Bahrain & Qatar listings for sale or rent. Extract prices, beds, RERA, agents & images. Property Finder API alternative.",
        "version": "0.3",
        "x-build-id": "QsWfV1LuaVvhjuhon"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/lentic_clockss~property-finder-uae-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-lentic_clockss-property-finder-uae-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/lentic_clockss~property-finder-uae-scraper/runs": {
            "post": {
                "operationId": "runs-sync-lentic_clockss-property-finder-uae-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/lentic_clockss~property-finder-uae-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-lentic_clockss-property-finder-uae-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Property Finder search (SRP) or listing detail (LDP) URLs for AE/SA/EG/BH/QA. Search URLs override market/channel/type when provided.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "market": {
                        "title": "Market",
                        "enum": [
                            "AE",
                            "SA",
                            "EG",
                            "BH",
                            "QA",
                            "all"
                        ],
                        "type": "string",
                        "description": "Primary country market. Use all for AE+SA+EG+BH+QA. Ignored when markets is set.",
                        "default": "AE"
                    },
                    "markets": {
                        "title": "Markets",
                        "type": "array",
                        "description": "Optional multi-select of markets. Overrides market when non-empty.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "AE",
                                "SA",
                                "EG",
                                "BH",
                                "QA"
                            ]
                        },
                        "default": []
                    },
                    "channel": {
                        "title": "Channel",
                        "enum": [
                            "BUY",
                            "RENT",
                            "COMMERCIAL_BUY",
                            "COMMERCIAL_RENT"
                        ],
                        "type": "string",
                        "description": "BUY / RENT (residential) or COMMERCIAL_BUY / COMMERCIAL_RENT.",
                        "default": "BUY"
                    },
                    "propertyType": {
                        "title": "Property type",
                        "enum": [
                            "all",
                            "properties",
                            "apartment",
                            "villa",
                            "townhouse",
                            "penthouse",
                            "compound",
                            "duplex",
                            "full-floor",
                            "half-floor",
                            "whole-building",
                            "land",
                            "bungalow",
                            "hotel-apartment",
                            "bulk-sale-unit",
                            "bulk-rent-unit",
                            "chalet",
                            "twin-house",
                            "farm",
                            "rest-house",
                            "office-space",
                            "retail",
                            "warehouse",
                            "shop",
                            "show-room",
                            "factory",
                            "labor-camp",
                            "staff-accommodation",
                            "business-centre",
                            "co-working-space",
                            "medical-facility",
                            "clinic",
                            "cafeteria",
                            "restaurant",
                            "storage",
                            "ivilla",
                            "cabin",
                            "palace",
                            "roof",
                            "short-term-hotel-apartment",
                            "labor-camp-per-room"
                        ],
                        "type": "string",
                        "description": "Single category slug. Use all/properties for every type in the channel (omit t=). Type IDs are resolved per market.",
                        "default": "all"
                    },
                    "propertyTypes": {
                        "title": "Property types",
                        "type": "array",
                        "description": "Optional multi-select categories. Overrides propertyType when non-empty.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "all",
                                "apartment",
                                "villa",
                                "townhouse",
                                "penthouse",
                                "compound",
                                "duplex",
                                "full-floor",
                                "half-floor",
                                "whole-building",
                                "land",
                                "bungalow",
                                "hotel-apartment",
                                "office-space",
                                "retail",
                                "warehouse",
                                "shop",
                                "show-room",
                                "factory",
                                "labor-camp",
                                "staff-accommodation",
                                "farm",
                                "chalet"
                            ]
                        },
                        "default": []
                    },
                    "locationId": {
                        "title": "Location ID",
                        "minimum": 0,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Optional Property Finder `l` location id. Leave empty/0 for national search (recommended)."
                    },
                    "locationSlug": {
                        "title": "Location slug",
                        "type": "string",
                        "description": "Optional city/area slug preset (e.g. dubai, riyadh, jeddah, lusail). Used when locationId is empty."
                    },
                    "locale": {
                        "title": "Locale",
                        "enum": [
                            "",
                            "en",
                            "ar"
                        ],
                        "type": "string",
                        "description": "URL locale prefix. Leave empty for market default (en).",
                        "default": ""
                    },
                    "maxItems": {
                        "title": "Max listings",
                        "minimum": 1,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "Maximum property records to save (fair-split across markets/types).",
                        "default": 25
                    },
                    "maxPages": {
                        "title": "Max search pages",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum SRP pages per search URL (~25 listings per page). Uses external `page=N`.",
                        "default": 1
                    },
                    "scrapeDetails": {
                        "title": "Scrape detail pages",
                        "type": "boolean",
                        "description": "Fetch each listing LDP and merge `#__NEXT_DATA__` propertyResult (includes agent/broker email & phone when public).",
                        "default": true
                    },
                    "enableBrowserFallback": {
                        "title": "Browser fallback",
                        "type": "boolean",
                        "description": "If curl_cffi is blocked by CloudFront/WAF, fall back to Playwright Chromium.",
                        "default": true
                    },
                    "requestDelayMillis": {
                        "title": "Delay between requests (ms)",
                        "minimum": 0,
                        "maximum": 15000,
                        "type": "integer",
                        "description": "Politeness delay between HTTP requests.",
                        "default": 800
                    },
                    "maxConcurrency": {
                        "title": "Request concurrency",
                        "minimum": 1,
                        "maximum": 8,
                        "type": "integer",
                        "description": "Max concurrent HTTP fetches for detail pages.",
                        "default": 2
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify Proxy recommended on cloud. Country defaults to the primary market (AE/SA/EG/BH/QA).",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
