Property Finder Scraper | UAE, Saudi Arabia & More
Pricing
from $2.20 / 1,000 listings
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
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Security
Limited permissionsShare
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:
BUYandRENTchannels for apartments, villas and other supported property types. - Commercial:
COMMERCIAL_BUYandCOMMERCIAL_RENTfor 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
startUrlsto request those listings directly. - Optional details:
scrapeDetailsadds available descriptions, amenities and contact information to search rows. - Optional context:
enrichInsightsandenrichTransactionsadd location context inside listing rows, not separate dataset rows. Both default tofalse.
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.
| Field | Description | Example |
|---|---|---|
id | Listing identifier | 12345678 |
url | Link to the individual listing | https://www.propertyfinder.ae/en/plp/buy/apartment-for-sale-dubai-dubai-marina-12345678.html |
title | Listing headline | Two-bedroom apartment with balcony |
market | Country code | AE |
channel | Residential or commercial sale/rental channel | BUY |
propertyType | Property type reported by the listing | apartment |
priceAmount | Numeric asking price or rent | 1800000 |
currency | Price currency | AED |
pricePeriod | Sale or rental period | yearly |
priceHidden | Whether the exact price is withheld | true |
numBedrooms | Bedroom count; studios may use text | 2 |
numBathrooms | Bathroom count | 3 |
size | Property area | 1250 |
sizeUnit | Unit for the area | sqft |
address | Location object, usually building/community/city level | {"full":"Dubai Marina, Dubai","locality":"Dubai","country":"AE"} |
geo | Latitude and longitude when available | {"lat":25.08,"lng":55.14} |
description | Listing description when available | Apartment with balcony and parking. |
amenities | Listed amenities | ["Balcony"] |
images | Listing photo URLs | ["https://example.com/property-photo.jpg"] |
agent | Agent identity and available contact fields | {"name":"Jane Doe"} |
broker | Property agency details; its address is the office | {"name":"Example Realty"} |
phones | Available phone and WhatsApp numbers | [{"value":"+1 555 0100","type":"mobile"}] |
emails | Available email addresses | [{"value":"name@example.com","type":"agent"}] |
rera | Available permit and authority information | {"number":"EXAMPLE-PERMIT"} |
furnished | Furnishing status | yes |
completionStatus | Completed or off-plan status | off_plan |
enrichment | Optional location insights and transaction context | {"insights":null,"transactions":null} |
scrapedAt | Collection time in UTC | 2026-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
- Open Property Finder Scraper in Apify Console.
- Fill a target field, such as
locationSlugwithdubai, or paste a search URL intostartUrls. - Set
maxItemsto3for a small first run. Select a channel and property type if needed. - Click Start and wait for the run to finish.
- 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
| Field | What to enter | Default |
|---|---|---|
startUrls | Search or listing URLs from a supported market | Empty; form prefills a UAE sale search |
market | AE, SA, EG, BH, QA, or all | AE |
markets | Market codes; a non-empty list overrides market | [] |
channel | BUY, RENT, COMMERCIAL_BUY, COMMERCIAL_RENT | BUY |
propertyType | Such as apartment, villa, office-space, or all | all |
propertyTypes | Multiple property types; overrides propertyType | [] |
locationSlug | Recognized city/area slug, such as dubai | Empty |
locationId | Property Finder location ID | Empty |
locationQuery | City or community name; used without an ID or slug | Empty |
keywords, fullTextSearchQuery | Listing search text, such as sea view | Empty |
agentId, agentIds, brokerId, clientIds | Agent, property agency or client IDs | Empty |
boundingBox, polygon, encodedPolygons | Map area; use the formats in the input form | Empty |
bedrooms, bathrooms | Arrays of counts; bedroom 0 means studio | [] |
minPrice, maxPrice | Price range in the market's currency | Empty |
minArea, maxArea, areaUnit | Area bounds and unit, such as sqft | Empty |
amenities | Amenity names accepted by Property Finder | [] |
furnished | all, yes, no, or partly | Empty |
completionStatus | completed or off_plan | Empty |
sort | For example, newest, priceAsc, priceDesc | newest |
locale | en or ar | Empty, uses market default en |
maxItems | Maximum rows per search URL or configured search, 1–2,000 | 70; form prefills 3 |
maxPages | Maximum search pages, 1–100 | 1 |
scrapeDetails | Add available detail fields to search rows | false |
enrichInsights, enrichTransactions | Add location context to listing rows | false |
enrichKinds | Insight 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 plan | Start at 512 MB | Price per row | Price 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 |
maxItemsapplies to each search URL, or the configured search whenstartUrlsis 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.
maxPagesalso 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 (
maxTotalChargeUsdin 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 ApifyClientclient = 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
Is it legal to scrape Property Finder?
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.
deliveryDateGteanddeliveryDateLtefilter project handover dates.
Related scrapers
More real estate and property data scrapers from the same publisher:
- Zumper Scraper
- Booli Scraper
- Craigslist Scraper
- PropertyGuru Scraper
- OpenSooq Scraper
- Apartments.com Rental Scraper
- Dot Property Scraper
- FINN.no Scraper
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.