Bayut.com Scraper icon

Bayut.com Scraper

From $0.80/1K. Scrape Bayut.com property listings with prices, beds, baths, area, GPS, agent and agency details, phone, WhatsApp, email, photos,…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

Bayut.com Scraper at a glance

Bayut.com Scraper is a ready-to-run Apify actor from abotapi for collecting real estate data. Its documented output includes id, url, type, property and title, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $1.50 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Real Estate, Agents, Automation
Pricing
$1.50 per 1,000 results (Free plan), from $1.00 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
41 options

From $0.80/1K. Scrape Bayut.com property listings with prices, beds, baths, area, GPS, agent and agency details, phone, WhatsApp, email, photos, amenities, and TruCheck verification dates.

What Bayut.com Scraper can do

  • 50+ fields per listing. Price, beds, baths, area, exact lat/lng, agent phone and WhatsApp, agency profile and TruCheck verification dates come back on every listing, with no extra step.
  • Two input modes. Pick a city and filters from the form, or paste any Bayut search URL you already refined in your browser.
  • Multi URL with forward pagination. Paste many search URLs in one run; each is walked page by page from wherever it starts.
  • For Sale and To Rent, every property type. Apartments, villas, townhouses, penthouses, hotel apartments, compounds, duplexes, land, full and half floors, whole buildings, bulk units and commercial.
  • All seven emirates, plus four more countries. Dubai, Abu Dhabi, Sharjah, Ras Al Khaimah, Ajman, Fujairah and Umm Al Quwain on bayut.com, and Saudi Arabia, Qatar, Jordan and Oman on their own Bayut country sites.
  • TruCheck filter. Return only Bayut's vetted, RERA backed verified listings to skip agency spam.

Choose what to collect

These inputs let you configure Bayut.com Scraper - Properties, Prices, Agents & Contacts. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestring · requiredSearch mode = pick city + property type + filters below. URL mode = paste any bayut.com search URL(s) you already refined in a browser. URL mode supports multiple URLs and walks pagination forward from each.

Choices: search, url

marketstringWhich Bayut country site to search: bayut.com (UAE, default), bayut.sa (Saudi Arabia), bayut.qa (Qatar), bayut.jo (Jordan) or bayut.om (Oman). Prices come back in that country's currency (AED, SAR, QAR, JOD, OMR) and every row carries a market field. Use that country's own city slugs in Locations, e.g. 'riyadh' or 'jeddah' (Saudi Arabia), 'qatar' or 'doha' (Qatar), 'amman' (Jordan), 'muscat' (Oman). In URL mode the country is read from each pasted link instead.

Choices: uae, ksa, qatar, jordan, oman

searchForstringProperty listings (default), or Bayut's agent or agency directory for the chosen locations. Agent rows include languages, specialities, service areas, badges (TruBroker, Quality Lister, Responsive), listing counts, email, phone and WhatsApp, and the agency with its licence. Agency rows include agent count, listing counts (sale/rent), property types, service areas, logo and tier. Turn on the full-detail option to also open each profile: agents then add years of experience, nationality and broker licence number; agencies add their description and licences. Every row has a recordType field: listing, agent or agency. Property filters below apply to listings only.

Choices: listings, agents, agencies

locationsarrayType city or area names as you would say them, one per line, e.g. 'Dubai', 'Abu Dhabi', 'Al Ain', 'Dubai Marina', 'Downtown Dubai', 'Yas Island', 'Al Khan', 'JVC', 'JLT'. Names are matched to Bayut's own areas (about 500 UAE areas are known offline, each under its real city, so 'Yas Island' searches Abu Dhabi). You can also paste the slug Bayut shows in its URL, e.g. 'dubai/dubai-marina' or 'abu-dhabi/yas-island'; use that form to pick the city when an area name exists in more than one city (the run warns and names them). On another country site use its own names, e.g. 'riyadh' or 'jeddah' (Saudi Arabia), 'amman' (Jordan). A name that does not match a real Bayut area is reported in the log by name instead of silently returning 0 results.
agentNamestringWhen collecting Agents, keep only agents whose name contains this text (not case-sensitive), e.g. 'Anna'. The scraper reads the agent directory page by page and keeps the matches, so narrow Locations (e.g. 'dubai/dubai-marina') for a faster search.
purposestringPick for-sale or for-rent. Search mode only.

Choices: for-sale, to-rent

propertyTypestringWhat kind of property to search for. 'property' includes everything residential. Search mode only.

Choices: property, apartments, villas, townhouses, penthouses, hotel-apartments, compounds, duplex, land, full-floors, half-floors, whole-buildings, bulk-units, commercial

Show 34 more inputs
More input fields
InputWhat it controls
propertyTypesarrayPick one or more exact Bayut property types, residential and commercial sub-types included. Results include any of the picked types. When set, this replaces the single Property type above. Also works on the other country sites; if a site has no such type, the run log says so instead of quietly returning unfiltered results.
minPriceintegerMinimum price filter in AED. Leave empty for no minimum. Search mode only.
maxPriceintegerMaximum price filter in AED. Leave empty for no maximum. Search mode only.
minBedroomsintegerMinimum bedrooms (0 = studio). Search mode only.
maxBedroomsintegerMaximum bedrooms. Search mode only.
minBathroomsintegerMinimum bathrooms. Search mode only.
maxBathroomsintegerMaximum bathrooms. Search mode only.
minAreaintegerMinimum area in square feet. Search mode only.
maxAreaintegerMaximum area in square feet. Search mode only.
furnishingstringFurnishing filter. Search mode only.

Choices: any, furnished, unfurnished

completionStatusstringCompleted = ready to move in. Off-plan = under construction / pre-launch. Search mode only.

Choices: any, completed, off-plan

rentFrequencystringOnly applies when purpose=to-rent.

Choices: any, yearly, monthly, weekly, daily

verifiedOnlybooleanOnly return TruCheck-verified listings (Bayut's vetted-by-RERA badge). Useful to filter agency spam.
keywordsarrayWords Bayut's own keyword search must find in the listing, e.g. 'private pool', 'sea view', 'maids room', 'upgraded', 'gym'. Amenity names work here too: this is the same filter Bayut uses for amenities.
agencyIdsarrayLimit listings to one or more agencies. Paste the agency's Bayut page link (e.g. https://www.bayut.com/companies/white-co-10212/), its slug ('white-co-10212') or its id ('10212'). Every listing row's agencyExternalID is this id. An entry with no id in it (for example a plain agency name) is reported in the log and not used.
agentIdsarrayLimit listings to one or more agents. Paste the agent's Bayut profile link (e.g. https://www.bayut.com/brokers/jane-doe-2126457.html), slug or id. Every listing row's agentExternalID is this id. An entry with no id in it (for example a plain agent name) is reported in the log and not used.
developerIdsarrayLimit listings to projects by one or more developers. Type the developer's name, e.g. 'Emaar', 'Sobha Realty', 'DAMAC Properties', or paste its Bayut developer page link (e.g. https://www.bayut.com/new-projects/developers/emaar/). Each name is looked up on the developer's own Bayut page at the start of the run and the log shows what it matched. A Bayut developer id (every listing row's developerExternalID, e.g. '12') also works. A name that is not found is reported in the log; if none is found the run stops with a clear message instead of returning unfiltered listings.
hasVideobooleanOnly listings with at least one video.
has360TourbooleanOnly listings with a 360° virtual tour.
hasFloorPlanbooleanOnly listings with a floor plan.
sortBystringHow to order results. Search mode only - in URL mode the sort is taken from your pasted URL.

Choices: popular, newest, oldest, price-asc, price-desc, verified-score-desc

urlsarrayOne or more Bayut links, one per line, on any Bayut site (bayut.com, bayut.sa, bayut.qa, bayut.jo, bayut.om). Each link is scraped on its own. Search-mode filters are ignored here: the filters, sort and page come from the link itself. Supported link types (the prefill has one example of each): a search or results page at any level (city, area, building, bedroom page such as /2-bedroom-apartments/, commercial types, /uae/, /s/ landing pages, /new-projects/ and /new-projects/developers// pages), with or without /page-N/ or query filters such as ?price_min=, beds_in= or sort_by=, and with or without a language prefix such as /ar/; a listing link (/property/details-.html), which returns exactly that listing; an agent directory or profile (/brokers// or /brokers/-.html), which returns agent rows; an agency directory or profile (/companies// or /companies/-/), which returns agency rows. Links without www., with http://, without https:// or copied with & are fixed automatically. Pages that hold no listings (the home page, blog, area or building guides, market reports) and links to other sites are skipped with a warning naming the link.
maxPagesintegerSafety bound on how many result pages to walk per location or start URL (24 listings per page). 0 (default) means unlimited - the walk stops naturally once a page comes back empty or repeats listings already collected, or sooner once Max total listings is reached. Set a number only for an explicit page cap below that natural stop.
maxListingsintegerThe sole soft cap on the run, applied across all locations/URLs. Defaults to 10 so a run stays small unless you raise it. 0 means unlimited (bounded only by the natural stop on Max result pages).
fetchDetailsbooleanOff by default. The base result already includes ~50 fields: lat/lng, agent phone, WhatsApp, agency, beds/baths, area, price and photo IDs. Turn this on to additionally enrich every listing with its full description, categorized amenities, the full photo gallery, payment plans, off-plan completion details, and the agency's licences, product tier and TruCheck date (Bayut's search results stopped carrying these in October 2026). Each enriched listing opens its listing page: one extra request. Billed per enriched listing.
resumeFromRunIdstringOptional. Paste a previous run ID or dataset ID to continue a large walk-all pull: listings already saved by that run are loaded before scraping starts and skipped, so this run only appends new listings. For recurring daily monitoring of the same search, use Incremental mode below instead. Leave empty for a normal fresh run.
incrementalModebooleanTurn this on for daily or recurring monitoring of the SAME search. The first run returns all matching listings as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED listings. Turn on "Emit unchanged" or "Emit expired" only when you also want those listings returned (and billed). State is kept separately per city/filters/URL and fetchDetails setup; use State key when you want to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a prior run above.
stateKeystringOptional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the city/filters/URL and fetchDetails settings, different searches then never mix state with each other.
emitUnchangedbooleanOff by default. Turn on to also return listings that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have, so leave it off unless you specifically want the full snapshot every run.
emitExpiredbooleanOff by default. Turn on to also return listings that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned every tracked search, not when Max total listings or Max result pages capped it, when a block stopped a search early, or when Resume was used. This returns, and bills, extra synthetic rows, so leave it off unless you need expiry tracking.
ignoreFieldsForChangesarrayOptional. Field names excluded from change detection in incremental mode, matched at any nesting depth. A listing whose ONLY differences are in these fields still classifies UNCHANGED and is never returned/billed as UPDATED for them. Added ON TOP OF "scrapedAt" (the per-fetch timestamp this actor stamps on every listing, which always differs and is never a real content change) - scrapedAt stays ignored no matter what you put here. Add a field name here if you find one that rotates on every scrape without the listing actually changing.
mcpConnectorsarrayOptionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON; the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).
notionParentPageUrlstringURL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on items written to each connector per run. Does not affect the dataset.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

externalIDID
urlURL (link)
purposeType
propertyTypeProperty
titleTitle
pricePrice (AED) (number)
currencyCurrency
rentFrequencyRent freq
roomsBeds (number)
bathsBaths (number)
areaArea (m²) (number)
cityCity
Show 150 more fields
neighbourhoodArea
buildingBuilding
latitudeLat
longitudeLng
isVerifiedTruCheck
completionStatusStatus
furnishingStatusFurnishing
agentNameAgent
agencyNameAgency
phoneMobileMobile
imageCountPhotos (number)
scrapedAtScraped
changeTypeChange type (incremental mode) (text)
changedFieldsChanged fields (incremental mode) (array)
firstSeenAtFirst seen (incremental mode) (date)
lastSeenAtLast seen (incremental mode) (date)
agentExternalIDAgent ID
agentPhotoUrlAgent photo (image)
agencyExternalIDAgency ID
agencySlugAgency Slug
agencyLogoAgency logo (image)
agencyLicensesAgency license(s) (array)
phonePhonePhone
phoneWhatsappWhatsApp
referenceNumberReference
descriptionDescription
amenitiesFlatAmenities (array)
paymentPlansPayment plans (array)
completionDetailsCompletion details (object)
offplanDetailsOff-plan details (object)
imagesImages (array)
videosVideos (array)
isStudioStudio
isDeveloperDeveloper listing
geoExactExact geography (hasExactGeography)
trucheckedAtTruCheck time (number)
agencyProductAgency product
agencyProductScoreAgency product score (number)
agencyCreatedAtAgency created
agencyActiveAgency active (boolean)
previousPricePrevious price (number)
recordTypeRecord type
marketMarket
nameName
emailEmail
phonePhone
mobileMobile
whatsappWhatsApp
languagesLanguages (array)
specialitiesSpecialities (array)
serviceAreasService areas (array)
badgesBadges (array)
totalPropertiesListings (number)
propertiesForSaleFor sale (number)
propertiesForRentFor rent (number)
slugSlug (text)
aboutAbout (text)
photoUrlPhoto url (image)
phoneNumbersPhone numbers (array)
mobileNumbersMobile numbers (array)
contactMethodAvailabilityContact method availability (object)
trucheckCountTruCheck count (number)
isTruBrokerTruBroker (boolean)
isQualityListerIs quality lister (boolean)
isHighlyResponsiveIs highly responsive (boolean)
isRecommendedAgentIs recommended agent (boolean)
truBrokerRankingTruBroker ranking (number)
experiencePointsExperience points (number)
activeInEmirateActive in emirate (text)
agentAdStoriesCountAgent stories (number)
experienceYearsExperience years (text)
nationalityNationality (text)
licenseNumberLicense number (text)
isProfileCompletedIs profile completed (text)
nameArabicName (Arabic)
agentsCountAgents (number)
adsCountListings (number)
adsSaleCountFor sale (number)
adsRentCountFor rent (number)
categoryTypesCategory types (array)
isFeaturedFeatured
logoUrlLogo url (image)
locationLocation (text)
licensesLicenses (text)
productProduct (text)
productScoreProduct score (text)
eliteStatusElite status (boolean)
activeActive (text)
purposesPurposes (array)
trubrokerAgentCountTrubroker agent count (number)
serviceAreasCountService areas count (number)
createdAtCreated at (text)
agentsAgents (text)
idInternal id (number)
objectIDObject id (text)
ownerIDOwner id (number)
userExternalIDUser id (text)
titleArabicTitle arabic (text)
priceHiddenPrice hidden (boolean)
areaUnitArea unit (text)
plotAreaPlot area (number)
countryCountry (text)
locationPathLocation path (text)
locationDetailsLocation details (array)
locationPurposeTierLocation purpose tier (number)
verificationStatusVerification status (text)
verifiedAtVerified at (number)
productLabelProduct label (text)
productVariantProduct variant (text)
contactNameContact name (text)
agentSlugAgent slug (text)
agentIsTruBrokerAgent is TruBroker (boolean)
phoneMobileNumbersPhone mobile numbers (array)
agencyTierAgency tier (number)
dldPropertySKDLD property SK (text)
dldBuildingNKDLD building NK (text)
regaBrokerageLicenseNumberREGA brokerage licence (text)
regaAdLicenseNumberREGA ad licence (text)
regaAdLicenseExpiryDateREGA ad licence expiry (text)
regaPermitUrlREGA permit page (text)
streetNameStreet name (text)
coverPhotoIdCover photo id (number)
coverPhotoUrlCover photo url (image)
photoIDsPhoto ids (array)
panoramaCountPanorama count (number)
panoramaIDs360 photo ids (text)
videoCountVideo count (number)
coverVideoUrlCover video url (link)
floorPlanIDFloor plan id (text)
hasMatchingFloorPlansHas matching floor plans (boolean)
categoryCategory (array)
categorySlugsCategory slugs (array)
sourceIDSource id (number)
amenitiesAmenities (array)
completionPercentageCompletion percentage (number)
paymentPlanSummariesPayment plan summaries (array)
projectProject (object)
developerNameDeveloper name (text)
developerExternalIDDeveloper external id (text)
stateState (text)
scoreScore (number)
indyScoreIndy score (number)
cityLevelScoreCity level score (number)
approvedAtApproved at (number)
touchedAtTouched at (number)
updatedAtUpdated at (number)
reactivatedAtReactivated at (number)
extraFieldsExtra fields (object)
slugArabicSlug arabic (text)
verificationEligibleVerification eligible (boolean)

Ways to use this data

  • Real estate portals and CRMs: aggregate active listings across emirates into one comparable feed.
  • Market research and analytics: track asking prices, price per square foot and inventory by area, property type and purpose over time.
  • Lead generation: collect agent and agency names, mobile numbers and WhatsApp contacts for outreach.
  • Investment tracking: monitor off plan projects and completed developments, including payment plan summaries.
  • Recurring monitoring: schedule daily or weekly runs to catch new, updated or delisted properties in a saved search.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does Bayut.com Scraper return?

The documented output for Bayut.com Scraper includes id, url, type, property, title, price (aed), currency and rent freq. Availability of each field depends on the source page and the selected mode.

How much does Bayut.com Scraper cost?

It costs $1.50 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

Can I track new or changed listings on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. The first run returns every matching listing as NEW; later runs return only new, updated and reappeared listings, and unchanged ones are not billed unless you turn that on.

Can I use this with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.

Ready to collect with Bayut.com Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.