What can you rent out in your HDB flat?
Your whole flat if you are a Singapore Citizen, or 1 or 2 bedrooms HDB built. Never the shelter or a partitioned corner. Pick your flat type to see the limits and the rents.
What kind of flat do you own?
Pick your flat type. Everything below changes with it. Rules as read from HDB's pages on 13 Oct 2026; rents from HDB's data to Sep 2026.
What can you rent out in a 4-room flat?
Two ways to rent. Hover or tap a block to see the rule behind it. This is a sketch, not a floor plan.
Rent the whole flat
Singapore Citizen owners; not Prime or Plus flats
Rent bedrooms
Only bedrooms HDB built, up to 2
Before you rent anything out: HDB must approve it, and each tenancy must last at least 6 months. To rent out the whole flat you must also be a Singapore Citizen, the flat must not be a Prime or Plus flat, and the Minimum Occupation Period must be over. Permanent Resident owners cannot rent out the whole flat.
In a 4-room flat you can rent out the whole flat (Singapore Citizen owners only, and not a Prime or Plus flat), or up to 2 bedrooms HDB built while you keep living there. The shelter, the living room and any partitioned corner cannot be rented.
How many people can live in a 4-room flat?
One dot is one person the rules allow. Hover or tap a row for the detail.
In a 4-room flat the limit is 8 people for now. It drops to 6 for rentals that run past 31 Dec 2028. For the whole flat, the limit does not apply if all the tenants are one family.
What rent do owners declare for a 4-room flat?
Typical (median) monthly rent by town, from 13,475 approved rentals in the 12 months to Sep 2026. These are owner-declared rents for flat rentals approved by HDB, whole flats rather than rooms as far as the data shows. HDB does not check them.
A typical 4-room flat was rented for $3,300 a month, and 9 in 10 were between $2,500 and $4,300. Among towns with at least 30 rentals, Central was highest at $4,450 and Bukit Panjang was lowest at $3,000.
What breaks the rules for a 4-room flat?
The limits above, turned into what counts as a breach. From HDB's pages and MND's answers.
- Renting out the flat or a bedroom before HDB approves it, or not asking again when the tenancy is renewed.
- Renting out the whole flat as a Permanent Resident owner, or in a Prime or Plus flat.
- Renting out more than 2 bedrooms.
- Renting out the living room, the shelter or a partitioned corner as a bedroom.
- Having more than 8 tenants in the flat (and more than 6 for rentals running past 31 Dec 2028). For the whole flat the limit does not apply if all the tenants are one family, but the bedroom limit does.
- Renting for less than 6 months, or to tourists, or for filming or storing goods.
- Locking up a room and renting out the rest of the flat without living there yourself.
What does HDB do about it?
MND says HDB may issue a written warning, impose a penalty of up to $50,000 or compulsorily acquire the flat, and that it finds cases through inspections, feedback from the public and by monitoring advertisements.
These are few next to the 37,012 rentals HDB approved in the 12 months to Sep 2026, but we found no published figure for how many unapproved rentals exist, so the chance of being caught cannot be worked out.
The three answers use different wording and periods, so we show them side by side and do not chart a trend. Sources: MND, Apr 2017 (opens in a new tab), MND, Sep 2022 (opens in a new tab), MND, Jan 2024 (opens in a new tab), MND, Jul 2023 (opens in a new tab).
More finds
The short version
Singapore Citizen owners can rent out a whole HDB flat of any type except a Prime or Plus flat (Permanent Resident owners cannot), and bedrooms only in a 3-room flat or bigger: 1 in a 3-room and up to 2 in a 4-room or bigger, and only bedrooms HDB built, never the household shelter or a partitioned corner. A typical 4-room flat was rented for $3,300 a month (13,475 approved rentals in the 12 months to Sep 2026). From HDB's rules and data read on 13 Oct 2026.
Only Singapore Citizen owners can rent out a whole flat, and never a Prime or Plus flat. HDB's approval comes first and the Minimum Occupation Period must be over. Each tenancy lasts at least 6 months, and tourists and short stays are not allowed. The limit is 4 tenants in a 1-room or 2-room flat, 6 in a 3-room and 8 in a 4-room or bigger, falling to 6 for rentals past 31 Dec 2028. The whole-flat limit does not apply if all the tenants are one family.
For bedrooms, you must keep living in the flat. The limit counts everyone living there, owner included. Renting out the living room, the shelter or a partitioned space as a bedroom is not allowed.
The rents are declared by owners and not checked by HDB, and HDB does not say whether its table includes single rooms. We read them as whole-flat rents. HDB acted on 571 cases of unapproved renting in the five years to January 2024.
By Ben (opens in a new tab). Updated . Data: HDB (data.gov.sg and its rules pages) and MND.
Questions people ask
Can you rent out your HDB bomb shelter?
No. HDB says only bedrooms it originally built can be rented out, and the household shelter is not a bedroom. HDB's page does not name the shelter, so this follows from that rule.
Can you partition your living room and rent it out?
No. HDB says partitioned rooms cannot be used as bedrooms for tenants, and the living room is not one of the bedrooms HDB built.
Who can rent out a whole HDB flat?
Only Singapore Citizen owners, once the Minimum Occupation Period is over and with HDB's approval. HDB says Singapore Permanent Resident owners are not allowed to rent out the whole flat, and that owners of Prime and Plus flats are not allowed to rent out the flat even after the 10-year Minimum Occupation Period. HDB's page on renting out bedrooms is addressed to Singapore Citizen and Permanent Resident owners.
Can you rent out one room of your HDB flat?
Only from a 3-room flat up. The owner of a 3-room flat can rent out 1 bedroom, and the owner of a 4-room or bigger flat up to 2. Owners of 1-room and 2-room flats can only rent out the whole flat. You must keep living in the flat, and HDB must approve the rental first.
How many people can live in a rented HDB flat?
If you rent out the whole flat: up to 4 tenants in a 1-room or 2-room flat, 6 in a 3-room and 8 in a 4-room or bigger. If you rent out bedrooms, the limit counts everyone living there, owner included: 6 in a 3-room and 8 in a 4-room or bigger. For rentals running past 31 Dec 2028 the 8 drops to 6. When all the tenants of a whole flat are from the same family, the whole-flat limit does not apply, but the bedroom limit does.
How long must an HDB tenancy last?
At least 6 months. HDB does not allow short stays or renting to tourists. One application can run up to 3 years if all tenants are Singaporeans or Malaysians, and for less if any tenant is a non-Malaysian non-citizen.
Do you need HDB's approval to rent out your flat?
Yes, before you rent out the flat or a bedroom, and again when you renew. You must also have finished the Minimum Occupation Period before renting out the whole flat. Without approval, MND says HDB may issue a written warning, impose a penalty of up to $50,000 or compulsorily acquire the flat.
How much rent do HDB owners declare?
For a 4-room flat, a typical $3,300 a month in the 12 months to Sep 2026, from 13,475 approved rentals. A 3-room was $2,850, a 5-room $3,500 and an Executive flat $3,800. Owners declare these figures and HDB does not check them.
Do the rent figures include single rooms?
HDB's table does not say. They look like whole-flat rents: HDB's own published medians match ours, the rows add up to about 92 in every 100 of the approvals HDB counted in 2021, and only 65 of the 76,755 4-room rentals are $800 or less. We treat them as whole-flat rents and say so.
How often does HDB act against unapproved renting?
HDB told Parliament it acted on 571 cases of unauthorised renting of flats or bedrooms in the five years to January 2024, on 730 cases from 2010 to 2021 (about 70 ended with HDB acquiring the flat) and on 70 cases in the three years to April 2017. We found no figure for how many unapproved rentals exist, so we cannot say how likely it is to be caught.
The numbers behind it
| Flat type | Rent the whole flat | Bedrooms you can rent | Most tenants, whole flat | Most people, if renting bedrooms | Limit past 31 Dec 2028 |
|---|---|---|---|---|---|
| 1-room | Yes, with conditions | None | 4 | Not allowed | No change stated |
| 2-room | Yes, with conditions | None | 4 | Not allowed | No change stated |
| 3-room | Yes, with conditions | 1 | 6 | 6 | No change stated |
| 4-room | Yes, with conditions | 2 | 8 | 8 | 6 people |
| 5-room | Yes, with conditions | 2 | 8 | 8 | 6 people |
| Executive | Yes, with conditions | 2 | 8 | 8 | 6 people |
The whole flat can be rented out only by Singapore Citizen owners (not Permanent Residents), never in a Prime or Plus flat, and only once the Minimum Occupation Period is over. The whole-flat tenant limit does not apply if all the tenants are one family; the bedroom limit does.
| Flat type | Rentals since Jan 2021 | Rentals, 12 months to Sep 2026 | Typical rent, 12 months | 9 in 10 between | Typical, Jan to Sep 2022 | Typical, Jan to Sep 2026 |
|---|---|---|---|---|---|---|
| 1-room | 63 | 11 | $2,000 | $1,330 to $2,500 | – | – |
| 2-room | 4,913 | 1,116 | $2,350 | $1,400 to $2,710 | $1,700 | $2,350 |
| 3-room | 69,514 | 12,195 | $2,850 | $2,000 to $3,500 | $2,100 | $2,850 |
| 4-room | 76,755 | 13,475 | $3,300 | $2,500 to $4,300 | $2,500 | $3,350 |
| 5-room | 49,865 | 8,359 | $3,500 | $2,700 to $4,500 | $2,600 | $3,500 |
| Executive | 11,487 | 1,856 | $3,800 | $2,800 to $4,710 | $2,600 | $3,800 |
A dash means fewer than 30 rentals, too few to call typical. The 1-room row rests on 63 rentals in all.
| Town | 2-room | 3-room | 4-room | 5-room | Executive |
|---|---|---|---|---|---|
| Ang Mo Kio | – | $2,800 | $3,400 | $3,800 | – |
| Bedok | $2,300 | $2,800 | $3,380 | $3,700 | $4,150 |
| Bishan | – | $3,000 | $3,650 | $4,000 | – |
| Bukit Batok | $2,450 | $2,700 | $3,300 | $3,600 | $3,800 |
| Bukit Merah | $2,500 | $3,000 | $3,900 | $4,300 | – |
| Bukit Panjang | – | $2,600 | $3,000 | $3,300 | $3,600 |
| Bukit Timah | – | $3,150 | $3,700 | – | – |
| Central | – | $3,300 | $4,450 | $5,100 | – |
| Choa Chu Kang | – | $2,650 | $3,100 | $3,250 | $3,500 |
| Clementi | – | $3,000 | $4,000 | $4,200 | – |
| Geylang | $2,200 | $2,850 | $3,600 | $4,000 | – |
| Hougang | $2,300 | $2,700 | $3,200 | $3,450 | $3,750 |
| Jurong East | – | $2,800 | $3,500 | $3,800 | $4,100 |
| Jurong West | $2,450 | $2,700 | $3,500 | $3,700 | $3,950 |
| Kallang/Whampoa | $2,390 | $3,000 | $3,800 | $4,000 | – |
| Marine Parade | – | $3,000 | $3,500 | $4,200 | – |
| Pasir Ris | – | – | $3,330 | $3,600 | $3,900 |
| Punggol | $2,350 | $2,850 | $3,250 | $3,300 | $3,480 |
| Queenstown | $2,500 | $3,000 | $4,150 | $4,400 | – |
| Sembawang | $2,300 | $2,800 | $3,100 | $3,300 | $3,500 |
| Sengkang | $2,300 | $2,870 | $3,200 | $3,300 | $3,500 |
| Serangoon | – | $2,800 | $3,400 | $3,600 | $3,850 |
| Tampines | – | $2,850 | $3,400 | $3,700 | $4,000 |
| Tengah | – | – | – | – | – |
| Toa Payoh | – | $2,900 | $3,700 | $4,000 | – |
| Woodlands | $2,300 | $2,500 | $3,100 | $3,300 | $3,600 |
| Yishun | $2,300 | $2,700 | $3,100 | $3,400 | $3,700 |
A dash means fewer than 30 rentals in the year, or none. The 1-room flat is left out: it has 11 rentals in the year, all in one town.
| Period | What was counted | Cases | About a year | Source |
|---|---|---|---|---|
| 3 years to Apr 2017 | Cases of unauthorised subletting or overcrowding that HDB acted on. | 70 | 23 | MND oral answer, 3 Apr 2017 (opens in a new tab) |
| 2010 to 2021 | Cases of unauthorised renting out of flats that HDB acted on, about 70 of them ending with HDB acquiring the flat. | 730 | 61 | MND written answer, 12 Sep 2022 (opens in a new tab) |
| 5 years to Jan 2024 | Cases of unauthorised renting out of HDB flats or bedrooms that HDB acted on. | 571 | 114 | MND written answer, 9 Jan 2024 (opens in a new tab) |
| Year | Rentals | Note |
|---|---|---|
| 2021 | 38,882 | Early in the pandemic recovery; treat with care |
| 2022 | 33,612 | |
| 2023 | 36,855 | |
| 2024 | 36,508 | |
| 2025 | 39,099 | |
| 2026 | 27,641 | January to September only |
The boring bit
Where the information comes from
The rules come from HDB's pages on renting out a flat (eligibility (opens in a new tab), regulations (opens in a new tab)) and on renting out bedrooms (eligibility (opens in a new tab), regulations (opens in a new tab)), read on 13 Oct 2026. The penalty, the written warning and how HDB finds cases come from the MND answers, not from HDB's pages. The rents come from HDB's Renting Out of Flats from Jan 2021 (opens in a new tab) on data.gov.sg, downloaded on 13 Oct 2026. The enforcement counts are from the MND written answers linked above. We checked the rent data against HDB's own median rents for Q2 2026 (opens in a new tab) and its approvals count by flat type (opens in a new tab).
What is not claimed
- This is not legal advice. Rules change, and these are the rules as read on 13 Oct 2026. HDB decides how a rule applies to your flat.
- The rents are declared by owners and HDB does not verify them.
- HDB does not say whether the rent table includes single rooms. We read the figures as whole-flat rents because HDB's own medians match ours, the rows add up to about 92 in every 100 of HDB's approvals for Jan to Sep 2021, and almost no rows are low enough to be a room. This is our reading, not HDB's statement.
- HDB's pages do not name the household shelter or the living room. Our answer follows from its rule that only bedrooms HDB built can be rented.
- We do not say how likely an unapproved rental is to be caught. We found no figure for how many exist.
- Not covered: the length of the Minimum Occupation Period, what counts as a family unit, fees, tax, the quota for tenants who are not Singaporeans or Malaysians, a lease, a lender's terms and your estate's own rules.
- Nothing here says anything about any person or home.
Coverage
The rent data has 212,597 approved rentals from Jan 2021 to Sep 2026, in 27 towns, of which 37,012 fall in the 12 months to Sep 2026. All were used. A town is compared for a flat type only with at least 30 rentals in that year. HDB's approvals count by flat type ends in Sep 2021; our rows for Jan to Sep 2021 are 29,430 against its 32,072, which is 92 in every 100.
Report an error. Corrections are logged publicly with a date.
How we did it
- Read HDB's rules. We copied the limits for each flat type from its two pages and recorded the date.
- Downloaded every rent row. We pulled all 212,597 rows from data.gov.sg and checked them against the total row count data.gov.sg shows.
- Checked what the rows are. We compared our medians with HDB's own Q2 2026 table (10 of 11 spot checks matched exactly, and the eleventh was compared with a range) and our row counts with HDB's approvals count.
- Worked out typical rents. The median for the 12 months to Sep 2026, rounded half up to the nearest $10, for each flat type and town. Towns with fewer than 30 rentals are shown but not ranked.
- Typed the enforcement counts from the MND answers, with the date of each.
Show the code
"""Prep for the 'What can you rent out in your HDB flat?' demo.
Reads the full 'Renting Out of Flats from Jan 2021' table (data.gov.sg) saved as CSV and writes data.json.
Usage: python3 -I prep_rent.py rent.csv out_dir
"""
import csv, json, os, sys, statistics as st
from collections import defaultdict
from decimal import Decimal, ROUND_HALF_UP
src, out_dir = sys.argv[1], sys.argv[2]
os.makedirs(out_dir, exist_ok=True)
TYPES = ["1-ROOM", "2-ROOM", "3-ROOM", "4-ROOM", "5-ROOM", "EXECUTIVE"]
MIN_N = 30 # a town is ranked for a flat type only with at least this many approvals in the 12 months
LAST12 = ("2025-10", "2026-09")
SAME9_A = ("2022-01", "2022-09")
SAME9_B = ("2026-01", "2026-09")
def r10(x):
"""round half up to the nearest 10"""
return int((Decimal(str(x)) / 10).quantize(Decimal("1"), rounding=ROUND_HALF_UP) * 10)
def pct(v, q):
v = sorted(v)
k = (len(v) - 1) * q
lo, hi = int(k), min(int(k) + 1, len(v) - 1)
return v[lo] + (v[hi] - v[lo]) * (k - lo)
rows = []
for r in csv.DictReader(open(src)):
rows.append((r["rent_approval_date"], r["town"], r["flat_type"], float(r["monthly_rent"])))
total = len(rows)
months = sorted(set(m for m, *_ in rows))
D = {"total_rows": total, "first_month": months[0], "last_month": months[-1], "types": {}}
by_t = defaultdict(list)
for m, town, t, rent in rows:
by_t[t].append((m, town, rent))
for t in TYPES:
v = by_t.get(t, [])
d = {"rows": len(v), "share": len(v) / total}
all_rents = [x[2] for x in v]
d["all_median"] = r10(st.median(all_rents)) if v else None
l12 = [x for x in v if LAST12[0] <= x[0] <= LAST12[1]]
d["l12_rows"] = len(l12)
if l12:
rr = [x[2] for x in l12]
d["l12_median"] = r10(st.median(rr))
d["l12_p5"] = r10(pct(rr, .05))
d["l12_p95"] = r10(pct(rr, .95))
a = [x[2] for x in v if SAME9_A[0] <= x[0] <= SAME9_A[1]]
b = [x[2] for x in v if SAME9_B[0] <= x[0] <= SAME9_B[1]]
d["j9_2022_n"], d["j9_2026_n"] = len(a), len(b)
d["j9_2022_median"] = r10(st.median(a)) if a else None
d["j9_2026_median"] = r10(st.median(b)) if b else None
# by year (2021 flagged for COVID in copy; 2026 = Jan to Sep)
yr = defaultdict(list)
for m, town, rent in v:
yr[m[:4]].append(rent)
d["by_year"] = {y: {"n": len(x), "median": r10(st.median(x))} for y, x in sorted(yr.items())}
# towns, latest 12 months
tw = defaultdict(list)
for m, town, rent in l12:
tw[town].append(rent)
d["towns"] = {town: {"n": len(x), "median": r10(st.median(x)), "ranked": len(x) >= MIN_N} for town, x in sorted(tw.items())}
D["types"][t] = d
# rows per year overall and per month of last year (for approvals-per-year sentence)
yc = defaultdict(int)
for m, *_ in rows:
yc[m[:4]] += 1
D["rows_by_year"] = dict(sorted(yc.items()))
D["l12_rows_all"] = sum(1 for m, *_ in rows if LAST12[0] <= m <= LAST12[1])
D["towns_all"] = sorted(set(t for _, t, *_ in rows))
D["min_n"] = MIN_N
D["last12"] = LAST12
json.dump(D, open(os.path.join(out_dir, "data.json"), "w"), indent=1)
print("rows", total, "months", months[0], months[-1], "last-12 rows", D["l12_rows_all"])
for t in TYPES:
d = D["types"][t]
ranked = [k for k, v in d["towns"].items() if v["ranked"]]
unr = [k for k, v in d["towns"].items() if not v["ranked"]]
print(f"{t}: rows {d['rows']} share {d['share']*100:.1f}% | l12 n={d['l12_rows']} median={d.get('l12_median')} p5-p95={d.get('l12_p5')}-{d.get('l12_p95')} | Jan-Sep22 {d['j9_2022_median']} (n={d['j9_2022_n']}) -> Jan-Sep26 {d['j9_2026_median']} (n={d['j9_2026_n']}) | towns ranked {len(ranked)}, too few {len(unr)} {unr}")
if ranked:
lo = min(ranked, key=lambda k: d["towns"][k]["median"])
hi = max(ranked, key=lambda k: d["towns"][k]["median"])
print(" cheapest", lo, d["towns"][lo], "| dearest", hi, d["towns"][hi])
print(D["rows_by_year"])
What could make this wrong: owners declare the rents; HDB's table may include some room rentals we cannot see; a rule may change after 13 Oct 2026; and the three enforcement counts cover different wording and periods.
Source: HDB, Renting Out of Flats from Jan 2021, on data.gov.sg, accessed 13 Oct 2026, made available under the terms of the Singapore Open Data Licence. Rules from HDB; counts from MND.