# Bayut Scraper: Property Listings in Oman, Qatar and Jordan (`themineworks/bayut-scraper`) Actor

Bayut property listings for Oman, Qatar and Jordan, buy and rent: price, size, bedrooms, bathrooms, location path, agent, agency, listing date, amenities, photos and description. Filter by area, type, price and bedrooms. No login.

- **URL**: https://apify.com/themineworks/bayut-scraper.md
- **Developed by:** [The Mine Works](https://apify.com/themineworks) (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.63 / 1,000 listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Bayut Scraper: Property Listings in Oman, Qatar and Jordan

[![30 Bayut listings with descriptions in 28 seconds](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/bayut-scraper-hero.png)](https://console.apify.com/actors/Gae4AnDNZRnsYz3qT/input?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Part of The Mine Works Real estate family:** [Zillow Rentals Scraper](https://apify.com/themineworks/zillow-rental-listings?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Zillow Sold Comps Scraper](https://apify.com/themineworks/zillow-recently-sold?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [India Real Estate MCP](https://apify.com/themineworks/india-real-estate-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Housing.com Scraper](https://apify.com/themineworks/housing-com-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [99acres Scraper](https://apify.com/themineworks/99acres-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [MagicBricks Scraper](https://apify.com/themineworks/magicbricks-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral).

Updated 23 Oct 2026: first release. Bayut.om, Bayut.qa and Bayut.jo listings for sale and for rent, filtered by market, area, property type, price, bedrooms, bathrooms, size, furnishing and completion status, or from a pasted Bayut search link. One flat row per listing. Bookmark this Actor on its Store page so it is one click away next time.

### Why choose this actor?

- **The numbers an agent or analyst compares, in columns.** Price and currency, `price_per_sqm`, bedrooms, bathrooms, area in square metres and square feet, furnishing and completion status, rent period, and the listing, update and reactivation dates as ISO timestamps. Sort a whole search in a spreadsheet without cleaning text.
- **Where it is and who sells it.** The location path (`Oman > Muscat > Qurum`) is also split into `city`, `community`, `sub_community` and `building`, with the pin's `latitude` and `longitude`. Agent name, phone and WhatsApp, the agency, its licences and its verified flag are on the row. Private owners have no agency.
- **Fast, because it reads the search, not the page.** Rows come from the same search index Bayut's own site queries, 100 listings a page with no cap on how deep you can go. 250 Jordan listings took 4 seconds. Oman and Qatar rows also get the full description from the listing page, at the same price.
- **Pay per listing, nothing for errors.** Links that are not Bayut searches, the summary row and duplicates found by two searches are never charged. No Bayut account, cookies or API key.

[![Run it on Apify](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/button-run.png)](https://console.apify.com/actors/Gae4AnDNZRnsYz3qT/input?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

### Which Bayut sites does it cover?

| Site | Market | Currency | Listing description |
|---|---|---|---|
| bayut.om | Oman | OMR | Yes |
| bayut.qa | Qatar | QAR | Yes |
| bayut.jo | Jordan | JOD | No: bayut.jo's robots.txt disallows listing pages, so they are not opened |

**Not covered: bayut.com (UAE) and bayut.sa (Saudi Arabia).** Both put a JavaScript browser check in front of every page and every search request. A plain HTTP actor cannot pass it, and we do not try to get around it, so those two sites are not offered. A link from either site gets an error row and is not charged.

### Try it in one minute

Paste this into the input (JSON view) and press Start. It returns the 30 newest Oman listings for sale with their descriptions. It took 28 seconds in our test run:

```json
{
  "markets": ["oman"],
  "maxItems": 30
}
```

Select several markets to run several searches at once, or paste Bayut search links into `startUrls`. A listing that two searches find is delivered once.

Apify's free plan includes $5 of credit every month, which covers about 6,000 listings at this actor's price.

#### Copy to your AI assistant

```text
themineworks/bayut-scraper on Apify. Searches Bayut property listings in Oman (bayut.om), Qatar (bayut.qa) and Jordan (bayut.jo) and returns one flat row per listing, with no login. Not supported: bayut.com (UAE) and bayut.sa (Saudi Arabia), which sit behind a browser check. Call ApifyClient("TOKEN").actor("themineworks/bayut-scraper").call(run_input={"markets": ["qatar"], "purpose": "for-rent", "locations": ["Doha"], "propertyTypes": ["apartments"], "bedroomsMin": 2, "priceMax": 9000, "maxItems": 200}), then client.dataset(run["defaultDatasetId"]).list_items().items. Input: markets (list of oman, qatar, jordan), startUrls (Bayut search links on those three sites), purpose (for-sale, for-rent, any; default for-sale), locations (names such as Muscat or "Muscat > Qurum", or /muscat/qurum paths), propertyTypes (apartments, villas, residential-lands, chalets, rooms, commercial-properties, commercial-buildings, garages, offices, shops, showrooms, warehouses, commercial-lands, hotel-apartments, residential-buildings, farms), keyword, priceMin, priceMax (local currency), bedroomsMin, bedroomsMax, bathroomsMin, areaMin, areaMax (square metres), furnishing (any, furnished, unfurnished), completion (any, completed, under-construction), rentFrequency (any, yearly, monthly, weekly, daily), sortBy (newest, popular, price_low, price_high), maxItems (default 50, 1 to 20000, per search), includeDescription (default true; Oman and Qatar only). Filters apply to markets; a pasted link carries its own filters. Listing rows have no _type field and carry listing_id, listing_url, market, country, title, purpose, price, currency, price_hidden, rent_frequency, price_per_sqm, property_type, property_category, bedrooms, bathrooms, area_sqm, area_sqft, plot_area_sqm, furnishing_status, completion_status, location_path, city, community, sub_community, building, latitude, longitude, agent_name, agent_phone, agent_whatsapp, agency_name, agency_id, agency_logo, agency_licenses, agency_verified, listing_verified, reference_number, listing_tier, listed_at, updated_at, reactivated_at, amenities, keywords, description, cover_image, images, image_count, video_count, has_floor_plan, search, page, position, scraped_at. Each run also writes one row with _type "summary", one with _type "info" when listings were delivered, and a row with _type "error" for each input that could not be read; none of these is charged. Full spec: GET https://api.apify.com/v2/acts/themineworks~bayut-scraper/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral
```

### Key features

- **Filters that run on Bayut's side.** Buy or rent, location names, property types, price range, bedrooms, bathrooms, area, furnishing, completion status, rent period and a free-text keyword are applied inside the search, so you pay only for listings that match. Sort by newest, most popular, or price in either direction.
- **Or paste a search link.** Copy the address of any `bayut.om`, `bayut.qa` or `bayut.jo` results page, for example `https://www.bayut.om/en/muscat/apartments-for-rent-in-qurm/?price_max=400&beds_in=2`. The city, area, property type, sale or rent, price, bedrooms, bathrooms, size and furnishing in the link are used.
- **Deep results.** A search is not cut off at 1,000 listings. Page 237 of the Jordan results (23,000 or so listings) answered in our test.
- **Photos.** `images` holds a link to every photo at 800 x 600, `cover_image` the first one.
- **Description text.** With `includeDescription` on (the default), each Oman and Qatar listing page is opened for the full description, in the language the advertiser wrote it, often Arabic.
- **Stops cleanly.** Two pages in a row with nothing new end a search; five failed search requests in a row end the run; eight failed listing pages in a row switch descriptions off for the rest of the run, and rows are still delivered. The run stops before its time limit and keeps every row. The summary row says why.

### How to use it

#### New rentals in a city

```json
{
  "markets": ["qatar"],
  "purpose": "for-rent",
  "locations": ["Doha"],
  "propertyTypes": ["apartments"],
  "bedroomsMin": 2,
  "bedroomsMax": 3,
  "priceMax": 9000,
  "sortBy": "newest",
  "maxItems": 300
}
```

Run it on a schedule and compare `listing_id` between runs to see what is new. `updated_at` and `price` show repricing.

#### Price per square metre by area

```json
{
  "markets": ["oman"],
  "purpose": "for-sale",
  "propertyTypes": ["villas"],
  "locations": ["Muscat"],
  "maxItems": 2000,
  "includeDescription": false
}
```

Group the rows on `community` and take the median of `price_per_sqm`. With descriptions off, 100 listings arrive in about 4 seconds.

#### Agent and agency lists

Every row carries `agent_name`, `agent_phone`, `agent_whatsapp`, `agency_name` and `agency_licenses`. Group by `agency_name` to see which agencies hold the most stock in an area, or filter on `agency_verified`.

#### Several searches in one run

```json
{
  "startUrls": [
    "https://www.bayut.om/en/muscat/apartments-for-rent-in-qurm/?price_max=400&beds_in=2",
    "https://www.bayut.qa/en/doha/villas-for-sale/",
    "https://www.bayut.jo/en/amman/apartments-for-sale/"
  ],
  "maxItems": 150
}
```

Each link is its own search, labelled in `search`.

### Input parameters

| Parameter | Type | Default | What it does |
|---|---|---|---|
| `markets` | array | `["oman"]` | `oman`, `qatar`, `jordan`. One search per market, with the filters below. |
| `startUrls` | array of strings | empty | Bayut search links on bayut.om, bayut.qa or bayut.jo. Filters in the link are used; the fields below are not. |
| `purpose` | string | `for-sale` | `for-sale`, `for-rent` or `any`. |
| `locations` | array of strings | empty | City, governorate or area names such as `Muscat`, `Doha`, `Qurum`. `Muscat > Qurum` needs both. A value starting with `/` is a Bayut location path. A listing matching any value is returned. |
| `propertyTypes` | array | empty (all) | `apartments`, `villas`, `residential-lands`, `chalets`, `rooms`, `commercial-properties`, `commercial-buildings`, `garages`, `offices`, `shops`, `showrooms`, `warehouses`, `commercial-lands`, `hotel-apartments`, `residential-buildings`, `farms`. |
| `keyword` | string | empty | Free text, for example `sea view`. |
| `priceMin`, `priceMax` | integer | empty | In the market currency. |
| `bedroomsMin`, `bedroomsMax` | integer | empty | 0 includes studios. |
| `bathroomsMin` | integer | empty | Fewest bathrooms. |
| `areaMin`, `areaMax` | integer | empty | Square metres. |
| `furnishing` | string | `any` | `furnished` or `unfurnished`. |
| `completion` | string | `any` | `completed` or `under-construction`. |
| `rentFrequency` | string | `any` | `yearly`, `monthly`, `weekly`, `daily`. |
| `sortBy` | string | `newest` | `newest`, `popular`, `price_low`, `price_high`. |
| `maxItems` | integer | `50` | Most listings per search (per market or per link), 1 to 20,000. |
| `includeDescription` | boolean | `true` | Opens each Oman and Qatar listing page for the description. Same price either way. |

Give `markets`, `startUrls` or both. Up to 50 searches per run.

### What data do you get?

One row per listing. Listing rows have no `_type` field; the summary, info and error rows do, so a filter on `_type` separates them.

| Field | What it is |
|---|---|
| `listing_id`, `listing_url` | Bayut listing number and the link to the listing |
| `market`, `country` | `oman`, `qatar` or `jordan`, and the country name |
| `title` | Title as the advertiser wrote it |
| `purpose` | `for-sale` or `for-rent` |
| `price`, `currency`, `price_hidden` | Asking price in OMR, QAR or JOD; empty with `price_hidden: true` when the advertiser hides it |
| `rent_frequency` | `yearly`, `monthly`, `weekly`, `daily` for rentals |
| `price_per_sqm` | Price divided by area (for rentals, the rent per period per square metre) |
| `property_type`, `property_category` | e.g. `Apartments` and `Residential` |
| `bedrooms`, `bathrooms` | Counts; 0 bedrooms is a studio |
| `area_sqm`, `area_sqft`, `plot_area_sqm` | Size in square metres, square feet, and the plot where listed |
| `furnishing_status`, `completion_status` | `furnished` / `unfurnished`; `completed` / `under-construction` |
| `location_path` | Full path, country first, e.g. `Oman > Muscat > Qurum` |
| `city`, `community`, `sub_community`, `building` | The path split by level |
| `latitude`, `longitude` | Pin position |
| `agent_name`, `agent_phone`, `agent_whatsapp` | The person who posted the listing and the numbers shown on it |
| `agency_name`, `agency_id`, `agency_logo`, `agency_licenses`, `agency_verified` | The agency; licences as number and authority where Bayut lists them |
| `listing_verified` | Bayut's verified flag for the listing |
| `reference_number` | Agency reference code |
| `listing_tier` | Promotion level such as `premium`, `hot`, `superhot` |
| `listed_at`, `updated_at`, `reactivated_at` | ISO 8601 UTC timestamps |
| `amenities` | Amenities ticked on the listing |
| `keywords` | Search keywords Bayut derives from the listing |
| `description` | Full description (Oman and Qatar, with `includeDescription` on) |
| `cover_image`, `images`, `image_count`, `video_count`, `has_floor_plan` | Photos at 800 x 600 and media counts |
| `search`, `page`, `position` | The market or link that found the listing, its results page, and its place in the search |
| `scraped_at` | When the row was written |

**Summary row** (`_type: "summary"`, never charged): `searches_requested`, `searches_read`, `searches_failed`, `pages_read`, `listings_found`, `listings_delivered`, `charged_for`, `duplicates_skipped`, `details_requested`, `details_ok`, `details_failed`, `http_requests`, `http_megabytes`, `ended_on_deadline`, `stopped_by_max_cost`, `stopped_by_block_guard`, `shortfall_reason` and a `per_search` list with the number of matching listings and why each search stopped.

**Error rows** (`_type: "error"`, never charged): one per input that could not be read, with `error_type` (`invalid_input`, `market_not_supported`, `key_rejected`, `not_found`, `fetch_error`), `identifier`, `reason` and `http_status`.

#### Stable fields for automations

These were present in every listing row of our test runs (454 rows from Oman, Qatar and Jordan), and their names will not change:

| Field | What it is |
|---|---|
| `listing_id` | The key to store and join on |
| `listing_url` | Link to the listing |
| `title` | Listing title |
| `purpose` | Sale or rent |
| `currency` | OMR, QAR or JOD |
| `property_type` | Property type |
| `area_sqm` | Size |
| `location_path` | Where it is |
| `city`, `community` | Location levels 1 and 2 |
| `latitude`, `longitude` | Pin position |
| `agent_name` | Who posted it |
| `listed_at`, `updated_at` | Dates |
| `image_count` | Number of photos |

Optional, present only when Bayut has a value: `price` (99% of test rows; empty when hidden), `bathrooms` (95%), `bedrooms` (86%; lands have none), `agent_phone` (96%), `agency_name` (68%; private owners have none), `furnishing_status` (47%; Jordan rarely sets it), `amenities` (40%), `description` (45% of all test rows; every Oman and Qatar row, no Jordan row), `agent_whatsapp` (15%).

#### Output examples

One Oman listing from the prefill run (23 Oct 2026, trimmed):

```json
{
  "listing_id": "500143060",
  "listing_url": "https://www.bayut.om/en/property/details-500143060.html",
  "market": "oman",
  "country": "Oman",
  "title": "Chalet in Al Masn'a 3 bedrooms 79000 EGP - 500143060",
  "purpose": "for-sale",
  "price": 79000,
  "currency": "OMR",
  "price_hidden": false,
  "price_per_sqm": 65.83,
  "property_type": "Chalets",
  "property_category": "Residential",
  "bedrooms": 3,
  "bathrooms": 6,
  "area_sqm": 1200,
  "area_sqft": 12916.7,
  "furnishing_status": "furnished",
  "completion_status": "completed",
  "location_path": "Oman > Al Batinah > Al Masn'a",
  "city": "Al Batinah",
  "community": "Al Masn'a",
  "latitude": 23.767036530085,
  "longitude": 57.662058994174,
  "agent_name": "User 1LU303",
  "agent_phone": "+96892572579",
  "agency_licenses": [],
  "listing_verified": false,
  "listing_tier": "premium",
  "listed_at": "2026-10-23T10:32:46.000Z",
  "updated_at": "2026-10-23T10:32:46.000Z",
  "amenities": ["Maids Room", "Lawn or Garden", "Private Pool", "Shared Pool", "Centrally Air-Conditioned"],
  "description": "فرصة استثمارية ذهبية: استراحة الأحلام للبيع في المصنعة ...",
  "cover_image": "https://images.bayut.om/thumbnails/10753824-800x600.webp",
  "images": ["https://images.bayut.om/thumbnails/10753824-800x600.webp", "..."],
  "image_count": 10,
  "video_count": 0,
  "has_floor_plan": false,
  "search": "oman",
  "page": 1,
  "position": 1,
  "scraped_at": "2026-10-23T18:14:57.534Z"
}
```

One Jordan listing (no description, listing pages are not opened there):

```json
{
  "listing_id": "109124",
  "listing_url": "https://www.bayut.jo/en/property/details-109124.html",
  "market": "jordan",
  "title": "3 Bedrooms Villas For Sale Naour, Amman",
  "purpose": "for-sale",
  "price": 350000,
  "currency": "JOD",
  "price_per_sqm": 1750,
  "property_type": "Villas",
  "bedrooms": 3,
  "bathrooms": 2,
  "area_sqm": 200,
  "location_path": "Jordan > Amman > Naour",
  "agent_name": "Rania A",
  "listed_at": "2026-10-17T11:35:43.000Z"
}
```

An input the actor cannot use:

```json
{ "_type": "error", "error_type": "market_not_supported", "identifier": "https://www.bayut.com/for-sale/apartments/dubai/", "reason": "bayut.com (UAE) puts a JavaScript browser check in front of every page and search request, which a plain HTTP actor cannot pass, so it is not supported. bayut.om (Oman), bayut.qa (Qatar) and bayut.jo (Jordan) are." }
```

### Pricing

Pay per event: you pay for the listings you receive, plus a flat $0.003 per run, whatever memory you choose. Opening listing pages for descriptions costs nothing extra.

| Event | When it is charged | Free plan | Bronze (Starter) | Silver (Scale) | Gold (Business) |
|---|---|---|---|---|---|
| `listing-scraped` | Once per listing row stored in your dataset | $0.80 per 1,000 | $0.72 per 1,000 | $0.68 per 1,000 | $0.63 per 1,000 |
| `run-start` | Once per run, after the first results page returned listings | $0.003 | $0.003 | $0.003 | $0.003 |

The price of one listing is the price per 1,000 divided by 1,000.

Never charged:

- links that are not Bayut searches, and links from bayut.com or bayut.sa (each gets an error row);
- a listing that a second search of the same run finds again;
- listings past your `maxItems`;
- the summary, info and error rows;
- a run with no valid input, or one whose searches return no listings: the start fee is charged only once a results page has returned listings;
- anything past your "Max cost per run". The actor checks the budget before each batch of rows and stops while the total is still below your limit, so the run ends SUCCEEDED with a partial result and a status message saying so.

### Run it on a schedule

1. Open the actor in Apify Console, set your input and click **Save as a new task**.
2. In the task, open **Schedules**, click **Add schedule** and pick how often (every day, every Monday at 08:00 and so on).
3. Compare runs on `listing_id`, `price` and `updated_at` to see new listings, price changes and listings that disappeared.
4. Optional: add an integration (Google Sheets, Slack, a webhook) so each run lands where your team works.

### FAQ

#### What does this actor read?

Bayut's public search results for Oman, Qatar and Jordan, through the same search service the Bayut sites call from your browser, and, with `includeDescription` on, each Oman and Qatar listing's public page, as anyone sees them without logging in. It does not log in, send enquiries or read anything behind an account. Agent phone numbers are the ones Bayut shows on the listing.

#### Why not the UAE (bayut.com) or Saudi Arabia (bayut.sa)?

Both sites answer every request that does not come from a full browser with a "Security check" page that runs a JavaScript test, including their search service. This actor is plain HTTP and does not try to pass browser checks, so it covers the three Bayut sites that serve their data openly: Oman, Qatar and Jordan.

#### How many listings can I get?

Up to 20,000 per search and 50 searches per run. Oman has about 7,700 live listings, Qatar about 1,500 and Jordan about 23,800 at the time of writing. A search ends when the results end, two pages in a row bring nothing new, or `maxItems` is reached.

#### Why does a row have no price, bedrooms or agency?

`price` is empty when the advertiser hides it (`price_hidden: true`). Lands and commercial plots have no bedrooms. A private owner has no agency, so `agency_name` is empty. Jordan listings rarely state furnishing.

#### Why are some descriptions in Arabic?

The description is the text the advertiser wrote. The title, location and property type are in English; descriptions are not translated.

#### Why is there no description on Jordan rows?

bayut.jo's robots.txt disallows its listing pages (`/property/details*`), so this actor does not open them. Oman and Qatar allow it.

#### What is the difference between includeDescription on and off?

Off, each row comes from the search: everything in the table above except `description`. On, each Oman and Qatar listing page is opened too. On is slower (30 listings took 28 seconds, 120 took about 60 seconds, against 100 listings in about 4 seconds off) and costs the same.

#### Why do I see a listing with a price of 1 or a very small area?

Advertisers sometimes post placeholder values. The rows are delivered as Bayut shows them. Set `priceMin` or `areaMin` to leave them out.

#### How long does a run take?

In our tests: 28 seconds for the "Try it" input (30 listings, descriptions on), 4 seconds for 250 Jordan listings, 95 seconds for 144 listings across a Qatar search and an Oman link with descriptions on.

#### Do I need an account, cookies or a proxy?

No. Search requests go to Bayut's search service directly, and listing pages are read over Apify Proxy, which is included. Nothing to set up.

#### Which actor should I use for other property sites?

[99acres Scraper](https://apify.com/themineworks/99acres-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral) for Indian listings, [Housing.com Scraper](https://apify.com/themineworks/housing-com-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral) for Indian rentals and sales, [Domain Property Scraper](https://apify.com/themineworks/domain-property-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral) for Australia and [Rightmove Scraper](https://apify.com/themineworks/rightmove-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral) for the UK.

#### Which formats can I download?

JSON, CSV, Excel, XML, RSS and HTML from the run's Storage tab or through the API. The dataset has three ready views: Listings, Prices and size, and Agents and agencies. In CSV and Excel, `images`, `amenities` and `agency_licenses` are flattened into columns such as `images/0` and `amenities/0`.

#### Can I use it from Claude, ChatGPT or Cursor (MCP)?

Yes, through Apify's MCP server. Connector URL: https://mcp.apify.com/?tools=themineworks/bayut-scraper

- Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
- ChatGPT: turn on developer mode, add an MCP connector with the URL, sign in with Apify.
- Cursor or VS Code: add it as an HTTP MCP server with that URL.
- Claude Code: `claude mcp add -t http bayut-scraper "https://mcp.apify.com/?tools=themineworks/bayut-scraper"`

#### Is it legal to scrape Bayut?

The actor reads only public listings that anyone can see without logging in. It opens Bayut listing pages only where the site's robots.txt allows it. You are responsible for how you use the data, including Bayut's terms and data protection law such as GDPR and CCPA, especially for the agent names and phone numbers. This is general information, not legal advice.

### Integrations

- **Google Sheets**: send each run's listings to a sheet with Apify's Google Sheets integration; one row per listing fits a sheet as is.
- **Make, Zapier and n8n**: start a run and read its dataset with the Apify apps and nodes, for example "new Doha rentals under 9,000 every Monday to Slack".
- **Webhooks**: have Apify call your URL when a run succeeds, then fetch the dataset.
- **API and SDKs**: run it from Python or JavaScript with the Apify client, or with a plain HTTP call (see "Copy to your AI assistant" above).
- **MCP clients**: Claude, ChatGPT, Cursor and VS Code can run it as a tool through the connector URL in the FAQ.

### More from The Mine Works

**Real estate**

- [Zillow Rentals Scraper](https://apify.com/themineworks/zillow-rental-listings?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Zillow Sold Comps Scraper](https://apify.com/themineworks/zillow-recently-sold?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [India Real Estate MCP](https://apify.com/themineworks/india-real-estate-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Housing.com Scraper](https://apify.com/themineworks/housing-com-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [99acres Scraper](https://apify.com/themineworks/99acres-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [MagicBricks Scraper](https://apify.com/themineworks/magicbricks-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Zillow Property Scraper](https://apify.com/themineworks/zillow-property-details?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Zillow Photos Scraper](https://apify.com/themineworks/zillow-photos?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Real Estate MCP](https://apify.com/themineworks/real-estate-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Airbnb Scraper](https://apify.com/themineworks/airbnb-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Domain.com.au Property Scraper](https://apify.com/themineworks/domain-property-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [realestate.com.au Scraper](https://apify.com/themineworks/realestate-com-au-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Social media and video**

- [Threads Scraper](https://apify.com/themineworks/threads-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Reddit Scraper](https://apify.com/themineworks/reddit-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Threads Search Scraper](https://apify.com/themineworks/threads-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Instagram Profile Scraper](https://apify.com/themineworks/instagram-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Leads and business directories**

- [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Skip Trace Lookup](https://apify.com/themineworks/skip-trace-lookup?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google Maps Email Scraper](https://apify.com/themineworks/maps-leads?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [2GIS Places Scraper](https://apify.com/themineworks/2gis-places-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Marketing, SEO and reviews**

- [Facebook Ad Library Scraper](https://apify.com/themineworks/meta-ad-library-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google Ads Transparency Scraper](https://apify.com/themineworks/google-ads-transparency?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Similarweb Scraper](https://apify.com/themineworks/similarweb-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google News Scraper](https://apify.com/themineworks/google-news?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**LinkedIn**

- [LinkedIn Company Scraper](https://apify.com/themineworks/linkedin-company-details?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Post Scraper](https://apify.com/themineworks/linkedin-post-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Employees Scraper](https://apify.com/themineworks/linkedin-employees?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Profile Scraper](https://apify.com/themineworks/linkedin-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Science, health and government data**

- [Academic Research MCP](https://apify.com/themineworks/academic-research-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [CourtListener Scraper](https://apify.com/themineworks/courtlistener-court-records?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Socrata Open Data Scraper](https://apify.com/themineworks/socrata-open-data?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [OpenAlex Scraper](https://apify.com/themineworks/openalex-scholarly-works?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Jobs and hiring**

- [Foundit Monster India Jobs](https://apify.com/themineworks/foundit-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Hirist Jobs Scraper](https://apify.com/themineworks/hirist-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [India Jobs MCP](https://apify.com/themineworks/india-jobs-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Naukri Jobs Scraper](https://apify.com/themineworks/naukri-jobs?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Company and business data**

- [Company Domain Finder](https://apify.com/themineworks/company-domain-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GST Taxpayer Lookup](https://apify.com/themineworks/gst-taxpayer-lookup?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Company KYB Resolver](https://apify.com/themineworks/company-identity-resolver?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [SEC EDGAR Filings Scraper](https://apify.com/themineworks/sec-edgar-filings?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**E-commerce and marketplaces**

- [Ozon.ru Scraper](https://apify.com/themineworks/ozon-product-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [⭐ Amazon Reviews Scraper](https://apify.com/themineworks/amazon-reviews?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Amazon Product Scraper](https://apify.com/themineworks/amazon-products?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Etsy Listings Scraper](https://apify.com/themineworks/etsy-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Food and local services**

- [NoBroker Scraper](https://apify.com/themineworks/nobroker-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Swiggy Restaurant Scraper](https://apify.com/themineworks/swiggy-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Zomato Scraper](https://apify.com/themineworks/zomato-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Developer and AI tools**

- [Website to Markdown Crawler](https://apify.com/themineworks/rag-crawler?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Skill Finder](https://apify.com/themineworks/github-skill-discovery?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Repo Scraper](https://apify.com/themineworks/github-repo-intelligence?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Trending Scraper](https://apify.com/themineworks/github-trending-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**More tools**

- [G2 Reviews Scraper](https://apify.com/themineworks/g2-reviews-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Naver Blog Scraper](https://apify.com/themineworks/naver-blog-posts-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [WeChat Article Scraper 微信公众号文章](https://apify.com/themineworks/wechat-article-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Taobao Products Scraper 淘宝 天猫](https://apify.com/themineworks/taobao-products-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

### Support

Found a search that returns fewer listings than the site, or a field that comes back empty? Open an issue in the Issues tab with the input and the run ID, and we will look at it. For a field you need or a new source, email dmineworks@gmail.com.

*Search Bayut.om, Bayut.qa and Bayut.jo by market, area, type, price and bedrooms and get every listing back as one row, with price, size, location path, agent, agency, dates, amenities, photos and description, no login.*

# Actor input Schema

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

Which Bayut sites to search: Oman (bayut.om), Qatar (bayut.qa) or Jordan (bayut.jo). Each market is one search, and the filters below apply to every selected market. Leave empty if you only use search links. The UAE (bayut.com) and Saudi Arabia (bayut.sa) are not supported.

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

Bayut search links copied from your browser, for example https://www.bayut.om/en/muscat/apartments-for-rent-in-qurm/ or https://www.bayut.qa/en/doha/villas-for-sale/?price_max=3000000. The city, area, property type, sale or rent, price, bedrooms, bathrooms, size and furnishing in the link are used. The filter fields below apply to markets, not to links.

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

For sale, for rent, or both.

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

City, governorate or area names, one per line, for example Muscat, Doha, Amman or Qurum. A listing matches any of them. Use Muscat > Qurum (or Muscat/Qurum) to require both levels. A value that starts with / is read as a Bayut location path such as /muscat/qurum.

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

Bayut property type names, one per line or picked from the list. Leave empty for all types. Types differ by market: Jordan has offices, showrooms and warehouses; Oman and Qatar group most commercial listings as commercial-properties.

## `keyword` (type: `string`):

Free text matched against the listing, for example sea view, pool or maid room.

## `priceMin` (type: `integer`):

In the market currency (OMR, QAR or JOD). For rentals this is the rent for the period shown on the listing.

## `priceMax` (type: `integer`):

In the market currency (OMR, QAR or JOD).

## `bedroomsMin` (type: `integer`):

0 includes studios.

## `bedroomsMax` (type: `integer`):

Most bedrooms.

## `bathroomsMin` (type: `integer`):

Fewest bathrooms.

## `areaMin` (type: `integer`):

Smallest size in square metres.

## `areaMax` (type: `integer`):

Largest size in square metres.

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

Only furnished or only unfurnished listings.

## `completion` (type: `string`):

Ready properties or properties under construction.

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

For rentals: how the rent is quoted.

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

Order of the results, which decides which listings you get when maxItems is lower than the number of matches.

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

The most listings to return for each market or search link, 1 to 20,000. A results page holds 100 listings. Example: 500.

## `includeDescription` (type: `boolean`):

On: each Oman and Qatar listing page is opened too, to add the full description text. Off: rows come from the search only, which is much faster. Jordan listing pages are never opened, so Jordan rows have no description either way. Same price either way.

## Actor input object example

```json
{
  "markets": [
    "oman"
  ],
  "purpose": "for-sale",
  "furnishing": "any",
  "completion": "any",
  "rentFrequency": "any",
  "sortBy": "newest",
  "maxItems": 30,
  "includeDescription": true
}
```

# Actor output Schema

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

No description

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

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

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

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "markets": [
        "oman"
    ],
    "maxItems": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/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 = {
    "markets": ["oman"],
    "maxItems": 30,
}

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

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

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

```

## CLI example

```bash
echo '{
  "markets": [
    "oman"
  ],
  "maxItems": 30
}' |
apify call themineworks/bayut-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,themineworks/bayut-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Gae4AnDNZRnsYz3qT/builds/RF8JVtbtoTVc0fbpF/openapi.json
