Bayut Scraper | UAE Saudi Egypt Bahrain Qatar avatar

Bayut Scraper | UAE Saudi Egypt Bahrain Qatar

Pricing

from $2.20 / 1,000 results

Go to Apify Store
Bayut Scraper | UAE Saudi Egypt Bahrain Qatar

Bayut Scraper | UAE Saudi Egypt Bahrain Qatar

Scrape Bayut UAE, Saudi Arabia, Egypt, Bahrain & Qatar listings for sale or rent. Extract prices, beds, agency & photos. Bayut API alternative.

Pricing

from $2.20 / 1,000 results

Rating

0.0

(0)

Developer

kane liu

kane liu

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

2

Monthly active users

3 days ago

Last modified

Share

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

This Actor is a practical Bayut API alternative for market research, investor screening, rental comps, and lead lists. Choose a market such as UAE or Saudi Arabia, pick Buy or Rent, and get listing rows with prices, beds, baths, area, agency, verification, amenities, and photos when present on the detail page.

  • Pull homes for sale and apartments for rent from Bayut UAE, Saudi Arabia, Egypt, Bahrain, and Qatar
  • Enrich search results with detail-page fields (description, amenities, off-plan / payment plans, media)
  • Filter by property type (apartments, villas, office-spaces, …) — or paste known search / detail URLs
  • Export to Excel / CSV / JSON, or connect Make, n8n, Zapier, Python, or MCP
  • Pay per event — Actor start + each Dataset listing; no subscription

Need a dedicated scraper for one website?

This Actor is the general tool for protected public pages. If you already have one specific site and a field list, a dedicated scraper is faster and more stable: listing + detail, your export format, delivered to your Apify account or as a standalone runnable client.

I confirm the tier before you pay. The clock starts after that confirmation.

Start here: Submit a custom scraper request

Starter $50Dedicated $100Hard target $200–999
Site1 simple anti-bot public site1 medium anti-bot public siteCloudflare / aggressive anti-bot / custom parser
ScopeFull listing + detail fieldsListing + detail + pagination, your field listAgreed fields, repeatable runs
DeliveryCSV/JSON · Apify Actor or standalone runnable client (script/CLI)Same, plus a sample run and short instructionsFeasibility first, then build
Time24 hours after we confirm the URL is in scope48 hours after confirmationQuoted after feasibility
Fixes30 days for small public-layout changes30 daysScoped in the quote

Hard-target sites are not a 100% uptime promise. You get a dedicated parser that can be re-run on the agreed fields. If the URL is not feasible, you get a refund or pay an assessment fee only — you will know before the build starts.

Not in Starter/Dedicated: login-walled data, native APK / Windows installer / full web apps, or two-year maintenance. Those are a separate quote.


What does the Bayut Scraper do?

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

Under the hood, the Actor:

  1. Validates input and mints a market-matched Apify RESIDENTIAL proxy URL
  2. Calls the hosted bayut-com scrape worker (Patchright CloakBrowser + Algolia/DOM)
  3. Optionally enriches listing cards with detail-page fields on the worker
  4. Writes normalized records to the Dataset for Excel / CSV / JSON export

Residential proxy matched to the market is recommended. Plain HTTP / curl is blocked by Bayut Captcha on most hosts.


What data can you extract from Bayut?

Data pointBuyRent
Title & listing URL
List price or rent + period
Beds / baths / size (sqm)
Property type & purpose
Market + currency
Address / location tree
GPS coordinates (when shown)
Agency / contact availability
Verification / product labels
Amenities & photo gallery
Off-plan / payment plans
Completion / furnished

Every Dataset row also includes scrapedAt and source = bayut. An OUTPUT / RUN_SUMMARY record in the key-value store reports counts and warnings.

Lead & contact fields

Each Dataset row carries structured lead/contact fields following the lead-output schema. Detail-page items (leadSource = detail) carry richer contact data than SRP-only items (leadSource = search).

FieldTypeMeaning
phones[{value, type, e164?}]Agent/agency phone numbers. On detail pages, revealed via a "Call" / "اتصال" button click — the number is preloaded in page data, so the click only toggles DOM display (no XHR). SRP-only items have empty phones with leadAbsences.phones explaining why.
emails[{value, type}]Contact email addresses. Bayut gates email behind a contact/lead form (no mailto: link), so emails is always empty and leadAbsences.emails = 闸门锁.
address{street, unit, locality, region, postalCode, country, full}Listing location. unit = 门牌 (building/apartment number). Bayut listings are area-level — locality and region are populated on detail pages, but street and unit are always null (leadAbsences.address.street/unit = 本站无). full is a comma-joined display string.
geo{lat, lng}GPS coordinates from JSON-LD GeoCoordinates on detail pages. SRP-only items have geo = null (leadAbsences.geo = 未验证).
person{name, role}Agent/contact name from window.state contactName and JSON-LD RealEstateAgent.name (e.g. "Find my Agent"). SRP-only items have person = null (leadAbsences.person = 未验证).
org{name, id}Agency/brokerage name and ID from window.state agency.name and JSON-LD Organization.name (e.g. "View all properties", id "6585"). May appear on SRP cards.
web{website, socials[]}Agency website and social media links. Bayut agent/agency pages do not expose website or socials (leadAbsences.web.socials = 本站无, web.website = 未验证).
leadSourceenumsearch (SRP card only) or detail (detail-page enriched via scrapeDetails).
leadRevealenumclick (phone revealed via "Call" button click on detail/broker page) or absent (SRP-only, no contact data).
leadAbsencesobjectMap of missing lead subfields to reason. Values use 本站无 (site doesn't have it), 闸门锁 (login/contact-form gate), or 未验证 (not tested on this item).

Reveal cost

  • Detail pages (scrapeDetails = true): The worker opens each listing's detail page and clicks the "Call" / "اتصال" button to reveal the phone number. The number is preloaded in page data — the click only toggles DOM display, so no additional XHR is fired. Each detail page load adds one browser navigation (~2–5 s with proxy).
  • Broker/company pages: AE broker pages expose telephone in JSON-LD (already visible, no click needed). SA broker pages require a click-reveal "اتصال" button (also preloaded, no XHR).
  • SRP-only items (scrapeDetails = false): No reveal cost — contact data is not available on search result pages.
  • Run time impact: Detail enrichment adds one page load per listing. For 100 listings with scrapeDetails = true, expect roughly 100 additional page loads.

Honest limitations

  • Emails: Bayut gates all email contact behind a contact/lead form. No mailto: link or plain-text email is exposed on any page. emails is always empty; leadAbsences.emails = 闸门锁.
  • Address street/unit (门牌): Bayut listings show area-level location (locality, region, country) but never a street address or building/apartment number. address.street and address.unit are always null; leadAbsences.address.street/unit = 本站无.
  • Social links: Agent and agency pages do not expose personal or agency social media links. web.socials is always empty; leadAbsences.web.socials = 本站无.
  • Agency website: Not consistently exposed on detail pages. web.website may be null; leadAbsences.web.website = 未验证.
  • SRP-only items: When scrapeDetails = false, no contact data is available. phones, emails, person, and geo are empty/null with corresponding leadAbsences reasons.
  • Phone click-reveal: The "Call" button only toggles DOM display of a preloaded number — it does not fire an XHR or submit a form. Some listings have no agent associated, in which case phones is empty and leadAbsences.phones = 未验证.

Why scrape Bayut property listings?

Market research and comps

Build sale and rent comps for Dubai, Riyadh, Cairo, Bahrain, and Qatar without copy-pasting from the site.

Investor and off-plan screening

Track prices, completion status, and payment-plan summaries when Bayut exposes them on the detail page.

Lead lists and agency coverage

Collect public agency names, listing URLs, and contact-method availability (without clicking Call / WhatsApp / Email).

Automations and AI agents

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


More Actors like this

Looking for another property portal, or a scraper outside real estate? Use a specialized Actor when one exists — structured fields, better coverage, usually lower cost. Use this Actor for Bayut sale / rent listings across UAE, Saudi Arabia, Egypt, Bahrain, and Qatar.

Similar real estate Actors

Prefer another specialized scraper?

Jobs & Freelance

E-commerce

Travel & Stays

Social & Content

Ads Intelligence

Local & Maps

General Tools

→ See the full catalog in Related Actors below, or browse apify.com/lentic_clockss.


How to scrape Bayut (no code required)

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

Start with maxItems: 5–10 and scrapeDetails: false to verify, then scale up.


Markets covered

CodeSiteDefault locationCurrencyURL style
AEbayut.comdubaiAED/for-sale/{type}/{loc}/
SAbayut.sariyadhSAR/en/for-sale/{type}/{loc}/
EGbayut.egcairoEGP/en/{loc}/{type}-for-sale/
BHbayut.bhbahrainBHD/en/for-sale/{type}/{loc}/
QAbayut.qaqatarQAR/en/for-sale/{type}/{loc}/

Use markets: ["BH", "QA"] or market: "all" for multi-country runs (maxItems is fair-split). Jordan, Oman, and Kuwait are out of scope for now.


Pricing — how much does it cost to scrape Bayut?

Pay per event. No subscription.

EventPriceWhen charged
apify-actor-start (Actor Start)$0.005When a normal run starts (scaled by allocated memory GB; min 1 event)
apify-default-dataset-item (result)$2.50 / 1,000 ($0.0025 each)Each listing written to the default Dataset

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

Free Apify plan limits (set by this Actor's developer)

LimitFree Apify planPaid Apify plan
Runs of this Actor10 runs totalUnlimited
Results per runUp to 1,000Up to schema max (2,000)

When the run cap is hit, the run finishes with a clear status message — not an Apify platform error. These limits are set by the Actor developer, not Apify.

Example product charges (events only):

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

Platform usage (especially residential proxy + browser memory) is separate and depends on run duration and memory. Default memory is 2048 MB (≈ 2× Actor Start events under PPE).

Note: The Actor path remains bayut-uae-scraper for API compatibility; the product covers UAE, Saudi Arabia, Egypt, Bahrain, and Qatar.


Input

FieldDescription
market / marketsAE, SA, EG, BH, QA, or all
channelBUY (for-sale) or RENT (to-rent / for-rent)
locationPath slug; empty → market default (dubai, riyadh, cairo, …)
propertyType / propertyTypese.g. apartments, villas, office-spaces (property / all = market all-types)
expandPrimaryCategoriesExpand all into primary slugs instead of one all-types URL
maxItems / maxPagesCaps (1–2000 / 1–100); ≈24 listings per SRP page
maxMarketConcurrencyParallel country browser sessions (default 2)
strictQualityFail run if required Dataset fields are missing (default true)
scrapeDetailsEnrich each card from the listing detail page
startUrlsOptional SRP or LDP URLs (overrides market/channel/type)
proxyConfigurationApify RESIDENTIAL when the worker does not supply its own proxy
workerBaseUrlAdvanced: per-run worker origin override (default: Actor env WORKER_BASE_URL)

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

Worker host migrations: update Actor env WORKER_BASE_URL (and WORKER_AUTH if the API key changed) — no Actor code change required.


Output example

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

{
"id": 11786692,
"listingId": "11786692",
"externalId": "11786692",
"url": "https://www.bayut.com/property/details-11786692.html",
"source": "bayut",
"market": "AE",
"channel": "BUY",
"title": "Spacious 2 Bedroom Apartment in Downtown Dubai",
"price": "AED 2,100,000",
"priceAmount": 2100000,
"currency": "AED",
"numBedrooms": 2,
"numBathrooms": 2,
"propertyType": "Apartments",
"size": 115.5,
"sizeUnit": "sqm",
"address": "Downtown Dubai · Dubai",
"agency": { "name": "Example Realty" },
"scrapedAt": "2026-07-19T04:00:00+00:00"
}

Detail-enriched item (scrapeDetails = true) with lead/contact fields:

{
"id": 11786692,
"listingId": "11786692",
"url": "https://www.bayut.com/property/details-11786692.html",
"source": "bayut",
"market": "AE",
"channel": "BUY",
"title": "Spacious 2 Bedroom Apartment in Arjan",
"price": "AED 2,100,000",
"priceAmount": 2100000,
"currency": "AED",
"numBedrooms": 2,
"numBathrooms": 2,
"propertyType": "Apartments",
"size": 115.5,
"sizeUnit": "sqm",
"address": {
"street": null,
"unit": null,
"locality": "Arjan",
"region": "Dubai",
"postalCode": null,
"country": "AE",
"full": "Arjan, Dubai, AE"
},
"phones": [
{ "value": "+971588282659", "type": "mobile", "e164": "+971588282659" }
],
"emails": [],
"geo": { "lat": 25.060528, "lng": 55.240686 },
"person": { "name": "Find my Agent", "role": "agent" },
"org": { "name": "View all properties", "id": "6585" },
"web": { "website": null, "socials": [] },
"leadSource": "detail",
"leadReveal": "click",
"leadAbsences": {
"emails": "闸门锁 (contact form, 无 mailto: 真实邮箱)",
"address.street": "本站无 (listing 地址 area-level, 无门牌号)",
"address.unit": "本站无 (listing 地址 area-level, 无门牌号)",
"web.socials": "本站无 (agent/agency 本站无社交)",
"web.website": "未验证 (detail 页无 agency website)"
},
"scrapedAt": "2026-08-19T18:38:32+00:00"
}

Note: address is now a structured object ({street, unit, locality, region, postalCode, country, full}) and agency has been replaced by the org field. The full property preserves the original display string for backward compatibility. SRP-only items (scrapeDetails = false) carry the same keys but with empty phones/emails and leadReveal = absent.


Our scrapers are ethical and do not extract private user data such as emails, phone numbers from lead forms, or WhatsApp chats. They only extract what is publicly shown on listing pages. Personal data may still appear in public listing text; personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason. If you are unsure, consult your lawyers. Always respect Bayut’s Terms of Use and robots rules for automated access.

This Actor does not submit contact forms, send WhatsApp messages, make phone calls, or interact with lead-conversion CTAs. To reveal publicly displayed phone numbers on detail pages, the worker clicks the "Call" / "اتصال" button — this only toggles DOM display of a number already preloaded in the page (no XHR, no form submission, no actual call).


FAQ

Can I scrape Bayut UAE apartments for sale?

Yes. Set market to AE, channel to BUY, location to dubai (or another slug), and propertyType to apartments.

Can I scrape Bayut Saudi Arabia or Egypt?

Yes. Use market: "SA" (default location riyadh) or market: "EG" (default location cairo). Egypt uses SEO URLs such as /en/cairo/apartments-for-rent/.

Does this work as a Bayut API?

There is no official public Bayut listings API for this use case. This Actor is a practical Bayut API alternative that returns structured Dataset rows you can call via the Apify API, schedules, or integrations.

Why do I need a residential proxy?

Bayut challenges non-browser and many datacenter IPs with Captcha. Apify RESIDENTIAL proxies matched to the market country are strongly recommended.

What about Live View / Standby?

Standby mode exposes operational endpoints only (/, /health, /input-example, /openapi.json) — documented in the Standby tab. It does not run a full scrape. Always start a normal Actor run to collect listings.

Can I request Jordan / Oman / Kuwait?

Not yet. Those markets raise a clear input validation error (JO / OM / KW). Supported markets: AE, SA, EG, BH, QA.

Why did my free-plan run stop after 10 runs?

This Actor allows 10 runs and up to 1,000 listings per run for free Apify plan users. That policy is set by the Actor developer (not Apify). Upgrade to a paid Apify plan for unlimited runs. The run ends with status message FREE_TIER_LIMIT — it is not a platform crash.

Where can I get help?

Open an Issue on the Actor page in Apify Console with the Run ID, input JSON, and a short description of the failure. Include whether Captcha or empty results appeared in the log.


Tips for better Bayut scraping

  • Start small (maxItems: 5, scrapeDetails: false) to validate a market before large runs
  • Leave apifyProxyCountry empty so each market uses a matching residential country
  • Prefer specific propertyType values when you need a category; property / all uses the market all-types slug
  • For multi-market runs, leave location empty so each market uses its default city
  • Raise memory only if the browser is unstable — higher memory increases Actor Start event count under PPE

All 77 public Actors from [lentic_clockss]. Click a name to open the Store detail page.

Jobs & Freelance

Real Estate

E-commerce

Travel & Stays

Social & Content

Ads Intelligence

Local & Maps

General Tools

→ Browse the full profile: apify.com/lentic_clockss