# 28Hse Scraper | Hong Kong Real Estate (`fatihtahta/28hse-scraper`) Actor

Extract structured Hong Kong real estate property listings from 28Hse with prices, estate names, districts, bedroom counts, saleable area, and enriched listing details. Built for enterprise-grade Hong Kong real estate intelligence, pricing analysis, and automated property data pipelines.

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

## Pricing

from $1.79 / 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

## 28Hse.com Scraper | Hong Kong Real Estate Data

**Slug:** `fatihtahta/28hse-scraper`

### Overview

28Hse.com Scraper collects structured Hong Kong property listing data, including listing URLs, titles, prices, estate names, districts, bedroom counts, saleable area, and other listing-level attributes. When enabled, it can also return richer listing detail data such as agent information, media assets, location coordinates, nearby places, recent transactions, and estate metadata. [28Hse.com](https://www.28hse.com) is a widely used Hong Kong real estate marketplace, making it a valuable source for tracking residential and commercial property supply, pricing, and listing activity. This actor helps automate collection across searches and direct listing URLs so teams can work with consistent JSON output instead of manual copy-paste. The result is faster research, cleaner pipelines, and less operational overhead.

### Why Use This Actor

- **Market researchers and analysts:** Track asking prices, listing volume, property mix, and area-level supply for trend analysis, dashboards, and benchmarking.
- **Product and content teams:** Build listing feeds, neighborhood pages, market snapshots, and editorial datasets with consistent property attributes.
- **Developers and data engineers:** Send structured listing records directly into ETL jobs, internal databases, APIs, and analytics workflows.
- **Lead generation and enrichment teams:** Enrich property records with listing context, estate details, and contact-related metadata where available.
- **Monitoring and competitive intelligence teams:** Watch selected searches, estates, districts, or listing URLs over time to detect changes in pricing and inventory.

### Input Parameters

Provide any combination of URLs, queries, and filters. Leave optional fields empty to collect broader results.

| Parameter | Type | Description | Default |
| --- | --- | --- | --- |
| `enrich_data` | `boolean` | When `true`, returns richer listing detail fields in addition to the standard listing record. | `false` |
| `listingMode` | `string` | Transaction type for query-based searches. Allowed values: `buy` (For sale), `rent` (For rent). | `buy` |
| `queries` | `string[]` | Free-text search terms to run on 28Hse, such as estate names, districts, or property keywords. | – |
| `propertyType` | `string` | Property type filter for query-based runs. Allowed values: `apartment`, `carpark`, `office`, `shop`, `land`, `oversea`. | – |
| `location` | `string` | Location filter for query-based runs. Allowed values: `hk_only`, `hong_kong_island`, `kowloon`, `new_territories`, `outlying_islands`, `oversea`. | – |
| `minPrice` | `integer` | Minimum listing price in HKD. Leave empty for no lower bound. | – |
| `maxPrice` | `integer` | Maximum listing price in HKD. Leave empty for no upper bound. | – |
| `minSaleableArea` | `integer` | Minimum saleable area in square feet. | – |
| `maxSaleableArea` | `integer` | Maximum saleable area in square feet. | – |
| `bedrooms` | `string[]` | Bedroom filter for query-based runs. Allowed values: `studio`, `1`, `2`, `3`, `4`, `5+`. Multiple values are supported. | – |
| `limit` | `integer` | Maximum number of records to save for each query or direct URL seed. Leave empty to collect all available results. | – |
| `startUrls` | `string[]` | One or more direct 28Hse listing page URLs to collect. | – |
| `proxyConfiguration` | `object` | Connection settings for Apify proxy or a custom proxy configuration. | Apify proxy enabled with `RESIDENTIAL` group |

### Example Inputs

#### Scenario: query-driven run

```json
{
  "queries": ["Tsing Yi", "Lai Chi Kok"],
  "listingMode": "buy",
  "propertyType": "apartment",
  "location": "kowloon",
  "bedrooms": ["2", "3"],
  "limit": 150
}
````

#### Scenario: direct URL run

```json
{
  "startUrls": [
    "https://www.28hse.com/en/buy/apartment/property-3789134",
    "https://www.28hse.com/en/buy/apartment/property-3788395"
  ],
  "enrich_data": true,
  "listingMode": "buy",
  "propertyType": "apartment",
  "limit": 20
}
```

#### Scenario: filtered targeted run

```json
{
  "queries": ["Liberte", "Mount Haven"],
  "listingMode": "buy",
  "minPrice": 6000000,
  "maxPrice": 9000000,
  "minSaleableArea": 450,
  "maxSaleableArea": 700,
  "bedrooms": ["2"],
  "limit": 100
}
```

### Output

#### 6.1 Output destination

The actor writes results to the default Apify dataset as normalized JSON property listing records. Successful listing rows use grouped `snake_case` fields so humans, ETL jobs, BI tools, CRMs, and AI agents can consume the data without first untangling flat source fields.

#### 6.2 Record envelope

Every normal listing row starts with these stable fields:

- **record\_type** *(string, required)*: Record category. Normal listing rows use `property_listing`.
- **record\_id** *(string, required)*: Stable listing identifier for deduplication and upserts. Uses the 28Hse listing ID when available.
- **source\_context** *(object, required)*: Source URLs, seed context, page index, and external IDs for auditability.
- **entity** *(object, required)*: Primary listing title, description, URL, and source IDs.

**Recommended idempotency key:** `record_type + ":" + record_id`

#### 6.3 Examples

#### Example: standard property listing

```json
{
  "record_type": "property_listing",
  "record_id": "3788395",
    "source_context": {
      "source_name": "28Hse",
      "source_domain": "www.28hse.com",
      "source_url": "https://www.28hse.com/en/property/dosearch",
      "loaded_url": "https://www.28hse.com/en/property/dosearch",
      "listing_url": "https://www.28hse.com/en/buy/apartment/property-3788395",
      "canonical_url": "https://www.28hse.com/en/buy/apartment/property-3788395",
      "search_url": "https://www.28hse.com/en/property/dosearch",
      "seed_id": "bd5ea23885c1",
    "seed_type": "query",
    "page_index": 1,
    "detail_enriched": false,
    "external_ids": {
      "listing_id": "3788395"
    }
  },
  "entity": {
    "title": "Rent exceeds 3%, rare and unique unit with rooftop terrace",
    "url": "https://www.28hse.com/en/buy/apartment/property-3788395",
    "external_ids": {
      "listing_id": "3788395"
    }
  },
  "listing": {
    "listing_id": "3788395",
    "transaction_type": "sale",
    "posted_text": "23 seconds ago posted"
  },
  "pricing": {
    "price_text": "Sell HKD$7.3 Millions",
    "price": 7300000,
    "currency": "HKD"
  },
  "location": {
    "district": "Tsing Yi"
  },
  "property": {
    "property_type": "Apartment",
    "bedrooms": 2,
    "saleable_area_sqft": 561,
    "gross_area_sqft": 678,
    "direction": "North west",
    "unit_description": "Unit B,High Floor,BLOCK 1"
  },
  "relationships": {
    "agency": {
      "name": "Midland Realty International Limited"
    },
    "building": {
      "name": "Mount Haven"
    }
  },
  "attributes": {
    "tags": [
      "2 Bedrooms",
      "North west",
      "Apartment",
      "SHKP",
      "Garden view",
      "Elegant"
    ]
  }
}
```

#### Example: enriched property listing

```json
{
  "record_type": "property_listing",
  "record_id": "3789134",
  "source_context": {
    "source_name": "28Hse",
    "source_domain": "www.28hse.com",
    "source_url": "https://www.28hse.com/en/property/dosearch",
    "loaded_url": "https://www.28hse.com/en/property/dosearch",
    "listing_url": "https://www.28hse.com/en/buy/apartment/property-3789134",
    "canonical_url": "https://www.28hse.com/en/buy/apartment/property-3789134",
    "search_url": "https://www.28hse.com/en/property/dosearch",
    "seed_id": "5589bfff9e2c",
    "seed_type": "query",
    "page_index": 4,
    "detail_enriched": true,
    "external_ids": {
      "listing_id": "3789134",
      "reference_number": "MOD436"
    }
  },
  "entity": {
    "title": "Exclusive agency, familiar property owners, open to all with tickets, immediate viewing with keys.",
    "description": "Best Buy, Best Buy in the market, Negotiable, Spacious",
    "url": "https://www.28hse.com/en/buy/apartment/property-3789134",
    "external_ids": {
      "listing_id": "3789134"
    }
  },
  "listing": {
    "listing_id": "3789134",
    "reference_number": "MOD436",
    "transaction_type": "sale",
    "posted_text": "3 hours ago posted",
    "published_at": "2026-03-28T16:11:39+08:00",
    "updated_at": "2026-03-28T16:11:39+08:00",
    "expires_at": "2026-04-27T16:11:39+08:00"
  },
  "pricing": {
    "price_text": "Sell HKD$8.1 Millions",
    "price": 8100000,
    "currency": "HKD",
    "price_per_sqft_text": "@16,497"
  },
  "location": {
    "full_address": "Kowloon Lai Chi Kok Liberte No.833 Lai Chi Kok Road",
    "district": "Lai Chi Kok",
    "latitude": 22.334587,
    "longitude": 114.148849
  },
  "property": {
    "property_type": "Apartment",
    "bedrooms": 2,
    "saleable_area_sqft": 491,
    "gross_area_sqft": 647,
    "direction": "North",
    "floor_zone": "Middle Floor",
    "unit_description": "Unit E,Mid Floor,BLOCK 8, Middle Floor",
    "features": [
      "Decoration",
      "View",
      "Simple",
      "Good view",
      "City view",
      "Shopping Mall nearby",
      "Clubhouse",
      "MTR nearby"
    ]
  },
  "media": {
    "image_urls": [
      "https://i1.28hse.com/2026/03/202603281610391162707_large.jpg"
    ],
    "floorplan_urls": [
      "https://i1.28hse.com/estate_data/64/2510/FLOOR/2510_20231116200247885351_large.jpg"
    ]
  },
  "contact_details": {
    "methods": [
      "phone",
      "whatsapp",
      "wechat",
      "message"
    ],
    "wechat_id": "manicml",
    "wechat_qr_url": "https://u.wechat.com/IFuCvdO7-cnoBhivKdUGTYs?s%3D4=",
    "wechat_message": "Hello Mani Chan , I have just seen your property listing from 28Hse Liberte Sell HKD$8.1 Millions Property(ID:3789134) . Please provide me more details.",
    "message_template": "Hello Mani Chan , I have just seen your property listing from 28Hse Liberte Sell HKD$8.1 Millions Property(ID:3789134) . Please provide me more details.",
    "contacts": [
      {
        "name": "Mani Chan",
        "license_number": "S467585",
        "avatar_url": "https://i1.28hse.com/2026/03/202603261009002493037_thumb.jpg",
        "avatar_large_url": "https://i1.28hse.com/2026/03/202603261009002493037_large.jpg",
        "wechat_id": "manicml",
        "wechat_qr": "https://u.wechat.com/IFuCvdO7-cnoBhivKdUGTYs?s%3D4=",
        "name_card_url": "https://i1.28hse.com/2026/03/202603261328385819675_large.jpg",
        "available_actions": [
          "phone",
          "whatsapp",
          "wechat",
          "message"
        ]
      }
    ]
  },
  "relationships": {
    "agent": {
      "name": "Centaline Property",
      "profile_url": "https://www.28hse.com/en/agent/4625",
      "office_address": "長沙灣深盛路9號宇晴匯2樓88號舖",
      "license_number": "S467585",
      "avatar_url": "https://i1.28hse.com/2026/03/202603261009002493037_large.jpg",
      "name_card_url": "https://i1.28hse.com/2026/03/202603261328385819675_large.jpg"
    },
    "agency": {
      "name": "Centaline Property",
      "license_number": "C-000227",
      "image_url": "https://www.28hse.com/assets/images/agent4/CENTALINE.jpg",
      "listing_count": 148
    },
    "building": {
      "name": "Liberte"
    },
    "related_listings": [
      {
        "title": "2 Bedrooms ( 45 )",
        "price_range": "$6.9M - $9M",
        "url": "https://www.28hse.com/en/buy/apartment/a2/dg27/di27-64/c2510?roomRange=2"
      }
    ]
  },
  "attributes": {
    "tags": [
      "2 Bedrooms , 1 Bathroom",
      "North",
      "Apartment",
      "Lai Chi Kok",
      "Liberte",
      "For Sale Property Detail Page"
    ],
    "labels": [
      "Apartment",
      "Shun Tak",
      "Golden Ads",
      "3 hours ago posted"
    ],
    "neighborhood_details": {
      "nearby_places": [
        {
          "category": "Trans",
          "name": "Banyan Garden, Sham Shing Road( Bus Stop )",
          "distance": "2 min Walk"
        }
      ]
    },
    "market_context": {
      "recent_transactions": [
        {
          "unit_id": "163430",
          "estate": "Liberte",
          "unit": "Flat A, 29/F, Block 3",
          "url": "https://www.28hse.com/en/estate/detail/liberte-2510/history/blockno-3/unitid-163430",
          "date": "2026-03-25",
          "source": "Land Registry",
          "area": "512ft²",
          "price": "HKD$8.2 M",
          "unit_price": "@ $16,016"
        }
      ]
    },
    "source_specific": {
      "property_details": {
        "Sell Price": "Sell HKD$8.1 Millions",
        "Gross Area": {
          "value": "647 ft²",
          "subvalues": [
            "Unit Price: @12,519"
          ]
        },
        "Saleable Area": {
          "value": "491 ft²",
          "subvalues": [
            "Unit Price: @16,497"
          ]
        },
        "Room and Bathroom": "2 Bedrooms 1 Bathroom",
        "Kitchen type": "Separate Kitchen"
      },
      "estate_details": {
        "Estate Entry Date": "2003-08-08",
        "Unit Desc": "2,434 Units",
        "Carpark": "487",
        "Block Desc": "7 Towers",
        "Developer": "Shun Tak"
      }
    }
  }
}
```

### Field reference

#### Top-level fields

- **record\_type** *(string, required)*: Normal property rows use `property_listing`.
- **record\_id** *(string, required)*: Stable listing identifier. Listing IDs stay strings.
- **source\_context** *(object, required)*: Source name, domain, source URL, listing URL, loaded URL, search URL, seed context, page index, enrichment flag, and external IDs.
- **entity** *(object, required)*: Listing title, description, URL, and entity-level IDs.
- **listing** *(object, optional)*: Listing ID, reference number, sale/rent mode, posted text, publish/update/expiry timestamps.
- **pricing** *(object, optional)*: Displayed price text, normalized numeric price when safe, currency, and price-per-square-foot display text.
- **location** *(object, optional)*: Displayed address, district, latitude, and longitude when provided by the source.
- **property** *(object, optional)*: Property type, bedroom/bathroom counts, area fields, direction, floor zone, unit description, and feature labels.
- **media** *(object, optional)*: Listing image URLs and floor plan URLs.
- **contact\_details** *(object, optional)*: Contact methods, WeChat fields, message templates, and structured contact entries.
- **relationships** *(object, optional)*: Agent, agency, building or estate, and related listing links.
- **attributes** *(object, optional)*: Tags, labels, nearby places, market context, and source-specific detail maps.

#### Nested preservation fields

- **attributes.source\_specific.property\_details** preserves the source-labeled property detail map from enriched listing pages.
- **attributes.source\_specific.estate\_details** preserves the source-labeled estate/building detail map.
- **attributes.neighborhood\_details.nearby\_places** stores nearby transportation, mall, food, school, bank, hospital, and other place rows.
- **attributes.market\_context.recent\_transactions** stores contextual transaction rows shown by 28Hse. Treat these as source-provided context, not a complete market history.
- **relationships.related\_listings** stores related unit links and price ranges from the listing context.

### Data guarantees & handling

- **Best-effort extraction:** fields may vary by region, session, availability, and UI experiments on the source site.
- **Optional fields:** null-check in downstream code because some attributes may be absent on certain listings.
- **Deduplication:** recommend `record_type + ":" + record_id`.

### How to Run on Apify

1. Open the actor in Apify Console.
2. Enter one or more search queries or direct listing URLs, then choose any filters you want to apply.
3. Set the listing mode and the maximum number of records to collect per seed.
4. Enable enriched data if you want extended listing details in each record.
5. Click **Start** and wait for the run to finish.
6. Download the dataset in JSON, CSV, Excel, or another supported format.

### Scheduling & Automation

##### Scheduling

**Automated Data Collection**

You can schedule recurring runs to keep your property dataset current without manual restarts. This is useful for ongoing market monitoring, reporting, and downstream automation.

- Navigate to **Schedules** in Apify Console
- Create a new schedule (daily, weekly, or custom cron)
- Configure input parameters
- Enable notifications for run completion
- Optional: add webhooks for automated processing

##### Integration Options

- **Webhooks:** Trigger downstream actions when a run completes
- **Zapier:** Connect to 5,000+ apps without coding
- **Make (Integromat):** Build multi-step automation workflows
- **Google Sheets:** Export results to a spreadsheet
- **Slack/Discord:** Receive notifications and summaries
- **Email:** Send automated reports via email

### Performance

Estimated run times:

- **Small runs (< 1,000 outputs):** ~2–3 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.

### Compliance & Ethics

##### Responsible Data Collection

This actor collects publicly available real estate listing and market information from <https://www.28hse.com> for legitimate business purposes, including real estate research and market analysis, listing monitoring and benchmarking, and data enrichment for internal tools and reporting. Users are responsible for ensuring their use of the collected data complies with applicable laws, regulations, and the source site’s terms. This section is informational and not legal advice.

- **Real estate** research and market analysis
- **Listing monitoring and competitive tracking**
- **Data enrichment and internal analytics**

##### 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, including GDPR and CCPA

### Support

For help, open an issue on the actor page in Apify Console. Include the input you used with any sensitive values redacted, the run ID, a short description of expected versus actual behavior, and a small output sample if useful.

# Actor input Schema

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

Turn this on to visit each product detail page and collect additional data from. Leave it off for a faster run.

## `listingMode` (type: `string`):

Choose whether query-based requests should search properties for sale or for rent.

## `queries` (type: `array`):

Optional free-text queries. Each query is converted into a 28Hse search request with the filters below.

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

Optional property type filter applied to query seeds.

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

Optional location filter applied to query seeds.

## `minPrice` (type: `integer`):

Optional minimum price in HKD. Leave empty for no lower bound.

## `maxPrice` (type: `integer`):

Optional maximum price in HKD. Leave empty for no upper bound.

## `minSaleableArea` (type: `integer`):

Optional minimum saleable area in square feet.

## `maxSaleableArea` (type: `integer`):

Optional maximum saleable area in square feet.

## `bedrooms` (type: `array`):

Optional bedroom filter for query seeds. Multiple selections are allowed.

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

Optional maximum number of records to save for each URL or query seed. Leave empty to collect all available listings.

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

Direct Listing URLs to crawl.

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

Optional Apify or custom proxy configuration.

## Actor input object example

```json
{
  "enrich_data": false,
  "listingMode": "buy",
  "limit": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Normalized 28Hse 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/28hse-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/28hse-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/28hse-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "28Hse Scraper | Hong Kong Real Estate",
        "description": "Extract structured Hong Kong real estate property listings from 28Hse with prices, estate names, districts, bedroom counts, saleable area, and enriched listing details. Built for enterprise-grade Hong Kong real estate intelligence, pricing analysis, and automated property data pipelines.",
        "version": "0.0",
        "x-build-id": "edEULX6izycEwm2ta"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/fatihtahta~28hse-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-fatihtahta-28hse-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~28hse-scraper/runs": {
            "post": {
                "operationId": "runs-sync-fatihtahta-28hse-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~28hse-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-fatihtahta-28hse-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": {
                    "enrich_data": {
                        "title": "📄 Enrich results with product page data",
                        "type": "boolean",
                        "description": "Turn this on to visit each product detail page and collect additional data from. Leave it off for a faster run.",
                        "default": false
                    },
                    "listingMode": {
                        "title": "Listing mode",
                        "enum": [
                            "buy",
                            "rent"
                        ],
                        "type": "string",
                        "description": "Choose whether query-based requests should search properties for sale or for rent.",
                        "default": "buy"
                    },
                    "queries": {
                        "title": "Search queries",
                        "type": "array",
                        "description": "Optional free-text queries. Each query is converted into a 28Hse search request with the filters below.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "propertyType": {
                        "title": "Type",
                        "enum": [
                            "apartment",
                            "carpark",
                            "office",
                            "shop",
                            "land",
                            "oversea"
                        ],
                        "type": "string",
                        "description": "Optional property type filter applied to query seeds."
                    },
                    "location": {
                        "title": "Location",
                        "enum": [
                            "hk_only",
                            "hong_kong_island",
                            "kowloon",
                            "new_territories",
                            "outlying_islands",
                            "oversea"
                        ],
                        "type": "string",
                        "description": "Optional location filter applied to query seeds."
                    },
                    "minPrice": {
                        "title": "Min price (HKD)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Optional minimum price in HKD. Leave empty for no lower bound."
                    },
                    "maxPrice": {
                        "title": "Max price (HKD)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Optional maximum price in HKD. Leave empty for no upper bound."
                    },
                    "minSaleableArea": {
                        "title": "Min saleable area (sq ft)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Optional minimum saleable area in square feet."
                    },
                    "maxSaleableArea": {
                        "title": "Max saleable area (sq ft)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Optional maximum saleable area in square feet."
                    },
                    "bedrooms": {
                        "title": "Bedrooms",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Optional bedroom filter for query seeds. Multiple selections are allowed.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "studio",
                                "1",
                                "2",
                                "3",
                                "4",
                                "5+"
                            ],
                            "enumTitles": [
                                "Studio",
                                "1",
                                "2",
                                "3",
                                "4",
                                "5+"
                            ]
                        }
                    },
                    "limit": {
                        "title": "Maximum items per seed ",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Optional maximum number of records to save for each URL or query seed. Leave empty to collect all available listings."
                    },
                    "startUrls": {
                        "title": "Scrape by Direct URL (Listing pages)",
                        "type": "array",
                        "description": "Direct Listing URLs to crawl.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "proxyConfiguration": {
                        "title": "Connection Settings ⚙️",
                        "type": "object",
                        "description": "Optional Apify or custom proxy configuration.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
