# PropertyFinder UAE Scraper - Dubai & UAE Property Listings (`tgsneaks/propertyfinder-uae-scraper`) Actor

Scrape property listings for sale and for rent from PropertyFinder UAE (Dubai, Abu Dhabi, Sharjah and more): price, price per sqft, bedrooms, bathrooms, size, location, amenities, completion status, photos and listing date.

- **URL**: https://apify.com/tgsneaks/propertyfinder-uae-scraper.md
- **Developed by:** [Adam Abuseni](https://apify.com/tgsneaks) (community)
- **Categories:** Real estate
- **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.

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

## PropertyFinder UAE Scraper - Dubai & UAE Property Listings

Scrape **property listings for sale and for rent from PropertyFinder UAE** - Dubai, Abu Dhabi, Sharjah, Ajman and more - into a clean table:

- 💲 **Price** (AED), sale or yearly rent, and **price per sqft**
- 🛏️ Bedrooms (incl. studios), bathrooms, **size** in sqft
- 📍 Full location: city, community, sub-community, building + **latitude / longitude**
- 🏗️ Property type, furnished status, **completion status** (ready / off-plan)
- ✨ Amenities, verified badge, price-drop flag, listing date
- 🖼️ Up to 10 photo URLs and the listing link
- 🏢 Agency name and logo

Fast and light: 25 listings per page, a whole area in seconds.

### What you can use it for

- **Investment analysis** - compare price per sqft across communities and buildings
- **Rental yield** - combine sale and rent listings for the same area
- **Market tracking and alerts** - schedule it daily in monitoring mode to get only new listings and price drops (see below)
- **Agency intelligence** - see which agencies list what, where
- **Apps, maps and dashboards** - coordinates included

### How to use it

1. Open [propertyfinder.ae](https://www.propertyfinder.ae), pick the area and property type you want (for example *Apartments for sale in Dubai Marina*), and copy the page address.
2. Paste it into **Listing pages** - one per line. Or just type `buy` or `rent` for the whole UAE.
3. Set **Pages per listing URL** (25 listings each) and optionally **Max listings**.
4. Click **Start**.

Examples of listing pages:

- `https://www.propertyfinder.ae/en/buy/dubai/apartments-for-sale-dubai-marina.html`
- `https://www.propertyfinder.ae/en/rent/dubai/villas-for-rent.html`
- `https://www.propertyfinder.ae/en/buy/abu-dhabi/properties-for-sale.html`

> Search pages with filters (`?bedrooms=`, `?price=` ...) are not supported, because PropertyFinder's robots.txt disallows them. Use listing pages and filter the results (for example by `bedrooms` or `price`) after the run.

#### Input example

```json
{
    "startUrls": [
        "https://www.propertyfinder.ae/en/buy/dubai/apartments-for-sale-dubai-marina.html",
        "rent"
    ],
    "maxPagesPerUrl": 5,
    "maxItems": 500,
    "includeDescription": true
}
```

### Output example

```json
{
    "listingId": "163274506",
    "reference": "L-294286",
    "title": "Two Bed | Renovated | Marina And Sea View",
    "offeringType": "Residential for Sale",
    "propertyType": "Apartment",
    "price": 5800000,
    "currency": "AED",
    "pricePeriod": "sale",
    "pricePerSqft": 2765,
    "bedrooms": 2,
    "bedroomsText": "2",
    "bathrooms": 3,
    "size": 2097,
    "sizeUnit": "sqft",
    "furnished": "no",
    "completionStatus": "completed",
    "location": "Damac Heights, Dubai Marina, Dubai",
    "city": "Dubai",
    "community": "Dubai Marina",
    "subCommunity": null,
    "building": "Damac Heights",
    "latitude": 25.0872,
    "longitude": 55.1456,
    "amenities": ["Balcony"],
    "listedAt": "2026-10-23T19:05:08Z",
    "isVerified": true,
    "isPriceDrop": false,
    "listingLevel": "standard",
    "permitNumber": null,
    "description": "Two Bedroom | Renovated | Marina And Sea View ...",
    "images": ["https://static.shared.propertyfinder.ae/media/images/listing/.../416x272.jpg"],
    "imagesCount": 21,
    "brokerName": "Allsopp & Allsopp",
    "brokerLogo": "https://static.shared.propertyfinder.ae/media/images/client_logos/5394/...jpg",
    "url": "https://www.propertyfinder.ae/en/plp/buy/apartment-for-sale-dubai-dubai-marina-damac-heights-163274506.html",
    "searchUrl": "https://www.propertyfinder.ae/en/buy/dubai/apartments-for-sale-dubai-marina.html",
    "scrapedAt": "2026-10-24T03:40:00+00:00"
}
```

### 🔔 Monitoring mode: only new listings and price drops

Tick **Only new and changed listings (monitoring)** and schedule the Actor (for example every morning). It remembers what earlier runs saw and outputs only listings that are:

- **new** to this monitor,
- **price_changed** - e.g. a price drop (`previousPrice` shows the old price),
- **status_changed** - the completion status changed (e.g. off-plan to completed).

Unchanged listings are skipped, so **you pay only for the changes**. The first run outputs every listing as `new` and saves the starting point. The history is kept in a key-value store on your own Apify account (one per set of listing URLs, or per **Monitor name**).

Tip: set **Pages per listing URL** high enough to cover the whole area, so listings that move down the pages are still checked.

### Cost

You pay per listing returned (see the **Pricing** tab). Use **Max listings** or a run spending limit to stay in control - the Actor stops cleanly when either is reached.

### Privacy and good behaviour

- **No personal data**: agent names, photos, phone numbers, WhatsApp links and e-mails are never included, and phone numbers / e-mails written inside descriptions are removed. Only the agency (company) name and logo are kept.
- The Actor reads PropertyFinder's robots.txt first and never requests a page it disallows.
- It identifies itself, waits between requests (2 s by default) and stops if PropertyFinder ever refuses access.
- Only public listing information is collected - no login.

### FAQ

**How many listings can I get?** As many as the listing pages show - set *Pages per listing URL* high for big areas.

**Can I filter by bedrooms or price?** Not in the input (robots.txt disallows filtered search URLs), but every listing has `bedrooms`, `price` and `size`, so filtering the results takes one click in the dataset view or a spreadsheet.

**Why is `permitNumber` often empty?** Many listing tiles don't show it.

**Something broke?** Open an issue on the Actor page - fixes are usually quick.

# Actor input Schema

## `startUrls` (type: `array`):

One per line: a PropertyFinder listing page URL (open the area / property type you want on propertyfinder.ae and copy the address, e.g. https://www.propertyfinder.ae/en/buy/dubai/apartments-for-sale-dubai-marina.html), or simply 'buy' or 'rent' for all of the UAE. Search pages with filters (?price=, ?bedrooms= ...) are not supported because PropertyFinder's robots.txt disallows them.

## `maxPagesPerUrl` (type: `integer`):

Each page has 25 listings.

## `maxItems` (type: `integer`):

Stop after this many listings in total. Leave empty for no limit.

## `monitorMode` (type: `boolean`):

Remembers what earlier runs saw and outputs only listings that are new, or whose price or completion status changed. Schedule the Actor daily and you pay only for the changes. Each row gets changeType, previousPrice and previousStatus. The first run outputs every listing as 'new'.

## `monitorName` (type: `string`):

Optional. Keeps separate histories for different monitors (letters, numbers, dashes). Leave empty to use one history per set of listing URLs.

## `includeDescription` (type: `boolean`):

The listing's description text (phone numbers and e-mails are removed).

## `requestDelayMs` (type: `integer`):

Pause between two requests to PropertyFinder. Higher is gentler on the site; the minimum is 1000 ms.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.propertyfinder.ae/en/buy/dubai/apartments-for-sale-dubai-marina.html"
  ],
  "maxPagesPerUrl": 5,
  "maxItems": 100,
  "monitorMode": false,
  "includeDescription": true,
  "requestDelayMs": 2000
}
```

# Actor output Schema

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

No description

# 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 = {
    "startUrls": [
        "https://www.propertyfinder.ae/en/buy/dubai/apartments-for-sale-dubai-marina.html"
    ],
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("tgsneaks/propertyfinder-uae-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 = {
    "startUrls": ["https://www.propertyfinder.ae/en/buy/dubai/apartments-for-sale-dubai-marina.html"],
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("tgsneaks/propertyfinder-uae-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 '{
  "startUrls": [
    "https://www.propertyfinder.ae/en/buy/dubai/apartments-for-sale-dubai-marina.html"
  ],
  "maxItems": 100
}' |
apify call tgsneaks/propertyfinder-uae-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tgsneaks/propertyfinder-uae-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/nrCtlm1eUH824Ly0h/builds/lCLzBaoFGq7QVO6Jk/openapi.json
