Does your birth year decide your CPF Retirement Sum?
Yes. Born in 1961, your Full Retirement Sum is $161,000. Born in 1971, it is $220,400. CPF fixes it for life. Pick your birth year to see yours.
CPF raised the sum every 1 July up to 2015, so for births up to 1960 the sum depends on the half of the year you were born in.
What is the Full Retirement Sum for people born in 1971?
Fixed by the year you turn 55, and the same for life. From CPF's tables, read 14 Oct 2026.
Bars are drawn against the latest published Full Retirement Sum, $228,200.
People born in 1971 reach 55 in 2026, and CPF says the sum then stays the same for life.
That is $7,400 more than for people born in 1970 and $7,800 less than for people born in 1972.
If you were born in 1971, your Full Retirement Sum is $220,400 and your Basic Retirement Sum is $110,200.
How does your birth year compare with the others?
Each bar is one step in CPF's table, from the oldest births at the top to the newest at the bottom. A longer bar is a bigger Full Retirement Sum. Yours is marked.
Yours, $220,400, is 5.5 times the first row's $40,000 and $7,800 below the latest published.
How fast has the sum grown?
Four stretches of births, with how much the sum rose across each. Your stretch is marked.
Your tile is Born 1970 to 1972: the sum went from $213,000 to $228,200 so far in 2 years.
Does the Enhanced Retirement Sum depend on your birth year?
No. It is one amount for everyone, set at double the current year's Full Retirement Sum.
CPF lets members aged 55 and above top up their Retirement Account up to the current Enhanced Retirement Sum, whichever year they were born.
Your own Full Retirement Sum, $220,400, stays the same for life. The Enhanced Retirement Sum moves with the year.
In 2026 the Enhanced Retirement Sum is $440,800 for everyone, which is 2 times the Full Retirement Sum for people born in 1971.
More finds
The short version
CPF's Full Retirement Sum depends on the year you turn 55 and stays the same for life: $161,000 for people born in 1961, $220,400 for people born in 1971 and $228,200 for people born in 1972, the latest published, which is 5.7 times the $40,000 of the first row, for people born from Jul 1940 to Jun 1941. From CPF's tables read on 14 Oct 2026.
The Basic Retirement Sum is half the Full Retirement Sum: $80,500 against $161,000 for people born from Jul 1960 to Dec 1961, and $110,200 against $220,400 for people born in 1971. CPF's tables list the Basic Retirement Sum only for births from Jul 1960.
Until 2016 CPF changed the sum on 1 July each year, so a birth year up to 1960 can fall into two steps, one for January to June and one for July to December. From people born in 1962 it changes on 1 January. People born from Jul 1960 to Dec 1961 share one sum.
The Enhanced Retirement Sum is not tied to your birth year. In 2026 it is $440,800 and in 2027 it is $456,400, double the Full Retirement Sum of the year. CPF has not published a Full Retirement Sum for people born in 1973 or later.
By Ben (opens in a new tab). Updated . Data: CPF Board (its pages and data.gov.sg).
Questions people ask
What is the CPF Full Retirement Sum?
It is the amount that applies for setting aside in your Retirement Account when you reach 55. CPF says it depends on the year you turn 55 and stays the same for life. For people born in 1971 it is $220,400.
What is the Full Retirement Sum if you were born in 1971?
$220,400, and the Basic Retirement Sum is $110,200. People born in 1971 reach 55 in 2026.
What is the Full Retirement Sum if you were born in 1961?
$161,000, the same as for everyone born from Jul 1960 to Dec 1961. The Basic Retirement Sum for them is $80,500.
What is the Full Retirement Sum for people born in 1973 or later?
CPF has not published one. Its tables stop at people born in 1972, who reach 55 in 2027, with $228,200 for the Full Retirement Sum and $114,100 for the Basic.
Does the Full Retirement Sum change after you turn 55?
No. CPF says the amount for your year stays the same for life. What moves is the amount for people who turn 55 later, and the Enhanced Retirement Sum.
How is the Basic Retirement Sum related to the Full?
CPF says the Full Retirement Sum is double the Basic. Its table of Basic Retirement Sums starts with people born from Jul 1960 to Dec 1961, so for earlier births we show only the Full.
Does the Enhanced Retirement Sum depend on your birth year?
No. CPF sets it at double the current year's Full Retirement Sum, so it is $440,800 in 2026 and $456,400 in 2027 for everyone. Members aged 55 and above can top up their Retirement Account up to the current Enhanced Retirement Sum.
Why does your birth month matter if you were born in 1960 or earlier?
Until 2016 CPF changed the sum on 1 July each year, so a birth year up to 1960 falls into two steps. From 1962 it changes on 1 January, and people born from Jul 1960 to Dec 1961 share one sum.
Has the Full Retirement Sum ever stayed the same from one step to the next?
Not between steps. Every step in CPF's table is higher than the one before. The closest to a pause is the step for people born from Jul 1960 to Dec 1961, which lasts 18 months, so everyone reaching 55 from Jul 2015 to Dec 2016 shares $161,000.
How much has the Full Retirement Sum grown?
It is 5.7 times as much for people born in 1972 ($228,200) as for people born from Jul 1940 to Jun 1941 ($40,000). The biggest rise between two steps was $11,000, from $106,000 to $117,000, for people born from Jul 1954 to Jun 1955.
The numbers behind it
| Born | Reach 55 | Full Retirement Sum | Basic Retirement Sum | Rise from the step before | Rise, in per cent |
|---|---|---|---|---|---|
| Jul 1940 to Jun 1941 | Jul 1995 to Jun 1996 | $40,000 | – | – | – |
| Jul 1941 to Jun 1942 | Jul 1996 to Jun 1997 | $45,000 | – | +$5,000 | 12.5% |
| Jul 1942 to Jun 1943 | Jul 1997 to Jun 1998 | $50,000 | – | +$5,000 | 11.1% |
| Jul 1943 to Jun 1944 | Jul 1998 to Jun 1999 | $55,000 | – | +$5,000 | 10.0% |
| Jul 1944 to Jun 1945 | Jul 1999 to Jun 2000 | $60,000 | – | +$5,000 | 9.1% |
| Jul 1945 to Jun 1946 | Jul 2000 to Jun 2001 | $65,000 | – | +$5,000 | 8.3% |
| Jul 1946 to Jun 1947 | Jul 2001 to Jun 2002 | $70,000 | – | +$5,000 | 7.7% |
| Jul 1947 to Jun 1948 | Jul 2002 to Jun 2003 | $75,000 | – | +$5,000 | 7.1% |
| Jul 1948 to Jun 1949 | Jul 2003 to Jun 2004 | $80,000 | – | +$5,000 | 6.7% |
| Jul 1949 to Jun 1950 | Jul 2004 to Jun 2005 | $84,500 | – | +$4,500 | 5.6% |
| Jul 1950 to Jun 1951 | Jul 2005 to Jun 2006 | $90,000 | – | +$5,500 | 6.5% |
| Jul 1951 to Jun 1952 | Jul 2006 to Jun 2007 | $94,600 | – | +$4,600 | 5.1% |
| Jul 1952 to Jun 1953 | Jul 2007 to Jun 2008 | $99,600 | – | +$5,000 | 5.3% |
| Jul 1953 to Jun 1954 | Jul 2008 to Jun 2009 | $106,000 | – | +$6,400 | 6.4% |
| Jul 1954 to Jun 1955 | Jul 2009 to Jun 2010 | $117,000 | – | +$11,000 | 10.4% |
| Jul 1955 to Jun 1956 | Jul 2010 to Jun 2011 | $123,000 | – | +$6,000 | 5.1% |
| Jul 1956 to Jun 1957 | Jul 2011 to Jun 2012 | $131,000 | – | +$8,000 | 6.5% |
| Jul 1957 to Jun 1958 | Jul 2012 to Jun 2013 | $139,000 | – | +$8,000 | 6.1% |
| Jul 1958 to Jun 1959 | Jul 2013 to Jun 2014 | $148,000 | – | +$9,000 | 6.5% |
| Jul 1959 to Jun 1960 | Jul 2014 to Jun 2015 | $155,000 | – | +$7,000 | 4.7% |
| Jul 1960 to Dec 1961 | Jul 2015 to Dec 2016 | $161,000 | $80,500 | +$6,000 | 3.9% |
| 1962 | 2017 | $166,000 | $83,000 | +$5,000 | 3.1% |
| 1963 | 2018 | $171,000 | $85,500 | +$5,000 | 3.0% |
| 1964 | 2019 | $176,000 | $88,000 | +$5,000 | 2.9% |
| 1965 | 2020 | $181,000 | $90,500 | +$5,000 | 2.8% |
| 1966 | 2021 | $186,000 | $93,000 | +$5,000 | 2.8% |
| 1967 | 2022 | $192,000 | $96,000 | +$6,000 | 3.2% |
| 1968 | 2023 | $198,800 | $99,400 | +$6,800 | 3.5% |
| 1969 | 2024 | $205,800 | $102,900 | +$7,000 | 3.5% |
| 1970 | 2025 | $213,000 | $106,500 | +$7,200 | 3.5% |
| 1971 | 2026 | $220,400 | $110,200 | +$7,400 | 3.5% |
| 1972 | 2027 | $228,200 | $114,100 | +$7,800 | 3.5% |
A dash means CPF's table has no figure: no Basic Retirement Sum is listed for births before Jul 1960, and the first row has no step before it. Rows run from the oldest births to the newest.
| Year | Enhanced Retirement Sum | Full Retirement Sum that year |
|---|---|---|
| 2026 | $440,800 | $220,400 |
| 2027 | $456,400 | $228,200 |
| Births | Sum at the start | Sum at the end | Rise | Times as much | Over |
|---|---|---|---|---|---|
| Born Jul 1940 to Jun 1950 | $40,000 | $90,000 | +$50,000 | 2.25 | 10 years |
| Born Jul 1950 to Jun 1960 | $90,000 | $161,000 | +$71,000 | 1.79 | 10 years |
| Born Jul 1960 to Dec 1969 | $161,000 | $213,000 | +$52,000 | 1.32 | 9½ years |
| Born 1970 to 1972 | $213,000 | $228,200 | +$15,200 | 1.07 | 2 years |
The end of a stretch is the sum for the first births of the next one; the last stretch ends at the latest published sum, for people born in 1972.
The boring bit
Where the information comes from
The Full Retirement Sum by date of birth comes from CPF's table of past Full Retirement Sums (PDF) (opens in a new tab), which starts with people born from 1 Jul 1940, and its page How much is my Full Retirement Sum? (opens in a new tab) (last updated 5 Mar 2026). The same figures from Jul 2003 are on data.gov.sg as Full Retirement Sum (opens in a new tab) (CPF Board, Jul 2003 to Jan 2027, dataset last updated 30 Mar 2026, downloaded 14 Oct 2026). The Basic Retirement Sum comes from CPF's page How much is my Basic Retirement Sum? (opens in a new tab) (last updated 12 Mar 2026). The Enhanced Retirement Sum comes from CPF's page What is the current Enhanced Retirement Sum? (opens in a new tab) (last updated 6 May 2026). The statements that the sum stays the same for life, that the Full Retirement Sum is double the Basic and that the Enhanced Retirement Sum is double the current year's Full Retirement Sum are CPF's own words, not our calculation.
What is not claimed
- This is not financial advice. CPF decides how its rules apply to you, and amounts and rules can change.
- We do not show what a retirement sum pays each month, what you may set aside if you own a property, or how top-ups are limited or taxed. CPF has those pages.
- CPF's Basic Retirement Sum table starts with births from Jul 1960. For earlier births we show none, and we do not assume it was half the Full Retirement Sum.
- We do not predict the sums for people born in 1973 or later.
- People born before 1 Jul 1940 are not in CPF's table, so the picker starts at 1941. People born from Jan to Jun 1941 are in the first row.
- Your own reach-55 date is worked out as your birth year plus 55. It is not a statement about your age today.
- Nothing here says anything about any person.
Coverage
All 32 rows of CPF's Full Retirement Sum table and all 12 rows of its Basic Retirement Sum table were used. The data.gov.sg dataset has 24 rows, from Jul 2003 to Jan 2027, and all 24 match CPF's table. The 8 oldest rows, for people born from Jul 1940 to Jun 1948, are only in CPF's PDF, which we typed in by hand, so they are the rows with the least checking.
Report an error. Corrections are logged publicly with a date.
How we did it
- Read CPF's tables. We typed the Full Retirement Sum table (32 rows) and the Basic Retirement Sum table (12 rows) into two files and recorded the date we read them.
- Downloaded data.gov.sg's copy. We matched each of its 24 rows to the row of CPF's table with the same date. All matched.
- Checked the arithmetic. Wherever CPF lists both, the Full Retirement Sum is double the Basic. The 2026 and 2027 Enhanced Retirement Sums are double the Full Retirement Sums of those years.
- Matched birth dates to steps. A birth date belongs to the last row whose date of birth is on or before it, so a birth year up to 1960 can fall into two rows.
- Worked out the rises. Each rise in dollars and in per cent (rounded half up to 1 decimal), and the four stretches of births.
Show the code
"""Prep for the CPF Retirement Sums insight (demo).
Reads CPF's two tables (Full and Basic Retirement Sum by date of birth) plus data.gov.sg's copy of the Full Retirement Sum,
checks them against each other, and writes data.json for the page.
Usage: python3 -I prep_cpf.py data_dir out_dir
"""
import csv, json, os, sys
from datetime import date, timedelta
from decimal import Decimal, ROUND_HALF_UP
data_dir, out_dir = sys.argv[1], sys.argv[2]
os.makedirs(out_dir, exist_ok=True)
# Typed from CPF's pages (read 14 Oct 2026): the Enhanced Retirement Sum is set at double the current year's Full Retirement Sum.
ERS = {"2026": 440800, "2027": 456400}
MONTHS = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
def d(s):
y, m, dd = s.split("-")
return date(int(y), int(m), int(dd))
def half_up(x, places=0):
q = Decimal(1).scaleb(-places)
return Decimal(str(x)).quantize(q, rounding=ROUND_HALF_UP)
def mon(dt):
return MONTHS[dt.month - 1] + " " + str(dt.year)
frs_rows = [(d(r["dob_on_or_after"]), d(r["turn_55_on_or_after"]), int(r["full_retirement_sum"]))
for r in csv.DictReader(open(os.path.join(data_dir, "cpf_frs_by_birth_date.csv")))]
brs_by_start = {d(r["dob_on_or_after"]): int(r["basic_retirement_sum"])
for r in csv.DictReader(open(os.path.join(data_dir, "cpf_brs_by_birth_date.csv")))}
dg = {}
for r in csv.DictReader(open(os.path.join(data_dir, "data_gov_sg_full_retirement_sum.csv"))):
dd, mm, yy = r["effective_from"].split("/")
dg[date(int(yy), int(mm), int(dd))] = int(r["full_retirement_sum"])
# ---- checks ----
assert [r[0] for r in frs_rows] == sorted(r[0] for r in frs_rows), "rows must be in date order"
assert all(a[2] < b[2] for a, b in zip(frs_rows, frs_rows[1:])), "the sum must rise at every step"
for dob, t55, amt in frs_rows:
assert t55 == date(dob.year + 55, dob.month, dob.day), "55th birthday date must be dob + 55 years"
matched = 0
for eff, amt in dg.items():
row = [r for r in frs_rows if r[1] == eff]
assert row and row[0][2] == amt, ("data.gov.sg row not matched", eff, amt)
matched += 1
assert matched == len(dg) == 24
for start, amt in brs_by_start.items():
f = [r for r in frs_rows if r[0] == start]
assert f and f[0][2] == 2 * amt, ("Full is not double Basic", start)
assert ERS["2026"] == 2 * [r for r in frs_rows if r[0] == date(1971, 1, 1)][0][2]
assert ERS["2027"] == 2 * [r for r in frs_rows if r[0] == date(1972, 1, 1)][0][2]
# ---- rows ----
rows = []
for i, (dob, t55, amt) in enumerate(frs_rows):
nxt = frs_rows[i + 1][0] if i + 1 < len(frs_rows) else None
last = (nxt - timedelta(days=1)) if nxt else None
if nxt is None or (dob.month == 1 and nxt.month == 1 and nxt.year == dob.year + 1):
label = str(dob.year)
t55lab = str(t55.year)
else:
label = mon(dob) + " to " + mon(last)
t55e = date(last.year + 55, last.month, last.day)
t55lab = mon(t55) + " to " + mon(t55e)
prev = rows[-1]["frs"] if rows else None
rows.append({
"i": i, "from": dob.isoformat(), "to": last.isoformat() if last else None,
"label": label, "t55": t55lab, "t55year": t55.year, "frs": amt, "brs": brs_by_start.get(dob),
"rise": (amt - prev) if prev else None,
"risepct": float(half_up((amt / prev - 1) * 100, 1)) if prev else None,
})
# ---- the birth-year picker: 1941 to 1972; birth years that straddle two steps are split into Jan-Jun and Jul-Dec ----
def row_for(dt):
idx = [r["i"] for r in rows if r["from"] <= dt.isoformat()]
return idx[-1]
years = []
for y in range(1941, 1973):
a, b = row_for(date(y, 1, 1)), row_for(date(y, 7, 1))
years.append({"y": y, "h1": a, "h2": b} if a != b else {"y": y, "r": a})
# ---- four decades of births, for the "how fast has it grown" tiles ----
def era_of(r):
f = r["from"]
return 0 if f < "1950-07-01" else 1 if f < "1960-07-01" else 2 if f < "1970-01-01" else 3
eras = []
spec = [("Born Jul 1940 to Jun 1950", 0), ("Born Jul 1950 to Jun 1960", 1), ("Born Jul 1960 to Dec 1969", 2), ("Born 1970 to 1972", 3)]
for name, k in spec:
rr = [r for r in rows if era_of(r) == k]
first = rr[0]
nxt = [r for r in rows if era_of(r) == k + 1]
end = nxt[0] if nxt else rows[-1]
months = (d(end["from"]).year - d(first["from"]).year) * 12 + d(end["from"]).month - d(first["from"]).month
eras.append({"k": k, "name": name, "rows": [r["i"] for r in rr], "start_frs": first["frs"], "end_frs": end["frs"],
"gain": end["frs"] - first["frs"], "times": float(half_up(end["frs"] / first["frs"], 2)), "months": months,
"to_latest": not nxt})
big = max((r for r in rows if r["rise"]), key=lambda r: r["rise"])
assert sum(1 for r in rows if r["rise"] == big["rise"]) == 1
first_frs, latest = rows[0]["frs"], rows[-1]["frs"]
D = {
"asof": "14 Oct 2026", "n_rows": len(rows), "rows": rows, "years": years, "eras": eras,
"ers": ERS, "first_frs": first_frs, "latest_frs": latest, "latest_brs": rows[-1]["brs"],
"times_first": float(half_up(latest / first_frs, 1)), "biggest": {"i": big["i"], "rise": big["rise"], "pct": big["risepct"]},
"same_sum_row": [r["i"] for r in rows if r["to"] and r["from"] == "1960-07-01"][0],
"steady_since": [r["i"] for r in rows if r["from"] == "1968-01-01"][0],
"dg_rows": len(dg), "dg_first": min(dg).isoformat(), "dg_last": max(dg).isoformat(),
}
json.dump(D, open(os.path.join(out_dir, "data.json"), "w"), indent=1)
print("CPF rows", len(rows), "| picker years", len(years), "| data.gov.sg rows matched", matched, "of", len(dg), "(Jul 2003 to Jan 2027)")
print("first", first_frs, "latest", latest, "times", D["times_first"], "| BRS published for", sum(1 for r in rows if r["brs"]), "rows")
print("biggest rise", big["rise"], "at", big["label"], big["risepct"], "%")
for e in eras:
print(e["name"], e["start_frs"], "->", e["end_frs"], "gain", e["gain"], "times", e["times"], "months", e["months"])
print("split years:", [y["y"] for y in years if "h1" in y][:3], "...", [y["y"] for y in years if "h1" in y][-1], "| single years from", [y["y"] for y in years if "r" in y][0])
for r in rows[-8:]:
print(r["label"], r["t55"], r["frs"], r["brs"], r["rise"], r["risepct"])
What could make this wrong: a typing slip in the 8 oldest rows (the other 24 are matched to data.gov.sg); CPF changing a published figure; and a reader's birth date falling on a row boundary we read differently from CPF.
Source: CPF Board, Full Retirement Sum, on data.gov.sg, accessed 14 Oct 2026, made available under the terms of the Singapore Open Data Licence. Basic Retirement Sum, Enhanced Retirement Sum and the 8 oldest rows from CPF's own pages.