# Bayut Scraper - UAE Real Estate & Agent Leads (`benthepythondev/bayut-scraper`) Actor

Scrape Bayut.com (UAE #1 property portal), for rent or for sale: price, beds, baths, area, location, coordinates, agency, agent name & phone, photos and listing URL. Search Dubai, Abu Dhabi and more by city, purpose and property type.

- **URL**: https://apify.com/benthepythondev/bayut-scraper.md
- **Developed by:** [ben](https://apify.com/benthepythondev) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Scraper — UAE Real Estate & Agent Leads

Scrape property listings from **Bayut.com**, the United Arab Emirates' #1 real-estate portal, for **rent or for sale**, across Dubai, Abu Dhabi, Sharjah, Ajman and every other emirate. For each listing you get the price, bedrooms, bathrooms, built-up area, property type, the full location hierarchy with GPS coordinates, the listing **agency**, the **agent's name and phone / WhatsApp numbers**, the cover photo, the reference number and more — clean, flat and ready to use. Export to JSON/CSV/Excel, run on a schedule, call via API, or connect to Make, Zapier or n8n.

### 🔎 What is the Bayut Scraper?

The Bayut Scraper turns any Bayut search into a structured dataset. Tell it what you want — by pasting one or more **Bayut search URLs** (the most precise way) or by giving a **purpose**, an optional **property type** and one or more **UAE cities** — and it walks every results page, extracting each listing as a tidy row. It is built for **lead generation, market research, price monitoring, CRM enrichment and investment analysis** in the booming UAE property market.

#### What data does it extract?

- **Price & terms** — price (AED), rent frequency (yearly / monthly / weekly / daily), purpose (for-rent / for-sale).
- **Property facts** — bedrooms, bathrooms, area in m² and ft², property type (Apartment, Villa, Townhouse, Penthouse, Office…), furnishing status, completion status (ready / off-plan).
- **Location** — full hierarchy (UAE → emirate → community → tower/sub-community), plus **latitude & longitude**.
- **Agency & agent (lead-gen)** — agency name, **agent name**, **agent phone, mobile and WhatsApp** numbers.
- **Listing meta** — listing URL, slug, reference number, verified badge, cover photo, photo count, created/updated timestamps.

### ⬇️ Input

| Field | Type | Description |
|-------|------|-------------|
| `searchUrls` | array | One or more Bayut search-results URLs (most precise). Apply filters on Bayut, copy the address bar, paste here. |
| `cities` | array | UAE city/area slugs (e.g. `dubai`, `abu-dhabi`, `sharjah`) used when not pasting URLs. |
| `purpose` | string | `for-rent` or `for-sale` (used when building searches from `cities`). |
| `category` | string | Optional property type when building from `cities`: apartments, villas, townhouses, penthouses, offices, shops, warehouses, land. |
| `maxResults` | integer | Max listings per search URL / city. Keep small for test runs. |
| `proxyCountry` | string | Residential proxy country code (default `AE`). |

#### Example input

```json
{
  "searchUrls": [
    "https://www.bayut.com/to-rent/apartments/dubai/dubai-marina/"
  ],
  "maxResults": 50,
  "proxyCountry": "AE"
}
````

Or build the search from fields instead of a URL:

```json
{
  "cities": ["dubai", "abu-dhabi"],
  "purpose": "for-sale",
  "category": "villas",
  "maxResults": 100
}
```

### ⬆️ Output

Each listing is pushed as one record. Example:

```json
{
  "id": "15177306",
  "url": "https://www.bayut.com/property/details-15177306.html",
  "slug": "fully-furnished-marina-view-spacious-layout-15177306",
  "title": "Fully Furnished | Marina View | Spacious Layout",
  "purpose": "for-rent",
  "price": 130000,
  "currency": "AED",
  "rent_frequency": "yearly",
  "property_type": "Apartments",
  "category_path": ["Residential", "Apartments"],
  "bedrooms": 2,
  "bathrooms": 3,
  "area_sqm": 122.07,
  "area_sqft": 1314.0,
  "furnishing_status": "furnished",
  "completion_status": "completed",
  "is_verified": true,
  "city": "Dubai",
  "neighbourhood": "Dubai Marina",
  "location_path": ["UAE", "Dubai", "Dubai Marina", "Time Place"],
  "latitude": 25.080451,
  "longitude": 55.144278,
  "agency": "Dacha Real Estate",
  "agent_name": "Yusuf Shaikh",
  "agent_phone": "+97144232006",
  "agent_mobile": "+971526497551",
  "agent_whatsapp": "971545695868",
  "reference_number": "DREL-8805",
  "image": "https://images.bayut.com/.../cover.jpeg",
  "photo_count": 10,
  "created_at": 1778680356,
  "updated_at": 1782795865
}
```

### 💡 Use cases

- 🏢 **Real-estate lead generation** — build prospect lists of agencies and agents with phone & WhatsApp numbers for each active listing.
- 📈 **Market & price research** — track asking prices, rent frequencies and inventory by community across Dubai and the wider UAE.
- 🧮 **Investment analysis** — compare price-per-m², verified vs unverified stock and ready vs off-plan supply in any area.
- 🔌 **CRM & portal enrichment** — feed fresh, geocoded UAE listings into your own app, sheet or pipeline on a schedule.

### ❓ FAQ

**Which Bayut listings can it scrape?** Any search-results page — for rent or for sale, residential or commercial, any city or community. Paste the URL or build the search from the city/purpose/type fields.

**Does it return the agent's contact details?** Yes — when Bayut exposes them, each row includes the agency name, the agent's name, and the agent's phone, mobile and WhatsApp numbers.

**How many results can I get?** Set `maxResults` per search. The scraper paginates automatically through every results page until it reaches your limit or runs out of listings.

**Is the area in square feet or square metres?** Both. Bayut stores area in square metres; the scraper returns `area_sqm` and a converted `area_sqft` so you don't have to.

**How do I search multiple cities at once?** Add several slugs to `cities` (e.g. `["dubai", "abu-dhabi", "sharjah"]`) or paste several `searchUrls`.

**Do I need a proxy?** The actor uses Apify residential proxies (default country AE) to load Bayut reliably from a real-visitor IP. Just run it — proxying is handled for you.

**In what formats can I export?** JSON, CSV, Excel, XML or HTML from the dataset, or pull results via the Apify API and integrate with Make, Zapier or n8n.

**Can I run it on a schedule?** Yes. Use Apify Schedules to refresh your dataset hourly, daily or weekly and keep your listings current.

**Is it legal?** The scraper only collects publicly available listing information. You are responsible for using the data in line with Bayut's terms, the UAE's data-protection regulations and applicable marketing laws (e.g. honouring opt-outs when contacting agents). It is intended for legitimate research, analytics and B2B outreach.

### 🔗 You might also like

- 🇦🇪 Property Finder, Dubizzle and other MENA portal scrapers
- 🇪🇺 Idealista, Funda, Immobiliare, Rightmove and Kleinanzeigen real-estate scrapers
- 📞 Real Estate Agent Lead Scraper and Website Contact Extractor for enriching agent contacts

**Keywords:** bayut scraper, bayut.com scraper, UAE real estate scraper, Dubai property scraper, Abu Dhabi real estate data, Dubai apartments for rent, UAE property listings API, real estate lead generation UAE, Dubai real estate agents, property data scraper, MENA real estate scraper, Dubai rental market data, Bayut API, scrape Bayut listings, UAE real estate leads, Dubai property prices, real estate scraping, agent phone numbers Dubai, property finder alternative, Dubai off-plan properties.

# Actor input Schema

## `searchUrls` (type: `array`):

One or more Bayut search-results URLs to scrape (most precise). Open Bayut.com, apply your filters (location, price, beds, etc.), copy the address bar and paste it here, e.g. 'https://www.bayut.com/to-rent/apartments/dubai/dubai-marina/'. Each URL is paginated automatically. Leave empty to use the Cities / Purpose fields below instead.

## `cities` (type: `array`):

UAE city or area slugs to search when you are not pasting full URLs, e.g. 'dubai', 'abu-dhabi', 'sharjah', 'ajman'. Combined with the Purpose and Property type fields below to build the search.

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

Whether to scrape listings that are for rent or for sale. Used when building searches from the Cities field (a pasted URL keeps its own purpose).

## `category` (type: `string`):

Optional property category used when building searches from the Cities field. Leave as 'Any property' to include all types.

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

Maximum number of listings to return per search URL / city. Keep this small for quick test runs and raise it for full exports.

## `proxyCountry` (type: `string`):

Country code for the Apify residential proxy used to clear Bayut's anti-bot. Defaults to AE (United Arab Emirates), which is recommended for reliable access from inside the UAE.

## Actor input object example

```json
{
  "searchUrls": [
    "https://www.bayut.com/to-rent/apartments/dubai/"
  ],
  "cities": [],
  "purpose": "for-rent",
  "category": "",
  "maxResults": 10,
  "proxyCountry": "AE"
}
```

# 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 = {
    "searchUrls": [
        "https://www.bayut.com/to-rent/apartments/dubai/"
    ],
    "cities": [],
    "purpose": "for-rent",
    "category": "",
    "maxResults": 10,
    "proxyCountry": "AE"
};

// Run the Actor and wait for it to finish
const run = await client.actor("benthepythondev/bayut-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 = {
    "searchUrls": ["https://www.bayut.com/to-rent/apartments/dubai/"],
    "cities": [],
    "purpose": "for-rent",
    "category": "",
    "maxResults": 10,
    "proxyCountry": "AE",
}

# Run the Actor and wait for it to finish
run = client.actor("benthepythondev/bayut-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 '{
  "searchUrls": [
    "https://www.bayut.com/to-rent/apartments/dubai/"
  ],
  "cities": [],
  "purpose": "for-rent",
  "category": "",
  "maxResults": 10,
  "proxyCountry": "AE"
}' |
apify call benthepythondev/bayut-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Bayut Scraper - UAE Real Estate & Agent Leads",
        "description": "Scrape Bayut.com (UAE #1 property portal), for rent or for sale: price, beds, baths, area, location, coordinates, agency, agent name & phone, photos and listing URL. Search Dubai, Abu Dhabi and more by city, purpose and property type.",
        "version": "1.0",
        "x-build-id": "hByIf7J05t2GRxzNg"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/benthepythondev~bayut-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-benthepythondev-bayut-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/benthepythondev~bayut-scraper/runs": {
            "post": {
                "operationId": "runs-sync-benthepythondev-bayut-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/benthepythondev~bayut-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-benthepythondev-bayut-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": {
                    "searchUrls": {
                        "title": "Bayut search URLs",
                        "type": "array",
                        "description": "One or more Bayut search-results URLs to scrape (most precise). Open Bayut.com, apply your filters (location, price, beds, etc.), copy the address bar and paste it here, e.g. 'https://www.bayut.com/to-rent/apartments/dubai/dubai-marina/'. Each URL is paginated automatically. Leave empty to use the Cities / Purpose fields below instead.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "cities": {
                        "title": "Cities (if not using URLs)",
                        "type": "array",
                        "description": "UAE city or area slugs to search when you are not pasting full URLs, e.g. 'dubai', 'abu-dhabi', 'sharjah', 'ajman'. Combined with the Purpose and Property type fields below to build the search.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "purpose": {
                        "title": "For rent or for sale",
                        "enum": [
                            "for-rent",
                            "for-sale"
                        ],
                        "type": "string",
                        "description": "Whether to scrape listings that are for rent or for sale. Used when building searches from the Cities field (a pasted URL keeps its own purpose).",
                        "default": "for-rent"
                    },
                    "category": {
                        "title": "Property type",
                        "enum": [
                            "",
                            "apartments",
                            "villas",
                            "townhouses",
                            "penthouses",
                            "offices",
                            "shops",
                            "warehouses",
                            "land"
                        ],
                        "type": "string",
                        "description": "Optional property category used when building searches from the Cities field. Leave as 'Any property' to include all types.",
                        "default": ""
                    },
                    "maxResults": {
                        "title": "Max results per search",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum number of listings to return per search URL / city. Keep this small for quick test runs and raise it for full exports.",
                        "default": 50
                    },
                    "proxyCountry": {
                        "title": "Residential proxy country",
                        "type": "string",
                        "description": "Country code for the Apify residential proxy used to clear Bayut's anti-bot. Defaults to AE (United Arab Emirates), which is recommended for reliable access from inside the UAE.",
                        "default": "AE"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
