{
  "openapi": "3.0.1",
  "info": {
    "title": "99.co Project & Condo Profile Scraper",
    "description": "Scrape Singapore condo, HDB and landed project profiles from 99.co: tenure, TOP year, unit count, blocks, asking and transacted PSF, price range per bedroom type, owner/tenant mix, and nearby MRT, schools and amenities with walk, drive and taxi times.",
    "version": "1.0",
    "x-build-id": "uPPFtCp457caH2VkX"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/incognito_mode~99co-project-profile-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-incognito_mode-99co-project-profile-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/incognito_mode~99co-project-profile-scraper/runs": {
      "post": {
        "operationId": "runs-sync-incognito_mode-99co-project-profile-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/incognito_mode~99co-project-profile-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-incognito_mode-99co-project-profile-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": {
          "clusterIds": {
            "title": "Project IDs",
            "type": "array",
            "description": "99.co project (cluster) IDs — the `clusterId` column produced by the 99.co Property Listings Scraper. A 99.co URL with the ID appended to the slug also works. Leave empty and use Districts instead to discover projects.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "districts": {
            "title": "…or discover every project in these districts",
            "uniqueItems": true,
            "type": "array",
            "description": "Finds every project with at least one active listing in the chosen postal districts. Projects with nothing currently listed cannot be found — 99.co publishes a development's ID only inside its listings.",
            "items": {
              "type": "string",
              "enum": [
                "D01",
                "D02",
                "D03",
                "D04",
                "D05",
                "D06",
                "D07",
                "D08",
                "D09",
                "D10",
                "D11",
                "D12",
                "D13",
                "D14",
                "D15",
                "D16",
                "D17",
                "D18",
                "D19",
                "D20",
                "D21",
                "D22",
                "D23",
                "D24",
                "D25",
                "D26",
                "D27",
                "D28"
              ],
              "enumTitles": [
                "D01 — Raffles Place, Marina",
                "D02 — Anson, Tanjong Pagar",
                "D03 — Queenstown, Tiong Bahru",
                "D04 — Telok Blangah, Sentosa",
                "D05 — Pasir Panjang, Clementi",
                "D06 — High Street, Beach Road",
                "D07 — Middle Road, Golden Mile",
                "D08 — Little India, Farrer Park",
                "D09 — Orchard, River Valley",
                "D10 — Bukit Timah, Holland, Tanglin",
                "D11 — Novena, Thomson",
                "D12 — Balestier, Toa Payoh",
                "D13 — Macpherson, Potong Pasir",
                "D14 — Geylang, Eunos, Paya Lebar",
                "D15 — Katong, Joo Chiat",
                "D16 — Bedok, Upper East Coast",
                "D17 — Loyang, Changi",
                "D18 — Tampines, Pasir Ris",
                "D19 — Hougang, Punggol, Sengkang",
                "D20 — Bishan, Ang Mo Kio",
                "D21 — Upper Bukit Timah, Ulu Pandan",
                "D22 — Jurong, Boon Lay, Tuas",
                "D23 — Bukit Panjang, Choa Chu Kang",
                "D24 — Lim Chu Kang, Tengah",
                "D25 — Kranji, Woodlands",
                "D26 — Upper Thomson, Springleaf",
                "D27 — Yishun, Sembawang",
                "D28 — Seletar, Yio Chu Kang"
              ]
            },
            "default": []
          },
          "propertyType": {
            "title": "Property type (for discovery)",
            "enum": [
              "all",
              "condo",
              "hdb",
              "landed"
            ],
            "type": "string",
            "description": "Narrows which projects are discovered from the districts above. Ignored when you supply project IDs directly.",
            "default": "all"
          },
          "maxItems": {
            "title": "Maximum projects",
            "minimum": 1,
            "type": "integer",
            "description": "How many project profiles to return. This is what you are billed for, one charge per project.",
            "default": 25
          },
          "includeNearbyAmenities": {
            "title": "Include nearby amenities",
            "type": "boolean",
            "description": "Adds the nearest MRT, bus stop, school, supermarket, clinic, park, bank and ATM with distance and walking time, plus the full list of every nearby place with walk, drive, transit and taxi-fare estimates. Costs one extra request per project.",
            "default": true
          },
          "amenityRadius": {
            "title": "Amenity search radius (metres)",
            "minimum": 100,
            "maximum": 10000,
            "type": "integer",
            "description": "How far out to look for nearby places.",
            "default": 2000
          },
          "includeNearbyProjects": {
            "title": "Include neighbouring projects",
            "type": "boolean",
            "description": "Adds up to 10 neighbouring developments with a one-line summary each. Note these links are slug-only — 99.co does not publish their IDs, so they cannot be fed back into this Actor.",
            "default": false
          },
          "includePhotos": {
            "title": "Include the photo gallery",
            "type": "boolean",
            "description": "Adds every project photo with its caption. The main photo is always included.",
            "default": false
          },
          "maxRunSecs": {
            "title": "Time budget (seconds)",
            "minimum": 30,
            "maximum": 3600,
            "type": "integer",
            "description": "The run stops cleanly and keeps everything collected so far once this is reached. Discovery is capped at half of it, so a run always has time to return rows.",
            "default": 210
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Not needed. 99.co is reached directly — Cloudflare here is a TLS gate this Actor clears without a proxy. A proxy is used automatically only if a request is genuinely blocked.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}