# PropertyFinder Scraper — Listings, Prices, Agent Leads (`logiover/propertyfinder-scraper`) Actor

Scrape PropertyFinder Dubai & Gulf listings without login. Export prices, geo & agent email/phone to CSV/JSON. A PropertyFinder API alternative.

- **URL**: https://apify.com/logiover/propertyfinder-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** Real estate, Lead generation, AI
- **Features:** Limited permissions
- **Stats:** 13 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.75 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## PropertyFinder Scraper — Dubai, UAE & Gulf Real Estate + Agent Email & Phone (No API)

![Apify Actor](https://img.shields.io/badge/Apify-Actor-00A67E?logo=apify\&logoColor=white) ![No API key](https://img.shields.io/badge/No%20login%20%2F%20API%20key-required-2ea44f) ![Agent leads](https://img.shields.io/badge/Agent%20leads-email%20%2B%20phone-7C3AED) ![Real Estate](https://img.shields.io/badge/Category-Real%20Estate-8B5CF6) ![Export](https://img.shields.io/badge/Export-JSON%20%7C%20CSV%20%7C%20Excel-F59E0B)

Turn any [PropertyFinder](https://www.propertyfinder.ae) search into a clean dataset — **price, beds, baths, size, location + GPS coordinates, property & offering type — and the agent's public email, phone & WhatsApp.** PropertyFinder is the #1 real-estate portal in the UAE and the Gulf, with **120,000+ live listings in Dubai alone**. This Actor reads the site's own structured page data across every country site (`.ae`, `.qa`, `.bh`, `.eg`, `.sa`, `.lb`) and paginates thousands of pages per search — **no login, no API key.**

> ### 🏆 Why this PropertyFinder scraper?
>
> **Two tools in one** — a **property dataset** (price, geo, size, comps for analytics & ML) **and** a **real-estate lead engine** (every listing carries agent name, brokerage, **email, phone & WhatsApp**). **30+ fields per listing** · **thousands of listings per search** · all 6 Gulf country sites · buy & rent · export to JSON / CSV / Excel. The unofficial **PropertyFinder API alternative** — no token, no login.

***

### ✨ What this Actor does / Key features

- 🏠 **Full property data** — title, reference, **price** + currency + period (yearly/sale), property type, offering type (buy/rent), beds, baths, size, furnished, completion status, amenities.
- 📍 **Location & geo** — full location name, **latitude & longitude**, area slug, RERA permit number, listing URL and image count.
- 🎯 **Agent & brokerage leads** — agent name, super-agent flag, brokerage name + logo, and the **public contact email, phone & WhatsApp**.
- 🌍 **All Gulf sites** — UAE (`.ae`), Qatar (`.qa`), Bahrain (`.bh`), Egypt (`.eg`), Saudi (`.sa`), Lebanon (`.lb`) — just paste that site's search URL.
- 🔎 **URL-driven filters** — every filter you set on PropertyFinder (area, beds, price, buy/rent) is read straight from the URL you paste.
- 📄 **Deep pagination** — walks the entire result set, thousands of listings across many pages per search.
- 🧑‍💼 **Buy & rent** — both offering types supported in a single run across multiple cities.
- 🛡️ **Residential-proxy ready** — Apify Proxy with RESIDENTIAL as the default for the highest success rate.
- 💾 **Export anywhere** — download as JSON, CSV, Excel or XML, or pull via the Apify API.

### 🚀 Quick start (3 steps)

1. **Configure** — set your filters on PropertyFinder, copy the URL from the address bar, and paste it into **Search URLs**.
2. **Run** — click **Start**. The Actor paginates the search and streams one clean row per listing into your dataset.
3. **Get your data** — open the **Output** tab and export to **JSON, CSV, Excel or XML**, or pull it via the Apify API.

### 📥 Input

Give the Actor at least one PropertyFinder search URL. Everything else is optional.

#### Example — Dubai apartments for rent (single search)

```json
{
  "searchUrls": ["https://www.propertyfinder.ae/en/search?c=2&t=1&fu=0&rp=y&ob=mr"],
  "maxResults": 500
}
```

#### Example — multi-country, buy + rent in one run

```json
{
  "searchUrls": [
    "https://www.propertyfinder.ae/en/search?c=1&t=1",
    "https://www.propertyfinder.qa/en/search?c=2&t=1"
  ],
  "maxResults": 2000,
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
```

#### Example — agent lead-gen sweep of a single area

```json
{
  "searchUrls": ["https://www.propertyfinder.ae/en/search?c=2&l=50&t=1"],
  "maxResults": 0,
  "maxResultsPerSearch": 3000,
  "maxConcurrency": 3
}
```

| Field | Type | Description | Default |
|-------|------|-------------|---------|
| `searchUrls` | array | PropertyFinder search URLs copied from the site (any country: `.ae`, `.qa`, `.bh`, `.eg`, `.sa`, `.lb`). All filters — area, beds, price, buy/rent — are read from the URL. **Required.** | – |
| `maxResults` | integer | Global cap across all searches. `0` = no limit (a single search can span thousands of pages). | `200` |
| `maxResultsPerSearch` | integer | Per-search cap. `0` = no per-search cap. | `0` |
| `useProxy` | boolean | Route requests through Apify Proxy (residential recommended). | `true` |
| `proxyConfiguration` | object | Apify Proxy settings. Residential gives the highest success rate. | RESIDENTIAL |
| `maxConcurrency` | integer | How many search URLs to process in parallel. | `3` (max `10`) |

> **Finding a search URL:** apply your filters on PropertyFinder itself, then copy the resulting URL from the address bar into `searchUrls`. Every filter encoded in the URL is respected.

#### Additional input fields

These optional fields are also available in the input form and API:

| Field | Type | Default | Description |
|---|---|---|---|
| `dealType` | string | `"1"` | Buy vs. rent, residential vs. commercial. Used when no Search URL is given. |
| `sort` | string | `"nd"` | Result ordering. Used when no Search URL is given. |

### 📤 Output

One clean row per listing — **30+ fields**, exportable to JSON, CSV, Excel or XML. Here is a trimmed sample record:

```json
{
  "id": "98241423",
  "reference": "DPF-R-43750",
  "title": "Exemplary Bulgari Loft | Full Marina Views",
  "url": "https://www.propertyfinder.ae/en/plp/rent/apartment-for-rent-...",
  "offeringType": "Residential for Rent",
  "propertyType": "Apartment",
  "priceValue": 3000000, "priceCurrency": "AED", "pricePeriod": "yearly",
  "bedrooms": 3, "bathrooms": 5, "sizeValue": 6991, "sizeUnit": "sqft",
  "furnished": "YES", "completionStatus": "",
  "locationName": "Bulgari Resort & Residences, Jumeirah Bay Island, Dubai",
  "latitude": 25.20964, "longitude": 55.142,
  "rera": "71297269840", "isExclusive": false,
  "agentName": "Kianoush Darban", "agentIsSuper": true,
  "brokerName": "Driven Properties",
  "contactEmail": "kia@drivenproperties.com",
  "contactPhone": "+971524960123",
  "contactWhatsapp": "+971524960123",
  "scrapedAt": "2026-07-06T12:00:00.000Z"
}
```

The **Output** tab also ships a ready-made **Listings Overview** table — property, price, size, location, agent email + phone.

<details>
<summary><b>📋 Full field reference (click to expand)</b></summary>

| Field | Description |
|-------|-------------|
| `id` / `reference` | Listing ID and broker reference |
| `title` / `description` | Listing title and full description |
| `url` | Listing detail URL |
| `offeringType` / `propertyType` | Residential for Rent/Sale; Apartment, Villa, etc. |
| `priceValue` / `priceCurrency` / `pricePeriod` | Price, currency (AED, QAR…), period (yearly/sale) |
| `bedrooms` / `bathrooms` | Room counts |
| `sizeValue` / `sizeUnit` | Size and unit (sqft/sqm) |
| `furnished` / `completionStatus` | Furnishing and off-plan/ready status |
| `amenities` | List of listing amenities |
| `locationName` / `locationSlug` | Full location name and area slug |
| `latitude` / `longitude` | GPS coordinates |
| `rera` | RERA permit number |
| `isExclusive` / `isVerified` | Exclusivity and verification flags |
| `listedDate` / `imagesCount` | Listing date and image count |
| `agentName` / `agentIsSuper` | Agent name and super-agent flag |
| `brokerName` / `brokerLogo` | Brokerage name and logo URL |
| `contactEmail` / `contactPhone` / `contactWhatsapp` | Public agent contact details |
| `scrapedAt` | ISO 8601 scrape timestamp |

</details>

### 💡 Use cases

- **Real-estate agent lead gen** — build outreach lists of agents & brokerages (email + phone + WhatsApp) by area, price band or project.
- **Market & price analytics** — track price-per-sqft, inventory, new-vs-old and rent-vs-buy across areas.
- **Developer & investor research** — map supply, completion status and payment plans by community.
- **Comps & valuation / AVM** — feed beds, baths, size, geo and price into pricing models.
- **Portals & aggregators** — power a property feed or dashboard from a scheduled run.
- **CRM enrichment** — chain with an email verifier to clean agent emails before outreach.

### 👥 Who uses it

Real-estate lead-gen agencies · brokerages and proptech teams · property investors & developers · market analysts and valuation/AVM builders · portals and aggregators powering listings feeds · CRM and outreach teams.

### 💰 Pricing

This Actor runs on a simple **pay-per-result** model — you pay for the listings you extract, with no separate Apify platform fees to calculate. Try it on the **free tier** first, then scale up. See the **Pricing** tab on this page for the current rate.

### ❓ Frequently Asked Questions

**Is this a PropertyFinder API alternative?**
Yes. PropertyFinder has no public listings API, so this Actor is the practical API alternative — it reads the site's own structured page data and returns every field as a clean dataset, no token required.

**Do I need a PropertyFinder account or API key?**
No. The Actor reads public listing data — no login, no token — only an Apify account.

**Which countries / sites are supported?**
Every PropertyFinder country site — UAE (`.ae`), Qatar (`.qa`), Bahrain (`.bh`), Egypt (`.eg`), Saudi (`.sa`), Lebanon (`.lb`). Just paste that site's search URL.

**How do I filter by area, price or beds?**
Apply the filters on PropertyFinder itself, then copy the resulting URL into `searchUrls`. Every filter encoded in the URL is respected, and the Actor paginates the whole result set.

**Does the scraper return the real-estate agent's email and phone?**
Yes — whenever PropertyFinder exposes them publicly on the listing, email, phone and WhatsApp come through. Where an agent only exposes a phone, the email is `null` (and vice-versa).

**How do I scrape Dubai apartments for rent from PropertyFinder?**
Set your filters on propertyfinder.ae, copy the search URL into `searchUrls` and run to export every listing with price, beds, geo and agent contact.

**How much data can I get?**
A single search can span thousands of listings across many pages. Use `maxResults` / `maxResultsPerSearch` to control volume; `0` means no cap.

**How do I export PropertyFinder data to CSV or JSON?**
Run a search, then download the dataset from the **Output** tab or the Apify API as JSON, CSV or Excel. Every listing — price, geo and agent email/phone — comes through in one export.

**Is scraping this allowed?**
The Actor collects publicly available listing data. You are responsible for complying with PropertyFinder's terms and your local regulations, including how you use agent contact details.

### 🔗 More real estate scrapers by logiover

Building a cross-market property dataset? Pair PropertyFinder with the rest of the real-estate suite:

| Region | Actor |
|---|---|
| 🇬🇷 Greece | [Spitogatos Scraper](https://apify.com/logiover/spitogatos-gr-real-estate-scraper-greece-properties-data) · [XE.gr Scraper](https://apify.com/logiover/xe-gr-real-estate-scraper-greece-property-data) |
| 🇺🇸 USA | [Realtor.com Scraper](https://apify.com/logiover/realtor-com-scraper) · [Redfin Scraper](https://apify.com/logiover/redfin-scraper) |
| 🇩🇪 Germany | [ImmobilienScout24 Scraper](https://apify.com/logiover/immobilienscout24-de-scraper-germany-real-estate) · [WG-Gesucht Scraper](https://apify.com/logiover/wg-gesucht-scraper) |
| 🇵🇱 Poland | [Otodom.pl Scraper](https://apify.com/logiover/otodom-pl-scraper-polish-real-estate-data) |
| 🇨🇿 Czechia | [Sreality.cz Scraper](https://apify.com/logiover/sreality-cz-scraper-czech-real-estate-data) |
| 🇷🇴 Romania | [Storia.ro Scraper](https://apify.com/logiover/storia-ro-scraper-romania-real-estate) |
| 🇮🇹 Italy | [Subito Scraper](https://apify.com/logiover/subito-it-property-scraper) · [Casa.it Scraper](https://apify.com/logiover/casa-it-scraper-italy-real-estate) |
| 🇦🇹 Austria | [Willhaben Scraper](https://apify.com/logiover/willhaben-at-scraper) |
| 🇮🇪 Ireland | [MyHome.ie Scraper](https://apify.com/logiover/myhome-ie-scraper) |
| 🇳🇱 Netherlands | [Funda Scraper](https://apify.com/logiover/funda-scraper) |
| 🇸🇬 Singapore | [EdgeProp Scraper](https://apify.com/logiover/edgeprop-sg-scraper) |

👉 Browse all **[logiover scrapers on Apify Store](https://apify.com/logiover)** — 180+ actors across real estate, jobs, crypto, social media & B2B data.

### ⏰ Scheduling & integration

Schedule this Actor on Apify for a fresh listings + agent-leads feed every morning, straight to the Apify API, a webhook, Google Sheet, S3 or your warehouse. Export to JSON, CSV or Excel, and connect it to **Make, n8n or Zapier** to build automated real-estate and lead-gen pipelines. Chain it with an email verifier to clean agent emails before outreach.

### 🤖 AI Agents, MCP & RAG Integration

**PropertyFinder Scraper** works natively as an on-demand data tool for AI assistants and autonomous workflows.

Connect this Actor directly to **Apify AI**, **Claude Desktop**, **Cursor**, **VS Code**, **Windsurf**, **LangChain**, or **LlamaIndex** via the official **Apify MCP Server** — no custom wrapper code needed:

```json
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=logiover/propertyfinder-scraper"
    }
  }
}
```

- **Schema-typed inputs & outputs:** Clean JSON records with explicit `.actor/input_schema.json` and `.actor/output_schema.json` definitions so LLM agents infer parameters and parse fields accurately without HTML noise.
- **Bounded & predictable runs:** Built-in volume caps and pay-per-result budget guards prevent runaway agent tool loops.
- **RAG & automation ready:** Stream run datasets straight into vector stores, n8n, Make, Zapier, or webhook pipelines.

### 💬 Support, Issues & Reviews

- **Bug reports & target-site changes:** Hit an unexpected empty result or selector change? [Open a ticket in the Issues tab](https://apify.com/logiover/propertyfinder-scraper/issues) with your **Run ID** or sample input — we actively monitor issues and ship fixes fast.
- **Feature & field requests:** Need an additional data attribute or filter? [Request it in the Issues tab](https://apify.com/logiover/propertyfinder-scraper/issues).
- **Enjoying this Actor?** If it saved you engineering time, please consider leaving an honest [review on Apify Store](https://apify.com/logiover/propertyfinder-scraper/reviews) or bookmarking [logiover/propertyfinder-scraper](https://apify.com/logiover/propertyfinder-scraper) — organic developer feedback helps others discover reliable tools and keeps maintenance prioritized.

### ⚖️ Legal

This Actor extracts only publicly available listing data and is intended for legitimate research, analytics and lead-generation use. You are responsible for complying with PropertyFinder's terms of service and any applicable local laws, including how you use agent contact details (GDPR/PDPL and local marketing rules).

***

This Actor is an independent tool. It is not affiliated with, endorsed by, or sponsored by PropertyFinder; PropertyFinder and all other trademarks mentioned here are the property of their respective owners.

### PropertyFinder scraping — frequently asked questions

#### Do I need a PropertyFinder API key, account or login?

No. This Actor reads publicly available pages and feeds, so there is nothing to register for and no credentials to manage.

#### How do I export PropertyFinder data to CSV, Excel, JSON or Google Sheets?

Open the **Storage** tab after a run and pick the format you want — CSV, Excel, JSON, XML or an HTML table. For Google Sheets, Airtable or a database, use the dataset URL or the Apify API so the sheet refreshes itself on every run.

#### Can I schedule this PropertyFinder scraper to run daily or hourly?

Yes. Use the **Schedules** tab and pick a cadence. Daily is enough for most tracking work; pick hourly only if the listings you care about really do change that fast.

#### How many listings can I get, and what does it cost?

See the volume section above for a measured figure. Billing is per result, so you pay for the rows you actually receive and a run that finds nothing costs nothing.

#### Is scraping PropertyFinder legal?

This Actor collects only information that PropertyFinder publishes publicly. It does not log in, does not defeat access controls and does not touch private data. You remain responsible for how you use the output, including under GDPR and similar rules where personal data is involved.

#### What happens if PropertyFinder blocks the run or changes its layout?

A refused exit IP is swapped for a fresh one within a quarter of a second and retried, and rate limiting is waited out rather than fought. If nothing gets through, the run **fails with the reason** instead of reporting success with zero rows — so an empty result always means "no matches", never "the source would not answer".

#### Can I use this with an AI agent, LangChain or an MCP client?

Yes. The Actor is callable over the Apify API and through Apify's MCP server, so an agent can run it and read the dataset back as a tool call.

### 📝 Changelog

#### 2026-11-11

- Added reliable terminal run status telemetry and structured Apify AI / MCP Server (`mcp.apify.com`) tool configuration.
- Added direct Issues & Reviews support links and refreshed live maintenance verification.

#### 2026-11-01

- Monthly health check (2026-11-01): a live run on the current build completed successfully and returned data. Input options, output fields and pricing are unchanged.
- README refreshed: 1 link to retired Actors removed; independence disclaimer added; documented 2 additional input fields.

#### 2026-10-15

- The prefilled example for `maxResults` is now 350 (was 570), so a first run finishes in about a minute and a half.
- Every request now has a hard time limit, so a proxy connection that stalls can no longer hold up the run or push it past its timeout.
- A run that reaches its maximum cost per run now stops cleanly with its results saved and a status message, instead of ending as aborted.
- A proxy group your account cannot use no longer stops the run at start-up; it falls back to the default Apify Proxy.
- Runs with a short timeout (API and AI-agent calls) now finish inside it with what they collected, instead of being cut off.
- Memory is managed within the run's own limit, which removes a rare out-of-memory crash on large pages.
- The default used when the field is left out for `maxResults` is now 4,565 (was 200).

#### 2026-09-23

- Fleet-wide quality audit. Verified end to end against live data and re-checked the input schema, the output columns and the run configuration.
- Output verified on a live run: 34 columns returned, 91.1% of cells populated.
- Run reliability reviewed: 100.0% of public runs succeeded in the last 30 days.
- Input schema, output schema and pricing configuration reviewed.
- Noted that 3 column(s) came back empty in this sample (`isVerified`, `rera`, `contactEmail`); these are under review.

#### 2026-09-01

- Fleet-wide health check. Verified against this Actor's real run history: 30-day success rate, output row counts, per-field fill rates, and peak memory against the configured memory limit.
- Reviewed for the failure patterns that have cost this fleet runs — unguarded proxy setup, retry loops that can outlast the run's own time budget, and full-page HTML parsing that can exhaust a small container.
- No change to input, output fields or scraping logic.

#### 2026-08-11

- Maintenance release: refreshed the build and dependencies.
- Re-verified live execution, non-empty structured output and dataset field/type integrity.
- Reviewed reliability (retries, pagination) and output quality as part of a full-fleet QA pass.

#### 2026-08-01

- Completed the August 2026 full health check: verified empty/programmatic default, Console UI default, and two source-informed alternative inputs on Apify.
- Confirmed successful live execution, non-empty structured output, dataset-field/type integrity, and logical sample quality within the 5-minute quality window.

#### 2026-07-06

- ✨ README overhaul: standardized shields badges, added a full field reference, extra ready-to-run example scenarios, a cross-country real-estate suite grid, and a clearer quick-start.

#### 2026-07-01

- Maintenance pass: re-verified end-to-end on live data and confirmed successful runs within the 5-minute quality window on the default input.
- Sharpened Store metadata (SEO title & description) and expanded the FAQ with high-intent, long-tail questions for easier discovery in Google and Apify Store search.
- Added ready-to-run example tasks that cover common real-world use cases.

#### 2026-06-15

- Reliability pass: re-verified end-to-end on live data with real-world inputs. Routine maintenance build.

#### 2026-06-07

- Docs: added coverage for PropertyFinder API alternative, exporting data to CSV/JSON, and scraping without login.

***

\*Maintained: last verified 2026-11-11 — checked end-to-end against live run history (reliability, output fields and types, and time/memory budgets).

# Changelog

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

# Actor input Schema

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

OPTIONAL. Paste PropertyFinder search URLs copied straight from the site — e.g. https://www.propertyfinder.ae/en/search?c=2\&t=1 (rent) or a buy/area/filtered search. Works on every PropertyFinder country site (.ae, .qa, .bh, .eg, .sa, .lb). Set all your filters on the site, then paste the resulting URL here. Leave EMPTY to use the Country + Deal type + Property type + Sort dropdowns below (or get broad recent Dubai listings with no input at all).

## `country` (type: `string`):

Which PropertyFinder country site to browse when no Search URL is given. Ignored if you paste Search URLs.

## `dealType` (type: `string`):

Buy vs. rent, residential vs. commercial. Used when no Search URL is given.

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

Restrict to one property type, or 'Any'. Used when no Search URL is given.

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

Result ordering. Used when no Search URL is given.

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

Stop after this many listings across all searches. 0 = no limit (a single search can span thousands of pages).

## `maxResultsPerSearch` (type: `integer`):

Cap listings per individual search URL. 0 = no per-search cap.

## `useProxy` (type: `boolean`):

Route requests through Apify Proxy. Residential is recommended and is the default.

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

Apify Proxy settings. Residential gives the highest success rate.

## `maxConcurrency` (type: `integer`):

How many search URLs to process in parallel.

## Actor input object example

```json
{
  "searchUrls": [],
  "country": "ae",
  "dealType": "1",
  "propertyType": "",
  "sort": "nd",
  "maxResults": 350,
  "maxResultsPerSearch": 0,
  "useProxy": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "maxConcurrency": 3
}
```

# Actor output Schema

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

All records extracted by this run. Open the Dataset tab to browse, filter, and export as CSV, JSON, or Excel.

# 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": [],
    "maxResults": 350
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/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 = {
    "searchUrls": [],
    "maxResults": 350,
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/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 '{
  "searchUrls": [],
  "maxResults": 350
}' |
apify call logiover/propertyfinder-scraper --silent --output-dataset

```

## MCP server setup

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