# Dot Property Listings Extractor (`kawsar/dot-property-listings-extractor`) Actor

Extract Dot Property listings from any search URL. Get price, bedrooms, bathrooms, area, location, facilities, photos, and agency contacts across the Philippines, Thailand, Malaysia, and more. Pagination handled, export to CSV/JSON/Excel.

- **URL**: https://apify.com/kawsar/dot-property-listings-extractor.md
- **Developed by:** [Kawsar](https://apify.com/kawsar) (community)
- **Categories:** Real estate, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.99 / 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?

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

## Dot Property Listings Extractor

Turn any Dot Property search page into clean, structured property data. Paste a Dot Property results URL and this actor returns every listing on those pages as rows you can sort, filter, and export: price, bedrooms, bathrooms, area, location, all listing photos, the facilities list, and the agency behind each listing.

Dot Property runs marketplaces across Southeast Asia, including the Philippines, Thailand, Malaysia, and Indonesia, with active sale and rent listings in every major city. This actor reads those listings for you, follows the pagination on its own, and hands back structured data ready for analysis, a CRM, or a spreadsheet.

### Why use this actor

- **No manual copy paste.** One search URL can produce hundreds of clean records in a single run.
- **Full listing detail.** Price, area, room counts, facilities, every photo, and the agency behind each listing.
- **Any Dot Property search.** Sale or rent, any country domain, any city, and any filter the site supports.
- **Automatic pagination.** Give it a search URL and set how many listings you want. It walks the result pages until it has enough.
- **Export anywhere.** Download as JSON, CSV, Excel, or HTML, or pull the data through the Apify API.

### What you can do with the data

- Compare asking prices and price per square metre across areas
- Track new sale or rent listings in a specific city over time
- Build agency contact lists for outreach and lead generation
- Feed a property CRM or an internal listings database
- Collect listing photos and details for valuation models or market reports
- Study inventory levels and pricing trends for investment research

### How it works

1. You provide one or more Dot Property search or category URLs.
2. The actor loads each results page and reads the listing data on it.
3. It moves through the paginated results until it reaches your `maxItems` limit.
4. Each property is saved as one record in the dataset, with duplicates removed.

You do not need an account, a login, or any browser setup. Point it at a URL and run.

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchUrls` | Array of strings | Yes | One or more Dot Property search or category URLs. Pagination is handled for you. |
| `maxItems` | Integer | No | Maximum number of listings to collect across all URLs. Default 20, maximum 5000. |
| `requestTimeoutSecs` | Integer | No | Per request timeout in seconds. Default 45. |

#### Where to get a search URL

Open your local Dot Property site, such as [dotproperty.com.ph](https://www.dotproperty.com.ph), run any search, apply the filters you want, and copy the URL from your browser. Anything the site can display on a results page works here.

Examples:

- All properties for sale in the Philippines: `https://www.dotproperty.com.ph/properties-for-sale`
- Properties for rent: `https://www.dotproperty.com.ph/properties-for-rent`
- A filtered search by price, bedrooms, or city (copy the full URL after applying filters)

#### Example input

```json
{
    "searchUrls": [
        "https://www.dotproperty.com.ph/properties-for-sale",
        "https://www.dotproperty.com.ph/properties-for-rent"
    ],
    "maxItems": 200,
    "requestTimeoutSecs": 45
}
```

### Output

Every listing becomes one dataset record. Here is a real example:

```json
{
    "listingId": "01a04133-96a3-76e3-a1d4-92bcab981838",
    "propertyUrl": "https://www.dotproperty.com.ph/ads/3-bedroom-condo-for-sale-or-rent-in-highway-hills-metro-manila-near-mrt-3-boni_161810efde70-5c8f-6b32-6f30-66859f89",
    "listingTitle": "3 Bedroom Condo for Sale or Rent in Highway Hills, Metro Manila near MRT-3 Boni",
    "propertyType": "Condo",
    "price": 13200000,
    "currency": "₱",
    "priceText": "₱ 13,200,000",
    "bedrooms": 3,
    "bathrooms": 2,
    "areaSize": 76,
    "areaUnit": "m²",
    "location": "Mandaluyong, Metro Manila",
    "facilities": [
        "Air conditioning",
        "Security",
        "Car park",
        "Balcony"
    ],
    "description": "ERE Code: 10514 Unit Details: 3BR 2TB FA: 76 sqm Semi Furnished With Parking",
    "agencyName": "Everbright Real Estate",
    "agencyUrl": "https://www.dotproperty.com.ph/agency/everbright-real-estate/13939/properties-for-sale",
    "agencyLogo": "https://images.proppit.com/publisher/7a7fa9a6-beaf-11eb-805b-42010a940008/logo.jpeg",
    "coverImage": "https://pix.dotproperty.co.th/...",
    "images": [
        "https://pix.dotproperty.co.th/..."
    ],
    "imageCount": 6,
    "sourceUrl": "https://www.dotproperty.com.ph/properties-for-sale",
    "scrapedAt": "2026-08-27T05:44:59Z"
}
```

#### Output field reference

| Field | Type | Description |
|-------|------|-------------|
| `listingId` | String | Dot Property's unique listing identifier. |
| `propertyUrl` | String | Direct link to the full listing page. |
| `listingTitle` | String | The listing headline written by the agency. |
| `propertyType` | String | Property category, for example Condo, House, Land, Office. |
| `price` | Number | Asking price as a plain number. |
| `currency` | String | Currency symbol shown on the listing, for example ₱ or ฿. |
| `priceText` | String | Price exactly as displayed, including the currency symbol. |
| `bedrooms` | Number | Number of bedrooms. Empty when the listing has none, such as land. |
| `bathrooms` | Number | Number of bathrooms. |
| `areaSize` | Number | Area value shown on the card. |
| `areaUnit` | String | Unit for the area, m². |
| `location` | String | City and region text shown on the listing. |
| `facilities` | Array | Facility tags listed on the card, for example Car park, Balcony. |
| `description` | String | The short description snippet from the card. |
| `agencyName` | String | Name of the agency that posted the listing. |
| `agencyUrl` | String | Dot Property profile URL of the agency. |
| `agencyLogo` | String | URL of the agency logo image. |
| `coverImage` | String | URL of the main listing photo. |
| `images` | Array | URLs of the listing photos on the card. |
| `imageCount` | Number | How many photos were collected. |
| `sourceUrl` | String | The search URL this record came from. |
| `scrapedAt` | String | UTC timestamp of when the record was collected. |

### Exporting your results

After a run finishes, open the dataset and export in one click as JSON, CSV, Excel, or HTML table. You can also fetch results programmatically.

```bash
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?format=csv"
```

Replace `DATASET_ID` with the ID shown on your run, and add your Apify token if the run is private.

### Tips for better results

- Apply your filters on Dot Property first, then copy the URL. The actor keeps whatever filters are in the URL.
- Add several search URLs in one run to cover multiple cities or countries at once.
- Set `maxItems` to control run length and cost. Higher limits read more result pages.
- Run on a schedule to track a market and spot new listings as they appear.

### Frequently asked questions

**Which Dot Property pages are supported?**
Any search or category results page, for sale or for rent, on any Dot Property country domain, with any filter combination.

**How many listings can I collect?**
Up to 5000 per run through the `maxItems` setting. Split very large jobs across multiple runs or schedule them.

**Does it collect listing photos?**
Yes. Each record includes the cover image and the list of photo URLs on the card, along with a count.

**Do I get agency details?**
Yes. Each listing includes the agency name, profile URL, and logo when the site shows them.

**Do I need a Dot Property account?**
No. The actor only reads public listing data shown on Dot Property search pages.

### Notes and responsible use

This actor collects only public data that Dot Property already displays on its search pages. Use it in line with Dot Property's terms of service and applicable local laws, and treat any personal contact information responsibly.

# Actor input Schema

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

One or more Dot Property search or category pages to extract listings from. Paste a full results URL for any country, city, purpose or property type. Pagination is handled automatically.

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

Maximum number of property listings to collect across all search URLs.

## `requestTimeoutSecs` (type: `integer`):

Per-request timeout in seconds.

## Actor input object example

```json
{
  "searchUrls": [
    "https://www.dotproperty.com.ph/properties-for-sale",
    "https://www.dotproperty.com.ph/properties-for-rent"
  ],
  "maxItems": 20,
  "requestTimeoutSecs": 45
}
```

# Actor output Schema

## `properties` (type: `string`):

Extracted Dot Property listings with prices, bedrooms, bathrooms, area, location, images and agency contacts.

# 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.dotproperty.com.ph/properties-for-sale"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("kawsar/dot-property-listings-extractor").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.dotproperty.com.ph/properties-for-sale"] }

# Run the Actor and wait for it to finish
run = client.actor("kawsar/dot-property-listings-extractor").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": [
    "https://www.dotproperty.com.ph/properties-for-sale"
  ]
}' |
apify call kawsar/dot-property-listings-extractor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,kawsar/dot-property-listings-extractor"
        }
    }
}

```

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/wyAKuvDBetgimzjEe/builds/4ivXGXgGD0ejH9y5G/openapi.json
