FIRE target portfolio calculator
Turn yearly spending into the portfolio your FIRE plan has to reach: 40,000 at the classic 4% rule means 1,000,000. Add a tax rate on withdrawals and what you already hold to see the remaining gap and how much is funded. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Annual expenses
- 40,000
- Swr percent
- 4
- Tax rate percent
- 0
- Current portfolio
- 0
- Precision
- 2
Financial independence, retire early (FIRE) planning starts with one number: the invested portfolio that can fund your annual spending indefinitely at a chosen safe withdrawal rate. This FIRE target portfolio calculator converts yearly living expenses and a withdrawal-rate percent into that nest-egg target, optionally grosses spending up so withdrawals still cover taxes, and compares the target to the portfolio you already hold so you can see the remaining gap and the percent of the goal you have funded. The classic four-percent rule is the default: forty thousand of yearly spending implies a one-million target, because one hundred divided by four is the familiar twenty-five-times multiple. Choose three percent for a more conservative horizon or explore nearby Trinity-study style rates. Results are educational planning figures, not personalized financial advice.
How the FIRE target portfolio is computed
The FIRE target portfolio is the nest egg that lets a planned withdrawal cover your spending without, in the classic telling, depleting principal over a long retirement. At the default four percent rate the multiple is exactly twenty-five, so sixty thousand of spending maps to one million five hundred thousand. A three percent rate raises the same spending to two million; a five percent rate lowers it to one million two hundred thousand.
All money and rate fields are rounded once with a half-up rule at the requested precision so goldens and repeated calls stay stable across runtimes.
Who plans with a FIRE target
Content teams generate scenario tables for Lean FIRE, standard FIRE, and Fat FIRE spending levels at several withdrawal rates without hand-coding the division. Failed validation does not consume balance. The calculator intentionally models only the static target multiple, the tax gross-up, and the gap versus capital you already hold; it does not project investment growth, inflation paths, sequence-of-returns risk, Social Security, or years until independence, so pair it with a savings-timeline tool when you need a full plan.
Keep requests small, pin the rounded fields in tests, and you get a reproducible FIRE target for blogs, coaching software, and edge workers.
What you can do with it
Independence nest-egg target
Turn annual spending and a chosen safe withdrawal rate into the portfolio size a financial-independence plan has to hit.
FAQ
What safe withdrawal rate should I use?
Use 3 or 3.5 for a more conservative long horizon, or 4.5–5 if you accept a higher failure risk. This is an educational input, not advice.
Why does a tax rate raise the target portfolio?
Because a taxed withdrawal has to be larger than the spending you keep. At a 20% tax rate, 40,000 of spending becomes 50,000 of withdrawal, and the withdrawal rate is applied to that larger figure.
How do I see how far I am from my target?
Enter the portfolio you already hold. The result subtracts it from the target to show the remaining gap and the percent of the goal you have funded, and it marks independence as reached once the gap is zero or less.
Does it tell me how many years until I reach FIRE?
No. It works out the static target only, with no investment growth, inflation, sequence-of-returns risk or Social Security. Pair it with a savings timeline when you need the full plan.
What is the implied annual withdrawal?
It is the target multiplied by the withdrawal rate, a quick check on the result. It should match the gross spending the target was built for: 40,000 with no tax, or 50,000 when a 20% tax applies.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/finance/fire-target-number \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"annual_expenses":40000}'const res = await fetch("https://api.kit.forhosting.com/finance/fire-target-number", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"annual_expenses": 40000
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/finance/fire-target-number",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"annual_expenses": 40000
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/finance/fire-target-number", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"annual_expenses":40000}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"annual_expenses":40000}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/finance/fire-target-number", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"annual_expenses": 40000
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "finance.fire_target_number",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
How the FIRE target portfolio is computed
This calculator starts from annual_expenses, the yearly amount you need in today's currency units, and swr_percent, the safe withdrawal rate expressed as a percent of the portfolio. The core identity is that target_portfolio equals annual_expenses divided by swr_percent over one hundred, which is the same as multiplying expenses by the expense_multiple of one hundred over swr_percent. When tax_rate_percent is greater than zero the calculator first forms gross_annual_withdrawal as annual_expenses divided by one minus tax_rate_percent over one hundred, then applies the withdrawal rate to that gross figure, because a taxable withdrawal has to be larger than the after-tax spending you actually want to keep. current_portfolio, defaulting to zero, is subtracted from the target to produce remaining_gap. funded_percent is current_portfolio divided by target_portfolio times one hundred. independence_reached is true when the rounded gap is zero or negative. implied_annual_withdrawal equals the target times the withdrawal rate and should match the gross spending the target was built to support.
Inputs, defaults, validation, and the response shape
Currency is unitless—pass dollars, euros, or any other unit consistently for expenses and current holdings. POST a JSON body with annual_expenses as a required finite number strictly greater than zero. The rate must be greater than zero and at most one hundred: a zero rate would imply an infinite portfolio, and a rate above one hundred would claim you can withdraw more than the whole nest egg every year. current_portfolio is optional, defaults to zero, and must be greater than or equal to zero; aliases are portfolio, current_savings, and nest_egg. tax_rate_percent is optional, defaults to zero, and must sit in the half-open interval from zero inclusive to one hundred exclusive so the after-tax keep rate never hits zero. precision is an optional integer from zero through eight and defaults to two decimal places. Missing, empty, non-numeric, or out-of-range fields fail with invalid_input naming the field, and those failures are not billed. On success the body echoes the rounded inputs and returns gross_annual_withdrawal, expense_multiple, target_portfolio, remaining_gap, funded_percent, independence_reached, implied_annual_withdrawal, and a short formula string. Example: forty thousand of expenses at four percent with no tax and no current holdings yields a twenty-five times multiple, a one-million target, a one-million gap, zero percent funded, and independence_reached false.
Where a FIRE target portfolio API earns its keep
Coaches and independence planners embed the endpoint so a client can sweep swr_percent from three to five and see how conservative withdrawal assumptions raise the nest egg, then layer a tax_rate_percent to learn how much extra capital a taxable brokerage path demands versus a tax-advantaged account. Dashboards compare current_portfolio to the target and surface remaining_gap and funded_percent without standing up a Monte Carlo engine.
Integration use cases
SWR and tax scenario tables
Sweep swr_percent and tax_rate_percent to see how conservative withdrawals and taxable accounts raise the target.
Gap against current holdings
Compare current_portfolio to the target and show remaining_gap, funded_percent, and whether independence is already reached.
Technical questions
How is the FIRE target portfolio computed?
target_portfolio = (annual_expenses / (1 - tax_rate_percent/100)) / (swr_percent/100). At 4% SWR and no tax, $40,000 of spending gives a $1,000,000 target (the 25× multiple).
What does tax_rate_percent change?
It grosses spending up so after-tax withdrawals still cover annual_expenses. At a 20% tax rate, $40,000 of spending becomes $50,000 of required withdrawal before the SWR is applied.
How do I see how far I still have to save?
Pass current_portfolio. The response includes remaining_gap (target minus current), funded_percent, and independence_reached when the rounded gap is already zero or negative.
What does the FIRE target portfolio calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.