# Dubai Apartments & UAE Property Scraper — PropertyFinder (MCP) (`amygraphics/uae-property-scraper`) Actor

Dubai & UAE real estate scraper: apartments for sale and villas for rent on PropertyFinder.ae — Dubai, Abu Dhabi, Sharjah. Price AED, size sqft/m², bedrooms, GPS, agency phone & email, off-plan projects. MCP-ready for AI agents.

- **URL**: https://apify.com/amygraphics/uae-property-scraper.md
- **Developed by:** [Zakaria el bouami](https://apify.com/amygraphics) (community)
- **Categories:** Real estate
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 listing extracteds

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

## Dubai Apartments & UAE Property Scraper — PropertyFinder (MCP)

Extract **UAE real-estate listings** from **PropertyFinder.ae** — the largest property portal of the Emirates (Dubai, Abu Dhabi, Sharjah, Ajman, Ras Al Khaimah, Fujairah, Umm Al Quwain). For **sale or for rent**, resale listings **and** off-plan new developments. No browser, no proxy, no API key.

Part of the *data franchise* series by the same developer: 🇲🇦 Morocco (Avito, Mubawab) • 🇫🇷 France (Paruvendu, Bien'ici, BODACC + SIRENE, jobs, notarial sales + DPE) • 🇦🇪 UAE (PropertyFinder).

### What you get

One JSON row per listing, with **two row shapes**:

#### `listingType: "property"` — a normal listing

| Field | Example |
|---|---|
| `title` | Boulevard View | Vacant | Pristine Condition |
| `price` / `priceText` | 1950000 / AED 1,950,000 |
| `pricePerArea` | 2440 AED per sqft |
| `size` / `sizeSqft` / `sizeM2` | 799 / 799 / 74.2 |
| `bedrooms` / `bathrooms` | 1 / 2 |
| `propertyType` | Apartment |
| `furnished` / `completionStatus` | NO / completed |
| `locationFull` / `locationPath` | 29 Burj Boulevard Tower 2, Downtown Dubai, Dubai / 1.41.617.2775 |
| `latitude` / `longitude` | 25.191753 / 55.272819 |
| `brokerName` / `brokerPhone` / `brokerEmail` | Betterhomes - Business Bay / +97144081000 / … |
| `agentName` / `agentIsSuperAgent` | Mamoun Hemora / true |
| `amenities` | Shared Pool, Shared Gym, Covered Parking, Balcony… |
| `images` / `imagesCount` | up to 10 image URLs / 13 |
| `listedDate` | 2026-09-17T09:57:53Z |
| `url` | direct link to the listing page |

#### `listingType: "project_unit"` — an off-plan unit in a new development

`startingPriceMin` / `startingPriceMax`, `areaMin` / `areaMax`, `paymentPlanDownPayment`, `paymentPlanDuringConstruction`, `paymentPlanHandover`, `completionStatus` (handover date), `brokerName` (the developer, e.g. Emaar, Aldar), plus location and GPS.

### How to use

1. Choose **buy** or **rent** and the **emirate** (Dubai has the deepest inventory).
2. Pick a **property type** and, optionally, **bedrooms** (`["1","2"]` or `["studio"]`) and a **price range in AED** (for rentals, the yearly rent).
3. Set **sort** (newest first is best for monitoring), **max pages** and **max listings**, then press **Start**.

**Examples**

- 1-bedroom Dubai apartments for sale between 800k and 1.5M AED, newest first.
- All Dubai rentals, furnished only.
- Villas in Abu Dhabi (returns off-plan units with payment plans).

### Use cases

- **Brokers & agencies** — competitor inventory, price positioning, lead lists with agency phone + email.
- **Investors** — market pricing per area, rental yields, off-plan launches.
- **Analysts & proptech** — automated market reports, price-drop monitoring, AVM training data.
- **AI agents** — a ready-to-call UAE property tool (this Actor supports agentic payments via the Apify MCP server).

### Use from AI agents (MCP)

This Actor is exposed as a tool through **Apify's MCP server**, so any MCP client — Claude, Cursor, VS Code / Copilot, Codex, or a custom agent — can discover and run it without writing any code:

```json
{
  "mcpServers": {
    "apify": { "url": "https://mcp.apify.com?tools=amygraphics/uae-property-scraper" }
  }
}
```

Then simply ask your agent: *“Use amygraphics/uae-property-scraper to get the newest 1-bedroom apartments for sale in Dubai between 800k and 1.5M AED, with agency phone numbers.”*

Agents can also pay autonomously: this Actor is **whitelisted for agentic payments** (Direct x402 / Apify AGI prepaid token), so a run does not even require an Apify account.

### Pricing

Pay-per-event: a small start fee plus **$5 per 1,000 listings** extracted. Failed pages are free.

### Notes & limitations

- Data comes from the portal's own server-side payload, so everything shown on the page is available, including agency contact details.
- Deep pagination is capped by the portal (~200 pages per search). Narrow the filters for larger exports.
- Listings marked as "project" carousels without a real unit are skipped.

***

## Version FR

Extrait les **annonces immobilières des Émirats** depuis **PropertyFinder.ae** (Dubaï, Abu Dhabi, Sharjah, Ajman, Ras Al Khaimah, Fujairah, Umm Al Quwain) : **vente ou location**, annonces classiques **et** projets neufs (off-plan avec prix de départ et plan de paiement). Sans navigateur, sans proxy, sans clé API.

Vous obtenez une ligne JSON par annonce : prix en AED, prix au sqft, surface (sqft et m²), chambres, salles de bain, meublé, GPS, chemin complet de localisation, **téléphone et e-mail de l'agence**, nom de l'agent, équipements, images et lien direct.

**Cas d'usage :** agences et courtiers (veille concurrentielle, listes de contacts avec téléphone + e-mail), investisseurs (prix par quartier, rendements, lancements off-plan), analystes et proptech (rapports de marché automatisés, suivi des baisses de prix), agents IA.

**Agents IA (MCP) :** cet Actor est exposé comme outil du serveur MCP d'Apify — branchez simplement `https://mcp.apify.com?tools=amygraphics/uae-property-scraper` dans Claude, Cursor, VS Code ou Codex, puis demandez vos données en langage naturel. Les agents peuvent payer seuls (x402 / AGI) : l'Actor est *whitelisted* pour les paiements agentiques.

**Prix :** paiement à l'événement — petit frais de démarrage + **5 $ les 1 000 annonces**. Les pages en échec ne sont pas facturées.

# Actor input Schema

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

Look for properties for sale or for rent. Rental prices are yearly AED amounts.

## `emirate` (type: `string`):

Which emirate to search. Dubai has by far the largest inventory (~84k apartments for sale, ~121k for rent).

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

Apartment, villa, townhouse, penthouse or land. Villas and townhouses often come back as new-development units (off-plan) with starting prices and payment plans.

## `bedrooms` (type: `array`):

Optional bedroom filter. Use numbers: 1, 2, 3, 4 - or 'studio'. Leave empty for all sizes. Example: \["1","2"] = one and two bedroom properties.

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

Minimum price in AED. For rentals this is the yearly rent. Leave empty for no minimum.

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

Maximum price in AED. For rentals this is the yearly rent. Leave empty for no maximum.

## `furnished` (type: `boolean`):

Only return furnished properties (useful for rentals).

## `sort` (type: `string`):

Newest = freshest listings first (best for monitoring). Price ascending/descending sorts by price.

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

How many result pages to read. Each page returns up to 25 listings. The portal caps deep pagination, so the practical limit is around 200 pages per search.

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

Maximum number of listings to extract in this run. One billable event per extracted listing.

## `chargedEventName` (type: `string`):

Pay-per-event name charged for each successfully extracted listing.

## Actor input object example

```json
{
  "purpose": "buy",
  "emirate": "dubai",
  "propertyType": "apartment",
  "bedrooms": [
    "1"
  ],
  "furnished": false,
  "sort": "newest",
  "maxPages": 1,
  "maxResults": 10,
  "chargedEventName": "property-extracted"
}
```

# 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 = {
    "purpose": "buy",
    "emirate": "dubai",
    "propertyType": "apartment",
    "bedrooms": [
        "1"
    ],
    "maxPages": 1,
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("amygraphics/uae-property-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 = {
    "purpose": "buy",
    "emirate": "dubai",
    "propertyType": "apartment",
    "bedrooms": ["1"],
    "maxPages": 1,
    "maxResults": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("amygraphics/uae-property-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 '{
  "purpose": "buy",
  "emirate": "dubai",
  "propertyType": "apartment",
  "bedrooms": [
    "1"
  ],
  "maxPages": 1,
  "maxResults": 10
}' |
apify call amygraphics/uae-property-scraper --silent --output-dataset

```

## MCP server setup

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