{
  "openapi": "3.0.1",
  "info": {
    "title": "28hse.com Hong Kong Property Scraper: Sale, Rent, Estates",
    "description": "Scrape 28hse.com, the Hong Kong property portal: sale and rent listings (apartments, offices, shops, car parks, land, overseas homes), estate profiles, deal history and new developments. HKD prices, areas in sq ft and m2, coordinates, agency, photos. Monitor mode. No login. Export JSON, CSV, Excel.",
    "version": "0.1",
    "x-build-id": "qRQjSAzmGcTY082Do"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/recordsdata~28hse-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-recordsdata-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/recordsdata~28hse-scraper/runs": {
      "post": {
        "operationId": "runs-sync-recordsdata-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/recordsdata~28hse-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-recordsdata-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": {
          "recordTypes": {
            "title": "What to collect",
            "type": "array",
            "description": "Listings = sale or rent ads. Estates = housing estate or building profiles. Transactions = recorded sales and leases. New developments = primary-market projects. Example: Listings.",
            "items": {
              "type": "string",
              "enum": [
                "listings",
                "estates",
                "transactions",
                "new-developments"
              ],
              "enumTitles": [
                "Listings (sale and rent ads)",
                "Estates and buildings",
                "Estate transactions (sold and leased units)",
                "New developments"
              ]
            },
            "default": [
              "listings"
            ]
          },
          "maxItems": {
            "title": "Maximum rows to return",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Stops after this many rows, all record types together. Free users are limited to 10 items per run (preview). Example: 50."
          },
          "maxItemsPerSearch": {
            "title": "Max rows per single search (0 = no cap)",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Optional cap for every single search (one operation, property type and place) or, for transactions, for every single estate. It stops one big search from using the whole Max Items budget. 0 means no per-search limit.",
            "default": 0
          },
          "operation": {
            "title": "Buy, rent or both",
            "enum": [
              "sale",
              "rent",
              "both"
            ],
            "type": "string",
            "description": "Listings for sale, for rent, or both (both runs every search twice). Transactions follow the same choice: sold units, leased units or both. Rows say which one in the operation field.",
            "default": "sale"
          },
          "propertyTypes": {
            "title": "Property types (optional)",
            "type": "array",
            "description": "Categories to search, one search each. Empty means apartments and houses. Overseas new homes are sale-only and live in the Overseas region.",
            "items": {
              "type": "string",
              "enum": [
                "apartment",
                "carpark",
                "office",
                "shop",
                "land",
                "oversea"
              ],
              "enumTitles": [
                "Apartments and houses",
                "Car parks",
                "Offices and industrial",
                "Shops",
                "Land",
                "Overseas new homes"
              ]
            },
            "default": []
          },
          "regions": {
            "title": "Regions (optional)",
            "type": "array",
            "description": "Hong Kong regions to search, one search each. Empty means all of Hong Kong. Estates are listed by region too.",
            "items": {
              "type": "string",
              "enum": [
                "hk-island",
                "kowloon",
                "new-territories",
                "outlying-islands",
                "overseas"
              ],
              "enumTitles": [
                "Hong Kong Island",
                "Kowloon",
                "New Territories",
                "Outlying Islands",
                "Overseas (Greater Bay Area)"
              ]
            },
            "default": []
          },
          "districts": {
            "title": "Districts (optional)",
            "type": "array",
            "description": "District groups to search, one search each (the site groups some small districts together). If you also pick regions, every district must belong to one of them. Empty means the whole region.",
            "items": {
              "type": "string",
              "enum": [
                "island-south",
                "aberdeen-ap-lei-chau-wong-chuk-hang",
                "chai-wan-siu-sai-wan-shek-o",
                "shau-kei-wan-heng-fa-chuen",
                "sai-wan-ho",
                "taikoo",
                "quarry-bay",
                "north-point-mid",
                "north-point-fortress-hill",
                "tin-hau-tai-hang",
                "causeway-bay-happy-valley",
                "wan-chai-admiralty",
                "mid-level-west-level",
                "central-sheung-wan",
                "sai-ying-pun-shek-tong-tsui",
                "kennedy-town",
                "whampoa",
                "hung-hom",
                "tsim-sha-tsui",
                "jordan",
                "yau-ma-tei",
                "mong-kok",
                "prince-edward",
                "tai-kok-tsui-olympic-kowloon-station",
                "lai-king",
                "mei-foo",
                "cheung-sha-wan",
                "lai-chi-kok",
                "sham-shui-po-shek-kip-mei-nam-cheong",
                "yau-yat-tsuen",
                "ho-man-tin",
                "kowloon-tong",
                "san-po-kong-wong-tai-sin",
                "kai-tak",
                "kowloon-city",
                "to-kwa-wan",
                "diamond-hill-lok-fu",
                "ngau-chi-wan",
                "kowloon-bay",
                "kwun-tong-ngau-tau-kok",
                "yau-tong",
                "lam-tin",
                "sha-tau-kok",
                "tsing-yi",
                "kwai-chung-kwai-fong",
                "tsuen-wan-tai-wo-hau",
                "tsuen-wan-sham-tseng",
                "tuen-mun-castle-peak-road",
                "tuen-mun",
                "tin-shui-wai",
                "yuen-long-hung-shui-kiu",
                "sheung-shui",
                "fan-ling",
                "tai-po-tai-wo-pak-shek-kok",
                "shatin-tai-wai-fotan",
                "ma-on-shan",
                "tseung-kwan-o",
                "sai-kung-clear-water-bay",
                "cheung-chau-other-islands",
                "lamma-island",
                "peng-chau",
                "south-lantau-island-tai-o",
                "tung-chung",
                "discovery-bay",
                "ma-wan",
                "greater-bay-area"
              ],
              "enumTitles": [
                "Island South (Hong Kong Island)",
                "Aberdeen, Ap Lei Chau, Wong Chuk Hang (Hong Kong Island)",
                "Chai Wan, Siu Sai Wan, Shek O (Hong Kong Island)",
                "Shau Kei Wan, Heng Fa Chuen (Hong Kong Island)",
                "Sai Wan Ho (Hong Kong Island)",
                "TaiKoo (Hong Kong Island)",
                "Quarry Bay (Hong Kong Island)",
                "North Point Mid (Hong Kong Island)",
                "North Point, Fortress Hill (Hong Kong Island)",
                "Tin Hau, Tai Hang (Hong Kong Island)",
                "Causeway Bay, Happy Valley (Hong Kong Island)",
                "Wan Chai, Admiralty (Hong Kong Island)",
                "Mid-Level, West-Level (Hong Kong Island)",
                "Central, Sheung Wan (Hong Kong Island)",
                "Sai Ying Pun, Shek Tong Tsui (Hong Kong Island)",
                "Kennedy Town (Hong Kong Island)",
                "Whampoa (Kowloon)",
                "Hung Hom (Kowloon)",
                "Tsim Sha Tsui (Kowloon)",
                "Jordan (Kowloon)",
                "Yau Ma Tei (Kowloon)",
                "Mong Kok (Kowloon)",
                "Prince Edward (Kowloon)",
                "Tai Kok Tsui, Olympic, Kowloon Station (Kowloon)",
                "Lai King (Kowloon)",
                "Mei Foo (Kowloon)",
                "Cheung Sha Wan (Kowloon)",
                "Lai Chi Kok (Kowloon)",
                "Sham Shui Po, Shek Kip Mei, Nam Cheong (Kowloon)",
                "Yau Yat Tsuen (Kowloon)",
                "Ho Man Tin (Kowloon)",
                "Kowloon Tong (Kowloon)",
                "San Po Kong, Wong Tai Sin (Kowloon)",
                "Kai Tak (Kowloon)",
                "Kowloon City (Kowloon)",
                "To Kwa Wan (Kowloon)",
                "Diamond Hill, Lok Fu (Kowloon)",
                "Ngau Chi Wan (Kowloon)",
                "Kowloon Bay (Kowloon)",
                "Kwun Tong, Ngau Tau Kok (Kowloon)",
                "Yau Tong (Kowloon)",
                "Lam Tin (Kowloon)",
                "Sha Tau Kok (New Territories)",
                "Tsing Yi (New Territories)",
                "Kwai Chung, Kwai Fong (New Territories)",
                "Tsuen Wan, Tai Wo Hau (New Territories)",
                "Tsuen Wan Sham Tseng (New Territories)",
                "Tuen Mun Castle Peak Road (New Territories)",
                "Tuen Mun (New Territories)",
                "Tin Shui Wai (New Territories)",
                "Yuen Long, Hung Shui Kiu (New Territories)",
                "Sheung Shui (New Territories)",
                "Fan Ling (New Territories)",
                "Tai Po, Tai Wo, Pak Shek Kok (New Territories)",
                "ShaTin, Tai Wai, Fotan (New Territories)",
                "Ma On Shan (New Territories)",
                "Tseung Kwan O (New Territories)",
                "Sai Kung, Clear Water Bay (New Territories)",
                "Cheung Chau, Other Islands (Outlying Islands)",
                "Lamma Island (Outlying Islands)",
                "Peng Chau (Outlying Islands)",
                "South Lantau Island, Tai O (Outlying Islands)",
                "Tung Chung (Outlying Islands)",
                "Discovery Bay (Outlying Islands)",
                "Ma Wan (Outlying Islands)",
                "Greater Bay Area (Overseas (Greater Bay Area))"
              ]
            },
            "default": []
          },
          "minPrice": {
            "title": "Min price (HKD)",
            "minimum": 0,
            "type": "number",
            "description": "Only listings priced at least this much, in Hong Kong dollars (1000000 = HK$1 million; for rent it is the monthly rent). 0 means no limit.",
            "default": 0
          },
          "maxPrice": {
            "title": "Max price (HKD)",
            "minimum": 0,
            "type": "number",
            "description": "Only listings priced at most this much, in Hong Kong dollars (8000000 = HK$8 million; for rent it is the monthly rent). 0 means no limit.",
            "default": 0
          },
          "minArea": {
            "title": "Min area (sq ft)",
            "minimum": 0,
            "type": "number",
            "description": "Only listings with at least this area in square feet (Hong Kong ads are measured in square feet; 1 square meter is 10.76 square feet). 0 means no limit.",
            "default": 0
          },
          "maxArea": {
            "title": "Max area (sq ft)",
            "minimum": 0,
            "type": "number",
            "description": "Only listings with at most this area in square feet. 0 means no limit.",
            "default": 0
          },
          "areaBasis": {
            "title": "Area measured as (saleable or gross)",
            "enum": [
              "saleable",
              "gross"
            ],
            "type": "string",
            "description": "Which area the minimum and maximum area apply to. Hong Kong ads usually give a saleable area and a larger gross area.",
            "default": "saleable"
          },
          "bedrooms": {
            "title": "Bedrooms",
            "type": "array",
            "description": "Bedroom counts to include. Empty means any.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "studio",
                "5plus"
              ],
              "enumTitles": [
                "1 bedroom",
                "2 bedrooms",
                "3 bedrooms",
                "4 bedrooms",
                "Studio",
                "5 or more bedrooms"
              ]
            },
            "default": []
          },
          "bathrooms": {
            "title": "Bathrooms",
            "type": "array",
            "description": "Bathroom counts to include. Empty means any.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5plus"
              ],
              "enumTitles": [
                "1 bathroom",
                "2 bathrooms",
                "3 bathrooms",
                "4 bathrooms",
                "5 or more bathrooms"
              ]
            },
            "default": []
          },
          "directions": {
            "title": "Facing direction",
            "type": "array",
            "description": "Direction the unit faces. Empty means any.",
            "items": {
              "type": "string",
              "enum": [
                "east",
                "south-east",
                "south",
                "south-west",
                "west",
                "north-west",
                "north",
                "north-east"
              ],
              "enumTitles": [
                "East",
                "South-east",
                "South",
                "South-west",
                "West",
                "North-west",
                "North",
                "North-east"
              ]
            },
            "default": []
          },
          "floors": {
            "title": "Floor zone",
            "type": "array",
            "description": "Floor zone of the unit. Empty means any.",
            "items": {
              "type": "string",
              "enum": [
                "whole-block",
                "high",
                "middle",
                "low",
                "ground",
                "underground"
              ],
              "enumTitles": [
                "Whole block",
                "High",
                "Middle",
                "Low",
                "Ground",
                "Underground"
              ]
            },
            "default": []
          },
          "buildingAge": {
            "title": "Building age",
            "type": "array",
            "description": "Age bands of the building. Empty means any.",
            "items": {
              "type": "string",
              "enum": [
                "brand-new",
                "within-5-years",
                "within-10-years",
                "within-15-years",
                "within-20-years",
                "within-25-years",
                "within-30-years",
                "20-30-years",
                "30-40-years",
                "40-50-years",
                "over-50-years"
              ],
              "enumTitles": [
                "Brand new",
                "Within 5 years",
                "Within 10 years",
                "Within 15 years",
                "Within 20 years",
                "Within 25 years",
                "Within 30 years",
                "20 30 years",
                "30 40 years",
                "40 50 years",
                "Over 50 years"
              ]
            },
            "default": []
          },
          "advertisers": {
            "title": "Posted by",
            "type": "array",
            "description": "Who posted the ad: a landlord or owner, a big landlord (developer or institutional owner), or an agency. Empty means all.",
            "items": {
              "type": "string",
              "enum": [
                "landlord",
                "big-landlord",
                "agency"
              ],
              "enumTitles": [
                "Landlord / owner",
                "Big landlord",
                "Agency"
              ]
            },
            "default": []
          },
          "postedWithinDays": {
            "title": "Posted within (days, 0 = any age)",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Only listings posted in the last N days, read from the posting label of each search card; for transactions, only deals dated in the last N days. With newest-first order the search stops early. 0 means any age.",
            "default": 0
          },
          "sortBy": {
            "title": "Sort results by",
            "enum": [
              "latest",
              "best-match",
              "price-low",
              "price-high",
              "gross-area-low",
              "gross-area-high",
              "saleable-area-low",
              "saleable-area-high",
              "unit-price-gross-low",
              "unit-price-gross-high",
              "unit-price-saleable-low",
              "unit-price-saleable-high"
            ],
            "type": "string",
            "description": "Order of the results. Newest first is the default and the only order where \"Posted within\" and monitor mode can stop early.",
            "default": "latest"
          },
          "estateKind": {
            "title": "Which estate directory",
            "enum": [
              "housing",
              "commercial",
              "both"
            ],
            "type": "string",
            "description": "Which directory to read for the Estates, Transactions and New developments record types: housing estates and new homes, commercial and industrial buildings and new office projects, or both.",
            "default": "housing"
          },
          "startUrls": {
            "title": "28hse.com page links",
            "type": "array",
            "description": "A listing, a search page, an estate, an estate directory or the new developments list. Example: https://www.28hse.com/en/rent/apartment. Leave empty to use the search above.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "fetchDetails": {
            "title": "Open every page for full detail (adds the detail charge)",
            "type": "boolean",
            "description": "Open every listing, estate and development page for the full description, all photos, coordinates, floor, building age, management fee, school nets, agency licence and dates. Turn it off for a faster and cheaper run with the fields of the search card only.",
            "default": true
          },
          "includeContactDetails": {
            "title": "Include agency head office phone and licence",
            "type": "boolean",
            "description": "Add the head office phone number and licence of the agency behind a listing (business data from the agency company page, one extra request per agency). Private landlords and individual agents are never named and their phones and emails are never returned. Off by default.",
            "default": false
          },
          "maxRunSeconds": {
            "title": "Max run time (seconds)",
            "minimum": 30,
            "maximum": 86400,
            "type": "integer",
            "description": "Stop collecting after this many seconds and return what was gathered, so a very wide search never runs unbounded.",
            "default": 1800
          },
          "onlyNew": {
            "title": "Only new rows (monitor)",
            "type": "boolean",
            "description": "Skip every listing, estate, transaction or development this same search already returned in an earlier run, so a scheduled run returns just the new ones and you are not charged for skipped rows. Max Items then means N new rows. Off by default.",
            "default": false
          },
          "stateKey": {
            "title": "Monitor name (optional)",
            "type": "string",
            "description": "Optional label that separates two monitors of otherwise identical searches (for example one per client). Leave empty to use only the search filters.",
            "default": ""
          },
          "resetSeen": {
            "title": "Forget previously seen rows",
            "type": "boolean",
            "description": "Forget what earlier runs of this search returned and start the monitor again from scratch.",
            "default": false
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}