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

Scrape public Property Finder UAE search results for pricing, property details, location, agency, verification, media, and RERA permit fields. Use for UAE market research and inventory monitoring; not individual agent contacts. Returns one validated listing per item. $0.004 per listing plus usage.

- **URL**: https://apify.com/khadinakbar/propertyfinder-listings-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Real estate, Automation, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 property finder listing scrapeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Dubai Property Scraper — Property Finder UAE Listings

Turn a public Property Finder UAE search page into a clean listings dataset for Dubai market research. Each returned record combines the listing URL, AED price, bedrooms, area, location, brokerage, verification signal, media links, and collection-time provenance so analysts, brokerages, and proptech teams can compare inventory with a stable schema.

### Best fit and focused standalone workflow

Choose this actor for a defined Property Finder UAE search that you want to monitor, compare, or export. It is designed as a focused standalone workflow: create the filters on Property Finder, provide the resulting search URL, and receive one structured record per public listing card. Pair it with your own spreadsheet, BI dashboard, or valuation workflow after export when you want to compare price, area, community, and listing status across a saved market segment.

### Workflow scenario

A Dubai market analyst starts by filtering Property Finder for apartments for sale in Dubai Islands. They provide that search URL with a 100-listing cap, then export the dataset to compare AED price per area by community and brokerage. Next, they schedule the same input on a regular cadence and feed the records into a dashboard that highlights changes in visible inventory, asking prices, and verification signals.

### Input

```json
{
    "searchUrls": ["https://www.propertyfinder.ae/en/buy/dubai/properties-for-sale.html?page=1"],
    "maxResults": 25,
    "maxPages": 1
}
```

`searchUrls` accepts Property Finder UAE search pages. `maxResults` is the strict cap for returned, billable listing records. `maxPages` controls pagination for each supplied search URL; begin with one page, validate the dataset shape, then scale the cap for the market segment you need.

### Data returned

| Group | Fields | How to use them |
| --- | --- | --- |
| Identity | `listingId`, `listingUrl`, `title`, `listingType`, `propertyType` | Join records across exports and open the public listing page. |
| Price and size | `price`, `currency`, `pricePeriod`, `bedrooms`, `bathrooms`, `area`, `pricePerArea` | Compare asking prices and unit economics. |
| Location | `locationName`, `city`, `community`, `latitude`, `longitude` | Segment a market by geography. |
| Market signals | `agencyName`, `isVerified`, `isAvailable`, `furnishing`, `completionStatus`, `reraPermitNumber` | Filter and interpret the public listing context. |
| Provenance | `sourceUrl`, `sourceFetchedAt`, `amenities`, `imageUrls` | Trace each record to its source search and collection time. |

### Output example

```json
{
    "listingId": "116387285",
    "listingUrl": "https://www.propertyfinder.ae/en/plp/buy/apartment-for-sale-dubai-116387285.html",
    "title": "Exclusive | Spacious | Contemporary",
    "listingType": "Residential for Sale",
    "propertyType": "Apartment",
    "price": 2700000,
    "currency": "AED",
    "bedrooms": 2,
    "bathrooms": 3,
    "area": 1318,
    "areaUnit": "sqft",
    "city": "Dubai",
    "community": "Dubai Islands",
    "agencyName": "McCone Properties",
    "isVerified": true,
    "sourceUrl": "https://www.propertyfinder.ae/en/buy/dubai/properties-for-sale.html?page=1"
}
```

Every run also provides an `OUTPUT` record and a `RUN_SUMMARY` record in the default key-value store. They describe the outcome, item counts, pagination progress, cost-event counts, and source diagnostics alongside the dataset.

### Pricing

This actor uses Pay per event plus platform usage. One validated listing written to the dataset is priced at **$0.004** and the actor-start event is **$0.00005**. A 25-listing cap therefore has up to **$0.100** in listing-event charges plus the start event; platform usage covers the run's compute and proxy resources. See the live Pricing tab for the current event pricing and platform-usage details before scheduling a larger collection.

### API call

```bash
curl "https://api.apify.com/v2/acts/khadinakbar~propertyfinder-listings-scraper/runs?token=YOUR_APIFY_TOKEN" \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
    "searchUrls": ["https://www.propertyfinder.ae/en/buy/dubai/properties-for-sale.html?page=1"],
    "maxResults": 25,
    "maxPages": 1
  }'
```

Once collection completes, read the default dataset for listing records and the `OUTPUT` record for the terminal outcome. The `sourceUrl` and `sourceFetchedAt` fields provide provenance for every item.

### AI agent prompt

> Call `khadinakbar/propertyfinder-listings-scraper` for Dubai apartment listings using this Property Finder UAE search URL. Return up to 50 records, group results by community, include AED price per area, and report the dataset readback, terminal outcome, collection time, source URL, pagination cap, and event cost scope.

For MCP and AI-agent workflows, keep `maxResults` aligned with the decision you need to make. Read a representative dataset page first, then use `listingId` and `sourceUrl` as the provenance keys when passing results into an analysis or dashboard step.

### Best results

Provide a specific saved Property Finder UAE search URL for the district, property type, price band, and bedroom range you want to study. Start with a small cap to confirm the market segment, then schedule the same input for repeatable snapshots. Use the stable `listingId` plus `sourceFetchedAt` to separate fresh records from an earlier collection.

### Builder's note

I designed this actor around Property Finder's server-delivered listing payload rather than fragile page-card selectors. My goal was to preserve a compact, analysis-ready contract while retaining source URL and collection-time provenance, so a market workflow can validate where each row came from before comparing it with earlier exports.

### Responsible use

Use public data in accordance with applicable laws, Property Finder site terms, and your organization's data policy. Keep collection purposes specific, authorized, and aligned with the expectations of the relevant market participants.

# Actor input Schema

## `searchUrls` (type: `array`):

Use this when you already have one or more Property Finder UAE search-result pages to monitor. Enter full HTTPS URLs such as 'https://www.propertyfinder.ae/en/buy/dubai/properties-for-sale.html?page=1'. Defaults to a Dubai properties-for-sale search when omitted. This is not for individual listing pages, other domains, or agent profile URLs.

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

Use this to cap how many validated listings the actor returns and bills for. Enter an integer such as '25'. Defaults to 25 and accepts 1 through 1000. This is not a page count; use Maximum pages to limit search-result pages instead.

## `maxPages` (type: `integer`):

Use this to limit pagination for each supplied Property Finder search URL. Enter an integer such as '1'. Defaults to 1 and accepts 1 through 20 pages per URL. This is not a listing limit; Maximum listings remains the hard output and billing cap.

## Actor input object example

```json
{
  "searchUrls": [
    "https://www.propertyfinder.ae/en/buy/dubai/properties-for-sale.html?page=1"
  ],
  "maxResults": 25,
  "maxPages": 1
}
```

# Actor output Schema

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

Validated Property Finder UAE listings in the default dataset.

## `output` (type: `string`):

Compact terminal outcome, item counts, and warnings.

## `runSummary` (type: `string`):

Detailed terminal diagnostics, pagination counts, and billable-event counts.

# 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 = {
    "searchUrls": [
        "https://www.propertyfinder.ae/en/buy/dubai/properties-for-sale.html?page=1"
    ],
    "maxResults": 25,
    "maxPages": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/propertyfinder-listings-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 = {
    "searchUrls": ["https://www.propertyfinder.ae/en/buy/dubai/properties-for-sale.html?page=1"],
    "maxResults": 25,
    "maxPages": 1,
}

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

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

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

```

## CLI example

```bash
echo '{
  "searchUrls": [
    "https://www.propertyfinder.ae/en/buy/dubai/properties-for-sale.html?page=1"
  ],
  "maxResults": 25,
  "maxPages": 1
}' |
apify call khadinakbar/propertyfinder-listings-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=khadinakbar/propertyfinder-listings-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/Naxm7oQSuwJOzJwYi/builds/bMOLPzOBYb0HkcAdd/openapi.json
