# Property Finder Scraper (UAE Rent & Sale Listings) (`webdatatools/propertyfinder-scraper`) Actor

Scrape Property Finder UAE listings for rent or sale by location and price: price, bedrooms, bathrooms, size, location, agent, broker, listing date, link and photo, one row per listing.

- **URL**: https://apify.com/webdatatools/propertyfinder-scraper.md
- **Developed by:** [Murat Uzun](https://apify.com/webdatatools) (community)
- **Categories:** Other
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Property Finder Scraper (UAE Rent & Sale Listings)

### What is Property Finder Scraper?

Property Finder Scraper collects property listings from Property Finder UAE, for rent or for sale, by location and optional price range. Each dataset row is one listing: price and period, bedrooms, bathrooms, size, location, agent, broker, listing date, link and a photo.

Use it for rental and sale market research, price tracking by area, agent and broker lists, and listing feeds for property sites. It reads the public Property Finder search pages, which carry their results as page data. No login is used.

### What data does Property Finder Scraper extract?

| Field | Type | Meaning |
|---|---|---|
| listingId | string | Property Finder listing id |
| reference | string or null | Listing reference shown by the agent or broker |
| position | number | Row position in this run |
| page | number | Search page the row came from |
| purpose | string | Residential for Rent or Residential for Sale, as the site labels it |
| propertyType | string or null | Apartment, Villa, Townhouse and so on |
| title | string or null | Listing title |
| price | number or null | Price in the currency below |
| currency | string or null | AED |
| pricePeriod | string or null | yearly for rent, sell for sale |
| bedrooms | string or null | Number of bedrooms, or studio |
| bathrooms | string or null | Number of bathrooms |
| sizeValue, sizeUnit | number or null, string or null | Area and unit (sqft) |
| furnished | string or null | YES, NO or PARTLY as the site shows |
| completionStatus | string or null | Completion status for sale listings (empty for rent) |
| location | string or null | Full location name |
| locationPath | string or null | Area path, e.g. Umm Al Quwain, Umm Al Quwain Marina |
| latitude, longitude | number or null | Coordinates |
| agentName, agentId | string or null | Listing agent |
| brokerName, brokerId | string or null | Brokerage |
| isVerified, isDirectFromDeveloper | boolean or null | Site flags |
| listedDate, lastRefreshedAt | string or null | Dates the site shows (ISO) |
| url | string or null | Listing page |
| imageCount, imageUrl | number or null, string or null | Photo count and first photo |
| description | string or null | Listing description (first 2,000 characters) |
| scrapedAt | string | ISO timestamp of the scrape |

### How to use Property Finder Scraper

1. Choose "Purpose": rent or buy.
2. Enter the "Location id". 1 is Dubai and 2 is Umm Al Quwain (the number after `l=` in the site's search URL for other areas).
3. Optional: set "Min price" and "Max price" in AED. Use 0 for no limit.
4. Set "Max listings" (default 30).
5. Start the run, then download the dataset or read it through the API.

### Example input

```json
{
    "purpose": "buy",
    "locationId": 2,
    "minPrice": 500000,
    "maxPrice": 2000000,
    "maxResults": 40
}
```

### Example output

Real row from a sale search on 23 Oct 2026 (location 2, price 500,000 to 2,000,000 AED):

```json
{
    "listingId": "155073630",
    "reference": "ARE/SI/S/048",
    "position": 1,
    "page": 1,
    "purpose": "Residential for Sale",
    "propertyType": "Apartment",
    "title": "Live by the Marina | 1BR Canalside Residences",
    "price": 1361182,
    "currency": "AED",
    "pricePeriod": "sell",
    "bedrooms": "1",
    "bathrooms": "2",
    "sizeValue": 513,
    "sizeUnit": "sqft",
    "furnished": "NO",
    "completionStatus": "completed_primary",
    "location": "Canalside Marina Residences, Siniyah Island, Umm Al Quwain Marina, Umm Al Quwain",
    "locationPath": "Umm Al Quwain, Umm Al Quwain Marina, Siniyah Island",
    "latitude": 25.60982894897461,
    "longitude": 55.64665985107422,
    "agentName": "Karnaba Velandy",
    "agentId": "142235",
    "brokerName": "ADROIT REAL ESTATE LLC",
    "brokerId": "2404",
    "isVerified": false,
    "isDirectFromDeveloper": false,
    "listedDate": "2026-10-06T10:21:38Z",
    "lastRefreshedAt": null,
    "url": "https://www.propertyfinder.ae/en/plp/buy/apartment-for-sale-umm-al-quwain-umm-al-quwain-marina-siniyah-island-canalside-marina-residences-155073630.html",
    "imageCount": 4,
    "imageUrl": "https://static.shared.propertyfinder.ae/media/images/listing/JWVHDXSARH8YJP2MF31PWKDVA0/c8535e99-f7f2-4310-8489-96002517eca6/668x452.jpg",
    "description": "Discover a refined waterfront lifestyle at Canalside Marina Residences, Siniya Island, Umm Al Quwain. ...",
    "scrapedAt": "2026-10-23T10:55:44.000Z"
}
```

### Input parameters

| Parameter | Default | Description |
|---|---|---|
| purpose | rent | rent or buy |
| locationId | 1 | Location id: 1 = Dubai, 2 = Umm Al Quwain (other ids: the `l=` number in the site URL) |
| minPrice | 0 | Lowest price in AED (0 = none) |
| maxPrice | 0 | Highest price in AED (0 = none) |
| maxResults | 30 | Listings per run, 1 to 1,000 |

### Pricing

Pay per listing: **$2.00 per 1,000 listings** on the free plan ($0.002 per listing). Volume tiers lower the price on paid Apify plans.

Measured on 23 Oct 2026 at 256 MB: a rent run for 90 Dubai listings (4 search pages) used $0.001 of platform usage in 28 seconds; a sale run for 40 listings in Umm Al Quwain used $0.000 in 8 seconds. The CLI prints usage to three decimals, so these are rounded figures.

### Property Finder Scraper vs. alternatives

The Property Finder site search is the source. It shows the site's own ranking and its counts (the test on 23 Oct 2026 reported 117,925 rent results for Dubai). This Actor does not return the site's map or saved-search features, and it does not check whether a listing is still on the market beyond the `lastRefreshedAt` field the site shows.

### Using Property Finder Scraper with AI agents / MCP

An agent sends `purpose`, `locationId`, the price range and `maxResults` and reads the listing rows. Filters are applied by the site. The Actor does not filter by bedrooms, because the bedroom parameter on the site's search URL did not change the results in tests; an agent can filter the `bedrooms` field after the run.

### FAQ

**Is this legal?** The Actor reads the public search pages that Property Finder serves to its visitors. It does not log in and does not contact agents. Respect Property Finder's terms and the privacy of agents and owners for any reuse of contact details.

**Can I filter by bedrooms or property type?** Not in this version. The bedroom parameter did not change the results when tested. Filter the `bedrooms` and `propertyType` fields after the run.

**Why does each page give 25 listings, not 30?** A search page holds 25 to 30 cards, and the site mixes project cards in. The Actor keeps the property cards only, so a page can give fewer rows than the card count.

**Which locations are supported?** Any location id the site accepts. Measured: 1 (Dubai) and 2 (Umm Al Quwain). Other ids were not measured.

**Can I call it from n8n, Make or Zapier?** Those tools can start any Apify Actor through their Apify integrations. This was not tested for this Actor.

**What about errors and limits?** A run fails only when no listing is collected. The Actor stops when the caller's maximum charge or `maxResults` is reached, or when the site has no more pages.

### Related Actors

Other Actors from the same publisher are listed on its Apify profile.

### Support

Open an issue on the Actor's Issues tab on Apify. Include the run ID, the input and the log lines.

### Limitations

- Bedroom and property-type filters are not applied on the site query in this version.
- Locations other than Dubai (1) and Umm Al Quwain (2) were not measured.
- Listing data is the snapshot shown on the search page at scrape time. Prices and availability change often.
- Contact details are limited to the agent and broker names and ids. No phone numbers or emails are returned.

# Actor input Schema

## `purpose` (type: `string`):

rent for rental listings, buy for sale listings.

## `locationId` (type: `integer`):

Property Finder location id. 1 = Dubai, 2 = Umm Al Quwain. Other ids are the l= number in the site URL.

## `minPrice` (type: `integer`):

Optional. Lowest price in AED, e.g. 50000. Use 0 for no minimum.

## `maxPrice` (type: `integer`):

Optional. Highest price in AED, e.g. 150000. Use 0 for no maximum.

## `maxResults` (type: `integer`):

How many listings to return, e.g. 100. Each search page has up to 30 listings.

## Actor input object example

```json
{
  "purpose": "rent",
  "locationId": 1,
  "minPrice": 0,
  "maxPrice": 0,
  "maxResults": 30
}
```

# Actor output Schema

## `results` (type: `string`):

All listings from this run.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("webdatatools/propertyfinder-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("webdatatools/propertyfinder-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call webdatatools/propertyfinder-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,webdatatools/propertyfinder-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/NeB2UfI48eSmN4D1u/builds/7D6Hi2AENQbRdwDyr/openapi.json
