# Singapore HDB Flat Rental Prices Scraper (`scrapers_lat/singapore-hdb-rental-scraper`) Actor

Scrape Singapore HDB flat rental transactions from the official data.gov.sg open data portal. Get town, block, street name, flat type, monthly rent and approval date. Export to JSON, CSV or Excel.

- **URL**: https://apify.com/scrapers\_lat/singapore-hdb-rental-scraper.md
- **Developed by:** [Scrapers Lat](https://apify.com/scrapers_lat) (community)
- **Categories:** Real estate, Business, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

<!-- actor-banner -->
[![Singapore HDB Flat Rental Prices Scraper](https://scrapers.lat/banners/singapore-hdb-rental-scraper.png)](https://console.apify.com/actors/hbhU1dVsZQiACB4Pn/input)
<!-- /actor-banner -->

## Singapore HDB Flat Rental Prices Scraper

> Pull Singapore HDB flat rental transactions from the official data.gov.sg open data portal. Filter by town, flat type or rent range and get the monthly rent, block, street and approval month. No login, no API key.

![Apify](https://img.shields.io/badge/Platform-Apify-1CE1CE?logo=apify&logoColor=white)
![Coverage](https://img.shields.io/badge/Coverage-Singapore-blue)
![Maintained](https://img.shields.io/badge/Maintained-Yes-brightgreen)
![Output](https://img.shields.io/badge/Output-JSON%20%7C%20CSV%20%7C%20Excel-orange)

<br>

### What you get

One record per approved HDB flat rental, straight from the official "Renting Out of Flats" dataset published on data.gov.sg by the Housing and Development Board. Built for real estate research, rental pricing and market analysis.

- **rentApprovalDate**: the month HDB approved the rental (YYYY-MM)
- **town**: the HDB town (for example TAMPINES, BEDOK)
- **block**: the block number
- **streetName**: the street name
- **flatType**: the flat type (for example 3-ROOM, 4-ROOM, EXECUTIVE)
- **monthlyRent**: the approved monthly rent in SGD (numeric)
- **currency**: SGD
- **observedAt**: when this record was collected

### How it works

| Input | What it does |
|---|---|
| `town` | Keep only rentals in this HDB town (exact match, for example TAMPINES). |
| `flatType` | Keep only rentals of this flat type (exact match, for example 4-ROOM). |
| `searchQuery` | Free text filter across town, block, street name or flat type. |
| `minRent` / `maxRent` | Keep only rentals within this monthly rent range in SGD. |
| `sortByNewest` | Return the most recently added transactions first. |
| `maxItems` | Cap the number of records collected. |

The data comes from the official Singapore open data portal. Anonymous access is rate limited, so large pulls are paced automatically.

### Use cases

| Use case | Who it is for |
|---|---|
| Benchmark rents by town and flat type | Landlords and tenants |
| Track HDB rental price trends over time | Analysts and researchers |
| Estimate rental yield for a property | Investors |
| Build a Singapore rental price dataset | Data teams |
| Feed pricing models with real transactions | Proptech and fintech |

### Frequently Asked Questions

**Where does the data come from?**
The official data.gov.sg "Renting Out of Flats" dataset, published by the Housing and Development Board (HDB). It covers approved HDB flat rental transactions.

**Does it need a login or API key?**
No. It reads the public open data portal with no account and no key.

**Does it include private property rentals?**
No. This covers HDB (public housing) flats only, which are the majority of Singapore homes.

**How fresh is it?**
The source dataset is refreshed by HDB on a rolling basis (roughly monthly).

<!-- example-tasks -->
### Example use cases

Ready-to-run example tasks, each preconfigured for a common scenario. Open one and press run, or use it as a template:

- [Singapore HDB Flat Rental Prices in Tampines](https://apify.com/scrapers_lat/singapore-hdb-rental-scraper/examples/singapore-hdb-rental-prices-tampines): Get HDB flat rental prices in Tampines, with block, street, flat type and approved monthly rent in SGD.
- [Singapore HDB Flat Rental Prices in Woodlands](https://apify.com/scrapers_lat/singapore-hdb-rental-scraper/examples/singapore-hdb-rental-prices-woodlands): Track HDB flat rental prices in Woodlands, with block, street, flat type and approved monthly rent in SGD.
- [Singapore HDB Flat Rental Prices in Jurong West](https://apify.com/scrapers_lat/singapore-hdb-rental-scraper/examples/singapore-hdb-rental-prices-jurong-west): Get HDB flat rental prices in Jurong West, with block, street, flat type and approved monthly rent in SGD.
- [Singapore HDB 4 Room Rental Prices in Bedok](https://apify.com/scrapers_lat/singapore-hdb-rental-scraper/examples/singapore-hdb-rental-4-room-bedok): Track 4 room HDB rental prices in Bedok, with block, street and approved monthly rent in SGD.
- [Singapore HDB 3 Room Rental Prices in Ang Mo Kio](https://apify.com/scrapers_lat/singapore-hdb-rental-scraper/examples/singapore-hdb-rental-3-room-ang-mo-kio): Get 3 room HDB rental prices in Ang Mo Kio, with block, street and approved monthly rent in SGD.
- [Singapore HDB 5 Room Rental Prices in Punggol](https://apify.com/scrapers_lat/singapore-hdb-rental-scraper/examples/singapore-hdb-rental-5-room-punggol): Track 5 room HDB rental prices in Punggol, with block, street and approved monthly rent in SGD.
- [Singapore HDB Flat Rental Prices in Yishun](https://apify.com/scrapers_lat/singapore-hdb-rental-scraper/examples/singapore-hdb-rental-prices-yishun): Get HDB flat rental prices in Yishun, with block, street, flat type and approved monthly rent in SGD.
- [Singapore HDB 4 Room Rental Prices in Sengkang](https://apify.com/scrapers_lat/singapore-hdb-rental-scraper/examples/singapore-hdb-rental-4-room-sengkang): Track 4 room HDB rental prices in Sengkang, with block, street and approved monthly rent in SGD.
- [Singapore HDB Flat Rental Prices in Clementi](https://apify.com/scrapers_lat/singapore-hdb-rental-scraper/examples/singapore-hdb-rental-prices-clementi): Get HDB flat rental prices in Clementi, with block, street, flat type and approved monthly rent in SGD.
- [Singapore HDB Flat Rental Prices in Hougang](https://apify.com/scrapers_lat/singapore-hdb-rental-scraper/examples/singapore-hdb-rental-prices-hougang): Track HDB flat rental prices in Hougang, with block, street, flat type and approved monthly rent in SGD.

<!-- /example-tasks -->

<!-- x402 -->
### Export, API and AI agents (x402 + MCP)

Export the scraped data to **JSON, CSV or Excel**, pull it as a **dataset** through the Apify **API**, or wire it into your app with **no code**. This web scraper and data extractor also works for bulk data extraction and scheduled runs.

For AI agents: this Actor is available on **x402**, Apify's agentic payment standard built with Coinbase. An AI agent can discover, pay for and run it on its own with a funded wallet and a single HTTP request: no account, no subscription, no API key and no human in the loop. It also runs as an **MCP** tool inside Claude, Cursor and other AI clients out of the box. Learn more about [x402 agentic payments on Apify](https://docs.apify.com/platform/integrations/x402).
<!-- /x402 -->

<!-- related-actors -->
### Related scrapers

Need data from the same space? Here are other scrapers we build and maintain:

- [Singapore GeBIZ Government Contracts Scraper](https://apify.com/scrapers_lat/singapore-gebiz-contracts-scraper): Singapore government awarded contracts with supplier, agency and amount.
- [Zillow Search Scraper](https://apify.com/scrapers_lat/zillow-search-scraper): US real estate listings with price, beds, baths and address.
- [Idealista Scraper](https://apify.com/scrapers_lat/idealista-scraper): Spanish property listings with price, size and location.

<!-- /related-actors -->

<!-- scrapers-lat-cta -->
### More scrapers at scrapers.lat

This actor is built and maintained by [scrapers.lat](https://scrapers.lat), where we publish scrapers for public platforms across the world: real estate, jobs, e-commerce, company registries and government data. Browse the full catalog, see live sample output for each one, or ask us for a custom scraper at [scrapers.lat](https://scrapers.lat).

---

> This actor is an independent tool and has no affiliation with HDB or the Government of Singapore. It only accesses data published openly on data.gov.sg. Use it in accordance with the portal's terms.
<!-- /scrapers-lat-cta -->

# Actor input Schema

## `town` (type: `string`):

Filter by HDB town, exact match (for example "TAMPINES", "ANG MO KIO", "BEDOK"). Case is normalised automatically. Leave empty for all towns.
## `flatType` (type: `string`):

Filter by flat type, exact match (for example "3-ROOM", "4-ROOM", "5-ROOM", "EXECUTIVE"). Leave empty for all flat types.
## `searchQuery` (type: `string`):

Free text filter across all fields: town, block, street name or flat type (for example "TAMPINES ST 11"). Leave empty to pull the full rental history.
## `minRent` (type: `integer`):

Only keep rentals with a monthly rent of at least this amount in SGD. Optional.
## `maxRent` (type: `integer`):

Only keep rentals with a monthly rent of at most this amount in SGD. Optional.
## `sortByNewest` (type: `boolean`):

Return the most recently added rental transactions first. Turn off to read in the source order.
## `maxItems` (type: `integer`):

Maximum number of rental records to collect. The portal rate-limits anonymous access, so very large pulls are paced automatically.

## Actor input object example

```json
{
  "sortByNewest": true,
  "maxItems": 1000
}
````

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "town": "",
    "flatType": "",
    "searchQuery": "",
    "maxItems": 1000
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/singapore-hdb-rental-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "town": "",
    "flatType": "",
    "searchQuery": "",
    "maxItems": 1000,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapers_lat/singapore-hdb-rental-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "town": "",
  "flatType": "",
  "searchQuery": "",
  "maxItems": 1000
}' |
apify call scrapers_lat/singapore-hdb-rental-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapers_lat/singapore-hdb-rental-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Singapore HDB Flat Rental Prices Scraper",
        "description": "Scrape Singapore HDB flat rental transactions from the official data.gov.sg open data portal. Get town, block, street name, flat type, monthly rent and approval date. Export to JSON, CSV or Excel.",
        "version": "0.1",
        "x-build-id": "BPm5sTV11recazYfO"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapers_lat~singapore-hdb-rental-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapers_lat-singapore-hdb-rental-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/scrapers_lat~singapore-hdb-rental-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapers_lat-singapore-hdb-rental-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/scrapers_lat~singapore-hdb-rental-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapers_lat-singapore-hdb-rental-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": {
                    "town": {
                        "title": "Town",
                        "type": "string",
                        "description": "Filter by HDB town, exact match (for example \"TAMPINES\", \"ANG MO KIO\", \"BEDOK\"). Case is normalised automatically. Leave empty for all towns."
                    },
                    "flatType": {
                        "title": "Flat type",
                        "type": "string",
                        "description": "Filter by flat type, exact match (for example \"3-ROOM\", \"4-ROOM\", \"5-ROOM\", \"EXECUTIVE\"). Leave empty for all flat types."
                    },
                    "searchQuery": {
                        "title": "Search keyword",
                        "type": "string",
                        "description": "Free text filter across all fields: town, block, street name or flat type (for example \"TAMPINES ST 11\"). Leave empty to pull the full rental history."
                    },
                    "minRent": {
                        "title": "Minimum monthly rent (SGD)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only keep rentals with a monthly rent of at least this amount in SGD. Optional."
                    },
                    "maxRent": {
                        "title": "Maximum monthly rent (SGD)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only keep rentals with a monthly rent of at most this amount in SGD. Optional."
                    },
                    "sortByNewest": {
                        "title": "Newest first",
                        "type": "boolean",
                        "description": "Return the most recently added rental transactions first. Turn off to read in the source order.",
                        "default": true
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 1,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Maximum number of rental records to collect. The portal rate-limits anonymous access, so very large pulls are paced automatically."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
