# UAE Property Listing Scraper by URL (`drramerets/uae-property-by-url`) Actor

Paste links to individual listings on Property Finder and Bayut and get one row per link, in the same columns for both sites: price, size, location, amenities, photos, the agent and agency, and the permit number. Bad links get a row with the reason, not silence.

- **URL**: https://apify.com/drramerets/uae-property-by-url.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

from $5.00 / 1,000 rows

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/actors/running/actors-in-store.md#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

## UAE Property Listing Scraper by URL

Paste links to property listings on **Property Finder** and **Bayut** and get the full
data behind each one in a single table — price, size, bedrooms, exact location with map
coordinates, amenities, photos, the agent and agency with their contact details, and the
regulatory permit number.

Both sites come back in the same columns, so listings from either one can be compared
side by side without any cleanup.

### What it is for

- **Checking a shortlist.** You have ten links from a client or a chat group and want
  them in one spreadsheet instead of ten open tabs.
- **Monitoring specific properties.** Re-run on a schedule and watch price, availability
  and the agent change over time.
- **Enriching a list you already have.** Feed in links collected elsewhere and get the
  structured record for each.
- **Comparing across sites.** The same unit is often advertised on both sites by
  different agencies at different prices.

### Input

Paste the links, or upload a file with one link per line.

```json
{
  "startUrls": [
    { "url": "https://www.propertyfinder.ae/en/plp/buy/apartment-for-sale-dubai-118573006.html" },
    { "url": "https://www.bayut.com/property/details-15599408.html" }
  ]
}
```

Links are accepted exactly as you copy them from the address bar — with or without the
descriptive part, in English or Arabic, and short share links too. Up to 5,000 links per
run.

### Output

**One row per link, in the order you gave them**, including links that could not be read
— those come back with the reason in the `error` column, so nothing goes missing
silently.

| Field | Description |
|---|---|
| `input_url` | The link exactly as you gave it |
| `source` | Which site the listing is on |
| `error` | Why this link could not be read; empty when it worked |
| `url` | The listing's own canonical link |
| `id`, `reference` | Listing identifier and the agency's own reference |
| `title`, `description` | Headline and the full advert text |
| `purpose`, `segment` | For sale or for rent; residential or commercial |
| `property_type` | Apartment, villa, townhouse, office and so on |
| `price`, `currency`, `rent_frequency` | Price, and 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, always |
| `plot_area_sqft`, `plot_area_sqm` | Plot area, where published |
| `completion_status`, `completion_date` | Ready or off-plan, and the expected handover |
| `furnishing` | Furnished, unfurnished or partly furnished |
| `city`, `community`, `subcommunity`, `building` | 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, comma-separated |
| `agent`, `agent_phone`, `agent_whatsapp`, `agent_email` | Who is handling the listing |
| `agent_license` | The agent's own licence number from the regulator's register |
| `agency`, `agency_phone`, `agency_email`, `agency_address` | The agency behind it |
| `images`, `cover_image`, `images_count` | Full photo URLs, comma-separated, the first one on its own, and how many |
| `floor_plans_count`, `has_360_tour`, `video_url` | Extra media attached |
| `is_verified` | Whether the site verified the listing |
| `permit_number`, `permit_regulator`, `permit_url` | Advertising permit, the regulator that issued it, and the link to check it |
| `project`, `payment_pre_handover_percent`, `payment_post_handover_percent` | Development name and the instalment split before/after handover, for off-plan units |
| `listed_date` | When the listing was published |

#### What each site publishes

Both sites are read into the same columns, but they do not publish the same things. A
field the site does not publish comes back empty rather than guessed.

| | Property Finder | Bayut |
|---|---|---|
| Full advert text | yes | no |
| Agent email | yes | no |
| Agent phone | yes | yes |
| WhatsApp | yes | yes |
| Agent licence number | yes | no |
| Agency email, phone and address | yes | no |
| Permit number | yes | yes |
| Permit regulator | Land Department (Dubai) or ADREC (Abu Dhabi) | Land Department |
| Permit validation link | yes | no |
| Development (project) name | no | yes, for off-plan units |
| Instalment plan for off-plan (`payment_pre_handover_percent` / `payment_post_handover_percent`) | no | yes |
| Plot area | no | yes |

### Example row

```json
{
  "input_url": "https://www.bayut.com/property/details-15599408.html",
  "source": "bayut",
  "error": null,
  "title": "1BR Apartment | Furnished | Community & Pool Views",
  "purpose": "for-sale",
  "price": 1250000,
  "currency": "AED",
  "property_type": "Apartments",
  "bedrooms": 1,
  "bathrooms": 2,
  "area_sqft": 812.5,
  "area_sqm": 75.48,
  "city": "Dubai",
  "community": "Jumeirah Village Circle",
  "lat": 25.0603,
  "lng": 55.2076,
  "amenities": "Central A/C, Balcony, Shared Pool, Covered Parking",
  "agent": "Jane Doe",
  "agent_phone": "+971500000000",
  "agent_whatsapp": "+971500000000",
  "agency": "Example Real Estate",
  "is_verified": true,
  "permit_number": "15948201",
  "permit_regulator": "DLD"
}
```

### What is and is not included

Included: individual property listings on Property Finder and Bayut, for sale and for
rent, residential and commercial, across all seven emirates.

Not included:

- links to search results, agent profiles or developer projects; those are not single
  listings and come back with an explanation in the `error` column
- other property sites — links to them are named and skipped rather than silently dropped
- listings that have been taken down; the link still gets a row saying so

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

**$5.00 per 1,000 rows.** No charge for starting a run, and a bad link costs the same as
a good one — you are not charged extra for finding out a listing is gone.

That is above `propertyfinder-listings` ($2.00–4.00 per 1,000) and well above
`bayut-listings` ($0.60 per 1,000), on purpose: every Property Finder row here costs a
full request to the listing's own page — there is no cheaper overview tier, because
there is no overview here, only the link you paste. A run of ten or fifty links, which is
what this Actor is for, costs a few cents regardless of the per-row rate.

On top of that Apify bills your account for what the run consumes on the platform —
computing time and data transfer. In our own measurements a run of 14 links (4 Property
Finder pages, 7 Bayut listings batched through its index, 3 links that did not resolve)
came to $0.0004 in total run cost, and none of it needed a browser.

### 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 or Bayut.*

### FAQ

**What happens to a bad link?** It still gets a row, with the reason in the `error`
column and your original link in `input_url`. Rows come back in the order you gave the
links, so a long list stays easy to line up.

**Can I mix links from both sites in one run?** Yes. That is the point — the output is
one table regardless.

**Why is the advert text empty for some listings?** Bayut does not publish the advert
text where we read it. Property Finder does.

**Do you follow the link I paste?** Only when needed. The site and the listing number are
read from the link itself, so a link that is not a listing is rejected immediately
without a wasted request.

**Is there a limit?** 5,000 links per run. Split larger lists across several runs.

**Do prices include fees?** No. The price is the asking price as advertised, before
agency commission, transfer fees or service charges.

# Actor input Schema

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

Links to individual property listings on Property Finder or Bayut. Paste them, or upload a file with one link per line.

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

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

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.propertyfinder.ae/en/plp/buy/apartment-for-sale-abu-dhabi-al-reem-island-city-of-lights-radiant-square-118573006.html"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One row per link you gave, in the same order and the same columns whichever marketplace it came from. A link that could not be read still gets a row, with the reason in its error field.

# 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/plp/buy/apartment-for-sale-abu-dhabi-al-reem-island-city-of-lights-radiant-square-118573006.html"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("drramerets/uae-property-by-url").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/plp/buy/apartment-for-sale-abu-dhabi-al-reem-island-city-of-lights-radiant-square-118573006.html" }] }

# Run the Actor and wait for it to finish
run = client.actor("drramerets/uae-property-by-url").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/plp/buy/apartment-for-sale-abu-dhabi-al-reem-island-city-of-lights-radiant-square-118573006.html"
    }
  ]
}' |
apify call drramerets/uae-property-by-url --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,drramerets/uae-property-by-url"
        }
    }
}

```

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/JTcV7IBvpDqd4o9Gt/builds/D1GzRt9reiGfXB6yB/openapi.json
