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

Bayut Scraper: Property Listings in Oman, Qatar and Jordan

Pricing

from $0.63 / 1,000 listings

Go to Apify Store
Bayut Scraper: Property Listings in Oman, Qatar and Jordan

Bayut Scraper: Property Listings in Oman, Qatar and Jordan

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.

Pricing

from $0.63 / 1,000 listings

Rating

0.0

(0)

Developer

The Mine Works

The Mine Works

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 hours ago

Last modified

Share

30 Bayut listings with descriptions in 28 seconds

Part of The Mine Works Real estate family: Zillow Rentals Scraper, Zillow Sold Comps Scraper, India Real Estate MCP, Housing.com Scraper, 99acres Scraper, MagicBricks Scraper.

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

Which Bayut sites does it cover?

SiteMarketCurrencyListing description
bayut.omOmanOMRYes
bayut.qaQatarQARYes
bayut.joJordanJODNo: 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:

{
"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

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

{
"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

{
"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

{
"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

ParameterTypeDefaultWhat it does
marketsarray["oman"]oman, qatar, jordan. One search per market, with the filters below.
startUrlsarray of stringsemptyBayut search links on bayut.om, bayut.qa or bayut.jo. Filters in the link are used; the fields below are not.
purposestringfor-salefor-sale, for-rent or any.
locationsarray of stringsemptyCity, 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.
propertyTypesarrayempty (all)apartments, villas, residential-lands, chalets, rooms, commercial-properties, commercial-buildings, garages, offices, shops, showrooms, warehouses, commercial-lands, hotel-apartments, residential-buildings, farms.
keywordstringemptyFree text, for example sea view.
priceMin, priceMaxintegeremptyIn the market currency.
bedroomsMin, bedroomsMaxintegerempty0 includes studios.
bathroomsMinintegeremptyFewest bathrooms.
areaMin, areaMaxintegeremptySquare metres.
furnishingstringanyfurnished or unfurnished.
completionstringanycompleted or under-construction.
rentFrequencystringanyyearly, monthly, weekly, daily.
sortBystringnewestnewest, popular, price_low, price_high.
maxItemsinteger50Most listings per search (per market or per link), 1 to 20,000.
includeDescriptionbooleantrueOpens 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.

FieldWhat it is
listing_id, listing_urlBayut listing number and the link to the listing
market, countryoman, qatar or jordan, and the country name
titleTitle as the advertiser wrote it
purposefor-sale or for-rent
price, currency, price_hiddenAsking price in OMR, QAR or JOD; empty with price_hidden: true when the advertiser hides it
rent_frequencyyearly, monthly, weekly, daily for rentals
price_per_sqmPrice divided by area (for rentals, the rent per period per square metre)
property_type, property_categorye.g. Apartments and Residential
bedrooms, bathroomsCounts; 0 bedrooms is a studio
area_sqm, area_sqft, plot_area_sqmSize in square metres, square feet, and the plot where listed
furnishing_status, completion_statusfurnished / unfurnished; completed / under-construction
location_pathFull path, country first, e.g. Oman > Muscat > Qurum
city, community, sub_community, buildingThe path split by level
latitude, longitudePin position
agent_name, agent_phone, agent_whatsappThe person who posted the listing and the numbers shown on it
agency_name, agency_id, agency_logo, agency_licenses, agency_verifiedThe agency; licences as number and authority where Bayut lists them
listing_verifiedBayut's verified flag for the listing
reference_numberAgency reference code
listing_tierPromotion level such as premium, hot, superhot
listed_at, updated_at, reactivated_atISO 8601 UTC timestamps
amenitiesAmenities ticked on the listing
keywordsSearch keywords Bayut derives from the listing
descriptionFull description (Oman and Qatar, with includeDescription on)
cover_image, images, image_count, video_count, has_floor_planPhotos at 800 x 600 and media counts
search, page, positionThe market or link that found the listing, its results page, and its place in the search
scraped_atWhen 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:

FieldWhat it is
listing_idThe key to store and join on
listing_urlLink to the listing
titleListing title
purposeSale or rent
currencyOMR, QAR or JOD
property_typeProperty type
area_sqmSize
location_pathWhere it is
city, communityLocation levels 1 and 2
latitude, longitudePin position
agent_nameWho posted it
listed_at, updated_atDates
image_countNumber 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):

{
"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):

{
"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:

{ "_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.

EventWhen it is chargedFree planBronze (Starter)Silver (Scale)Gold (Business)
listing-scrapedOnce 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-startOnce 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 for Indian listings, Housing.com Scraper for Indian rentals and sales, Domain Property Scraper for Australia and Rightmove Scraper 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"

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

Social media and video

Leads and business directories

Marketing, SEO and reviews

LinkedIn

Science, health and government data

Jobs and hiring

Company and business data

E-commerce and marketplaces

Food and local services

Developer and AI tools

More tools

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.