{
  "openapi": "3.0.1",
  "info": {
    "title": "PropertyHub.in.th Scraper | Thailand Real Estate",
    "description": "Extract PropertyHub.in.th property listings at scale with clean JSON, prices, photos, descriptions, agent contacts, amenities, and map-ready coordinates. Built for Thailand real estate intelligence, lead enrichment, inventory monitoring, CRM, BI, and AI workflows.",
    "version": "0.1",
    "x-build-id": "oOe9o2QackUo8UwRw"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/fatihtahta~propertyhub-in-th-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-fatihtahta-propertyhub-in-th-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~propertyhub-in-th-scraper/runs": {
      "post": {
        "operationId": "runs-sync-fatihtahta-propertyhub-in-th-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~propertyhub-in-th-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-fatihtahta-propertyhub-in-th-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": {
          "location": {
            "title": "Set a Location, Transit Station, District, or Market",
            "type": "string",
            "description": "Enter a PropertyHub-recognized market such as Bangkok, a district, a neighborhood, or a BTS/MRT station name. Use one focused location per run when you want cleaner exports for monitoring, CRM enrichment, dashboards, or downstream analysis."
          },
          "deal_type": {
            "title": "Choose Sale or Rental Listings",
            "enum": [
              "sale",
              "rent"
            ],
            "type": "string",
            "description": "Select whether this run should collect sale listings or rental listings. Pair this with location and property type when you need comparable market slices for price tracking, reporting, or CRM enrichment.",
            "default": "sale"
          },
          "property_type": {
            "title": "Choose a Property Category",
            "enum": [
              "",
              "Condominium",
              "Shop house",
              "House",
              "Land",
              "Office",
              "Town house",
              "Sale area",
              "Apartment"
            ],
            "type": "string",
            "description": "Optionally narrow the search to one PropertyHub property category. Leave this as Any property type for broader market discovery, or choose a category when you need cleaner downstream segments.",
            "default": ""
          },
          "min_price": {
            "title": "Set a Minimum Asking Price or Monthly Rent",
            "minimum": 1,
            "type": "integer",
            "description": "Optional lower bound in THB. Use this with the maximum price when you need a comparable price band for dashboards, alerts, or scheduled monitoring."
          },
          "max_price": {
            "title": "Set a Maximum Asking Price or Monthly Rent",
            "minimum": 1,
            "type": "integer",
            "description": "Optional upper bound in THB. Keep this empty for broad discovery, or set it to control run size and focus on listings that match your target budget range."
          },
          "bed_count": {
            "title": "Filter by Bedroom Count",
            "enum": [
              "",
              "Studio",
              "1 bedroom",
              "2 bedroom",
              "3 bedroom",
              "4 bedroom"
            ],
            "type": "string",
            "description": "Optional bedroom filter for listing searches that support bedroom-style room selection. Leave empty to include all bedroom counts.",
            "default": ""
          },
          "min_area": {
            "title": "Set a Minimum Room or Usable Area",
            "minimum": 1,
            "type": "integer",
            "description": "Optional minimum area in square meters. Use this to avoid very small units when preparing market comparisons, CRM lists, or property review queues."
          },
          "max_useable_area": {
            "title": "Set a Maximum Room or Usable Area",
            "minimum": 1,
            "type": "integer",
            "description": "Optional maximum usable or room area in square meters. Pair it with the minimum area to create a bounded size range for repeatable exports."
          },
          "min_land_area": {
            "title": "Set a Minimum Land Area",
            "minimum": 1,
            "type": "integer",
            "description": "Optional minimum land area in square wah. This is most useful for house, land, town house, shop house, or sale area searches."
          },
          "max_land_area": {
            "title": "Set a Maximum Land Area",
            "minimum": 1,
            "type": "integer",
            "description": "Optional maximum land area in square wah. Use it with the minimum land area when you need a bounded land-size segment for analysis or monitoring."
          },
          "furnishment": {
            "title": "Filter by Furnishing Status",
            "enum": [
              "",
              "Fully",
              "Partly",
              "Unfurnished"
            ],
            "type": "string",
            "description": "Optionally limit results by furnishing status. Leave empty when furnishing is not important for this run.",
            "default": ""
          },
          "amenities": {
            "title": "Require Specific Amenities or Building Facilities",
            "uniqueItems": true,
            "type": "array",
            "description": "Optionally choose room amenities or building facilities that matching listings should include. Use this for focused lead lists, tenant-ready rentals, amenity-based dashboards, or automated review workflows.",
            "items": {
              "type": "string",
              "enum": [
                "Furniture",
                "Air conditioner",
                "Room digital lock system",
                "TV",
                "Fridge",
                "Wireless internet (WIFI) in the room",
                "Hot/warm water heater",
                "Bath",
                "Cooking stove",
                "Microwave",
                "Hood",
                "Washing machine",
                "Lift",
                "Parking",
                "Motorcycle Parking",
                "Closed Circuit Television (CCTV)",
                "Pool",
                "Fitness",
                "Sauna",
                "Stream",
                "EV Charger",
                "Internet",
                "Security",
                "Library",
                "Shop",
                "Meeting Room",
                "Park",
                "Restaurant",
                "Laundry shop",
                "Playground",
                "Shuttle",
                "Stadium (Tennis/Basketball)"
              ]
            },
            "default": []
          },
          "enrich_data": {
            "title": "Collect Richer Property Listing Details",
            "type": "boolean",
            "description": "Turn this on for CRM enrichment, property review queues, richer BI records, or agentic workflows that need listing-page context. Leave it off for faster validation runs, lightweight monitoring, or broad exploratory searches.",
            "default": true
          },
          "limit": {
            "title": "Set the Maximum Number of Listings to Save",
            "minimum": 1,
            "type": "integer",
            "description": "Optional cap on saved property records. Leave empty to let the run collect the available matching records for the selected scope, or set a number to keep validation runs and recurring jobs bounded."
          },
          "mcpConnectors": {
            "title": "Select Optional MCP Connectors for Listing Handoff",
            "uniqueItems": true,
            "type": "array",
            "description": "Choose user-authorized MCP connectors for optional delivery after the dataset, run summary, and interactive map are saved. The handoff includes run counts, scope, enrichment status, and links when available. Leave empty to only save listings to the Apify dataset and key-value store.",
            "default": []
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}