# Propertyhub Property Search Scraper (`stealth_mode/propertyhub-property-search-scraper`) Actor

Scrape comprehensive property listings from PropertyHub.in.th with 22+ data fields per listing. Perfect for real estate investors, property managers, and market researchers analyzing rental and sales data across Thailand's major cities.

- **URL**: https://apify.com/stealth\_mode/propertyhub-property-search-scraper.md
- **Developed by:** [Stealth mode](https://apify.com/stealth_mode) (community)
- **Categories:** Automation, Developer tools, Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## PropertyHub Property Search Scraper: Extract Thailand Real Estate Listings Effortlessly

---

### What Is PropertyHub.in.th?

PropertyHub.in.th is Thailand's leading property search and listing platform, aggregating thousands of rental and sales properties across major cities including Bangkok, Chiang Mai, and Pattaya. It serves property seekers, investors, and real estate professionals by centralizing listings from multiple agents and independent sellers. Extracting this data manually is impractical at scale — the **PropertyHub Property Search Scraper** automates collection of detailed listings into structured, analysis-ready datasets.

---

### Overview

The **PropertyHub Property Search Scraper** extracts complete property listings from PropertyHub.in.th search result pages and detail pages, converting them into clean, standardized records. It is designed for:

- **Real estate investors** tracking market trends and investment opportunities
- **Property managers** monitoring rental rates and competitor listings
- **Market researchers** analyzing housing supply and pricing patterns
- **Real estate platforms** aggregating Thai property data
- **Data analysts** building property datasets for machine learning models

Key strengths include high item capacity per URL (up to 200 properties), graceful error handling via `ignore_url_failures`, and comprehensive field extraction covering property specs, pricing, and metadata.

---

### Input Format

The scraper accepts a JSON configuration object:

```json
{
  "urls": [
    "https://propertyhub.in.th/en/home-for-rent/bangkok/6"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 200
}
````

| Parameter | Type | Description |
|---|---|---|
| `urls` | Array of strings | Direct links to PropertyHub property listing pages. Supports search result pages (e.g., by city/category) or filtered category pages. Example: rental listings in Bangkok, condos in Chiang Mai. |
| `ignore_url_failures` | Boolean | If `true`, the scraper continues running if individual URLs fail to load. If `false`, a single URL failure halts the entire run. **Recommended: `true`** for bulk operations. |
| `max_items_per_url` | Integer | Maximum number of properties to extract per URL (default: `20`, max: `200`). Higher values increase runtime but capture more listings. Useful for pagination or large result sets. |

> **Example use:** To scrape 200 rental properties from Bangkok page 6, use the configuration above. To collect from multiple cities, add additional URLs to the array.

***

### Output Format

**Example output snippet:**

```json
{
  "id": "6000552",
  "user_id": "295387",
  "cover_picture": "/pictures/202604/20260426/Vpo9sDyk3n89T1WJcaFj/be7210af.jpg",
  "project": null,
  "location": {
    "lat": 13.700758095271642,
    "lng": 100.64995392028138
  },
  "post_type": "FOR_RENT",
  "property_type": "HOME",
  "title": "Home for rent BTS Srinakarin 45",
  "slug": "home-for-rent-bts-srinakarin-45",
  "price": {
    "for_rent": {
      "monthly": {
        "type": "AMOUNT",
        "price": 65000
      },
      "daily": null
    },
    "for_sale": {
      "type": null,
      "price": null
    }
  },
  "price_land_and_house": {
    "for_rent": {
      "monthly": {
        "type": "AMOUNT",
        "price": 65000,
        "date": null
      },
      "monthly1": null,
      "monthly3": null,
      "monthly6": null,
      "advance_payment": {
        "type": "MONTH",
        "amount": null,
        "month": 1
      },
      "deposit": {
        "type": "MONTH",
        "amount": null,
        "month": 2
      }
    },
    "for_sale": {
      "type": null,
      "price": null,
      "per_wah": null,
      "per_year": null
    },
    "for_sale_down_payment": {
      "type": null,
      "price": null,
      "profit": null,
      "per_wah": null,
      "per_year": null
    },
    "for_sell_out": {
      "type": null,
      "price": null,
      "profit": null,
      "contract_duration": null
    }
  },
  "contact_information": [
    {
      "name": "Hanif A",
      "phone": [
        "0897796917"
      ],
      "profile_picture": "/pictures/202604/20260426/sQYxN1oYjUjmJZ1AAfNF/eacf0be6.jpg",
      "line_id": "0618407999",
      "is_agency": false,
      "company_name": "",
      "company_number": ""
    }
  ],
  "room_information": {
    "number_of_bed": null,
    "number_of_bath": null,
    "room_area": null,
    "on_floor": null,
    "room_type": null
  },
  "land_and_house_information": {
    "number_of_bed": "4",
    "number_of_bath": "3",
    "number_of_floor": "3",
    "land_size": "100",
    "usable_area": "180",
    "room_amount": null,
    "avg_room_area": null,
    "width": null,
    "depth": null,
    "furnished": "PARTLY",
    "tenure": null,
    "car_parking_amount": "3",
    "project_id": null,
    "business_name": null,
    "room_type": null,
    "size_type": null,
    "rai": null,
    "ngan": null,
    "square_wa": null,
    "square_wa_in_total": null,
    "project_name": null
  },
  "sponsor_package": "PREMIUM",
  "distance": null,
  "created_at": "2026-04-26T12:14:22.660Z",
  "updated_at": "2026-05-22T04:26:24.172Z",
  "modified_at": "2026-04-26T12:18:22.637Z",
  "refreshed_at": "2026-04-26T12:14:22.657Z",
  "address": "Prawet Bangkok",
  "user_verification_status": true,
  "from_url": "https://propertyhub.in.th/en/home-for-rent/bangkok/4"
}
```

Each scraped property returns a record with 22 key fields:

#### Core Property Identification

| Field | Meaning |
|---|---|
| `ID` | Unique PropertyHub identifier for the listing |
| `User ID` | ID of the agent or seller who posted the property |
| `Title` | Property headline as displayed on the listing |
| `Slug` | URL-friendly version of the title |
| `Post Type` | Listing category (e.g., "for-rent", "for-sale") |

#### Property Specifications

| Field | Meaning |
|---|---|
| `Property Type` | Classification of the property (e.g., condo, house, townhouse, land, apartment) |
| `Location` | Geographic area or district (e.g., "Sukhumvit", "Silom") |
| `Address` | Full street address of the property |
| `Room Information` | Details about bedrooms, bathrooms, and living spaces (e.g., "2 bed, 1 bath") |
| `Land And House Information` | For houses/villas: land size, house size, floor count, etc. |
| `Distance` | Proximity to landmarks, BTS/MRT stations, or amenities (kilometers or walking distance) |

#### Pricing & Project Details

| Field | Meaning |
|---|---|
| `Price` | Monthly rental price or sale price in Thai Baht (THB) |
| `Price Land And House` | For sales: breakdown of land and structure costs (if applicable) |
| `Sponsor Package` | VIP or premium listing package type applied to the posting |
| `Project` | Name of the development project (for branded properties/condos) |

#### Media & Visual Assets

| Field | Meaning |
|---|---|
| `Cover Picture` | URL to the main property photo or featured image |

#### Contact & Verification

| Field | Meaning |
|---|---|
| `Contact Information` | Agent or seller phone number, email, or messaging link |
| `User Verification Status` | Whether the seller/agent is verified by PropertyHub (e.g., "verified", "unverified", "premium") |

#### Timestamps & Activity

| Field | Meaning |
|---|---|
| `Created At` | When the listing was first published |
| `Updated At` | Last time listing information was modified |
| `Modified At` | Timestamp of the most recent content change |
| `Refreshed At` | Last time the listing was "refreshed" or bumped in search results |

***

### How to Use

1. **Find property listing pages** — Navigate to PropertyHub.in.th and filter by city, property type, or price range. Copy the search result URL (e.g., `https://propertyhub.in.th/en/home-for-rent/bangkok/6`).

2. **Configure your input** — Paste one or more URLs into the `urls` array. Each URL should be a PropertyHub listing page or search results page.

3. **Set collection limits** — Choose `max_items_per_url` based on your needs:
   - `20–50` for quick spot checks
   - `100–200` for comprehensive market analysis

4. **Enable fault tolerance** — Set `ignore_url_failures: true` to skip broken or blocked URLs without interrupting the run.

5. **Start the scraper** — Execute the actor and monitor progress in the run log.

6. **Export and analyze** — Download results as JSON, CSV, or Excel. Filter by price, property type, or location for custom analysis.

**Best practices:**

- Use **search filters** on PropertyHub before copying the URL to narrow the dataset (e.g., filter by price range or property type).
- For **large collections** (1000+ properties), split into multiple runs with different URLs to avoid timeouts.
- Monitor **listing activity**: Use timestamps (`Created At`, `Refreshed At`) to identify new and active properties.
- **Verify seller credentials** using the `User Verification Status` field to prioritize legitimate listings.

***

### Use Cases & Business Value

- **Market intelligence:** Track rental and sale prices by district, property type, and time period to identify trends
- **Investment analysis:** Build datasets of available properties and compare ROI potential across neighborhoods
- **Competitive monitoring:** Monitor competitor listings, pricing strategies, and market positioning
- **Lead generation:** Export verified seller contacts for outreach to property managers or developers
- **Academic research:** Analyze housing supply, affordability, and market concentration in Thai cities
- **Custom property boards:** Feed PropertyHub data into your own real estate aggregator or marketplace

The PropertyHub Property Search Scraper eliminates weeks of manual data collection, providing clean, structured records ready for Excel, databases, and analytics tools.

***

### Conclusion

The **PropertyHub Property Search Scraper** is an essential tool for anyone working with Thai real estate data at scale. With 22 data fields per property, flexible URL input, and robust error handling, it transforms PropertyHub listings into actionable market intelligence. Whether you're an investor, researcher, or platform developer, this scraper delivers the data foundation you need to make informed property decisions.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the property list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## Actor input object example

```json
{
  "urls": [
    "https://propertyhub.in.th/en/home-for-rent/bangkok/6"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
```

# 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 = {
    "urls": [
        "https://propertyhub.in.th/en/home-for-rent/bangkok/6"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("stealth_mode/propertyhub-property-search-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 = {
    "urls": ["https://propertyhub.in.th/en/home-for-rent/bangkok/6"],
    "ignore_url_failures": True,
    "max_items_per_url": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("stealth_mode/propertyhub-property-search-scraper").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 '{
  "urls": [
    "https://propertyhub.in.th/en/home-for-rent/bangkok/6"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}' |
apify call stealth_mode/propertyhub-property-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=stealth_mode/propertyhub-property-search-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Propertyhub Property Search Scraper",
        "description": "Scrape comprehensive property listings from PropertyHub.in.th with 22+ data fields per listing. Perfect for real estate investors, property managers, and market researchers analyzing rental and sales data across Thailand's major cities.",
        "version": "0.0",
        "x-build-id": "wrIh1BZx105hllkxw"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/stealth_mode~propertyhub-property-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-stealth_mode-propertyhub-property-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/stealth_mode~propertyhub-property-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-stealth_mode-propertyhub-property-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/stealth_mode~propertyhub-property-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-stealth_mode-propertyhub-property-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "urls": {
                        "title": "URLs of the property list urls to scrape",
                        "type": "array",
                        "description": "Add the URLs of the property list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "ignore_url_failures": {
                        "title": "Continue running even if some URLs fail to be scraped",
                        "type": "boolean",
                        "description": "If true, the scraper will continue running even if some URLs fail to be scraped."
                    },
                    "max_items_per_url": {
                        "title": "Max items per URL",
                        "type": "integer",
                        "description": "The maximum number of items to scrape per URL."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
