# Property Finder UAE Listings Scraper (`clearrowdata/propertyfinder-scraper`) Actor

Scrape rent and sale listings from Property Finder UAE (propertyfinder.ae): price, size, bedrooms, location, coordinates, amenities and agency. Fast HTTP-only, no personal data, respects robots.txt.

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

## Pricing

from $1.00 / 1,000 listing scrapeds

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

### What does Property Finder UAE Listings Scraper do?

**Property Finder UAE Listings Scraper** extracts **rent and sale listings** from [Property Finder](https://www.propertyfinder.ae) – the UAE's largest property portal – and returns them as clean, structured data: **price, price frequency, bedrooms, bathrooms, size, furnishing, completion status, community, coordinates, amenities, agency and listing URL**. Think of it as an unofficial **Property Finder API** for Dubai, Abu Dhabi, Sharjah and the other emirates.

It is fast and lightweight (pure HTTP, no browser), polite to the website, and **collects no personal data** – no agent names, phone numbers or emails, only the agency's company name.

### Why scrape Property Finder?

- 📈 **Market research** – track asking rents and sale prices per community, bedroom count or property type.
- 🏘️ **Investment analysis** – compare yields across areas, spot off-plan supply, monitor new listings daily.
- 🗺️ **Geo analysis** – every listing has latitude/longitude, ready for maps and heatmaps.
- 🏢 **Competitive intelligence** – see which agencies list most in a given area.

Running on Apify gives you **scheduling** (e.g. every morning), **API access**, **integrations** (Google Sheets, Make, Zapier, webhooks) and run **monitoring** out of the box.

### What data can Property Finder UAE Listings Scraper extract?

| Field | Type | Description |
|---|---|---|
| `listingId` | string | Property Finder listing ID |
| `title` | string | Listing headline |
| `price` / `currency` | number / string | Asking price, e.g. `120000` `AED` |
| `priceFrequency` | string | `yearly`, `monthly`, `weekly`, `daily` (rent) or `sale` |
| `propertyType` | string | Apartment, Villa, Townhouse, … |
| `bedrooms` / `bathrooms` | integer | Bedrooms (`0` = studio) and bathrooms |
| `sizeSqft` | number | Built-up area in sq ft |
| `furnished` | string | `furnished`, `unfurnished`, `partly-furnished` |
| `completionStatus` | string | `completed`, `off_plan`, `completed_primary`, `off_plan_primary` |
| `community` / `subCommunity` / `city` | string | Location hierarchy |
| `latitude` / `longitude` | number | Coordinates |
| `agencyName` | string | Listing agency (company name only) |
| `listedDate` | string | ISO 8601 publish date |
| `verified` | boolean | Property Finder "verified" badge |
| `amenities` | array | e.g. `["Shared Pool", "Covered Parking"]` |
| `imageCount` | integer | Number of photos |
| `listingUrl` | string | Link to the listing |

### How to scrape Property Finder

1. Click **Try for free** / **Start**.
2. Either pick **City**, **Rent or buy** and **Property type**, *or* paste one or more Property Finder **category URLs** such as `https://www.propertyfinder.ae/en/buy/abu-dhabi/villas-for-sale.html`.
3. Set **Maximum listings**.
4. Click **Start** and download your data as JSON, CSV, Excel or HTML.

### How much will it cost to scrape Property Finder?

This Actor uses **pay-per-event** pricing. You pay for two events:

| Event | When it is charged |
|---|---|
| `actor-start` | Once per run |
| `listing-scraped` | Once per listing saved to the dataset |

**Cost example** (illustrative prices – the actual prices are shown on the Pricing tab): with `actor-start` at $0.005 and `listing-scraped` at $0.002, scraping **1,000 listings** costs **$0.005 + 1,000 × $0.002 = $2.005**.

- **Free Apify plan:** runs are capped at **20 listings** so you can test the output.
- **Paid plans:** up to your `maxResults`. The Actor also stops automatically when your *maximum cost per run* is reached, so you never pay more than you set.

### Input

See the **Input** tab for all options. Example:

```json
{
    "city": "dubai",
    "offeringType": "rent",
    "propertyType": "apartments",
    "maxResults": 100
}
```

or

```json
{
    "startUrls": [{ "url": "https://www.propertyfinder.ae/en/buy/sharjah/properties-for-sale.html" }],
    "maxResults": 100
}
```

**Accepted URLs:** category pages of the form `https://www.propertyfinder.ae/en/{rent|buy}/{city}/{type}-for-{rent|sale}.html`, optionally with `?page=N`. Community-level category pages work too. Search URLs (`/en/search?…`) and filter parameters (`bedrooms=`, `price=`, `ob=`, …) are **skipped**, because Property Finder's robots.txt disallows them – see Limitations.

### Output

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. Sample item (values anonymized):

```json
{
    "listingId": "100000001",
    "title": "Single Row | 4BR+M Villa | Close To Facilities",
    "price": 5050000,
    "currency": "AED",
    "priceFrequency": "sale",
    "propertyType": "Villa",
    "bedrooms": 4,
    "bathrooms": 5,
    "sizeSqft": 2497,
    "furnished": "unfurnished",
    "completionStatus": "off_plan",
    "community": "Yas Island",
    "subCommunity": "Yas Park Gate",
    "city": "Abu Dhabi",
    "latitude": 24.4985,
    "longitude": 54.6168,
    "agencyName": "Example Real Estate LLC",
    "listedDate": "2026-11-05T12:52:21Z",
    "verified": false,
    "amenities": ["Central A/C", "Shared Gym", "Shared Pool", "Covered Parking", "Private Garden", "Maids Room"],
    "imageCount": 20,
    "listingUrl": "https://www.propertyfinder.ae/en/plp/buy/villa-for-sale-abu-dhabi-yas-island-yas-park-gate-100000001.html"
}
```

### Limitations

- **No search / filter URLs.** Property Finder's robots.txt disallows `/en/search?…` and filter query parameters, so the Actor only crawls category pages (city × rent/buy × property type, or a community category page). Filter by bedrooms, price, etc. in the downloaded dataset instead.
- **Results come from search result pages only** (about 25 listings per page). Detail pages are not opened, so long descriptions and full floor plans are not included. New-project / developer "project" cards are skipped – only individual listings are returned.
- **Hidden prices** are returned as `null`. `completionStatus` is usually empty for rentals.
- **Polite by design:** max 2 concurrent requests, 500 ms between requests to the same domain, and a descriptive User-Agent. Large scrapes therefore take a while (~1,000 listings in a few minutes).
- **No blocking bypass.** If Property Finder blocks the crawler (HTTP 403/429 or a CAPTCHA page), the Actor stops cleanly, keeps what it has already scraped, and reports the reason in the run status. It never tries to solve CAPTCHAs.
- The Actor relies on the JSON embedded in Property Finder's pages; if the site changes its structure, it may need an update.

### FAQ, disclaimers and support

**Does it collect personal data?** No. Agent names, photos, phone numbers, WhatsApp links and emails are never stored – only the agency's company name. Free-text descriptions and agency reference numbers are not stored either, because they often contain phone numbers or people's names.

> Our Actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our Actors, when used for ethical purposes by Apify users, are safe. However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

This Actor is not affiliated with or endorsed by Property Finder. Found a bug or need a field? Open an issue in the **Issues** tab. For programmatic access, see the **API** tab.

# Changelog

This Actor's version history is a separate document: https://apify.com/clearrowdata/propertyfinder-scraper/changelog.md

# Actor input Schema

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

Category pages to scrape, e.g. https://www.propertyfinder.ae/en/rent/dubai/apartments-for-rent.html. Leave empty to use City / Rent or buy / Property type below. Note: /en/search?… URLs and filter query parameters (bedrooms, price, …) are disallowed by Property Finder's robots.txt and will be skipped; only ?page=N is allowed.

## `city` (type: `string`):

Emirate / city to search. Used only when no category URLs are given.

## `offeringType` (type: `string`):

Rental listings (yearly/monthly prices) or properties for sale.

## `propertyType` (type: `string`):

Type of residential property. "All properties" includes every residential type.

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

Stop after this many listings. Users on the Apify free plan are capped at 20 listings per run.

## `proxyConfiguration` (type: `object`):

Optional. The Actor works without a proxy; requests are made politely (max 2 concurrent, 500 ms apart).

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.propertyfinder.ae/en/rent/dubai/apartments-for-rent.html"
    }
  ],
  "city": "dubai",
  "offeringType": "rent",
  "propertyType": "apartments",
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `listings` (type: `string`):

Dataset containing all scraped listings

# 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": [
        {
            "url": "https://www.propertyfinder.ae/en/rent/dubai/apartments-for-rent.html"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("clearrowdata/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 = { "startUrls": [{ "url": "https://www.propertyfinder.ae/en/rent/dubai/apartments-for-rent.html" }] }

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,clearrowdata/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/05BuoQ3sINAGjg9dA/builds/a5mjSj4CaVonmg3ft/openapi.json
