Bayut UAE Real Estate Scraper avatar

Bayut UAE Real Estate Scraper

Pricing

from $8.00 / 1,000 result row emitteds

Go to Apify Store
Bayut UAE Real Estate Scraper

Bayut UAE Real Estate Scraper

Scrape normalized property listings from Bayut, the UAE's top real-estate portal — one row per listing with price, specs, geo-location, agency/agent details, DLD permit number, verification status, and amenities. Search by URL, purpose, location, or custom polygon.

Pricing

from $8.00 / 1,000 result row emitteds

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a month ago

Last modified

Categories

Share


🎯 What this scrapes

Bayut is the UAE's #1 property portal — Dubai, Abu Dhabi, Sharjah and every other emirate list for-sale and to-rent properties there first. This Actor wraps Bayut's own listing data directly, writing one structured row per property: price, bed/bath count, floor area, precise geo-coordinates, agency and agent details, TruCheck verification status, and photo count straight from the search results — no extra page fetch, no extra cost. Search by purpose + location, a custom polygon boundary, or direct search URLs.

🔥 What we handle for you

  • 🛡️ Browser fingerprint rotation — curl-cffi impersonates real Chrome / Firefox / Safari TLS handshakes so the target sees a browser, not Python.
  • 🌐 Residential proxy rotation via Apify Proxy — fresh session and exit IP on every block.
  • 🔁 Retries with exponential backoff on 408 / 429 / 5xx — up to 5 attempts per page, Retry-After honoured.
  • 🧱 Rate-limit-aware pacing — when the target pushes back, we slow down instead of getting banned.
  • 🧊 Clean, typed dataset rows — Pydantic-validated, ISO-8601 timestamps, stable IDs, JSON / CSV / Excel export straight from the Apify Console.
  • 💰 Pay-Per-Event pricing — you only pay for results that hit your dataset. No data, no charge.

💡 Use cases

  • Investor deal screening — pull every for-sale listing in a target area with price, size, and price-per-sqft inputs to spot underpriced units fast.
  • Rental market tracking — snapshot to-rent listings across an emirate to build price-per-sqft benchmarks.
  • Agency/agent lead lists — collect agency names, agent names, and (optionally) public phone numbers behind active listings.
  • Polygon-bound area research — draw a custom boundary instead of picking a fixed emirate/area slug for hyper-local coverage.

⚙️ How to use it

  1. Click Try for free at the top of the page.
  2. Fill in the input form — most fields have sensible defaults.
  3. Click Start. Output streams into the run's dataset.
  4. Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.

📥 Input

FieldTypeRequiredDefaultNotes
searchUrlsarrayno'—'Direct Bayut search URLs to scrape as-is, e.g. https://www.bayut.com/for-sale/apartments/dubai/downtown-dubai/. Up to 50
purposestringno'for-sale'Sale vs. rent listings. Required (together with Location) if Search URLs and Polygon are unset.
propertyTypestringno'apartments'Bayut's own property-type vocabulary.
locationstringno'dubai/downtown-dubai'Emirate/area path slug, e.g. dubai/downtown-dubai. Required (together with Purpose) if Search URLs and Polygon are unset
polygonarrayno'—'Custom search boundary — a list of at least 3 [lat, lng] pairs. Alternative to Purpose + Location / Search URLs.
minBedsintegerno'—'Minimum bedrooms (0 = studio).
maxBedsintegerno'—'Maximum bedrooms.
minPriceintegerno'—'Minimum price in AED.
maxPriceintegerno'—'Maximum price in AED.
maxListingsintegerno50Hard cap on dataset rows for this run.
localestringno'en'Scrape the English or Arabic (/ar/) site mirror.
includeAgentPhonebooleannofalseEnrich rows with the listing agent's public phone number, where exposed.
proxyConfigurationobjectno{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}Mandatory-by-default RESIDENTIAL — direct/datacenter-IP requests are blocked before reaching listing data.

Example input

{
"purpose": "for-sale",
"location": "dubai/downtown-dubai",
"propertyType": "apartments",
"maxListings": 3,
"locale": "en",
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": [
"RESIDENTIAL"
]
}
}

📤 Output

Every row is one dataset item.

FieldTypeNotes
listing_idstringBayut internal ID — dedup key.
listing_urlstringCanonical detail URL.
localestringLocale fetched under — 'en' or 'ar'.
titlestringListing headline.
purposestring'for-sale' or 'to-rent'.
property_typestringe.g. 'apartments'.
price_amount['number', 'null']Numeric price.
price_currencystringAlways 'AED' in v1.
price_frequency['string', 'null']'yearly' for rent, null for sale.
bedrooms['integer', 'null']0 = studio.
bathrooms['integer', 'null']Bathroom count.
area_value['number', 'null']Numeric floor area.
area_unit['string', 'null']'sqft' or 'sqm', as displayed.
location_hierarchyarrayBreadcrumb, coarse to fine ([0] = emirate).
latitude['number', 'null']WGS-84 latitude.
longitude['number', 'null']WGS-84 longitude.
agency_name['string', 'null']Listing agency.
agent_name['string', 'null']Listing agent.
agent_phone['string', 'null']Set only if includeAgentPhone=true and the number is publicly exposed on the listing; otherwise null by design.
verifiedbooleanBayut 'TruCheck' badge.
photos_countintegerGallery photo count.
scraped_atstringISO-8601 UTC row creation timestamp.

Example output

{
"listing_id": "8523104",
"listing_url": "https://www.bayut.com/property/details-8523104.html",
"locale": "en",
"title": "Luxury 2BR | Burj Khalifa View",
"purpose": "for-sale",
"property_type": "apartments",
"price_amount": 2450000,
"price_currency": "AED",
"price_frequency": null,
"bedrooms": 2,
"bathrooms": 3,
"area_value": 1450.0,
"area_unit": "sqft",
"location_hierarchy": [
"Dubai",
"Downtown Dubai",
"Burj Khalifa"
],
"latitude": 25.1972,
"longitude": 55.2744,
"agency_name": "Example Real Estate Brokers",
"agent_name": "Jane Doe",
"agent_phone": "+971501234567",
"verified": true,
"photos_count": 18,
"scraped_at": "2026-07-20T14:00:00+00:00"
}

💰 Pricing

Pay-Per-Event — you pay only when these events fire:

EventUSDWhat it is
actor-start$0.20One-off warm-up charge per run
result-row$0.008Charged for each listing row written to the dataset

Example: 1 000 results at the rates above ≈ $8.20. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.

🚧 Limitations

v1 covers UAE listings only — Saudi Arabia is a separate Bayut property and out of scope. Off-plan project microsites, the mortgage calculator, and area-guide content are not scraped. Every field comes straight from the search-results page — this Actor does not fetch a per-listing detail page, so DLD permit number, amenity tag lists, and listed date are not part of the output (we would rather not sell a column at all than sell one that comes back empty). verified reflects Bayut's own TruCheck badge flag, not OCR of the badge graphic.

❓ FAQ

Do I need a Bayut account or API key?

No. This Actor scrapes Bayut's own publicly listed property data — no login, no API key.

Why does this default to a residential proxy?

Bayut blocks direct/datacenter-IP requests before they reach listing data. We default proxyConfiguration to Apify's RESIDENTIAL group so runs clear that check without you tuning anything.

Can I search a custom area instead of a fixed emirate/area?

Yes — supply polygon as a list of at least 3 [lat, lng] pairs instead of purpose + location.

Does agent_phone always populate?

Only when includeAgentPhone is true and the agent's number is publicly exposed on the listing; otherwise it's null.

Does this Actor fetch permit_number, amenities, or listed_date?

No — we removed the detail-page fetch that used to gate those fields. It doubled our cost per row (roughly $62/1,000 rows against ~$8/1,000 of revenue) and two of the three fields it unlocked came back empty on real runs anyway. Rather than ship a slower, costlier Actor that still doesn't reliably deliver those fields, we cut them from the output — every field this Actor sells today comes straight from the search-results page, at the price above, every run.

💬 Your feedback

Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.