Property Finder Scraper | UAE, Saudi Arabia & More avatar

Property Finder Scraper | UAE, Saudi Arabia & More

Pricing

from $2.20 / 1,000 listings

Go to Apify Store
Property Finder Scraper | UAE, Saudi Arabia & More

Property Finder Scraper | UAE, Saudi Arabia & More

Extract Property Finder sale and rental listings across the UAE, Saudi Arabia, Egypt, Bahrain and Qatar. Get prices, locations, agent contacts and photos; pay per delivered listing row plus a start fee.

Pricing

from $2.20 / 1,000 listings

Rating

0.0

(0)

Developer

kane liu

kane liu

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

2 days ago

Last modified

Security

Limited permissions

Share

Property Finder Scraper

Extract Property Finder sale and rental listings from the UAE, Saudi Arabia, Egypt, Bahrain and Qatar as rows you can export.

  • Listing prices, currencies, bedrooms, bathrooms, sizes and property types.
  • Locations, agent and property broker contacts, permits and photos when available.
  • Search URLs, individual listing URLs or searches built from location and keyword inputs.
  • Optional listing details and location insights, disabled by default.
  • $3.00 per 1,000 delivered rows on the Free plan, plus a small start fee.

What does Property Finder Scraper do?

Property Finder Scraper collects public property listings for market research, rental comparisons and property shortlists. Each dataset row represents one listing. Coverage includes propertyfinder.ae, propertyfinder.sa, propertyfinder.eg, propertyfinder.bh and propertyfinder.qa; available fields vary by market and listing.

  • Residential: BUY and RENT channels for apartments, villas and other supported property types.
  • Commercial: COMMERCIAL_BUY and COMMERCIAL_RENT for offices, warehouses, shops and other commercial properties.
  • Listing search: use startUrls, a location, keywords, agent or property broker IDs, or a map area. There is no separate mode selector.
  • Known listings: put listing detail URLs in startUrls to request those listings directly.
  • Optional details: scrapeDetails adds available descriptions, amenities and contact information to search rows.
  • Optional context: enrichInsights and enrichTransactions add location context inside listing rows, not separate dataset rows. Both default to false.

What data can you extract from Property Finder?

The table covers the main fields in a listing row. Additional columns contain payment terms, commercial property details and listing flags when supplied by the source.

FieldDescriptionExample
idListing identifier12345678
urlLink to the individual listinghttps://www.propertyfinder.ae/en/plp/buy/apartment-for-sale-dubai-dubai-marina-12345678.html
titleListing headlineTwo-bedroom apartment with balcony
marketCountry codeAE
channelResidential or commercial sale/rental channelBUY
propertyTypeProperty type reported by the listingapartment
priceAmountNumeric asking price or rent1800000
currencyPrice currencyAED
pricePeriodSale or rental periodyearly
priceHiddenWhether the exact price is withheldtrue
numBedroomsBedroom count; studios may use text2
numBathroomsBathroom count3
sizeProperty area1250
sizeUnitUnit for the areasqft
addressLocation object, usually building/community/city level{"full":"Dubai Marina, Dubai","locality":"Dubai","country":"AE"}
geoLatitude and longitude when available{"lat":25.08,"lng":55.14}
descriptionListing description when availableApartment with balcony and parking.
amenitiesListed amenities["Balcony"]
imagesListing photo URLs["https://example.com/property-photo.jpg"]
agentAgent identity and available contact fields{"name":"Jane Doe"}
brokerProperty agency details; its address is the office{"name":"Example Realty"}
phonesAvailable phone and WhatsApp numbers[{"value":"+1 555 0100","type":"mobile"}]
emailsAvailable email addresses[{"value":"name@example.com","type":"agent"}]
reraAvailable permit and authority information{"number":"EXAMPLE-PERMIT"}
furnishedFurnishing statusyes
completionStatusCompleted or off-plan statusoff_plan
enrichmentOptional location insights and transaction context{"insights":null,"transactions":null}
scrapedAtCollection time in UTC2026-10-24T08:00:00+00:00

address prefers the listing location but falls back to the property broker's office when no listing location is available. Do not treat it as a verified street address. address.unit is empty. For calculations, use priceAmount with currency and pricePeriod, not the formatted price string.

How to scrape Property Finder

  1. Open Property Finder Scraper in Apify Console.
  2. Fill a target field, such as locationSlug with dubai, or paste a search URL into startUrls.
  3. Set maxItems to 3 for a small first run. Select a channel and property type if needed.
  4. Click Start and wait for the run to finish.
  5. Open the dataset and download the rows, or read them through the API.

An empty input starts the prefilled UAE sale search with at most 3 rows. It is a billed example, not a free preview. Market, channel and property type alone are filters, not targets; fill a target field to avoid the example search. The Actor selects its listing-search operation automatically.

Search listings

Use a location slug, location ID or locationQuery such as dubai marina. Alternatively, enter keywords or a Property Finder search URL. For a national search, use a search URL without a location filter. URL searches use the market, channel and property type in the URL; build price and other filters into that URL rather than assuming the form will override it.

Collect known listing URLs

Paste individual Property Finder listing URLs into startUrls. Each available listing produces one row. Use a separate run for detail URLs instead of mixing them with search URLs. Deleted or inaccessible listings cannot be guaranteed to return data.

What to fill in

FieldWhat to enterDefault
startUrlsSearch or listing URLs from a supported marketEmpty; form prefills a UAE sale search
marketAE, SA, EG, BH, QA, or allAE
marketsMarket codes; a non-empty list overrides market[]
channelBUY, RENT, COMMERCIAL_BUY, COMMERCIAL_RENTBUY
propertyTypeSuch as apartment, villa, office-space, or allall
propertyTypesMultiple property types; overrides propertyType[]
locationSlugRecognized city/area slug, such as dubaiEmpty
locationIdProperty Finder location IDEmpty
locationQueryCity or community name; used without an ID or slugEmpty
keywords, fullTextSearchQueryListing search text, such as sea viewEmpty
agentId, agentIds, brokerId, clientIdsAgent, property agency or client IDsEmpty
boundingBox, polygon, encodedPolygonsMap area; use the formats in the input formEmpty
bedrooms, bathroomsArrays of counts; bedroom 0 means studio[]
minPrice, maxPricePrice range in the market's currencyEmpty
minArea, maxArea, areaUnitArea bounds and unit, such as sqftEmpty
amenitiesAmenity names accepted by Property Finder[]
furnishedall, yes, no, or partlyEmpty
completionStatuscompleted or off_planEmpty
sortFor example, newest, priceAsc, priceDescnewest
localeen or arEmpty, uses market default en
maxItemsMaximum rows per search URL or configured search, 1–2,00070; form prefills 3
maxPagesMaximum search pages, 1–1001
scrapeDetailsAdd available detail fields to search rowsfalse
enrichInsights, enrichTransactionsAdd location context to listing rowsfalse
enrichKindsInsight types; empty means price trends only[]

The input form contains further optional filters. Start with one target and a small row limit, then add filters after checking the first rows.

Search example:

{
"locationSlug": "dubai",
"market": "AE",
"channel": "RENT",
"propertyType": "apartment",
"maxItems": 3
}

Known-listing example; replace the illustrative URL with a current listing URL:

{
"startUrls": [{"url": "https://www.propertyfinder.ae/en/plp/buy/apartment-for-sale-dubai-dubai-marina-12345678.html"}],
"maxItems": 1
}

maxResults, max_results and limit are accepted aliases for maxItems. maxResults takes precedence when both it and maxItems are present. Close field-name misspellings can be corrected; other unknown fields are ignored and noted. Some invalid filters are ignored or normalized rather than failing the run.

Input validation failures use INVALID_INPUT: <field> — <how to fix> before any dataset rows are charged. The start fee can still apply. Each run writes INPUT_REPORT to its default key-value store, including corrections, ignored fields and whether it selected an example run.

Output example

This illustrative listing row uses fictional identifiers and contact details; fields not shown may also be present.

{
"id": "12345678",
"url": "https://www.propertyfinder.ae/en/plp/buy/apartment-for-sale-dubai-dubai-marina-12345678.html",
"title": "Two-bedroom apartment with balcony",
"source": "propertyfinder",
"sourceLayer": "api",
"market": "AE",
"channel": "BUY",
"propertyType": "apartment",
"priceAmount": 1800000,
"currency": "AED",
"pricePeriod": "sell",
"priceHidden": false,
"numBedrooms": 2,
"numBathrooms": 3,
"size": 1250,
"sizeUnit": "sqft",
"address": {
"full": "Dubai Marina, Dubai",
"street": null,
"unit": null,
"locality": "Dubai",
"region": null,
"postalCode": null,
"country": "AE"
},
"agent": {"name": "Jane Doe", "phone": "+1 555 0100"},
"phones": [{"value": "+1 555 0100", "type": "mobile"}],
"emails": [],
"scrapedAt": "2026-10-24T08:00:00+00:00"
}

Export the dataset as JSON, CSV, Excel, XML, RSS or an HTML table. JSON preserves nested contact, address and enrichment objects. The OUTPUT and RUN_SUMMARY records provide counts and warnings for completed runs.

Why use this Property Finder scraper?

  • Pay for delivered rows: listing charges apply to dataset rows, not attempted pages.
  • Keep delivered data: rows already written remain in the dataset if a run is stopped. Do not assume unfinished collection has been delivered.
  • Check failures: input errors identify the affected field; collection errors are recorded in ERROR_SUMMARY.
  • Compare properties: numeric prices, currencies and sizes support spreadsheet analysis.
  • Collect several inputs: provide multiple search URLs or select several markets for a configured search.
  • No proxy setup: you do not need to set up proxies.

How much does it cost to scrape Property Finder?

The Actor uses pay-per-event pricing. The start event costs $0.005 per allocated GB, with a minimum of one event. At the default 512 MB, a run incurs one $0.005 start event. Platform usage is included in these prices.

Apify planStart at 512 MBPrice per rowPrice per 1,000 rows
Free$0.005$0.003$3.00
Starter$0.005$0.003$3.00
Scale$0.005$0.0026$2.60
Business$0.005$0.0022$2.20
  • maxItems applies to each search URL, or the configured search when startUrls is empty. It defaults to 70; larger requests are collected in parts of at most 70.
  • Markets and property types within one configured search share its allowance. maxPages also limits how far a search can go.
  • Free Apify plan runs are capped at 200 rows. The developer also limits Free-plan users to 10 runs of this Actor.
  • The whole run is bounded by Maximum cost per run (maxTotalChargeUsd in the API).

Example: a run delivering 3 rows at 512 MB on the Free plan costs $0.005 + 3 × $0.003 = $0.014. A run with no delivered rows has no row charges, but the start event can still be charged.

What happens when the run timeout is too short

Some Property Finder collections, such as several startUrls, several markets, a large maxItems or maxPages, or scrapeDetails: true, can take longer than the run timeout you chose. In that case the run does not fail. It ends early with the status message "Queued on the collection backend; this run will resume automatically when results are ready (about N s)." and shows as ABORTED for a while.

When the results are ready, the same run starts again by itself, reports "Resumed: delivering N rows.", writes the rows to the same dataset and finishes as SUCCEEDED. Rows that were already delivered are skipped, so no row is delivered or charged twice. You do not need to start another run.

  • This can happen at most 3 times per run. To avoid it, keep the default timeout of 3600 seconds.
  • The synchronous API endpoints (run-sync, run-sync-get-dataset-items) wait at most 300 seconds and can return an empty dataset while the run is paused. For larger jobs, start the run asynchronously and read the dataset after the run reaches SUCCEEDED, or use a webhook on the "succeeded" event.

Use with AI agents and the API

Apify MCP server

Add this Actor in a remote MCP client, such as Claude, ChatGPT, Cursor or VS Code:

https://mcp.apify.com?tools=lentic_clockss/property-finder-uae-scraper

Sign in with Apify using OAuth when prompted, or send Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool starts a run and returns run and dataset IDs; use get-dataset-items to read the rows. Clients without remote support can use npx @apify/actors-mcp-server --tools lentic_clockss/property-finder-uae-scraper with APIFY_TOKEN set.

Example prompt: “Find 3 apartments for rent in Dubai using locationSlug: dubai, and show the price, size and listing URL.”

Apify API

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("lentic_clockss/property-finder-uae-scraper").call(
run_input={"locationSlug": "dubai", "channel": "RENT", "maxItems": 3}
)
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row)
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('lentic_clockss/property-finder-uae-scraper')
.call({ locationSlug: 'dubai', channel: 'RENT', maxItems: 3 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

For HTTP, send the input as JSON to POST https://api.apify.com/v2/acts/lentic_clockss~property-finder-uae-scraper/runs with the Authorization: Bearer header. After completion, read GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json.

Integrations

Use the Actor's Integrations tab for Google Sheets, Make, Zapier, n8n, Slack, Airtable or webhooks. Use Apify Schedules for recurring searches.

FAQ

This Actor collects public listing data. You are responsible for complying with Property Finder's terms and applicable data protection laws. Personal data needs a lawful basis; public visibility alone does not remove that requirement.

Why did my run end as ABORTED?

Check the run's status message and log for the reason it was stopped. This documentation does not promise automatic restart. Inspect the dataset before retrying; rows already delivered remain there.

How many results can I get?

Request 1–2,000 rows per input with maxItems, subject to matching listings, maxPages, your maximum cost and plan limits. The requested count is a ceiling, not a guarantee.

Why are some fields empty?

Listings do not always include emails, coordinates, permits or detailed descriptions. Optional details are off by default, and insights may be unavailable for a location. Empty values are not evidence that a property lacks an amenity or permit.

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

The Actor's developer sets a 10-run allowance for Free-plan users. A status message explains when it is exhausted. Paid plans are not subject to this developer-set run limit.

Can I collect residential and commercial listings?

Yes. Select the appropriate channel. For structured searches, use separate runs for different channels so the filters and results remain clear.

Can I scrape Bahrain and Qatar together?

Yes. Use markets: ["BH", "QA"] and a target such as keywords. Both markets share the configured search's maxItems allowance; they do not each receive the full limit.

Does enabling insights also enable transactions?

No. With enrichInsights: true and an empty enrichKinds, only price trends are requested. Set enrichTransactions: true for transaction context. It is location-level context, not a separate transaction export.

Limitations

  • Coverage is limited to the five listed markets. Turkey is not supported.
  • Available fields and property categories differ by market. No completeness percentage is guaranteed.
  • Listing locations are not verified door-level addresses. Property broker office addresses can appear as fallbacks.
  • Insight and transaction lists are capped, not complete historical datasets. Photo availability varies by listing.
  • Listings can disappear or change between runs. Search order and available matches affect which rows are delivered.
  • No automatic search-word translation or moving date-window behavior is documented. deliveryDateGte and deliveryDateLte filter project handover dates.

More real estate and property data scrapers from the same publisher:

Browse all of our scrapers at apify.com/lentic_clockss.

Support

Report a problem or request a field through the Issues tab of this Actor's page. Include the run ID and the input you used.