# Bayutrix — Bayut Scraper | Property, Agency & Broker (`coding-doctor-omar/bayutrix`) Actor

**\[$0.0008/result]** Scrape Bayut (all countries) for high-value real estate data on properties, agencies, and brokers for lead generation, analysis, and automation. Get unlimited results, no limits!

- **URL**: https://apify.com/coding-doctor-omar/bayutrix.md
- **Developed by:** [Omar Ahmed Mohamed Abdelhamid](https://apify.com/coding-doctor-omar) (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 $0.80 / 1,000 property 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

## 🏠 Bayutrix &mdash; Multi-Country Bayut Scraper for Properties, Agencies, and Brokers

<p align="center">
    <img src="https://images.apifyusercontent.com/jxSCooqwPusZbHwOXJOwcKkdAiRuYt-qLOr-WDa3_UQ/cb:1/aHR0cHM6Ly9hcGlmeS1pbWFnZS11cGxvYWRzLXByb2QuczMudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20vOVpGY1BsVEhQM09Cc3hFN0ktYWN0b3ItcVVZOEpKR1Q3U3VMdXpsWTctTWRnUTFRRlRsTS1pY29uLnBuZw.png" width="350" alt="icon photo">
</p>

### Introduction
Bayutrix is your all-in-one gateway to Bayut data — a fast, robust, and multi-country scraper for properties, agencies, and brokers, designed to turn complex real estate listings into structured, actionable data. Bayutrix supports [Egypt](https://www.bayut.eg/en/), [Jordan](https://www.bayut.jo/en), the [UAE](https://www.bayut.com/), [KSA](https://www.bayut.sa/en/), [Kuwait](https://www.bayut.com.kw/en/), [Qatar](https://www.bayut.qa/en/), [Bahrain](https://www.bayut.bh/en/), and [Oman](https://www.bayut.om/en/). It comes with 3 models: Property Locator (for properties), Agency Locator (for agencies), and Broker Locator (for brokers).

### Use Cases

1. **Real Estate Market Research & Comps** 📊 — Pull property listings filtered by location, price range, area, and completion status across Egypt, Jordan, the UAE, KSA, and other supported countries to build pricing models, track market trends, or generate comparable sales data for investors and analysts.

2. **Lead Generation & CRM Enrichment** 📇 — Use the Broker Locator and Agency Locator models to extract verified contact info (email, cell, WhatsApp) for active brokers and agencies, including their service areas and specialities, to build prospect lists for B2B outreach, recruitment, or partnership pipelines.

3. **Competitor & Agency Monitoring** 🔍 — Track a specific agency's full property portfolio with the `agencyName` filter, or pull an agency's licensing (RERA numbers), ads count, and agent roster directly to monitor competitors' inventory size, pricing strategy, and service area coverage over time.

4. **PropTech & Data Aggregation Platforms** 🗂️ — Feed normalized, deduplicated Bayut data (properties, agencies, and brokers) into your own real estate search product, dashboard, or data warehouse, with consistent schema across all 8 supported countries so you don't have to write country-specific parsers.

5. **Due Diligence & Broker Verification** ✅ — Check a broker or agency's credibility signals before a deal — RERA license numbers, `isTruBroker`/`isQualityLister` status, total XP, sale/rent counts, and verification flags — useful for buyers, relocation services, or platforms vetting who they list.

6. **Large-Scale Listing Extraction Beyond Bayut's Limits** 🚀 — Where other scrapers hit Bayut's 50,000-result Algolia cap, use Bayutrix to pull full country- or city-level inventories (e.g. all of Dubai or all of UAE) without manually splitting searches by sub-location yourself — the actor handles the recursive aggregation automatically.

### Features
1. **Multi-Purpose** 🧰 &mdash; Extracts comprehensive property, agency, or broker data, according to your preference.
2. **Intelligent Location Detection** 📍 &mdash; Auto-detects your precise city even if you write only a part of the city's name in the input.
3. **Robust Anti-Bot Bypass** 🛡️ &mdash; Spoofs browser TLS-fingerprints and automatically handles session cookie retrieval and refresh.
4. **Robust Error Handling** 🔁 &mdash; Automatically handles errors gracefully via auto-retries and capped exponential backoff.
5. **Very Fast Scraping** ⚡ &mdash; Retrieves 10s of thousands to 100s of thousands of results within minutes.
6. **Resource-Efficient** ♻️ &mdash; Scrapes via raw HTTP requests to save time, resources, and cost.
7. **Search Results Limit Bypass** 🚀 &mdash; Say goodbye to the 50k limit. Bayutrix knows no limits! It bypasses the limit by auto-aggregating results from sub-city-level children locations of your target location or country.
8. **Auto-Deduplication** 🧹 &mdash; Auto-deduplicates results.
9. **Fine-Grained Customization & Flexibility** 🎛️ &mdash; Allows you to precisely customize the results you want to get through the input form. It allows you to either scrape all available results within your filters or target specific properties, agencies, or brokers (by providing their urls).

### Limits
1. The **Agency Locator** model currently DOES NOT support Kuwait, Bahrain, Oman, and Qatar because Bayut itself does not have an agency search for them.
2. The **Broker Locator** model currently DOES NOT support Kuwait, Bahrain, Jordan, Oman, and Qatar because Bayut itself does not have a broker search for them.
3. For Jordan, agency data WILL NOT include any agents contact info since Bayut currently does not provide such information for Jordan (explained by limit #2).
4. For properties, if the total results for your filters are beyond the standard 50,000 limit imposed by Bayut, unlike most other Actors that only give the 50,000 results, Bayutrix will auto-aggregate from sub-city-level children locations of your target location or country. However, in such cases, the data coverage will be around 98% &ndash; 99%.
5. For agencies, if the total results are beyond the standard 2,000 limit imposed by Bayut, unlike most other Actors that only give the 2,000 results, Bayutrix will auto-aggregate from sub-city-level children locations of your target location or country. However, in such cases, the data coverage will be around 98% &ndash; 99%.

### Actor Input Explanation

<table border="1">
    <thead>
        <tr>
            <th>Field Name (JSON)</th>
            <th>Field Name (Input Form)</th>
            <th>Section Name (Input Form)</th>
            <th>Type</th>
            <th>Required</th>
            <th>Description</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td><code>country</code></td>
            <td>🌍 Country</td>
            <td>📍Location</td>
            <td>string</td>
            <td>Yes</td>
            <td>The country you want to scrape from.</td>
        </tr>
        <tr>
            <td><code>location</code></td>
            <td>Location</td>
            <td>📍Location</td>
            <td>string</td>
            <td>No</td>
            <td>The specific location within the country you want to scrape from (applies to properties and brokers only). Intelligently detects your target city from partial input.</td>
        </tr>
        <tr>
            <td><code>scraperModel</code></td>
            <td>Scraper Model</td>
            <td>⚙️ Scraper Settings</td>
            <td>string</td>
            <td>Yes</td>
            <td>The scraper model to use (e.g. for scraping properties use the 'Property Locator'). Available options are <code>propertyLocator</code>, <code>agencyLocator</code>, and <code>brokerLocator</code>.</td>
        </tr>
        <tr>
            <td><code>maxResults</code></td>
            <td>Max Results</td>
            <td>⚙️ Scraper Settings</td>
            <td>integer</td>
            <td>No</td>
            <td>The maximum results to retrieve. If not specified or set to less than or equal to 0, will retrieve all available results according to your filters.</td>
        </tr>
        <tr>
            <td><code>propertyUrls</code></td>
            <td>Property URLs</td>
            <td>Property Search Filters</td>
            <td>array</td>
            <td>No</td>
            <td>The URLs for the specific properties to scrape. If provided, all other property filters will be ingored.</td>
        </tr>
        <tr>
            <td><code>agencyName</code></td>
            <td>Agency Name</td>
            <td>Property Search Filters</td>
            <td>string</td>
            <td>No</td>
            <td>The name of the specific agency for which to look for properties.</td>
        </tr>
        <tr>
            <td><code>propertyPurpose</code></td>
            <td>Property Purpose</td>
            <td>Property Search Filters</td>
            <td>string</td>
            <td>No</td>
            <td>Specifies whether the property is for sale or for rent.</td>
        </tr>
        <tr>
            <td><code>propertyRentFrequency</code></td>
            <td>Rent Frequency</td>
            <td>Property Search Filters</td>
            <td>string</td>
            <td>No</td>
            <td>Rent frequency (e.g. <code>yearly</code>). Only used with <code>for-rent</code> properties. For better results, do not provide a value for it unless you are scraping <code>for-rent</code> properties.</td>
        </tr>
        <tr>
            <td><code>propertyCompletionStatus</code></td>
            <td>Completion Status</td>
            <td>Property Search Filters</td>
            <td>string</td>
            <td>No</td>
            <td>Specifies whether the property is ready (<code>completed</code>) or off-plan (<code>under-construction</code>).</td>
        </tr>
        <tr>
            <td><code>propertyType</code></td>
            <td>Property Type</td>
            <td>Property Search Filters</td>
            <td>string</td>
            <td>No</td>
            <td>Specifies the property type (e.g. Residential Room, Commercial Office, etc).</td>
        </tr>
        <tr>
            <td><code>bedrooms</code></td>
            <td>Number of Bedrooms</td>
            <td>Property Search Filters</td>
            <td>string</td>
            <td>No</td>
            <td>Number of bedrooms in the property (if applicable). Example options include <code>0</code>, <code>1</code>, <code>2</code>, ... <code>8+</code>.</td>
        </tr>
        <tr>
            <td><code>bathrooms</code></td>
            <td>Number of Bathrooms</td>
            <td>Property Search Filters</td>
            <td>string</td>
            <td>No</td>
            <td>Number of bathrooms in the property (if applicable).</td>
        </tr>
        <tr>
            <td><code>minDownPayment</code></td>
            <td>Minimum Down Payment</td>
            <td>Property Search Filters</td>
            <td>integer</td>
            <td>No</td>
            <td>Minimum Down Payment.</td>
        </tr>
        <tr>
            <td><code>maxDownPayment</code></td>
            <td>Maximum Down Payment</td>
            <td>Property Search Filters</td>
            <td>integer</td>
            <td>No</td>
            <td>Maximum Down Payment.</td>
        </tr>
        <tr>
            <td><code>minPrice</code></td>
            <td>Minimum Price</td>
            <td>Property Search Filters</td>
            <td>integer</td>
            <td>No</td>
            <td>Minimum Price.</td>
        </tr>
        <tr>
            <td><code>maxPrice</code></td>
            <td>Maximum Price</td>
            <td>Property Search Filters</td>
            <td>integer</td>
            <td>No</td>
            <td>Maximum Price.</td>
        </tr>
        <tr>
            <td><code>minArea</code></td>
            <td>Minimum Area (square meters)</td>
            <td>Property Search Filters</td>
            <td>integer</td>
            <td>No</td>
            <td>Minimum Area (in square meters).</td>
        </tr>
        <tr>
            <td><code>maxArea</code></td>
            <td>Maximum Area (square meters)</td>
            <td>Property Search Filters</td>
            <td>integer</td>
            <td>No</td>
            <td>Maximum Area (in square meters).</td>
        </tr>
        <tr>
            <td><code>agencyUrls</code></td>
            <td>Agency URLs</td>
            <td>Agency Search Filters</td>
            <td>array</td>
            <td>No</td>
            <td>The specific agency URLs to scrape. If not provided, all agencies in your chosen country will be scraped.</td>
        </tr>
        <tr>
            <td><code>brokerUrls</code></td>
            <td>Broker URLs</td>
            <td>Broker Search Filters</td>
            <td>array</td>
            <td>No</td>
            <td>The specific broker URLs to scrape. If provided, all other broker filters will be ignored.</td>
        </tr>
        <tr>
            <td><code>brokerCategory</code></td>
            <td>Broker Category</td>
            <td>Broker Search Filters</td>
            <td>string</td>
            <td>No</td>
            <td>Whether to target residential or commercial brokers.</td>
        </tr>
        <tr>
            <td><code>brokerCompletionStatus</code></td>
            <td>Completion Status</td>
            <td>Broker Search Filters</td>
            <td>string</td>
            <td>No</td>
            <td>Determines the completion status of the brokers' listings (e.g. brokers with listings under construction).</td>
        </tr>
    </tbody>
</table>

### Property Locator Model Example Output

```json
{
  "id": 11754025,
  "externalID": "15216667",
  "url": "https://www.bayut.com/property/details-15216667.html",
  "type": "property",
  "title": "Prime Investment | Fast Selling Unit | Don’t Miss Out",
  "location": "Mirage The Oasis; The Oasis by Emaar; Dubai; UAE",
  "latitude": 25.002579983956,
  "longitude": 55.213102854507,
  "state": "active",
  "referenceNumber": "11prop/075",
  "purpose": "for-sale",
  "category": "Residential; Villas",
  "price": 15850000.0,
  "hidePrice": false,
  "lowestDownPaymentPercentage": 10,
  "rentFrequency": null,
  "rooms": 5,
  "baths": 6,
  "area": 949.933584,
  "plotArea": null,
  "completionStatus": "under-construction",
  "furnishingStatus": "unfurnished",
  "occupancyStatus": null,
  "amenities": "Electricity Backup; Swimming Pool; Furnished; Lawn or Garden; Balcony or Terrace; Barbeque Area; Centrally Air-Conditioned; View",
  "keywords": "golf; garden; private; lagoon; lake view; maids; detached; mosque; pool view; terrace; beach; parking; ground; modern; community; canal; maid; private pool; family; pool; sea; spacious; lake",
  "propertyTier": "superhot",
  "isVerified": true,
  "hasProject": true,
  "mobile": "+971503218049",
  "whatsapp": "971545695868",
  "agentName": "Ahmed Cheema",
  "agencyName": "11Prop Realty",
  "coverPhotoUrl": "https://images.bayut.com/thumbnails/838543775-800x600.webp",
  "createdAt": 1779012896.0,
  "updatedAt": 1782048297.0,
  "reactivatedAt": 1779012896.0,
  "scrapedAt": 1782048551.842491
}
````

### Agency Locator Model Example Output

```json
{
  "id": 13,
  "externalID": "6168",
  "url": "https://www.bayut.com/companies/driven-properties-6168/",
  "logoUrl": "https://bayut-production.s3.eu-central-1.amazonaws.com/image/27769554/822a0ada129b4039b81c38d1dedeb2ed",
  "type": "agency",
  "name": "Driven Properties",
  "agencyTier": "featured",
  "isActive": true,
  "isFeatured": true,
  "description": "Established in 2012, Driven Properties has grown into a leading property brokerage, investment, and consultancy company. We offer a full spectrum of innovative and customizable property solutions and wealth management services to clients in the UAE and abroad.   With extensive local and international experience, our dedicated team of real estate agents in Dubai boast a portfolio of commercial, residential, retail, and off-plan properties. Providing a reliable source of information on the properties and market trends, our property consultants are well-versed in the principles of the real estate market, negotiation, market analysis, property management, and ethical conduct.",
  "mainLocation": "Dubai; UAE",
  "latitude": 25.024769324449,
  "longitude": 55.359007938377,
  "licenses": [
    {
      "number": "11917",
      "authority": "RERA"
    },
    {
      "number": "16933",
      "authority": "RERA"
    },
    {
      "number": "31154",
      "authority": "RERA"
    },
    {
      "number": "24825",
      "authority": "RERA"
    }
  ],
  "adsCount": 5792,
  "agentsCount": 393,
  "serviceAreas": "Reem; DAMAC Lagoons; Downtown Dubai; Za'abeel; Jumeirah Lake Towers (JLT); Discovery Gardens; Palm Jumeirah; Dubai World Trade Centre (DWTC); Jumeirah; Barsha Heights (Tecom); Al Barari; The Meadows; Deira; Dubai Marina; Al Furjan; Meydan; The Greens; Dubailand; Living Legends; Dubai Hills Estate; Business Bay; Tilal Al Ghaf; Jumeirah Village Triangle (JVT); Dubai Islands; Jumeirah Village Circle (JVC); Dubai Sports City; Jumeirah Park; Dubai Investment Park (DIP); Dubai Studio City; Mina Al Fajer; Dubai Internet City; Jumeirah Beach Residence (JBR); Expo City; Arjan; Dubai Land Residence Complex (DLRC); Mina Rashid; Mirdif; Jebel Ali; Al Barsha; Liwan; DIFC; Ghaf Woods; Al Khawaneej; Mudon; Haven by Aldar; Arabian Ranches 2; Jumeirah Islands; The Springs; Dubai Design District (D3); Nad Al Sheba; Green Community; Emirates Hills; Arabian Ranches; The Oasis by Emaar; Sheikh Zayed Road; Culture Village (Jaddaf Waterfront); Umm Suqeim; Al Mamzar; Bluewaters Island; Wasl Gate; Dubai Creek Harbour; The Villa; Muhaisnah; The Hills; Motor City; Al Mina; Al Sufouh; Dubai Festival City; DAMAC Hills; Dubai South; The Views; Dubai Maritime City; Majan; Al Quoz; Dubai Silicon Oasis (DSO); Mohammed Bin Rashid City (MBR City); Sobha Hartland 2; Meydan Horizon; Sobha Hartland; Al Satwa; DAMAC Islands; Al Seanneeah; Liwan 2; Jumeirah Heights; The World Islands; Pearl Jumeirah; Bur Dubai; Jumeirah Golf Estates; DAMAC Hills 2 (Akoya by DAMAC); Mina Al Arab; Al Marjan Island; International City; Al Dhait; The Valley by Emaar; Town Square; Al Helio; The Wilds; Al Wasl; The Acres; Arabian Ranches 3; Dubai Production City (IMPZ); City of Arabia; Dubai Harbour; Serena; Al Jaddaf; Athlon by Aldar; Palm Jebel Ali; Dubai Science Park; Umm Al Sheif",
  "categoryTypes": "Hotel Apartments; Townhouses; Penthouses; Buildings; Villas; Apartments; Floors; Plots; Shops; Offices",
  "purposes": "for-sale; for-rent",
  "mainMobileNumber": "+971553658402",
  "mainPhoneNumber": "+97142454898",
  "agentsContactInfo": [
    {
      "name": "Mahmoud Yossif",
      "email": "mahmoud.yossif@drivenproperties.com",
      "cell": "+971526832869",
      "phone": "+97142454800",
      "whatsapp": "+971569988418",
      "proxyPhone": null,
      "proxyMobile": "+971524136535",
      "proxyWhatsapp": "+971545695868"
    },
    {
      "name": "Hassine Harrath",
      "email": "hassine@drivenproperties.com",
      "cell": "+971558237693",
      "phone": "+97142454800",
      "whatsapp": "+971569988418",
      "proxyPhone": "+97148723504",
      "proxyMobile": null,
      "proxyWhatsapp": "+971545695868"
    },
    {
      "name": "Samer Abdallah",
      "email": "samer@drivenproperties.com",
      "cell": "+971554174987",
      "phone": "+97142454800",
      "whatsapp": "+971569988418",
      "proxyPhone": "+97143612391",
      "proxyMobile": null,
      "proxyWhatsapp": "+971545695868"
    },
    {
      "name": "Hassan Jehad",
      "email": "hassan.jehad@drivenproperties.com",
      "cell": "+971523670988",
      "phone": "+97142454800",
      "whatsapp": null,
      "proxyPhone": "+97143680107",
      "proxyMobile": null,
      "proxyWhatsapp": "+971545695868"
    },
    ...
  ]
}
```

### Broker Locator Model Example Output

```json
{
  "id": 1898,
  "externalID": "507296",
  "url": "https://www.bayut.com/brokers/kieran-scarth-507296.html",
  "profilePhotoUrl": "https://bayut-production.s3.eu-central-1.amazonaws.com/image/172559646/85b5a5b209794ecd8d2c8221ebbe3f46",
  "type": "broker",
  "name": "Kieran Scarth",
  "description": "Meet Kieran, originally from Liverpool in the U. K. Kieran has been living in Dubai for the past 7 years and has built a wealth of knowledge and connections within the real estate market. He prides himself on creating long lasting and meaningful relationships by providing an outstanding, bespoke service for each of his clients and fully understanding their needs throughout and beyond their property search. With Kieran, clients will find that communication is key and will be updated throughout the whole buying process from start to finish with a transparent service that you will not find with any other agent. Kieran’s specialist area is Green Community, however, if you have any questions regarding a property search in Dubai he will be more than happy to assist.",
  "agencyName": "Allsopp & Allsopp - JGE",
  "isHighlyResponsive": true,
  "isQualityLister": true,
  "isTruBroker": true,
  "totalXP": 14703,
  "saleCount": 8,
  "rentCount": 0,
  "languages": "English",
  "specialities": "Residential Sales",
  "serviceAreas": "Green Community; Jumeirah Golf Estates",
  "email": "kieran@allsoppandallsopp.com",
  "cell": "+971508928755",
  "phone": "+97144294444",
  "whatsapp": "+97144295577",
  "proxyPhone": null,
  "proxyMobile": "+971528532721",
  "proxyWhatsapp": "+971545695868"
}
```

### Main Pricing Events Explanation

Bayutrix uses a Pay-Per-Event (PPE) pricing model. The details of the prices are shown below.

<table border="1">
    <thead>
        <tr>
            <th>Event Name</th>
            <th>Price</th>
            <th>Description</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td><code>property-result</code></td>
            <td>$0.0008</td>
            <td>A single property result pushed to the dataset.</td>
        </tr>
        <tr>
            <td><code>broker-result</code></td>
            <td>$0.0015</td>
            <td>A single broker result pushed to the dataset.</td>
        </tr>
        <tr>
            <td><code>agency-result</code></td>
            <td>$0.01</td>
            <td>A single agency result pushed to the dataset.</td>
        </tr>
        <tr>
            <td><code>cookie-retrieval</code></td>
            <td>$0.03</td>
            <td>A single session-cookie-retrieval operation.</td>
        </tr>
    </tbody>
</table>

### How to Use Bayutrix (Step-by-Step Guide)

If you are completely new to Apify, don't worry! You don't need any coding experience or a pre-existing setup to run Bayutrix. Just follow these simple steps to start extracting data in minutes:

1. **Create a Free Apify Account** 🆕 — Head over to [Apify.com](https://apify.com/) and click **Sign Up**. You can create a free account in seconds using your email, Google, or GitHub account. No credit card is required to create a free account.
2. **Open the Bayutrix Actor** 🌐 — Navigate to the Bayutrix actor page on the Apify Store. Once there, click the blue **Try for free** button. This will add the actor to your Apify Console workspace.
3. **Configure Your Input Settings** ⚙️ — You will be taken to the **Input** tab where you can customize exactly what you want to scrape:
   - **Select the Country:** Choose your target market (e.g., UAE, Egypt, KSA) from the dropdown menu.
   - **Choose the Scraper Model:** Decide what kind of data you need by selecting the *Property Locator*, *Agency Locator*, or *Broker Locator*.
   - **Apply Filters (Optional):** Narrow down your search by entering a specific location, setting a `maxResults` limit, or adjusting granular filters like price, area, and property type.
4. **Run the Scraper** 🚀 — Click the green **Start** or **Save and Start** button at the bottom left of the screen. The actor will transition to a *Running* state. You can watch the real-time progress in the **Log** tab as Bayutrix navigates the site, bypasses limits, and gathers your data.
5. **Download and Export Your Data** 💾 — Once the run is finished (the status will change to *Succeeded*), go to the **Export** or **Storage** tab. You can instantly preview your data and download it in your preferred format, including **JSON, CSV, Excel, or XML**, ready to be imported into your CRM, database, or spreadsheets!
6. **Automate & Integrate** 🔗 — Take your data pipeline to the next level by connecting Bayutrix to your favorite tools. Apify provides native integrations and webhooks for platforms like **Zapier, Make, Google Sheets, Airbyte, and Keboola**. You can also use the Apify API to schedule automated runs and automatically push the fresh Bayut data directly into your custom dashboards, CRMs, or cloud storage.

### Frequently Asked Questions (FAQs)

1. Does Bayutrix bypass anti-bot measures on the UAE (bayut.com) portal?

   **Answer**: Yes, it spoofs TLS-fingerprints and handles cookie retrieval and refresh automatically.

2. Do I have to narrow down my filters for search results more than 50,000 in properties or more than 2,000 in agencies?

   **Answer**: No, you don't have to do anything at all. Bayutrix will automatically bypass those limits for you by aggregating results from sub-city-level children locations of your target location or country.

3. Does Bayutrix remove duplicates automatically?

   **Answer**: Yes, Bayutrix auto-deduplicates results as they arrive before pushing them into the dataset.

4. Does Bayutrix use a browser for scraping?

   **Answer**: A browser is only used very infrequently to refresh session cookies, but all the actual scraping is done via raw HTTP requests, without a browser.

# Actor input Schema

## `country` (type: `string`):

The country you want to scrape (e.g. Egypt).

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

The specific location to scrape (for properties only). Bayutrix intelligently guesses what you type, but it is recommended to verify the exact city name from Bayut first.

## `scraperModel` (type: `string`):

The scraper model to use (e.g. 'Property Locator', 'Agency Locator').

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

Maximum number of results to return. For unlimited results, use 0.

## `propertyUrls` (type: `array`):

The URLs for the specific properties to scrape. If provided, all other property filters will be ingored.

## `agencyName` (type: `string`):

The name of the specific agency for which to look for properties.

## `propertyPurpose` (type: `string`):

Specifies whether the property is for sale or for rent.

## `propertyRentFrequency` (type: `string`):

Rent frequency (e.g. Yearly). Only used with 'For Rent' properties.

## `propertyCompletionStatus` (type: `string`):

Specifies whether the property is ready or off-plan.

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

Specifies the property type (e.g. Residential Room, Commercial Office, etc).

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

Number of bedrooms in the property (if applicable).

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

Number of bathrooms in the property (if applicable).

## `minDownPayment` (type: `integer`):

Minimum Down Payment.

## `maxDownPayment` (type: `integer`):

Maximum Down Payment.

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

Minimum Price.

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

Maximum Price.

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

Minimum Area (in square meters).

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

Maximum Area (in square meters).

## `agencyUrls` (type: `array`):

The specific agency URLs to scrape. If not provided, all agencies in your chosen country will be scraped.

## `brokerUrls` (type: `array`):

The specific broker URLs to scrape. If provided, all other broker filters will be ignored.

## `brokerCategory` (type: `string`):

Whether to target residential or commercial brokers.

## `brokerCompletionStatus` (type: `string`):

Determines the completion status of the brokers' listings (e.g. brokers with listings under construction).

## Actor input object example

```json
{
  "country": "eg",
  "location": "",
  "scraperModel": "propertyLocator",
  "maxResults": 50,
  "propertyUrls": [],
  "propertyPurpose": "any",
  "propertyRentFrequency": "any",
  "propertyCompletionStatus": "all",
  "propertyType": "any",
  "minDownPayment": 0,
  "minPrice": 0,
  "minArea": 0,
  "agencyUrls": [],
  "brokerUrls": [],
  "brokerCategory": "total",
  "brokerCompletionStatus": "any"
}
```

# 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 = {
    "country": "eg",
    "scraperModel": "propertyLocator",
    "maxResults": 50,
    "propertyPurpose": "any",
    "propertyRentFrequency": "any",
    "propertyCompletionStatus": "all",
    "propertyType": "any"
};

// Run the Actor and wait for it to finish
const run = await client.actor("coding-doctor-omar/bayutrix").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 = {
    "country": "eg",
    "scraperModel": "propertyLocator",
    "maxResults": 50,
    "propertyPurpose": "any",
    "propertyRentFrequency": "any",
    "propertyCompletionStatus": "all",
    "propertyType": "any",
}

# Run the Actor and wait for it to finish
run = client.actor("coding-doctor-omar/bayutrix").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 '{
  "country": "eg",
  "scraperModel": "propertyLocator",
  "maxResults": 50,
  "propertyPurpose": "any",
  "propertyRentFrequency": "any",
  "propertyCompletionStatus": "all",
  "propertyType": "any"
}' |
apify call coding-doctor-omar/bayutrix --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Bayutrix — Bayut Scraper | Property, Agency & Broker",
        "description": "**[$0.0008/result]** Scrape Bayut (all countries) for high-value real estate data on properties, agencies, and brokers for lead generation, analysis, and automation. Get unlimited results, no limits!",
        "version": "0.0",
        "x-build-id": "zIYJgxi6N6xenveD1"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/coding-doctor-omar~bayutrix/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-coding-doctor-omar-bayutrix",
                "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/coding-doctor-omar~bayutrix/runs": {
            "post": {
                "operationId": "runs-sync-coding-doctor-omar-bayutrix",
                "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/coding-doctor-omar~bayutrix/run-sync": {
            "post": {
                "operationId": "run-sync-coding-doctor-omar-bayutrix",
                "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": [
                    "country",
                    "scraperModel"
                ],
                "properties": {
                    "country": {
                        "title": "🌍 Country",
                        "enum": [
                            "eg",
                            "jo",
                            "ae",
                            "sa",
                            "kw",
                            "qa",
                            "bh",
                            "om"
                        ],
                        "type": "string",
                        "description": "The country you want to scrape (e.g. Egypt).",
                        "default": "eg"
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "The specific location to scrape (for properties only). Bayutrix intelligently guesses what you type, but it is recommended to verify the exact city name from Bayut first.",
                        "default": ""
                    },
                    "scraperModel": {
                        "title": "Scraper Model",
                        "enum": [
                            "propertyLocator",
                            "agencyLocator",
                            "brokerLocator"
                        ],
                        "type": "string",
                        "description": "The scraper model to use (e.g. 'Property Locator', 'Agency Locator').",
                        "default": "propertyLocator"
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "type": "integer",
                        "description": "Maximum number of results to return. For unlimited results, use 0.",
                        "default": 50
                    },
                    "propertyUrls": {
                        "title": "Property URLs",
                        "type": "array",
                        "description": "The URLs for the specific properties to scrape. If provided, all other property filters will be ingored.",
                        "default": [],
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "agencyName": {
                        "title": "Agency Name",
                        "type": "string",
                        "description": "The name of the specific agency for which to look for properties."
                    },
                    "propertyPurpose": {
                        "title": "Property Purpose",
                        "enum": [
                            "any",
                            "for-sale",
                            "for-rent"
                        ],
                        "type": "string",
                        "description": "Specifies whether the property is for sale or for rent.",
                        "default": "any"
                    },
                    "propertyRentFrequency": {
                        "title": "Rent Frequency",
                        "enum": [
                            "any",
                            "daily",
                            "weekly",
                            "monthly",
                            "yearly"
                        ],
                        "type": "string",
                        "description": "Rent frequency (e.g. Yearly). Only used with 'For Rent' properties.",
                        "default": "any"
                    },
                    "propertyCompletionStatus": {
                        "title": "Completion Status",
                        "enum": [
                            "all",
                            "completed",
                            "under-construction"
                        ],
                        "type": "string",
                        "description": "Specifies whether the property is ready or off-plan.",
                        "default": "all"
                    },
                    "propertyType": {
                        "title": "Property Type",
                        "enum": [
                            "any",
                            "residential",
                            "apartments",
                            "villas",
                            "duplexes",
                            "penthouses",
                            "chalets",
                            "townhouses",
                            "twin-houses",
                            "rooms",
                            "lands",
                            "residential-buildings",
                            "ivillas",
                            "hotel-apartments",
                            "cabins",
                            "roofs",
                            "other-residential-properties",
                            "commercial",
                            "offices",
                            "commercial-buildings",
                            "warehouses",
                            "clinics",
                            "factories",
                            "garages",
                            "restaurants-and-cafes",
                            "retail",
                            "agricultural-lands",
                            "industrial",
                            "commercial-lands",
                            "pharmacy",
                            "commercial-roofs",
                            "medical-facilities",
                            "showrooms",
                            "co-working-spaces",
                            "commercial-properties"
                        ],
                        "type": "string",
                        "description": "Specifies the property type (e.g. Residential Room, Commercial Office, etc).",
                        "default": "any"
                    },
                    "bedrooms": {
                        "title": "Number of Bedrooms",
                        "enum": [
                            "0",
                            "1",
                            "2",
                            "3",
                            "4",
                            "5",
                            "6",
                            "7",
                            "8+"
                        ],
                        "type": "string",
                        "description": "Number of bedrooms in the property (if applicable)."
                    },
                    "bathrooms": {
                        "title": "Number of Bathrooms",
                        "enum": [
                            "1",
                            "2",
                            "3",
                            "4",
                            "5",
                            "6+"
                        ],
                        "type": "string",
                        "description": "Number of bathrooms in the property (if applicable)."
                    },
                    "minDownPayment": {
                        "title": "Minimum Down Payment",
                        "type": "integer",
                        "description": "Minimum Down Payment.",
                        "default": 0
                    },
                    "maxDownPayment": {
                        "title": "Maximum Down Payment",
                        "type": "integer",
                        "description": "Maximum Down Payment."
                    },
                    "minPrice": {
                        "title": "Minimum Price",
                        "type": "integer",
                        "description": "Minimum Price.",
                        "default": 0
                    },
                    "maxPrice": {
                        "title": "Maximum Price",
                        "type": "integer",
                        "description": "Maximum Price."
                    },
                    "minArea": {
                        "title": "Minimum Area (square meters)",
                        "type": "integer",
                        "description": "Minimum Area (in square meters).",
                        "default": 0
                    },
                    "maxArea": {
                        "title": "Maximum Area (square meters)",
                        "type": "integer",
                        "description": "Maximum Area (in square meters)."
                    },
                    "agencyUrls": {
                        "title": "Agency URLs",
                        "type": "array",
                        "description": "The specific agency URLs to scrape. If not provided, all agencies in your chosen country will be scraped.",
                        "default": [],
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "brokerUrls": {
                        "title": "Broker URLs",
                        "type": "array",
                        "description": "The specific broker URLs to scrape. If provided, all other broker filters will be ignored.",
                        "default": [],
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "brokerCategory": {
                        "title": "Broker Category",
                        "enum": [
                            "total",
                            "residential",
                            "commercial"
                        ],
                        "type": "string",
                        "description": "Whether to target residential or commercial brokers.",
                        "default": "total"
                    },
                    "brokerCompletionStatus": {
                        "title": "Completion Status",
                        "enum": [
                            "any",
                            "completed",
                            "under-construction"
                        ],
                        "type": "string",
                        "description": "Determines the completion status of the brokers' listings (e.g. brokers with listings under construction).",
                        "default": "any"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
