{
  "openapi": "3.0.1",
  "info": {
    "title": "Rumah123 Scraper - Indonesia Property Listings & Prices",
    "description": "Scrape Rumah123 listings across Indonesia: exact rupiah price, land and building size, bedrooms, GPS, photos, KPR installment and the listing agent. Sale and rent.",
    "version": "1.0",
    "x-build-id": "TL0dbpvsxgTKKZlKV"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sian.agency~rumah123-property-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sian.agency-rumah123-property-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/sian.agency~rumah123-property-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sian.agency-rumah123-property-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/sian.agency~rumah123-property-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sian.agency-rumah123-property-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": {
          "operation": {
            "title": "⚙️ Operation",
            "enum": [
              "search",
              "detail"
            ],
            "type": "string",
            "description": "Property Search lists properties for a city or a pasted search address. Property Detail takes listing addresses and adds the untruncated advert text, the dated publication record, the complete photo set and the agent profile link.",
            "default": "search"
          },
          "dealType": {
            "title": "🤝 For sale or for rent",
            "enum": [
              "jual",
              "sewa"
            ],
            "type": "string",
            "description": "Sale adverts carry an asking price; rental adverts carry a rent with its period (per month or per year) reported on every row so the two are comparable. Rumah123 keeps the two in separate sections, so a run reads one or the other.",
            "default": "jual"
          },
          "propertyTypes": {
            "title": "🏠 Property types",
            "uniqueItems": true,
            "type": "array",
            "description": "Which kinds of property to read. Every value is one of the 12 type pages Rumah123 itself publishes and links in its sitemap: rumah (houses), apartemen (apartments), tanah (land), ruko (shophouses), villa, kost (boarding rooms), hotel, gudang (warehouses), pabrik (factories), kantor (offices), ruang-usaha (commercial space) and residensial (all residential). Each type is searched separately, so a city you pick is read once per type.",
            "items": {
              "type": "string",
              "enum": [
                "rumah",
                "apartemen",
                "tanah",
                "ruko",
                "villa",
                "kost",
                "hotel",
                "gudang",
                "pabrik",
                "kantor",
                "ruang-usaha",
                "residensial"
              ],
              "enumTitles": [
                "🏡 Houses — Rumah",
                "🏢 Apartments — Apartemen",
                "🌳 Land — Tanah",
                "🏪 Shophouses — Ruko",
                "🌴 Villas — Villa",
                "🛏️ Boarding rooms — Kost",
                "🏨 Hotels — Hotel",
                "📦 Warehouses — Gudang",
                "🏭 Factories — Pabrik",
                "💼 Offices — Kantor",
                "🛍️ Commercial space — Ruang usaha",
                "🏘️ All residential — Residensial"
              ]
            },
            "default": [
              "rumah"
            ]
          },
          "locations": {
            "title": "📍 Cities",
            "uniqueItems": true,
            "type": "array",
            "description": "Which cities to read. The list covers the 48 metros Rumah123 indexes for both sale and rent, from the five Jakarta halves and the Greater Jakarta ring to Surabaya, Medan, Makassar and the Bali resorts — every value is the city's own address slug on the site, so none can 404. Districts and neighbourhoods (Kemang, Bintaro, Kuta and the rest) are reached by pasting the district's Rumah123 address into Search URLs below.",
            "items": {
              "type": "string",
              "enum": [
                "jakarta-selatan",
                "jakarta-barat",
                "jakarta-timur",
                "jakarta-pusat",
                "jakarta-utara",
                "tangerang",
                "tangerang-selatan",
                "bekasi",
                "depok",
                "bogor",
                "bandung",
                "surabaya",
                "semarang",
                "medan",
                "makassar",
                "palembang",
                "batam",
                "denpasar",
                "badung",
                "gianyar",
                "tabanan",
                "malang",
                "solo",
                "yogyakarta",
                "sleman",
                "bantul",
                "cimahi",
                "cirebon",
                "bandung-barat",
                "sidoarjo",
                "pasuruan",
                "cianjur",
                "sumedang",
                "sukoharjo",
                "kuningan",
                "bandar-lampung",
                "pekanbaru",
                "balikpapan",
                "serang",
                "sukabumi",
                "jember",
                "magelang",
                "karawang",
                "tasikmalaya",
                "pontianak"
              ],
              "enumTitles": [
                "🏙️ Jakarta Selatan",
                "🏙️ Jakarta Barat",
                "🏙️ Jakarta Timur",
                "🏙️ Jakarta Pusat",
                "🏙️ Jakarta Utara",
                "🏙️ Tangerang",
                "🏙️ Tangerang Selatan",
                "🏙️ Bekasi",
                "🏙️ Depok",
                "🏙️ Bogor",
                "🏙️ Bandung",
                "🏙️ Surabaya",
                "🏙️ Semarang",
                "🏙️ Medan",
                "🏙️ Makassar",
                "🏙️ Palembang",
                "🏙️ Batam",
                "🏙️ Denpasar",
                "🏙️ Badung",
                "🏙️ Gianyar",
                "🏙️ Tabanan",
                "🏙️ Malang",
                "🏙️ Solo",
                "🏙️ Yogyakarta",
                "🏙️ Sleman",
                "🏙️ Bantul",
                "🏙️ Cimahi",
                "🏙️ Cirebon",
                "🏙️ Bandung Barat",
                "🏙️ Sidoarjo",
                "🏙️ Pasuruan",
                "🏙️ Cianjur",
                "🏙️ Sumedang",
                "🏙️ Sukoharjo",
                "🏙️ Kuningan",
                "🏙️ Bandar Lampung",
                "🏙️ Pekanbaru",
                "🏙️ Balikpapan",
                "🏙️ Serang",
                "🏙️ Sukabumi",
                "🏙️ Jember",
                "🏙️ Magelang",
                "🏙️ Karawang",
                "🏙️ Tasikmalaya",
                "🏙️ Pontianak"
              ]
            },
            "default": [
              "jakarta-selatan"
            ]
          },
          "maxResults": {
            "title": "🔢 Max listings",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Stop after this many listings across the whole run, not per city. One page carries 24 listings on sale searches and 20 on rent searches, so a run ends on the first page that crosses your limit.",
            "default": 100
          },
          "includeDetails": {
            "title": "📄 Add full details",
            "type": "boolean",
            "description": "Open each listing's own page to add the untruncated advert text, the publication and last-edit dates, the complete photo set and the agent profile link. The search card already carries price, GPS, areas, bedrooms and photos; this adds what only the advert itself shows. Costs one extra request per listing and bills the Property Detail event on top of the listing row.",
            "default": false
          },
          "minPrice": {
            "title": "💵 Min price (Rp)",
            "minimum": 0,
            "type": "integer",
            "description": "Skip listings priced below this many rupiah. 0 means no lower bound. For a rental this is the rent over its own period (monthly or yearly, as the listing states it), so 5000000 means 5 million per month on a monthly listing.",
            "default": 0
          },
          "maxPrice": {
            "title": "💰 Max price (Rp)",
            "minimum": 0,
            "type": "integer",
            "description": "Skip listings priced above this many rupiah. 0 means no upper bound. Pairing it with a minimum is the usual way to carve a big city into price bands that each stay easy to work with.",
            "default": 0
          },
          "searchUrls": {
            "title": "🌐 Search URLs",
            "type": "array",
            "description": "Paste Rumah123 search addresses instead of filling the form. Build the search on rumah123.com, copy the address bar, and the section, city, district and property type are read straight off the URL — including district pages such as https://www.rumah123.com/jual/jakarta-selatan/kebayoran-baru/rumah/ that the city list above does not reach, and the ~360 smaller cities outside it. A page number in the address is ignored; the run starts at page one and pages forward on its own.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "listingUrls": {
            "title": "🏠 Listing URLs",
            "type": "array",
            "description": "Used by the Property Detail operation: Rumah123 advert addresses to expand, e.g. https://www.rumah123.com/properti/jakarta-selatan-jagakarsa/dijual-rumah-modern-classic-di-jagakarsa-jakarta-selatan-hos42135855/",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}