{
  "openapi": "3.0.1",
  "info": {
    "title": "99.co Scraper",
    "description": "Scrape 99.co Singapore: listings for sale or rent with filters, full listing details, new launch projects, past sale and rental transactions, and agent contacts.",
    "version": "0.1",
    "x-build-id": "7s4lKwSuIgGx9NTVQ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/happyendpoint~99co-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-happyendpoint-99co-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/happyendpoint~99co-scraper/runs": {
      "post": {
        "operationId": "runs-sync-happyendpoint-99co-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/happyendpoint~99co-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-happyendpoint-99co-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": [
              "health-check",
              "search-listings",
              "listing-details",
              "new-projects",
              "project-details",
              "transactions",
              "search-agents",
              "agent-details"
            ],
            "type": "string",
            "description": "**Health check** (default) only confirms the actor is working and saves one status row. To get data, pick another operation and fill in its section below.",
            "default": "health-check"
          },
          "listingType": {
            "title": "For Sale or Rent",
            "enum": [
              "sale",
              "rent"
            ],
            "type": "string",
            "description": "**[Search listings, Transactions]** Homes for sale or for rent. For **Transactions** this picks past sale prices or past rental prices.",
            "default": "sale"
          },
          "locations": {
            "title": "Places",
            "type": "array",
            "description": "**[Search listings, New projects, Transactions]** One or more places in Singapore: an area (`Tampines`), a district (`D9` or `District 15`), an MRT station (`Bishan MRT`), an HDB town or a condo name (`Parc Centennial`). Leave empty to search all of Singapore (not possible for **Transactions**, which needs a place). Each place is searched in turn.",
            "items": {
              "type": "string"
            }
          },
          "propertySegment": {
            "title": "Property Segment",
            "enum": [
              "residential",
              "commercial",
              "industrial",
              "land"
            ],
            "type": "string",
            "description": "**[Search listings]**",
            "default": "residential"
          },
          "propertyTypes": {
            "title": "Property Types",
            "type": "array",
            "description": "**[Search listings]** Residential only. Leave empty for all types.",
            "items": {
              "type": "string",
              "enum": [
                "hdb",
                "condo",
                "landed"
              ],
              "enumTitles": [
                "HDB flat",
                "Condo / apartment",
                "Landed house"
              ]
            }
          },
          "minPrice": {
            "title": "Min Price (S$)",
            "minimum": 0,
            "type": "integer",
            "description": "**[Search listings]** For rent this is the monthly rent."
          },
          "maxPrice": {
            "title": "Max Price (S$)",
            "minimum": 0,
            "type": "integer",
            "description": "**[Search listings]** For rent this is the monthly rent."
          },
          "minBedrooms": {
            "title": "Min Bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "**[Search listings]** `0` means studio."
          },
          "maxBedrooms": {
            "title": "Max Bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "**[Search listings]**"
          },
          "minBathrooms": {
            "title": "Min Bathrooms",
            "minimum": 0,
            "type": "integer",
            "description": "**[Search listings]**"
          },
          "furnishing": {
            "title": "Furnishing",
            "type": "array",
            "description": "**[Search listings]** Leave empty for any furnishing.",
            "items": {
              "type": "string",
              "enum": [
                "fully",
                "partial",
                "unfurnished"
              ],
              "enumTitles": [
                "Fully furnished",
                "Partially furnished",
                "Unfurnished"
              ]
            }
          },
          "tenure": {
            "title": "Tenure",
            "type": "array",
            "description": "**[Search listings]** Leave empty for any tenure.",
            "items": {
              "type": "string",
              "enum": [
                "freehold",
                "999",
                "99"
              ],
              "enumTitles": [
                "Freehold",
                "999-year leasehold",
                "99-year leasehold"
              ]
            }
          },
          "rentalType": {
            "title": "Rental Type",
            "enum": [
              "any",
              "unit",
              "room"
            ],
            "type": "string",
            "description": "**[Search listings]** For rent searches only.",
            "default": "any"
          },
          "includeListingDetails": {
            "title": "Include Full Listing Details",
            "type": "boolean",
            "description": "**[Search listings]** Also load each listing's page: description, postal code, district, amenities, insights, past transactions of the building, floor plans, videos and full agent info. Slower (one extra request per listing).",
            "default": false
          },
          "listingUrls": {
            "title": "Listing Links or IDs",
            "type": "array",
            "description": "**[Listing details]** 99.co listing links, or the `id` values from **Search listings**.",
            "items": {
              "type": "string"
            }
          },
          "projects": {
            "title": "Projects",
            "type": "array",
            "description": "**[Project details]** Condo or estate names (`Parc Centennial`), project links from 99.co, or the project `id` values from **New projects** or **Listing details** (`project_id`).",
            "items": {
              "type": "string"
            }
          },
          "includeNearbyAmenities": {
            "title": "Include Nearby Amenities",
            "type": "boolean",
            "description": "**[Project details]** Also add nearby MRT stations, schools, supermarkets, parks, clinics and more, with walking, driving and public transport times.",
            "default": false
          },
          "agentKeyword": {
            "title": "Agent Name or Keyword",
            "type": "string",
            "description": "**[Search agents]** Agent name or keyword, for example `tan`. Leave empty to go through the whole agent directory."
          },
          "includeAgentDetails": {
            "title": "Include Full Agent Profiles",
            "type": "boolean",
            "description": "**[Search agents]** Also load each agent's profile: email, job title, bio, areas of expertise and a breakdown of their listings. Slower (one extra request per agent).",
            "default": false
          },
          "agentProfiles": {
            "title": "Agent Profile Links",
            "type": "array",
            "description": "**[Agent details]** 99.co agent profile links, or the `slug` values from **Search agents** (for example `R024093E-lincoln-choo`).",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max Items",
            "minimum": 1,
            "type": "integer",
            "description": "**[All operations]** Maximum number of results to save in total (listings, projects, transactions or agents). The run stops at Max Items or Max Pages, whichever comes first. Apify free plan accounts get at most 100 results per run.",
            "default": 100
          },
          "maxPages": {
            "title": "Max Pages",
            "minimum": 1,
            "type": "integer",
            "description": "**[Search listings, New projects, Transactions, Search agents]** How many result pages to load for each place (or for the agent search). One page has up to 50 listings, projects or agents, or 20 transactions. The default of 1 keeps a first run quick; raise it to get more, for example 4 pages for about 200 listings.",
            "default": 1
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}