{
  "openapi": "3.0.1",
  "info": {
    "title": "PropertyGuru Singapore Scraper",
    "description": "Scrape Singapore property listings from PropertyGuru for sale and rent. Apply the same filters as the website (type, price, HDB/condo/landed, size, MRT, tenure) and optionally enrich with listing details, agent profiles, and reviews.",
    "version": "1.0",
    "x-build-id": "ehRf1IB5nlwMtY6aC"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/rigelbytes~propertyguru-sg-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-rigelbytes-propertyguru-sg-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/rigelbytes~propertyguru-sg-scraper/runs": {
      "post": {
        "operationId": "runs-sync-rigelbytes-propertyguru-sg-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/rigelbytes~propertyguru-sg-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-rigelbytes-propertyguru-sg-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": {
          "searchQueries": {
            "title": "Search Queries",
            "type": "array",
            "description": "Locations or keywords to search (e.g. \"Orchard\", \"Tampines\", \"District 9\", \"Punggol MRT\"). Mapped to PropertyGuru's freetext search box. Leave empty to scrape all listings matching the filters below. Primary input for AI agents — no URL required.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs (optional)",
            "type": "array",
            "description": "PropertyGuru search or listing URLs copied from the browser (e.g. https://www.propertyguru.com.sg/property-for-sale?listingType=sale). Search URLs are paginated as-is; listing URLs are scraped directly. Filters below apply to Search Queries, not to Start URLs.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "listingType": {
            "title": "Listing Type",
            "enum": [
              "sale",
              "rent"
            ],
            "type": "string",
            "description": "Buy (sale) or rent. Ignored when Start URLs already include listingType.",
            "default": "sale"
          },
          "propertyTypeGroup": {
            "title": "Property Type Group",
            "enum": [
              "",
              "N",
              "L",
              "H"
            ],
            "type": "string",
            "description": "High-level type. Leave as All, or pick Condo, Landed, or HDB (Housing & Development Board public housing). Combined with Property Types below — empty Property Types means select all types in this group.",
            "default": ""
          },
          "propertyTypeCode": {
            "title": "Property Types",
            "uniqueItems": true,
            "type": "array",
            "description": "Specific property types. Leave empty to include all types (or all types in the selected group). Condo: Condominium, Apartment, Walk-up, Cluster House, Executive Condominium. Landed: Terrace, Detached, Semi-Detached, Corner Terrace, Bungalow, Shophouse, Land Only, Townhouse, Conservation, Cluster. HDB: 1-Room/Studio through Jumbo, Executive Apartment/Maisonette, Multi-Generation, Terrace.",
            "items": {
              "type": "string",
              "enum": [
                "CONDO",
                "APT",
                "WALK",
                "CLUS",
                "EXCON",
                "TERRA",
                "DETAC",
                "SEMI",
                "CORN",
                "LBUNG",
                "BUNG",
                "SHOPH",
                "RLAND",
                "TOWN",
                "CON",
                "LCLUS",
                "1R",
                "2A",
                "2I",
                "2S",
                "2RF",
                "3A",
                "3NG",
                "3Am",
                "3NGm",
                "3I",
                "3Im",
                "3S",
                "3STD",
                "3PA",
                "4A",
                "4NG",
                "4PA",
                "4I",
                "4S",
                "4STD",
                "5A",
                "5I",
                "5PA",
                "5S",
                "6J",
                "EA",
                "EM",
                "MG",
                "TE"
              ],
              "enumTitles": [
                "Condominium (Condo)",
                "Apartment (Condo)",
                "Walk-up (Condo)",
                "Cluster House (Condo)",
                "Executive Condominium (Condo)",
                "Terraced House (Landed)",
                "Detached House (Landed)",
                "Semi-Detached House (Landed)",
                "Corner Terrace (Landed)",
                "Bungalow House (Landed)",
                "Good Class Bungalow (Landed)",
                "Shophouse (Landed)",
                "Land Only (Landed)",
                "Town House (Landed)",
                "Conservation House (Landed)",
                "Cluster House (Landed)",
                "HDB 1-Room / Studio",
                "HDB 2A",
                "HDB 2I (Improved)",
                "HDB 2S (Standard)",
                "HDB 2-Room Flexi",
                "HDB 3A",
                "HDB 3NG (New Generation)",
                "HDB 3A (Modified)",
                "HDB 3NG (Modified)",
                "HDB 3I (Improved)",
                "HDB 3I (Modified)",
                "HDB 3S (Simplified)",
                "HDB 3STD (Standard)",
                "HDB 3PA (Premium Apartment)",
                "HDB 4A",
                "HDB 4NG (New Generation)",
                "HDB 4PA (Premium Apartment)",
                "HDB 4I (Improved)",
                "HDB 4S (Simplified)",
                "HDB 4STD (Standard)",
                "HDB 5A",
                "HDB 5I",
                "HDB 5PA (Premium Apartment)",
                "HDB 5S",
                "HDB Jumbo",
                "HDB EA (Exec Apartment)",
                "HDB EM (Exec Maisonette)",
                "HDB MG (Multi-Generation)",
                "HDB Terrace"
              ]
            }
          },
          "minPrice": {
            "title": "Minimum Price (SGD)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum asking price in Singapore dollars. For sale this is the total price (e.g. 500000); for rent this is monthly rent (e.g. 2500)."
          },
          "maxPrice": {
            "title": "Maximum Price (SGD)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum asking price in Singapore dollars."
          },
          "bedrooms": {
            "title": "Bedrooms",
            "uniqueItems": true,
            "type": "array",
            "description": "Bedroom count. Studio is 0; 5 means 5 or more. Leave empty for any.",
            "items": {
              "type": "string",
              "enum": [
                "0",
                "1",
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "Studio",
                "1",
                "2",
                "3",
                "4",
                "5+"
              ]
            }
          },
          "bathrooms": {
            "title": "Bathrooms",
            "uniqueItems": true,
            "type": "array",
            "description": "Bathroom count. 5 means 5 or more. Leave empty for any.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "1",
                "2",
                "3",
                "4",
                "5+"
              ]
            }
          },
          "entireUnitOrRoom": {
            "title": "Entire Unit or Room (rent)",
            "enum": [
              "",
              "ent",
              "room"
            ],
            "type": "string",
            "description": "For rent searches only: entire unit vs room rental. Leave empty for all.",
            "default": ""
          },
          "isVerified": {
            "title": "Verified Listings Only",
            "type": "boolean",
            "description": "Only include PropertyGuru verified listings.",
            "default": false
          },
          "minSize": {
            "title": "Minimum Floor Size (sqft)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum internal floor area in square feet (e.g. 500, 1000)."
          },
          "maxSize": {
            "title": "Maximum Floor Size (sqft)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum internal floor area in square feet."
          },
          "minSizeLand": {
            "title": "Minimum Land Size (sqft)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum land/plot size in square feet (landed properties)."
          },
          "maxSizeLand": {
            "title": "Maximum Land Size (sqft)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum land/plot size in square feet (landed properties)."
          },
          "minPricePerArea": {
            "title": "Minimum PSF (SGD)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum price per square foot. For sale this is typically hundreds to thousands; for rent it is a small monthly PSF."
          },
          "maxPricePerArea": {
            "title": "Maximum PSF (SGD)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum price per square foot."
          },
          "distanceToMRT": {
            "title": "Distance to MRT / LRT",
            "enum": [
              "",
              "0.25",
              "0.5",
              "0.75",
              "1",
              "1.5"
            ],
            "type": "string",
            "description": "Maximum walking distance to the nearest MRT or LRT station. Leave empty for any.",
            "default": ""
          },
          "distanceFromCentre": {
            "title": "Search Radius (km)",
            "enum": [
              "",
              "0.5",
              "1",
              "1.5",
              "2",
              "2.5",
              "3",
              "4",
              "5"
            ],
            "type": "string",
            "description": "When a search query is a point location, limit results to this radius. Leave empty for the site default.",
            "default": ""
          },
          "floorLevel": {
            "title": "Floor Level",
            "uniqueItems": true,
            "type": "array",
            "description": "Floor band. Hidden on the site for landed-only searches. Leave empty for any.",
            "items": {
              "type": "string",
              "enum": [
                "GND",
                "LOW",
                "MID",
                "HIGH",
                "PENT"
              ],
              "enumTitles": [
                "Ground",
                "Low",
                "Mid",
                "High",
                "Penthouse"
              ]
            }
          },
          "tenureCode": {
            "title": "Tenure",
            "uniqueItems": true,
            "type": "array",
            "description": "Land tenure. Leave empty for any.",
            "items": {
              "type": "string",
              "enum": [
                "F",
                "L99",
                "L103",
                "L110",
                "L999",
                "L9999",
                "NA"
              ],
              "enumTitles": [
                "Freehold",
                "99-year Leasehold",
                "103-year Leasehold",
                "110-year Leasehold",
                "999-year Leasehold",
                "9999-year Leasehold",
                "Unknown Tenure"
              ]
            }
          },
          "minTopYear": {
            "title": "Minimum Build Year",
            "minimum": 1970,
            "type": "integer",
            "description": "Earliest TOP / completion year (e.g. 2010)."
          },
          "maxTopYear": {
            "title": "Maximum Build Year",
            "minimum": 1970,
            "type": "integer",
            "description": "Latest TOP / completion year (e.g. 2026)."
          },
          "furnishing": {
            "title": "Furnishing",
            "uniqueItems": true,
            "type": "array",
            "description": "Furnishing level. Leave empty for any.",
            "items": {
              "type": "string",
              "enum": [
                "UNFUR",
                "PART",
                "FULL"
              ],
              "enumTitles": [
                "Unfurnished",
                "Partially Furnished",
                "Fully Furnished"
              ]
            }
          },
          "unitFeatures": {
            "title": "Unit Features",
            "uniqueItems": true,
            "type": "array",
            "description": "In-unit features. Leave empty for any.",
            "items": {
              "type": "string",
              "enum": [
                "AIRC",
                "BAL",
                "BATH",
                "CORN",
                "MAID",
                "PPOOL",
                "RENO",
                "TERR"
              ],
              "enumTitles": [
                "Aircon",
                "Balcony",
                "Bath tub",
                "Corner unit",
                "Helper's room",
                "Private pool",
                "Renovated",
                "Terrace"
              ]
            }
          },
          "projectFeatures": {
            "title": "Facilities",
            "uniqueItems": true,
            "type": "array",
            "description": "Project / condo facilities. Leave empty for any.",
            "items": {
              "type": "string",
              "enum": [
                "GYM",
                "PARK",
                "SWIM",
                "TEN"
              ],
              "enumTitles": [
                "Gym",
                "Parking",
                "Swimming pool",
                "Tennis court"
              ]
            }
          },
          "lastPosted": {
            "title": "Listed On",
            "enum": [
              "",
              "3",
              "7",
              "14",
              "31"
            ],
            "type": "string",
            "description": "How recently the listing was posted. Leave empty for any date.",
            "default": ""
          },
          "withStream": {
            "title": "With Videos / Virtual Tour",
            "type": "boolean",
            "description": "Only listings that include video or a virtual tour.",
            "default": false
          },
          "withFloorplans": {
            "title": "With Floor Plan",
            "type": "boolean",
            "description": "Only listings that include a floor plan.",
            "default": false
          },
          "keyword": {
            "title": "Keyword",
            "type": "string",
            "description": "Optional extra keyword matched against listing text (e.g. Terrace, Garage, Eateries)."
          },
          "leaseTerm": {
            "title": "Lease Term (rent)",
            "uniqueItems": true,
            "type": "array",
            "description": "Rental lease length. Leave empty for any.",
            "items": {
              "type": "string",
              "enum": [
                "1YR",
                "2YR",
                "3YR",
                "ST",
                "FL"
              ],
              "enumTitles": [
                "1 year",
                "2 years",
                "3 or more years",
                "Short Term",
                "Flexible"
              ]
            }
          },
          "availability": {
            "title": "Availability (rent)",
            "enum": [
              "",
              "0",
              "1",
              "2",
              "3",
              "4"
            ],
            "type": "string",
            "description": "When the unit is available. Leave empty for any.",
            "default": ""
          },
          "roomType": {
            "title": "Room Type (room rental)",
            "uniqueItems": true,
            "type": "array",
            "description": "For room rentals only.",
            "items": {
              "type": "string",
              "enum": [
                "master",
                "common",
                "shared"
              ],
              "enumTitles": [
                "Master room with a private bathroom",
                "Common room with a shared bathroom",
                "Shared room"
              ]
            }
          },
          "maxTenants": {
            "title": "Max Tenants In The Room",
            "enum": [
              "",
              "1",
              "2",
              "3",
              "4"
            ],
            "type": "string",
            "description": "For room rentals only. Leave empty for any.",
            "default": ""
          },
          "tenantGender": {
            "title": "Allowed Tenant Gender",
            "enum": [
              "",
              "male",
              "female",
              "any"
            ],
            "type": "string",
            "description": "For room rentals only. Leave empty for any.",
            "default": ""
          },
          "tenancyConditions": {
            "title": "Tenancy Conditions",
            "uniqueItems": true,
            "type": "array",
            "description": "For room rentals only.",
            "items": {
              "type": "string",
              "enum": [
                "hasAircon",
                "ownerStays",
                "allowPets",
                "hasUtilities",
                "allowVisitors",
                "hasWifi"
              ],
              "enumTitles": [
                "Air-conditioned room",
                "No owner staying",
                "Pets allowed",
                "Utilities included",
                "Visitors allowed",
                "WiFi included"
              ]
            }
          },
          "cookingType": {
            "title": "Cooking Rules",
            "enum": [
              "",
              "none",
              "light",
              "any"
            ],
            "type": "string",
            "description": "For room rentals only. Leave empty for any.",
            "default": ""
          },
          "isDiversityFriendly": {
            "title": "Everyone Welcome (rent)",
            "type": "boolean",
            "description": "Only listings marked as diversity-friendly / everyone welcome.",
            "default": false
          },
          "sortBy": {
            "title": "Sort By",
            "enum": [
              "recommended",
              "newest",
              "price_asc",
              "price_desc",
              "psf_asc",
              "psf_desc",
              "size_desc",
              "size_asc"
            ],
            "type": "string",
            "description": "Result ordering on search pages.",
            "default": "recommended"
          },
          "scrapeListingDetails": {
            "title": "Scrape Listing Details",
            "type": "boolean",
            "description": "Open listing pages in parallel (see Max Concurrency) for description, photos, amenities, coordinates, and unit details. Charges the listing-details event per listing in addition to dataset-item.",
            "default": false
          },
          "scrapeAgentInfo": {
            "title": "Scrape Agent Information",
            "type": "boolean",
            "description": "Open the listing agent profile for license, agency, rating, and bio. Charges the agent-info event per listing that includes agent data.",
            "default": false
          },
          "scrapeAgentReviews": {
            "title": "Scrape Agent Reviews",
            "type": "boolean",
            "description": "Also paginate written agent reviews. Implies Scrape Agent Information. Included in the agent-info charge.",
            "default": false
          },
          "maxItems": {
            "title": "Max Items",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of listings to scrape (0 = unlimited)",
            "default": 0
          },
          "maxConcurrency": {
            "title": "Max Concurrency",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "How many listing-detail (and agent) pages to open at the same time. Each tab uses the same sticky residential proxy. Higher is faster; 3–5 is a good default (e.g. 5).",
            "default": 5
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Proxy settings. Apify Residential is required — PropertyGuru sits behind Cloudflare.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "SG"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}