Bayut Scraper | UAE Saudi Egypt Bahrain Qatar
Pricing
from $2.20 / 1,000 results
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
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
2
Monthly active users
3 days ago
Last modified
Categories
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 $50 | Dedicated $100 | Hard target $200–999 | |
|---|---|---|---|
| Site | 1 simple anti-bot public site | 1 medium anti-bot public site | Cloudflare / aggressive anti-bot / custom parser |
| Scope | Full listing + detail fields | Listing + detail + pagination, your field list | Agreed fields, repeatable runs |
| Delivery | CSV/JSON · Apify Actor or standalone runnable client (script/CLI) | Same, plus a sample run and short instructions | Feasibility first, then build |
| Time | 24 hours after we confirm the URL is in scope | 48 hours after confirmation | Quoted after feasibility |
| Fixes | 30 days for small public-layout changes | 30 days | Scoped 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:
- Validates input and mints a market-matched Apify RESIDENTIAL proxy URL
- Calls the hosted bayut-com scrape worker (Patchright CloakBrowser + Algolia/DOM)
- Optionally enriches listing cards with detail-page fields on the worker
- 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 point | Buy | Rent |
|---|---|---|
| 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).
| Field | Type | Meaning |
|---|---|---|
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 = 未验证). |
leadSource | enum | search (SRP card only) or detail (detail-page enriched via scrapeDetails). |
leadReveal | enum | click (phone revealed via "Call" button click on detail/broker page) or absent (SRP-only, no contact data). |
leadAbsences | object | Map 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
telephonein 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.emailsis 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.streetandaddress.unitare always null;leadAbsences.address.street/unit = 本站无. - Social links: Agent and agency pages do not expose personal or agency social media links.
web.socialsis always empty;leadAbsences.web.socials = 本站无. - Agency website: Not consistently exposed on detail pages.
web.websitemay be null;leadAbsences.web.website = 未验证. - SRP-only items: When
scrapeDetails = false, no contact data is available.phones,emails,person, andgeoare empty/null with correspondingleadAbsencesreasons. - 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
phonesis empty andleadAbsences.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
- Property Finder Scraper
- OpenSooq Scraper
- Hepsiemlak Scraper
- Zillow & Zumper Scraper
- Realtor.com Scraper
- Rightmove Scraper
- Idealista Scraper
- ImmoScout24 Scraper
- Funda Scraper
- FINN.no Scraper
- Otodom Scraper
- realestate.com.au Scraper
Prefer another specialized scraper?
Jobs & Freelance
- LinkedIn Jobs Scraper
- Indeed Jobs Scraper
- Upwork Jobs Scraper
- Glassdoor Scraper
- Fiverr Gigs Scraper
- Bayt Jobs Scraper
E-commerce
- Walmart Product Scraper
- Amazon Search Scraper
- Shopee Search Scraper
- Etsy Scraper
- SHEIN Product Scraper
- Temu Product Scraper
- Target Product Scraper
- Allegro Scraper
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)
- Click Try for free
- Choose a market (
AE/SA/EG/BH/QA) - Choose a channel (Buy or Rent)
- Optionally set location, property type, max listings, and whether to open detail pages
- Keep Apify RESIDENTIAL proxy enabled (leave country empty for auto match)
- 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
| Code | Site | Default location | Currency | URL style |
|---|---|---|---|---|
AE | bayut.com | dubai | AED | /for-sale/{type}/{loc}/ |
SA | bayut.sa | riyadh | SAR | /en/for-sale/{type}/{loc}/ |
EG | bayut.eg | cairo | EGP | /en/{loc}/{type}-for-sale/ |
BH | bayut.bh | bahrain | BHD | /en/for-sale/{type}/{loc}/ |
QA | bayut.qa | qatar | QAR | /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.
| Event | Price | When charged |
|---|---|---|
apify-actor-start (Actor Start) | $0.005 | When 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)
| Limit | Free Apify plan | Paid Apify plan |
|---|---|---|
| Runs of this Actor | 10 runs total | Unlimited |
| Results per run | Up to 1,000 | Up 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):
| Scenario | Approx. 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-scraperfor API compatibility; the product covers UAE, Saudi Arabia, Egypt, Bahrain, and Qatar.
Input
| Field | Description |
|---|---|
market / markets | AE, SA, EG, BH, QA, or all |
channel | BUY (for-sale) or RENT (to-rent / for-rent) |
location | Path slug; empty → market default (dubai, riyadh, cairo, …) |
propertyType / propertyTypes | e.g. apartments, villas, office-spaces (property / all = market all-types) |
expandPrimaryCategories | Expand all into primary slugs instead of one all-types URL |
maxItems / maxPages | Caps (1–2000 / 1–100); ≈24 listings per SRP page |
maxMarketConcurrency | Parallel country browser sessions (default 2) |
strictQuality | Fail run if required Dataset fields are missing (default true) |
scrapeDetails | Enrich each card from the listing detail page |
startUrls | Optional SRP or LDP URLs (overrides market/channel/type) |
proxyConfiguration | Apify RESIDENTIAL when the worker does not supply its own proxy |
workerBaseUrl | Advanced: 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:
addressis now a structured object ({street, unit, locality, region, postalCode, country, full}) andagencyhas been replaced by theorgfield. Thefullproperty preserves the original display string for backward compatibility. SRP-only items (scrapeDetails = false) carry the same keys but with emptyphones/emailsandleadReveal = absent.
Is it legal to scrape Bayut?
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
apifyProxyCountryempty so each market uses a matching residential country - Prefer specific
propertyTypevalues when you need a category;property/alluses the market all-types slug - For multi-market runs, leave
locationempty so each market uses its default city - Raise memory only if the browser is unstable — higher memory increases Actor Start event count under PPE
Related Actors
All 77 public Actors from [lentic_clockss]. Click a name to open the Store detail page.
Jobs & Freelance
- LinkedIn Jobs Scraper
- Bayt Jobs Scraper
- Fiverr Gigs Scraper
- Freelancer.com Scraper
- Glassdoor Scraper
- Himalayas Jobs Scraper
- Indeed Jobs Scraper
- Jobicy Remote Jobs Scraper
- RemoteOK Jobs Scraper
- SEEK Jobs Scraper
- Upwork Jobs Scraper
Real Estate
- Zillow & Zumper Scraper
- Realtor.com Scraper
- 99.co Scraper
- Realtor.com Agents Scraper
- Apartments.com Rental Scraper
- Bayut Scraper
- Craigslist Housing Scraper
- Daft.ie Scraper
- Dot Property Scraper
- FINN.no Scraper
- Funda Scraper
- Hepsiemlak Scraper
- Idealista Scraper
- Immobiliare.it Scraper
- ImmoScout24 Scraper
- Naver Land Scraper
- OpenSooq Scraper
- Otodom Scraper
- Property Finder Scraper
- PropertyGuru Scraper
- realestate.com.au Scraper
- Realtor.ca Scraper
- Rightmove Scraper
- SeLoger Scraper
- SUUMO Scraper
- Zillow Group Scraper
E-commerce
- Shopee Search Scraper
- E-commerce Scraper
- 1688 Global Product Search Scraper
- Allegro Scraper
- Amazon Search Scraper
- ASOS Product Scraper
- Cdiscount Product Scraper
- Costco Product Scraper
- Coupang Product Scraper
- Etsy Scraper
- Lazada Scraper
- MercadoLibre Scraper
- Mercari Japan Scraper
- Rakuten Japan Scraper
- SHEIN Product Scraper
- Target Product Scraper
- Temu Product Scraper
- Walmart Product Scraper
Travel & Stays
- Booking.com & Airbnb Scraper
- Agoda Scraper
- Airbnb Listings Scraper
- Booking.com Hotels Scraper
- Despegar Scraper
- Expedia Scraper
- Traveloka Scraper
- Travelstart Flights Scraper
- Trip.com Scraper
- TripAdvisor Scraper
Social & Content
Ads Intelligence
Local & Maps
General Tools
→ Browse the full profile: apify.com/lentic_clockss