What do you get out of CPF LIFE?

Reverse engineering the maths behind CPF LIFE payouts.

  ·  4 min read

CPF LIFE is a national annuity plan for citizens and permanent residents of Singapore. In essence, CPF LIFE is the raison d’être of CPF. It is a hedge against the adverse effects of old age and longevity risk, which can be thought of as the risk of running out of money before you pass, resulting in severe degradation in the quality of life and thus increasing the burden on the government and society at large.

As of 2025, CPF LIFE works by taking the balance of the CPF Retirement Account (RA) at age 65 and computing a fixed or increasing monthly payout based on that. In the so-called “Escalating” and “Standard” plans, the monthly payouts are guaranteed by the Singapore government, rain or shine, until you pass. (As far as we know, anyway.)

How much do you get paid though?

Unfortunately, CPF doesn’t disclose the exact formula for calculating the monthly payout amount. CPF does provide a “retirement planner” that shows the savings needed to achieve a given monthly payout amount. I found that the web page makes calls to an API which takes in the desiredPayout, inflationRate, and retirementPlan parameters and return a retirementSavings response.

Request:

{
  "desiredPayout": 8500,
  "inflationRate": 0,
  "retirementPlan": "Escalating"
}

Response:

{
  "success": true,
  "result": [
    {
      "serviceName": "Retirement.PlanMyRetirementController.CalculatePMRLifeEstimatorAndInflationAsync",
      "returnCode": "00",
      "errors": [],
      "payload": {
        "monthlyPayout": 8500,
        "retirementSavings": 2097180.99822738
      }
    }
  ]
}

This API provides us a mapping between monthly payout amount and retirement savings. By hitting the API with a couple of values, I constructed the following table, values verbatim from the API responses:

Monthly payoutSavings (Escalating plan)Savings (Standard plan)
500108760.9515552883572.58526296
1000232844.55679222179951.15005689
1500357104.36087712277456.58542077
2000481381.96824918375069.17254394
2500605666.6851603472698.1303047
3000729954.83530078570332.50251751
3500854244.80445822667969.57932733
4000978536.25251607765608.50231271
45001102828.93770381863248.03735083
50001227121.6228891960888.57937732
55001351414.308062621058529.97423376
60001475708.5578091156171.37081687
65001600003.045892541253812.76807614
70001724297.533976431351454.67671468
75001848592.02206151449097.35862946
80001972886.510145881546740.04104094
85002097180.998227381644382.72348917
90002221475.486308541742025.40637987
95002345769.97438981839668.0892683
100002470064.46247121937310.77230172

Worth noting that these values aren’t set in stone and will likely change in the future! In addition, the values above might depend on your gender or other factors (see this FAQ). But the principles remain the same. If we plot the data on a graph, we’ll see that they’re essentially linear. Write \[ \boxed{p = A c + B} \] where \(p\) is the monthly payout, \(c\) is the retirement savings, \(A\) is the slope, and \(B\) is the y-intercept. By computing linear regressions over the data, we obtain the following:

Escalating planStandard plan
\(A\)0.00402290960.0051220422
\(B\)63.29523777.7649
\(R^2\) score0.999999990.99999975

This table combined with the equation above gives the formulae to calculating the monthly payout amount based on the savings amount.

CPF LIFE monthly payout against retirement savings

The residual plots are not the nicest looking though. For one, they reveal that the errors are highest at lower amounts, and the residuals aren’t “randomly” distributed. I can only speculate that this is due to numerical errors in the algorithms they used.

CPF LIFE monthly payout residuals

We may convert the slope \(A\) into an annual figure to the following:

Escalating planStandard plan
\(A\) (annual)0.04827491520.0614645064

This shows that ignoring time value of money and the intercept \(B\), the nominal annual payout is rather good: approximately 4.82% p.a. for the escalating plan initial payout and 6.15% p.a. for the standard plan payout. These are significantly higher than the typical annual returns from a low-risk SGD-denominated fixed income investment. Of course, these are simple interest, in that the payouts can’t be reinvested to benefit from compounding.

Observe from the graph of initial monthly payout that the values for the escalating plan are lower than those for the standard plan. How much lower? The ratio is given by \(p_e/p_s\) where \[ 0.785 < \frac{p_e}{p_s} = \frac{0.0040229096 c + 63.295237}{0.0051220422 c + 77.7649} < 0.814. \] Given that the escalating plan starts with a lower monthly payout, but increases by 2% each year (as of 2025), how long does it take for it to overtake the standard plan? Let \(r = 0.02\), and \(n\) the number of years. Then it’s just a matter of solving \[ \left( 0.0040229096 c + 63.295237 \right) \left(1 + r\right)^n = 0.0051220422 c + 77.7649, \] for \(n\), giving \[ n = \frac{\displaystyle \log\!\left( \frac{0.0051220422 c + 77.7649}{0.0040229096 c + 63.295237} \right)}{\log(1+r)}. \] Observe that \(10.39 < n < 12.20\) for all \(c > 0\) if \(r = 0.02\). That is, it takes around approximately 11 years (depending on the savings amount) before the escalating plan crosses the standard plan. You would be at approximately age 76 then.