401(k) Simulator
Please choose a value
$
Please enter a balance of at least 0
$
Please enter a value greater than 0
Please enter a value greater than 0
Please provide a retirement date in the future
$
Please enter a target amount of at least {{principal || 0}}
Please choose a value
$
Please enter a salary of at least 0
%
Please enter a value between 0 and 100
$
Please enter an amount of at least 0
Please enter an age of at least 0
%
Please enter a match eligible percentage between 0 and 100
%
Please enter a match percentage of at least 0
$
Please enter a match cap of at least 0 (leave blank if no cap)
%
Please enter a profit share percentage between 0 and 100
Please choose a value
$
Please enter a raise amount of at least 0
%
Please enter a raise percentage between 0 and 100
Please choose a value
{{$first ? 'Please provide a date in the future' : 'Please provide a date after the previous salary change'}}
$
{{$first ? 'Please provide a valid salary' : 'Please provide a salary greater than the previous'}}
Please choose a value
%
Please enter an increase percentage between 0 and 100
$
Please enter an increase amount of at least 0
Running simulations... 0%
0%
How much will I have in my 401(k) by {{targetDate ? getDateString(targetDate) : 0}}?
Inspect an amount to see whether you'll achieve your desired payout (${{targetPayoutAmount ? getAmountString(targetPayoutAmount) : 0}}/month until age {{targetPayoutUntilAge}})
When will my 401(k) reach ${{targetAmount ? getAmountString(targetAmount) : 0}}?
Inspect a date to see whether you'll achieve your desired payout (${{targetPayoutAmount ? getAmountString(targetPayoutAmount) : 0}}/month until age {{targetPayoutUntilAge}})
When can I retire in order to receive ${{targetPayoutAmount ? getAmountString(targetPayoutAmount) : 0}} per month until age {{targetPayoutUntilAge}}?
How much will I need in order to receive ${{targetPayoutAmount ? getAmountString(targetPayoutAmount) : 0}} per month until age {{targetPayoutUntilAge}}?
Frequently Asked Questions

How are you simulating my 401(k)?
I've collected historical DJI data going all the way back to 1900 (yes, this even includes the Great Depression). To run a single simulation, the calculator will choose a DJI starting point somewhere between 1900 and 2016 then -- week by week, starting from your principal amount -- simulate your 401(k) contributions and the fluctuating market until it reaches the target date or 401(k) account value. This is repeated using DJI starting points every 2 years, resulting in nearly 60 unique stock market simulations.

Since most 401(k) plans will redistribute to a lower-risk fund over time, I've also collected almost 30 years of PTTRX data, and simulate redistribution using an allocation strategy that loosely mimicks a 120 minus your age formula. Similar to stock market simulations, starting points are chosen for every 2 years, resulting in 15 unique runs. When combined with stock market, this results in about 850 total simulations.

Why did you choose DJI and PTTRX? That's not realistic at all!
Initially I was doing simulations based on a single percentage value to represent the market, and provided a dropdown so that a value could be chosen with the assumption that people would choose a low value to see the worst-case scenario, a high value for a best case scenario, and an in-between value for a maybe-typical scenario. The problem with this approach is that the average person isn't going to know what are realistic high, middle, and low stock market performance, and in the end they'll walk away with a few data points of very questionable value. Not to mention that most people won't even consider the best and worst case scenarios. I found that DJI has historically tracked the whole stock market very closely, and it has a ton of historical data. What could be better for simulating the stock market than the actual stock market? Once I pulled in this data and realized the potential of being able to run many simulations and providing a full range of values, I was sold.

PTTRX is a lower-risk fund and it had the most historical data I could find for any such fund, so that was the kicker for me.

Yes, of course your 401(k) will look very different than the DJI/PTTRX portfolio used in the simulation, but it at least approximates the kind of performance your portfolio may experience in a way that very few tools can. Take it with as many grains of salt as you'd like. If you know your portfolio is higher or lower risk, you can also take the data you get from here and adjust accordingly (e.g. a more risky portfolio would have a slightly better base-case result and a slightly worse worst-case result).

Why can't I at least control the asset allocation strategy (instead of age minus 120)?
The reason I don't allow much configurability around any of the portfolio details is simplicity. Allowing people to completely customize their portfolio would greatly increase the complexity of the UI and the simulations (while also slowing it down a great bit), but provide very little value in return. Having played around with the tool quite a bit myself, I think you'd be surprised how little this extra bit of fine-tuning would actually affect the final results.

Why isn't this site https? Can someone sniff the data I'm providing?
All the code for running the simulations is downloaded to your browser when you load the page. Since your computer is running the simulations, your data never leaves your computer. If you don't believe me: load the page, disconnect your internet, then run the simulations.

I found this tool really valuable. How can I donate money to keep it running?

I'm accepting donations through the following:

PayPal: https://www.paypal.me/PersonalFinanceTools
BitCoin: 3HQ9bwXMQykkZgHEDaWEb4tbGVyAeVRrvo
DogeCoin: D7UmaRE8jyARgxoUWkrsoPxBAUKuFgfPCh

How to Donate

I don't put ads on this site. If you want to help keep it running and get access to more useful tools in the future, I'm accepting donations through the following:

PayPal: https://www.paypal.me/PersonalFinanceTools
BitCoin: 3HQ9bwXMQykkZgHEDaWEb4tbGVyAeVRrvo
DogeCoin: D7UmaRE8jyARgxoUWkrsoPxBAUKuFgfPCh