{
  "openapi": "3.0.1",
  "info": {
    "title": "Nhatot Scraper - Vietnam Real Estate Listings",
    "description": "Extract real estate listings from Nhatot.com, Vietnam's busiest property market. Scrape apartments, houses, land, offices, and rooms for sale or rent by keyword, region, and price. Get legal status, furnishing, size, price/m², images, seller info, GPS coordinates. Export to JSON, CSV, or Excel.",
    "version": "0.1",
    "x-build-id": "lLAqJ9SPGDzX3H0yS"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/hgservices~nhatot-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-hgservices-nhatot-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/hgservices~nhatot-scraper/runs": {
      "post": {
        "operationId": "runs-sync-hgservices-nhatot-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/hgservices~nhatot-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-hgservices-nhatot-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": {
          "listingType": {
            "title": "Listing type",
            "enum": [
              "sale",
              "rent",
              "all"
            ],
            "type": "string",
            "description": "Scrape properties for sale, for rent, or both. Note: Phòng trọ (Rooms) exist only as rentals — selecting them with \"For sale\" fails with a clear error.",
            "default": "sale"
          },
          "includeWantedAds": {
            "title": "Include wanted ads",
            "type": "boolean",
            "description": "Also scrape \"wanted to buy\" (Cần mua) and \"wanted to rent\" (Cần thuê) ads. These are posted by seekers rather than sellers and are far less common. Off by default.",
            "default": false
          },
          "subcategoryIds": {
            "title": "Property subcategories",
            "uniqueItems": true,
            "type": "array",
            "description": "Which property subcategories to scrape. Defaults to all five.",
            "items": {
              "type": "string",
              "enum": [
                "1010",
                "1020",
                "1040",
                "1030",
                "1050"
              ],
              "enumTitles": [
                "Căn hộ/Chung cư (Apartments)",
                "Nhà ở (Houses)",
                "Đất (Land)",
                "Văn phòng, Mặt bằng KD (Offices / commercial)",
                "Phòng trọ (Rooms — rent only)"
              ]
            },
            "default": [
              "1010",
              "1020",
              "1040",
              "1030",
              "1050"
            ]
          },
          "search": {
            "title": "Search keyword",
            "type": "string",
            "description": "Full-text keyword (project name, street, ward…). Combinable with every filter below. Leave empty to scrape whole subcategories."
          },
          "regionId": {
            "title": "Region / Province",
            "enum": [
              "",
              "13000",
              "12000",
              "3017",
              "5027",
              "2011",
              "5024",
              "2010",
              "10060",
              "10059",
              "5025",
              "1001",
              "5026",
              "7043",
              "2012",
              "7042",
              "5028",
              "10061",
              "9053",
              "9054",
              "11067",
              "2013",
              "5029",
              "9056",
              "10062",
              "1003",
              "8049",
              "1004",
              "4019",
              "5030",
              "1005",
              "1006",
              "7044",
              "5031",
              "9055",
              "11068",
              "9057",
              "10063",
              "11069",
              "5032",
              "4020",
              "8050",
              "1007",
              "7045",
              "1002",
              "7046",
              "6038",
              "3016",
              "7047",
              "10130",
              "6039",
              "5033",
              "11070",
              "2014",
              "4021",
              "10064",
              "8051",
              "6040",
              "5034",
              "5035",
              "10065",
              "5036",
              "1008",
              "11071"
            ],
            "type": "string",
            "description": "Limit results to a single province. Leave as \"(Any region)\" to scrape nationwide.",
            "default": ""
          },
          "priceFrom": {
            "title": "Min price (VND)",
            "minimum": 0,
            "type": "integer",
            "description": "Lower price bound in Vietnamese đồng. Total price for sale; monthly price for rent. Leave empty for no minimum."
          },
          "priceTo": {
            "title": "Max price (VND)",
            "minimum": 0,
            "type": "integer",
            "description": "Upper price bound in Vietnamese đồng. Total price for sale; monthly price for rent. Leave empty for no maximum."
          },
          "maxItems": {
            "title": "Max items per subcategory",
            "minimum": 1,
            "type": "integer",
            "description": "Number of ads to fetch for EACH selected subcategory. Total output is at most this number times the number of subcategories (e.g. 50 × 5 subcategories = up to 250 items).",
            "default": 50
          },
          "enrichDetails": {
            "title": "Enrich with structured property attributes",
            "type": "boolean",
            "description": "Add an `attributes` object plus flattened `legalDocument`, `propertyStatus`, `furnishing` and numeric `pricePerM2` fields to every ad. On by default — these attributes are the headline feature. Slightly slows the run and adds a per-item enrichment charge.",
            "default": true
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}