# Property Finder UAE Real Estate Listings Scraper (`drramerets/propertyfinder-listings`) Actor

Property adverts across all eight UAE emirates: sale and rent, homes and commercial. Price, size, rooms, amenities, coordinates, full advert text, and the agent and agency behind each one. Switch on the listing page for the permit, licence numbers, full-size photos and floor plans.

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

## Pricing

Pay per event + usage

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

## Property Finder UAE Real Estate Listings Scraper

Export property listings from Property Finder across the UAE — apartments, villas,
townhouses, penthouses, land, offices, shops, warehouses and more, for sale and for rent,
residential and commercial. Every listing comes with the full advert text, price, size,
bedrooms, exact location with map coordinates, amenities, photos, the listing agent and
agency, and their phone, WhatsApp and email.

Filter by purpose, segment, property type, emirate, price, size, completion status,
furnishing and listing age — no need to hunt for URLs first.

### What you get

| Field | Description |
|---|---|
| `id`, `listing_id`, `reference` | Listing identifiers and the agency's own reference |
| `url` | Link to the listing |
| `title`, `description` | Headline and the full advert text as written by the agent |
| `purpose`, `segment` | For sale or for rent; residential or commercial |
| `offering_type` | The portal's own wording, for example "Residential for Sale" |
| `price`, `currency`, `price_period` | Price in AED; for rentals, the period it covers |
| `price_per_sqft`, `price_per_sqm` | Asking price per unit of area |
| `bedrooms`, `bathrooms` | Bedrooms (studios are 0) and bathrooms |
| `area_sqft`, `area_sqm` | Built-up area in both units |
| `property_type` | Apartment, villa, townhouse, office, warehouse and so on |
| `completion_status` | Ready, off-plan, or ready and sold directly by the developer |
| `furnishing` | Furnished, unfurnished or partly furnished |
| `city`, `community`, `subcommunity`, `tower` | The full location hierarchy |
| `location_full_name` | Location as one readable line |
| `lat`, `lng` | Map coordinates |
| `amenities` | Pool, gym, parking, maids room and the rest, as one line |
| `agent`, `agent_id`, `agent_url` | Listing agent |
| `agent_email`, `agent_languages` | Agent's email and the languages they speak |
| `agent_is_super_agent` | The portal's own quality status for agents |
| `agency`, `agency_id`, `agency_url` | Listing agency |
| `agency_email`, `agency_phone`, `agency_address` | Agency contact details and office |
| `phone`, `whatsapp`, `email` | How to reach whoever is handling this listing |
| `images`, `cover_image`, `images_count` | Full photo links, and how many there are |
| `floor_plans_count`, `has_360_tour`, `video_url` | Extra media attached to the listing |
| `is_verified` | Whether the portal verified the listing |
| `is_exclusive`, `is_premium` | Exclusivity and placement level |
| `is_price_drop`, `is_great_value`, `is_high_demand` | The portal's own deal badges |
| `rera` | Regulatory permit number published with the advert |
| `listed_date` | When the listing was published |
| `scraped_at` | When this row was collected, so two exports can be compared |

#### With "Read each listing's own page" switched on

Fifteen more columns, filled from the listing's own page. They are always present in the
export — empty when the option is off — so two exports always line up column for column.

| Field | Description |
|---|---|
| `permit_number`, `permit_validation_url` | The advertising permit and the regulator's own link to check it |
| `permit_regulator` | Which regulator issued it: `DLD` (Dubai Land Department) or `ADREC` (Abu Dhabi) |
| `permit_holder_license` | The licence number the permit was issued under; it belongs to the agency |
| `agent_license`, `agent_license_type` | The agent's licence number and which register it is from |
| `agency_license` | The agency's registration number in the brokers' register |
| `images_full` | Photo links in full size (1312×894), rather than the search-result thumbnails |
| `floor_plan_urls` | Floor plan images, where the agent uploaded any |
| `zone_name` | The land-registry zone the property sits in |
| `rental_availability_date` | When a rental becomes available |
| `title_original`, `description_original` | Headline and advert text in the language they were written in |
| `url_ar` | The Arabic version of the listing page |
| `similar_transactions_count` | How many comparable recorded transactions the site shows |

This opens one extra page per listing, so a run takes about ten times longer and is
capped at 5,000 listings. Everything above it in the table comes from the search results
and is collected either way.

### Input

```json
{
  "purpose": ["for-sale"],
  "segment": ["residential"],
  "propertyTypes": ["Villa", "Townhouse"],
  "emirates": ["Dubai"],
  "priceMin": 3000000,
  "priceMax": 6000000,
  "completionStatus": "completed",
  "maxItems": 1000,
  "includeDetails": false
}
```

Leave every filter empty to cover the whole of the UAE, both sale and rent, residential
and commercial.

Switch `includeDetails` on to add the permit, licence, full-size photo and floor plan
columns described above. It opens every listing's own page, so keep `maxItems` modest —
runs with it on are capped at 5,000 listings.

### Output

One row per listing:

```json
{
  "id": "119480097",
  "url": "https://www.propertyfinder.ae/en/plp/buy/villa-for-sale-dubai-reem-mira-oasis-119480097.html",
  "title": "Landscaped | Near to Pool and Park | Type G",
  "description": "This vacant Type G villa offers 4 bedrooms, a maid's room, and a private landscaped garden...",
  "purpose": "for-sale",
  "segment": "residential",
  "price": 3300000,
  "currency": "AED",
  "price_per_sqft": 1435,
  "bedrooms": 4,
  "bathrooms": 4,
  "area_sqft": 2300,
  "area_sqm": 213.68,
  "property_type": "Villa",
  "completion_status": "completed",
  "city": "Dubai",
  "community": "Reem",
  "subcommunity": "Mira Oasis",
  "lat": 25.0219,
  "lng": 55.2833,
  "amenities": "Central A/C, Balcony, Covered Parking, Maids Room",
  "agent": "Jane Doe",
  "agent_email": "jane@example-realty.ae",
  "agency": "Example Real Estate",
  "agency_phone": "+97140000000",
  "phone": "+971500000000",
  "whatsapp": "+971500000000",
  "is_verified": true,
  "rera": "202687000152874",
  "listed_date": "2026-07-20T07:51:09Z",
  "scraped_at": "2026-07-28T19:02:31+00:00"
}
```

### Use cases

- **Price research.** Compare asking prices per square foot by community, property type
  and completion status.
- **Lead sourcing.** Filter to your target community and segment and get the agent and
  agency behind every listing, with their contact details.
- **Agency benchmarking.** See which agencies list what, where, and how much of it.
- **Investment screening.** Combine price, area, bedrooms and completion status to
  shortlist units, then read the full advert text without opening each page.
- **Location analysis.** Map supply and price by community using the coordinates.
- **Commercial property search.** Offices, shops, warehouses and staff accommodation are
  covered alongside homes.

### What is and is not included

Included: everything in the field table above, for listings across all seven emirates,
both sale and rent, both residential and commercial.

Not included:

- developer promotions and whole-development adverts; this returns individual properties
- sold, let or archived listings; this returns what is currently advertised
- transaction history and past sale prices

Some listings are published without a subcommunity, a building name, an amenity list or a
video; those fields come back as `null` or empty rather than being dropped. Setting a
price or size range skips listings published without one.

Contact details are the ones the agent and agency publish on the listing itself so that
buyers and tenants can reach them.

### What it costs

**$2.00 per 1,000 listings**, or **$4.00 per 1,000** for listings read with "Read each
listing's own page" switched on. You are charged the higher rate only for rows that
actually carry the permit and licence columns — if a listing's own page does not load,
that row is charged at the base rate.

No charge for starting a run, and no charge for the filters you try before you find the
right ones.

On top of that Apify bills your account for what the run consumes on the platform —
computing time and data transfer. This actor reads the portal directly, without a browser,
so that part stays small: in our own measurements a thousand listings came to under a cent
without the listing pages, and about three cents with them.

### Support

Questions, a field you need that is not here, or another portal — write to
**admin@noonseller.ae** or visit **[noonseller.ae](https://noonseller.ae)**.

*This is an independent tool. It is not affiliated with, endorsed by, or connected to
Property Finder.*

### FAQ

**Which emirates are covered?** Dubai, Abu Dhabi, Sharjah, Ajman, Ras Al Khaimah,
Fujairah, Umm Al Quwain and Al Ain.

**How are rent prices expressed?** As published, together with `price_period` — yearly,
monthly, weekly or daily. Compare like with like before aggregating.

**Do studios show up?** Yes, with `bedrooms` set to 0.

**Why are there three completion statuses?** Besides ready and off-plan, the site marks
ready homes that the developer is selling directly. Filtering for ready properties
returns both kinds.

**Can I get everything at once?** Yes, up to the run limit you set. Very broad requests
can return fewer listings than the limit; the run always says why in its status message —
whether the site stopped serving them, or whether the limit you set was reached before
the rest of your filters were even visited.

**When should I switch on "Read each listing's own page"?** When you need the advertising
permit and the regulator behind it, the agent's or agency's licence number, full-size
photos or floor plans. Those are published on the listing page only, so getting them
costs one extra request per listing: expect roughly ten times the run time, and a cap of
5,000 listings per run. Everything else is the same either way, and the columns stay in
the export regardless, so exports made with and without it line up.

**Some rows came back without the permit and licence columns. Why?** The listing's own
page did not load for those rows. The run says how many when it is more than a few; the
data collected from the search results is unaffected, and a re-run usually fills them in.

**Why do some listings share a phone number?** Larger agencies route enquiries through a
single line. The agent name and email still identify who is handling the listing.

# Actor input Schema

## `purpose` (type: `array`):

Keep only listings for sale or for rent. Leave empty to cover both.

## `segment` (type: `array`):

Residential homes, commercial premises, or both. Leave empty to cover both.

## `propertyTypes` (type: `array`):

Keep only these property types. Leave empty to cover all of them.

## `emirates` (type: `array`):

Limit results to these emirates. Leave empty to cover the whole of the UAE.

## `priceMin` (type: `integer`):

Lowest asking price to include. Listings published without a price are skipped when a price range is set.

## `priceMax` (type: `integer`):

Highest asking price to include. For rentals this is the price as published, so compare like with like.

## `areaMinSqft` (type: `integer`):

Smallest built-up area to include, in square feet.

## `areaMaxSqft` (type: `integer`):

Largest built-up area to include, in square feet.

## `completionStatus` (type: `string`):

Ready properties or off-plan ones. Leave empty to cover both.

## `furnishing` (type: `string`):

Keep only listings with this furnishing. Leave empty to cover all of them.

## `listedWithinDays` (type: `string`):

Keep only listings published recently. Leave empty for listings of any age.

## `keyword` (type: `string`):

Free-text search across listing titles and descriptions, for example a building or community name.

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

Stop after this many listings. Keep it modest for a first trial run. With "Read each listing's own page" switched on, 5,000 is the most a single run can do.

## `includeDetails` (type: `boolean`):

Adds the advertising permit with the regulator that issued it and its validation link, the agent and agency licence numbers, full-size photos, floor plans, the zone name and the original-language text. This opens every listing's own page, so a run takes about ten times longer, is priced at double the rate per listing, and is capped at 5,000 listings — more than that does not fit into the one-hour run limit. For larger jobs, run it in several parts or leave this off.

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

Proxy used to reach the site. The default works for most runs; switch on a residential proxy if the site starts refusing requests.

## Actor input object example

```json
{
  "purpose": [],
  "segment": [],
  "propertyTypes": [],
  "emirates": [],
  "completionStatus": "",
  "furnishing": "",
  "listedWithinDays": "",
  "maxItems": 1000,
  "includeDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One row per listing: price, location, rooms, area, amenities, agent and agency, images and the regulator reference.

# 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("drramerets/propertyfinder-listings").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("drramerets/propertyfinder-listings").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 '{}' |
apify call drramerets/propertyfinder-listings --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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