# Hipflat Scraper | Thailand Real Estate (`fatihtahta/hipflat-scraper`) Actor

Extract Hipflat property listings across Thailand with rich listing detail, publisher data, pricing, amenities, media and flexible market filters. Built for enterprise-grade Thailand real estate intelligence, lead enrichment, inventory monitoring, and automated analytics pipelines.

- **URL**: https://apify.com/fatihtahta/hipflat-scraper.md
- **Developed by:** [Fatih Tahta](https://apify.com/fatihtahta) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 property listings

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

## Hipflat Scraper | Thailand Real Estate

**Slug:** `fatihtahta/hipflat-scraper`

### Overview

Hipflat Scraper | Thailand Real Estate collects structured property listing records from Hipflat, including listing URLs, titles, pricing, location details, media, property attributes, descriptions, publisher names, and source context when available. [Hipflat](https://www.hipflat.com) is a real estate marketplace for Thailand property discovery, making its public listing data useful for market analysis, inventory monitoring, lead qualification, and operational reporting. The actor converts public listing pages into repeatable JSON records that can be used in analytics workflows, enrichment pipelines, dashboards, and downstream systems. It is designed for recurring data acquisition where consistent inputs, structured output, and predictable record envelopes matter. Results reflect the public data available at run time without making claims about full market coverage or guaranteed availability.

### Why Use This Actor

- **Market research and analytics:** build normalized datasets for pricing analysis, supply tracking, location comparison, and property-type segmentation.
- **Product and content teams:** populate listing experiences, content catalogs, review queues, or property intelligence tools with structured extraction.
- **Developers and data engineering teams:** feed downstream systems with JSON records that are suitable for ETL, warehouse loading, and automated dataset normalization.
- **Lead generation and enrichment teams:** identify relevant public listings, publishers, locations, and property attributes for qualification and CRM enrichment pipelines.
- **Monitoring and competitive tracking teams:** schedule repeatable collection for market intelligence, availability changes, inventory movement, and operational reporting.

### Common Use Cases

- **Market intelligence:** monitor property supply, displayed pricing, locations, bedroom counts, usable area, and listing movement across Thai markets.
- **Lead generation:** build targeted prospect lists from public real estate listings and publisher information.
- **Competitive monitoring:** track comparable properties by deal type, geography, property category, price band, and freshness window.
- **Catalog and directory building:** populate property databases with structured public listing records.
- **Data enrichment:** add current public listing attributes, coordinates, images, and descriptions to CRM, BI, or analytics datasets.
- **Recurring reporting:** schedule periodic runs for dashboards, alerts, trend analysis, and market segment snapshots.

### Quick Start

1. Choose the transaction intent with `deal_type`: `buy` for sale listings or `rent` for rental listings.
2. Add a `location` and optional filters such as `property_type`, price range, room counts, usable area, amenities, freshness, or sort order.
3. Set a small `limit` for the first validation run.
4. Run the actor in Apify Console.
5. Inspect the first dataset records to confirm the output shape, fields, and coverage match your workflow.
6. Increase the limit, broaden or narrow filters, enable richer details, or schedule recurring runs once the output is verified.

### Input Parameters

The actor accepts Hipflat search criteria for transaction intent, geography, property type, price, layout, size, amenities, freshness, ordering, enrichment, coverage, and result volume.

| Parameter | Type | Description | Default |
|---|---:|---|---|
| `deal_type` | string | Commercial intent for the search. Allowed values: `buy`, `rent`. | `buy` |
| `location` | string | City, district, neighborhood, province, project area, or other Hipflat-supported location. Leave empty for a broad search without a location boundary. | – |
| `property_type` | array of strings | Property categories to include. Allowed values: `condo`, `house`, `townhouse`, `apartment`, `land`, `office`, `hotel`, `commercial`, `industrial_unit`, `serviced_apartment`, `villa`. Leave empty to include all supported property types. | – |
| `currency` | string | Currency used for displayed prices and price filters. Allowed values: `EUR`, `THB`, `USD`, `AED`, `ARS`, `AUD`, `BRL`, `CAD`, `CHF`, `CLP`, `CLF`, `CNY`, `COP`, `CRC`, `CZK`, `DKK`, `EGP`, `GBP`, `HKD`, `HUF`, `IDR`, `INR`, `JPY`, `KES`, `KWD`, `LBP`, `MAD`, `MXN`, `MYR`, `NGN`, `NOK`, `NZD`, `OMR`, `PAB`, `PEN`, `PHP`, `PKR`, `PLN`, `QAR`, `RUB`, `SAR`, `SEK`, `SGD`, `TND`, `TRY`, `TWD`, `UAH`, `UYU`, `VES`, `VND`, `ZAR`. Leave empty to use Hipflat's default price presentation. | – |
| `min_price` | integer | Minimum listing price in the selected currency. Must be `0` or greater. Leave empty for no lower price boundary. | – |
| `max_price` | integer | Maximum listing price in the selected currency. Must be `0` or greater. Leave empty for no upper price boundary. | – |
| `bedroom_count` | array of strings | Bedroom counts to include. Allowed values: `0` for studio, `1`, `2`, `3`, `4` for 4+ bedrooms. | – |
| `bathroom_count` | array of strings | Bathroom counts to include. Allowed values: `1`, `2`, `3`, `4`, `5` for 5+ bathrooms. | – |
| `min_usable_area` | integer | Minimum usable area in square meters. Must be `0` or greater. Leave empty for no lower size boundary. | – |
| `max_usable_area` | integer | Maximum usable area in square meters. Must be `0` or greater. Leave empty for no upper size boundary. | – |
| `amenities` | array of strings | Required amenities. Allowed values: `cellar`, `cleaning_room`, `equipped_bathroom`, `equipped_kitchen`, `integral_kitchen`, `office`, `service_room`, `storage_room`, `children_s_area`, `gym`, `jacuzzi`, `multiuse_room`, `roof_garden`, `sauna`, `swimming_pool`, `tennis_court`, `built_in_wardrobe`, `disabled_access`, `library`, `lift`, `panoramic_view`, `balcony`, `garden`, `green_area`, `grill`, `terrace`, `yard`, `alarm`, `guardhouse`, `security`, `security_door`, `concierge`, `air_conditioning`, `car_park`, `electricity`, `fireplace`, `heating`, `internet`, `natural_gas`, `video_cable`, `water`, `water_tank`. | – |
| `publication_date` | string | Recent publication window. Allowed values: `24-hours`, `7-days`, `30-days`. Leave empty to include listings regardless of publication date. | – |
| `sort_by` | string | Ordering for matching listings. Allowed values: `relevance`, `price_asc`, `price_desc`, `bedrooms_asc`, `bedrooms_desc`, `usable_floor_area_asc`, `usable_floor_area_desc`, `first_publish_date_desc`. Leave empty to use Hipflat's standard relevance-based order. | – |
| `maximize_coverage` | boolean | Set to `true` when completeness is more important than speed, especially for broader searches. | `false` |
| `enrich_data` | boolean | Set to `true` to collect richer listing details such as descriptions, amenities, sizes, coordinates, and addresses when available. Set to `false` for faster standard records. | `false` |
| `limit` | integer | Maximum number of listings to save. Must be `1` or greater. Leave empty to collect available matches until the run naturally finishes. | – |

### Choosing Inputs

Use `deal_type` first to separate sale and rental inventory. Add `location` when you need a comparable geography, then use `property_type`, price, room count, usable area, amenity, and publication-date filters to narrow the dataset into a specific market segment. Narrower filters usually produce cleaner, more targeted records for reporting and enrichment; broader filters improve discovery but may require a higher `limit` and more review. Use `sort_by` to align collection order with your workflow, such as newest listings for monitoring or price order for valuation review. Start with a small `limit`, inspect the dataset, then increase coverage once the output quality and scope are confirmed.

### Example Inputs

#### Bangkok condo market validation

```json
{
  "deal_type": "buy",
  "location": "Bangkok",
  "property_type": ["condo"],
  "currency": "THB",
  "min_price": 3000000,
  "max_price": 12000000,
  "limit": 25
}
````

#### Recently posted rental monitoring

```json
{
  "deal_type": "rent",
  "location": "Khlong Toei, Bangkok",
  "property_type": ["apartment", "condo"],
  "bedroom_count": ["1", "2"],
  "publication_date": "7-days",
  "sort_by": "first_publish_date_desc",
  "limit": 50
}
```

#### Broad discovery with richer details

```json
{
  "deal_type": "buy",
  "location": "Phuket",
  "property_type": ["villa", "house"],
  "currency": "USD",
  "enrich_data": true,
  "maximize_coverage": true,
  "limit": 100
}
```

### Output

#### Output Destination

The actor writes results to an Apify dataset as JSON records. The dataset is designed for direct consumption by analytics tools, ETL pipelines, and downstream APIs with minimal post-processing.

The example output contains one record shape: a Hipflat property listing. If future runs produce additional record shapes, document each shape separately based on its fields and stable identifiers.

#### Record Envelope And Stable Identifiers

Each dataset item represents one public Hipflat property listing with `record_type` set to `property_listing`. The strongest recommended idempotency key is `record_id`; `entity.url` is the next best stable key for deduplication and upserts. Use this key when merging repeated runs into warehouses, CRMs, search indexes, or listing databases. Stable identifiers make records easier to merge, deduplicate, and sync across recurring collection workflows. The `source_context.source_url` field identifies the source search page or collection scope that produced the listing, while `source_context.seed_id` and `source_context.page_index` help preserve run context.

#### Examples

##### Example: property listing

```json
{
  "record_type": "property_listing",
  "record_id": "59f351bfb9fe8b17954c",
  "entity": {
    "url": "https://www.hipflat.com/ads/78c9l1208n9284hlc4ucac093u0c3a38",
    "title": "For sale 2 bedrooms apartment in Khlong Toei, Bangkok",
    "description": "Experience a calmer side of Thonglor living at Siri At Sukhumvit, a premium residence located just moments from BTS Thong Lo and Sukhumvit lifestyle hubs."
  },
  "listing": {
    "deal_type": "buy"
  },
  "pricing": {
    "price_text": "USD394,616",
    "price_per_area": "USD5,719/m2"
  },
  "location": {
    "display_text": "Khlong Toei, Bangkok",
    "address": "Siri@Sukhumvit 38 ถนนสุขุมวิท, Phra Khanong, Khlong Toei, Bangkok 10110, THA, Khlong Toei, Bangkok, TH",
    "coordinates": {
      "latitude": 13.7229623,
      "longitude": 100.5799803
    }
  },
  "media": {
    "image_urls": [
      "https://img.hipcdn.com/eyJidWNrZXQiOiJwcmQtbGlmdWxsY29ubmVjdC1iYWNrZW5kLWIyYi1pbWFnZXMiLCJrZXkiOiJpbmdlc3Rlci8wMTllMDIwNy02N2VmLTczZmQtYTRkOS03YmNhZWIxZTJlOWYvNzVjMTE3NzI5YmEwNjY2ZGVmOGRmOWUxMjNjMDQ4ZDYzMjQxZWVlNGY4MTA2Y2IwNzVjMDRlNjNiZmFkODQ5NS5wbmciLCJicmFuZCI6ImhpcGZsYXQiLCJlZGl0cyI6eyJyb3RhdGUiOm51bGwsInJlc2l6ZSI6eyJ3aWR0aCI6MzIwLCJoZWlnaHQiOjI0MCwiZml0IjoiY292ZXIifX19",
      "https://cdn.fazwaz.com/wbr/QsplnzGQ1TBF-YumuwfBrShhOPE/0x0/unit/5870821/23_1.jpg"
    ]
  },
  "property": {
    "property_types": [
      "apartment"
    ],
    "bedrooms": "2",
    "bathrooms": "2",
    "floor_area": "69 m2",
    "amenities": [
      "Air conditioning",
      "Balcony",
      "Equipped kitchen",
      "Service room",
      "Video cable",
      "Parking",
      "Concierge",
      "Gym",
      "Sauna",
      "Security",
      "Swimming pool",
      "Fully furnished"
    ],
    "floor": "6"
  },
  "relationships": {
    "agency": {
      "name": "108Siam Sales and Rentals"
    }
  },
  "source_context": {
    "source_url": "https://www.hipflat.com/property-for-sale/bangkok",
    "seed_id": "57f0477f327a8f64f58c",
    "page_index": 1
  },
  "attributes": {
    "search_result_text": "For sale 2 bedrooms apartment in Khlong Toei, Bangkok USD394,616 Khlong Toei, Bangkok See All Rare Renovated 2BR in Thonglor| Only 200m BTS Thong Lo | Move-In Ready, Contact Us Now! Experience a calmer side of Thonglor living at Siri At Sukhumvit, a premium residence located just moments from BTS Thong Lo and Sukhumvit lifestyle hubs.This fully renovated 2-bedroom, 2-bathroom condo on the 6th floor offers 69.77 sqm of thoughtfully designed living space with peaceful garden and pool views. Positioned on the pool level yet away from the busy gym and common traffic areas, the unit provides a rare balance of greenery, privacy, and city convenience.The spacious living, dining, and kitchen area creates an open atmosphere ideal for both daily living and entertaining. Newly upgraded throughout, the unit includes:Brand-new furnitureNew 55-inch Smart TVLarge sofa with detachable chaise lounge3 new air-conditioning unitsModern teak furnishingsThe kitchen is fully equipped with:Kitchen island with seatingLarge fridge freezer4-hob cooker & extractor hoodMicrowaveWashing machineThe master bedroom features a king-size bed, fitted wardrobes, workspace, and a bathroom with bathtub. The second room can function as a guest bedroom, home office, or creative workspace.Property HighlightsFully renovated in 2025Garden & pool viewsLarge private balconyQuiet and private atmosphereSpacious functional layoutMove-in ready conditionNearby LocationsBTS Thong Lo - ~200 mWells International School- ~800 mEmQuartier - ~1.4 kmJ Avenue Thonglor - ~1.5 kmSukhumvit Hospital - ~1.0 kmIdeal ForExpats seeking a quiet luxury condo in ThonglorCouples or small families wanting comfortable living spaceBuyers looking for a move-in-ready property with long-term valueContact us today to arrange a private viewing. Renovated units with greenery views in Siri At Sukhumvit are rarely available! 2 2 69 m2 Apartment Premium"
  }
}
```

### Field Reference

#### Property Listing

- **record\_type** *(string, required)*: Stable row discriminator. Property rows use `property_listing`.
- **record\_id** *(string, required)*: Stable listing identifier suitable for deduplication.
- **entity.url** *(string, required)*: Public Hipflat listing URL.
- **entity.title** *(string, optional)*: Listing title or summary.
- **entity.description** *(string, optional)*: Listing description when enrichment is enabled and available.
- **listing.deal\_type** *(string, optional)*: Listing intent, such as `buy` or `rent`.
- **pricing.price\_text** *(string, optional)*: Displayed listing price, including currency formatting.
- **pricing.price\_per\_area** *(string, optional)*: Displayed price per area unit when available.
- **location.display\_text** *(string, optional)*: Human-readable listing location.
- **location.address** *(string, optional)*: Detailed address text when publicly available.
- **location.coordinates.latitude** *(number, optional)*: Latitude coordinate when available.
- **location.coordinates.longitude** *(number, optional)*: Longitude coordinate when available.
- **media.image\_urls** *(array of strings, optional)*: Public image URLs associated with the listing.
- **property.property\_types** *(array of strings, optional)*: Property categories associated with the listing or search scope.
- **property.bedrooms** *(string or number, optional)*: Bedroom count as displayed or normalized from the listing.
- **property.bathrooms** *(string or number, optional)*: Bathroom count as displayed or normalized from the listing.
- **property.floor\_area** *(string or number, optional)*: Usable floor area text when available.
- **property.amenities** *(array of strings, optional)*: Listing amenities or property features.
- **property.floor** *(string or number, optional)*: Floor number or floor label when available.
- **relationships.agency.name** *(string, optional)*: Public listing publisher, agency, or sales contact name when available.
- **source\_context.source\_url** *(string, optional)*: Source search or collection URL that produced the record.
- **source\_context.seed\_id** *(string, optional)*: Source seed identifier for run context.
- **source\_context.page\_index** *(integer, optional)*: Search result page index associated with the record.
- **source\_context.search\_filters** *(object, optional)*: Additional collection-scope filters preserved for audit and replay.
- **attributes.search\_result\_text** *(string, optional)*: Consolidated text captured from the listing result or detail context.

### Data Quality, Guarantees, And Handling

- **Structured records:** results are normalized into predictable JSON objects for downstream use.
- **Best-effort extraction:** fields may vary by region, session, availability, listing type, or Hipflat presentation changes.
- **Optional fields:** null-check optional fields before loading records into strict schemas or production applications.
- **Deduplication:** use `record_id` when present, with `url` as a fallback key for repeated runs and upserts.
- **Freshness:** results reflect the publicly available data at run time.
- **Repeated runs:** use the recommended idempotency key when syncing data into warehouses, CRMs, or search indexes.

### Tips For Best Results

- Start with a small `limit` to validate output shape before scaling up.
- Use one geography or property segment per run when you need cleaner reporting and easier comparison.
- Leave optional filters empty when the goal is broad discovery.
- Add filters gradually to understand how each field changes coverage.
- Use `publication_date` and `sort_by` for monitoring workflows focused on newer inventory.
- Enable `enrich_data` when descriptions, amenities, addresses, coordinates, and richer details are more important than speed.
- Use `record_id` or `url` for deduplication when storing records over time.

### How To Run On Apify

1. Open the Actor in Apify Console.
2. Configure the available input fields for the target scope.
3. Set the maximum number of outputs to collect with `limit`.
4. Click **Start** and wait for the run to finish.
5. Open the dataset and inspect the first records.
6. Download results in JSON, CSV, Excel, or another supported format.

### Scheduling & Automation

#### Scheduling

**Automated Data Collection**

Schedule recurring runs to keep Hipflat listing datasets fresh for monitoring, reporting, enrichment, and market analysis workflows. Use separate schedules for distinct geographies, deal types, or property segments when clean comparison is important.

- Navigate to **Schedules** in Apify Console
- Create a new schedule, such as daily, weekly, or a custom cron
- Configure input parameters
- Enable notifications for run completion
- Add webhooks for automated processing

#### Integration Options

- **BI dashboards:** monitor pricing, inventory, location coverage, property categories, and listing freshness over time.
- **Data warehouses:** store recurring listing snapshots for historical analysis, modeling, and operational reporting.
- **CRM enrichment:** attach public listing, publisher, location, and property attributes to account or lead records.
- **Google Sheets or Airtable:** review smaller listing sets, qualification queues, and market samples with non-technical teams.
- **Webhooks:** trigger validation, notification, or ingestion workflows after each completed run.
- **Alerts and scheduled reports:** notify teams about newly posted listings, segment changes, or high-priority property matches.

### Export Formats And Downstream Use

Apify datasets can be exported from the Console or consumed programmatically by downstream systems. Choose the format that fits your review, automation, or reporting workflow.

- **JSON:** for APIs, applications, and data pipelines
- **CSV or Excel:** for spreadsheet workflows and manual review
- **API access:** for automated ingestion into business systems
- **BI and warehouses:** for reporting, dashboards, and historical analysis

### Performance

Estimated run times:

- **Small runs (< 1,000 outputs):** ~3–5 minutes
- **Medium runs (1,000–5,000 outputs):** ~5–15 minutes
- **Large runs (5,000+ outputs):** ~15–30 minutes

Execution time varies based on filters, result volume, and how much information is returned per record. Highly filtered runs can finish faster, while broad discovery or detail-rich records may take longer.

### Limitations

- Availability depends on what [Hipflat](https://www.hipflat.com) publicly exposes at run time.
- Some optional fields may be missing on sparse listings or listings with limited public detail.
- Very broad searches may take longer or require higher limits to collect enough matching records.
- Target-side changes can affect field availability, naming, or formatting.
- Regional, listing-type, account, or availability differences may change visible results.
- Results should be treated as point-in-time public listing data rather than a guaranteed complete market inventory.

### Troubleshooting

- **No results returned:** check filters, location spelling, property categories, and whether Hipflat has matching public records.
- **Fewer results than expected:** broaden filters, raise `limit`, or verify that the selected market contains enough matching listings.
- **Some fields are empty:** optional fields depend on what each listing publicly provides.
- **Run takes longer than expected:** reduce scope, lower `limit` for validation, or split broad collection into smaller segments.
- **Output changed:** compare the current output with the field reference and report a small sample if support is needed.

### FAQ

#### What data does this actor collect?

It collects public Hipflat property listing records, including URLs, titles, prices, locations, images, property details, source context, descriptions, and publisher names when available.

#### Can I filter by location, category, date, price, or other criteria?

Yes. The input supports `location`, `property_type`, `publication_date`, `currency`, `min_price`, `max_price`, bedroom counts, bathroom counts, usable area bounds, amenities, and sort order.

#### Can I collect sale and rental listings separately?

Yes. Use `deal_type` with `buy` for sale listings or `rent` for rental listings.

#### Why did I receive fewer results than my limit?

The selected filters may have fewer matching public listings than the requested `limit`, or some listings may not expose enough usable data at run time.

#### Can I schedule recurring runs?

Yes. Use Apify schedules to run the actor daily, weekly, or on a custom cron for monitoring, reporting, and dataset refresh workflows.

#### How do I avoid duplicates across runs?

Use `record_id` as the preferred idempotency key when present. If `record_id` is unavailable, use `url` as the fallback deduplication key.

#### Can I export the data to CSV, Excel, or JSON?

Yes. Apify datasets support JSON, CSV, Excel, and other export formats for manual review, reporting, and downstream ingestion.

#### Does this actor collect private data?

No. The actor is intended to collect publicly available property listing information from Hipflat.

#### What should I include when reporting an issue?

Include the input used with any sensitive values redacted, the run ID, expected versus actual behavior, and a small output sample when helpful.

### Compliance & Ethics

#### Responsible Data Collection

This actor collects publicly available real estate listing information from **https://www.hipflat.com** for legitimate business purposes, including:

- **Real estate** research and market analysis
- **Property listing** monitoring, enrichment, and reporting
- **Sales, leasing, and investment** workflows that rely on public market data

Users are responsible for ensuring that their use of collected data complies with applicable laws, regulations, and the target site's terms. This section is informational and not legal advice.

#### Best Practices

- Use collected data in accordance with applicable laws, regulations, and the target site's terms
- Respect individual privacy and personal information
- Use data responsibly and avoid disruptive or excessive collection
- Do not use this actor for spamming, harassment, or other harmful purposes
- Follow relevant data protection requirements where applicable, such as GDPR and CCPA

### Support

For help, use the actor page or Issues section. Include the input used with sensitive values redacted, the run ID, expected versus actual behavior, and a small output sample when it helps explain the issue.

# Actor input Schema

## `deal_type` (type: `string`):

Select the commercial intent for the search. Use sale listings for acquisition research and rent listings for leasing or rental market analysis.

## `location` (type: `string`):

Provide a city, district, neighborhood, province, project area, or other Hipflat-supported location. Leave empty when you want a broad Hipflat search without a location boundary.

## `property_type` (type: `array`):

Select one or more property categories to include. Leave empty to keep the search broad across all supported Hipflat property types.

## `currency` (type: `string`):

Select a currency for displayed listing prices. Leave empty to use Hipflat's default price presentation for the selected market.

## `min_price` (type: `integer`):

Only include listings priced at or above this amount in the selected currency. Leave empty when there is no lower price boundary.

## `max_price` (type: `integer`):

Only include listings priced at or below this amount in the selected currency. Leave empty when there is no upper price boundary.

## `bedroom_count` (type: `array`):

Select one or more bedroom counts to include. Studio represents 0 bedrooms, and 4 or more includes listings at the upper bedroom range.

## `bathroom_count` (type: `array`):

Select one or more bathroom counts to include. The 5 or more option includes listings at the upper bathroom range.

## `min_usable_area` (type: `integer`):

Only include listings with usable area at or above this many square meters. Leave empty when there is no lower size boundary.

## `max_usable_area` (type: `integer`):

Only include listings with usable area at or below this many square meters. Leave empty when there is no upper size boundary.

## `amenities` (type: `array`):

Select one or more amenities to narrow results to listings with those features. Leave empty when amenities should not restrict the search.

## `publication_date` (type: `string`):

Select a recent publication window to focus on newer listings. Leave empty to include listings regardless of publication date.

## `sort_by` (type: `string`):

Select how matching listings should be ordered before collection. Leave empty to use Hipflat's standard relevance-based ordering.

## `maximize_coverage` (type: `boolean`):

Keep this enabled for large searches that may exceed the visible-result limit. Turn it off for faster exploratory runs where the first visible set of matching listings is enough.

## `enrich_data` (type: `boolean`):

Enable this for more complete property listings. This may make the run slower because the actor may spend more time collecting details for each result. Turn it off for faster runs when the standard result fields are enough.

## `limit` (type: `integer`):

Enter the maximum number of listings to save. Leave empty to continue collecting available matches until the run naturally finishes.

## Actor input object example

```json
{
  "deal_type": "buy",
  "maximize_coverage": true,
  "enrich_data": true,
  "limit": 100
}
```

# Actor output Schema

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

Normalized Hipflat property listing records saved by this run.

# 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 = {
    "limit": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("fatihtahta/hipflat-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 = { "limit": 100 }

# Run the Actor and wait for it to finish
run = client.actor("fatihtahta/hipflat-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 '{
  "limit": 100
}' |
apify call fatihtahta/hipflat-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Hipflat Scraper | Thailand Real Estate",
        "description": "Extract Hipflat property listings across Thailand with rich listing detail, publisher data, pricing, amenities, media and flexible market filters. Built for enterprise-grade Thailand real estate intelligence, lead enrichment, inventory monitoring, and automated analytics pipelines.",
        "version": "0.0",
        "x-build-id": "JziYscRhFGA8JP6OF"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/fatihtahta~hipflat-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-fatihtahta-hipflat-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/fatihtahta~hipflat-scraper/runs": {
            "post": {
                "operationId": "runs-sync-fatihtahta-hipflat-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/fatihtahta~hipflat-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-fatihtahta-hipflat-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": {
                    "deal_type": {
                        "title": "Choose Sale or Rent Listings",
                        "enum": [
                            "buy",
                            "rent"
                        ],
                        "type": "string",
                        "description": "Select the commercial intent for the search. Use sale listings for acquisition research and rent listings for leasing or rental market analysis.",
                        "default": "buy"
                    },
                    "location": {
                        "title": "Enter Search Location",
                        "type": "string",
                        "description": "Provide a city, district, neighborhood, province, project area, or other Hipflat-supported location. Leave empty when you want a broad Hipflat search without a location boundary."
                    },
                    "property_type": {
                        "title": "Choose Property Types",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Select one or more property categories to include. Leave empty to keep the search broad across all supported Hipflat property types.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "condo",
                                "house",
                                "townhouse",
                                "apartment",
                                "land",
                                "office",
                                "hotel",
                                "commercial",
                                "industrial_unit",
                                "serviced_apartment",
                                "villa"
                            ],
                            "enumTitles": [
                                "Condo",
                                "House",
                                "Townhouse",
                                "Apartment",
                                "Land",
                                "Office",
                                "Hotel",
                                "Commercial / retail space",
                                "Industrial unit / warehouse",
                                "Serviced apartment",
                                "Villa"
                            ]
                        }
                    },
                    "currency": {
                        "title": "Choose Price Currency",
                        "enum": [
                            "EUR",
                            "THB",
                            "USD",
                            "AED",
                            "ARS",
                            "AUD",
                            "BRL",
                            "CAD",
                            "CHF",
                            "CLP",
                            "CLF",
                            "CNY",
                            "COP",
                            "CRC",
                            "CZK",
                            "DKK",
                            "EGP",
                            "GBP",
                            "HKD",
                            "HUF",
                            "IDR",
                            "INR",
                            "JPY",
                            "KES",
                            "KWD",
                            "LBP",
                            "MAD",
                            "MXN",
                            "MYR",
                            "NGN",
                            "NOK",
                            "NZD",
                            "OMR",
                            "PAB",
                            "PEN",
                            "PHP",
                            "PKR",
                            "PLN",
                            "QAR",
                            "RUB",
                            "SAR",
                            "SEK",
                            "SGD",
                            "TND",
                            "TRY",
                            "TWD",
                            "UAH",
                            "UYU",
                            "VES",
                            "VND",
                            "ZAR"
                        ],
                        "type": "string",
                        "description": "Select a currency for displayed listing prices. Leave empty to use Hipflat's default price presentation for the selected market."
                    },
                    "min_price": {
                        "title": "Set Minimum Price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include listings priced at or above this amount in the selected currency. Leave empty when there is no lower price boundary."
                    },
                    "max_price": {
                        "title": "Set Maximum Price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include listings priced at or below this amount in the selected currency. Leave empty when there is no upper price boundary."
                    },
                    "bedroom_count": {
                        "title": "Choose Bedroom Counts",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Select one or more bedroom counts to include. Studio represents 0 bedrooms, and 4 or more includes listings at the upper bedroom range.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "0",
                                "1",
                                "2",
                                "3",
                                "4"
                            ],
                            "enumTitles": [
                                "Studio",
                                "1 bedroom",
                                "2 bedrooms",
                                "3 bedrooms",
                                "4+ bedrooms"
                            ]
                        }
                    },
                    "bathroom_count": {
                        "title": "Choose Bathroom Counts",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Select one or more bathroom counts to include. The 5 or more option includes listings at the upper bathroom range.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "1",
                                "2",
                                "3",
                                "4",
                                "5"
                            ],
                            "enumTitles": [
                                "1 bathroom",
                                "2 bathrooms",
                                "3 bathrooms",
                                "4 bathrooms",
                                "5+ bathrooms"
                            ]
                        }
                    },
                    "min_usable_area": {
                        "title": "Set Minimum Usable Area",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include listings with usable area at or above this many square meters. Leave empty when there is no lower size boundary."
                    },
                    "max_usable_area": {
                        "title": "Set Maximum Usable Area",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include listings with usable area at or below this many square meters. Leave empty when there is no upper size boundary."
                    },
                    "amenities": {
                        "title": "Choose Required Amenities",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Select one or more amenities to narrow results to listings with those features. Leave empty when amenities should not restrict the search.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "cellar",
                                "cleaning_room",
                                "equipped_bathroom",
                                "equipped_kitchen",
                                "integral_kitchen",
                                "office",
                                "service_room",
                                "storage_room",
                                "children_s_area",
                                "gym",
                                "jacuzzi",
                                "multiuse_room",
                                "roof_garden",
                                "sauna",
                                "swimming_pool",
                                "tennis_court",
                                "built_in_wardrobe",
                                "disabled_access",
                                "library",
                                "lift",
                                "panoramic_view",
                                "balcony",
                                "garden",
                                "green_area",
                                "grill",
                                "terrace",
                                "yard",
                                "alarm",
                                "guardhouse",
                                "security",
                                "security_door",
                                "concierge",
                                "air_conditioning",
                                "car_park",
                                "electricity",
                                "fireplace",
                                "heating",
                                "internet",
                                "natural_gas",
                                "video_cable",
                                "water",
                                "water_tank"
                            ],
                            "enumTitles": [
                                "Cellar",
                                "Laundry room",
                                "Equipped bathroom",
                                "Equipped kitchen",
                                "Integral kitchen",
                                "Office room",
                                "Service room",
                                "Storage room",
                                "Children area",
                                "Gym",
                                "Jacuzzi",
                                "Multipurpose room",
                                "Roof garden",
                                "Sauna",
                                "Swimming pool",
                                "Tennis court",
                                "Built-in wardrobe",
                                "Access for people with disabilities",
                                "Library",
                                "Lift",
                                "Panoramic view",
                                "Balcony",
                                "Garden",
                                "Green area",
                                "Grill",
                                "Terrace",
                                "Yard",
                                "Alarm",
                                "Guardhouse",
                                "Security",
                                "Security door",
                                "Concierge",
                                "Air conditioning",
                                "Parking",
                                "Electricity",
                                "Fireplace",
                                "Heating",
                                "Internet",
                                "Natural gas",
                                "Video cable",
                                "Water",
                                "Water tank"
                            ]
                        }
                    },
                    "publication_date": {
                        "title": "Choose Listing Freshness",
                        "enum": [
                            "24-hours",
                            "7-days",
                            "30-days"
                        ],
                        "type": "string",
                        "description": "Select a recent publication window to focus on newer listings. Leave empty to include listings regardless of publication date."
                    },
                    "sort_by": {
                        "title": "Choose Result Order",
                        "enum": [
                            "relevance",
                            "price_asc",
                            "price_desc",
                            "bedrooms_asc",
                            "bedrooms_desc",
                            "usable_floor_area_asc",
                            "usable_floor_area_desc",
                            "first_publish_date_desc"
                        ],
                        "type": "string",
                        "description": "Select how matching listings should be ordered before collection. Leave empty to use Hipflat's standard relevance-based ordering."
                    },
                    "maximize_coverage": {
                        "title": "Collect More Matching Listings",
                        "type": "boolean",
                        "description": "Keep this enabled for large searches that may exceed the visible-result limit. Turn it off for faster exploratory runs where the first visible set of matching listings is enough.",
                        "default": true
                    },
                    "enrich_data": {
                        "title": "Collect Richer Property Listing Details",
                        "type": "boolean",
                        "description": "Enable this for more complete property listings. This may make the run slower because the actor may spend more time collecting details for each result. Turn it off for faster runs when the standard result fields are enough.",
                        "default": true
                    },
                    "limit": {
                        "title": "Set Maximum Results",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Enter the maximum number of listings to save. Leave empty to continue collecting available matches until the run naturally finishes."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
