Calculate time to reach a savings goal with monthly contributions
This savings goal time calculator shows how long a target will take when you already have some money saved and plan to add a fixed amount every month.
Run — free
It deliberately ignores interest, investment returns, fees, taxes, and changing deposits, giving you a clear baseline that is easy to understand and verify. Enter your current savings, monthly contribution, and target goal to receive the required whole number of months, a years-and-months breakdown, and the amount still needed.
Turn a savings target into a practical timeline
A target amount is useful, but it becomes much easier to plan around when you know the expected finish time. Start by entering the money already set aside as current savings. Next, provide the fixed amount you expect to contribute every month, followed by the total target goal. The calculator subtracts current savings from the goal to find the remaining amount. It then divides that remainder by the monthly contribution and rounds upward to a whole month. Rounding upward matters because a partial month of contributions does not complete the plan under this simple model. For example, if the remaining amount is 1,001 and the monthly contribution is 100, ten deposits reach only 1,000, so eleven months are required. The result includes the total month count and a convenient breakdown into complete years plus additional months. If current savings already equal or exceed the target, the answer is zero months because no further contribution is necessary to reach that goal.
Understand the assumptions behind the answer
This calculation is intentionally a straight-line estimate. It assumes the same contribution is made once per month and ignores interest, investment growth, inflation, account fees, taxes, withdrawals, and changes in income. Those exclusions make the result a dependable baseline rather than a forecast of market performance. You can reproduce the answer with the formula: remaining amount equals the larger of zero or target goal minus current savings; months equals the remaining amount divided by the monthly contribution, rounded up. Because the model does not assign calendar dates to deposits, it does not claim a particular completion day. It simply counts how many full monthly contributions are needed. A positive contribution is required only when the goal is above current savings. If more money is still needed and the contribution is zero or negative, the target cannot be reached under the stated plan, so the calculator returns an input error instead of an invented duration. All supplied amounts must be finite, non-negative values except that an already-reached goal does not need a positive future contribution.
Compare scenarios and build a realistic plan
The clearest way to use the result is as a comparison point. Run the calculator with the amount you can comfortably save each month, then try a slightly higher or lower contribution to see how strongly the timeline changes. This can reveal whether a small recurring adjustment removes several months from the plan or whether the target itself needs reconsideration. Keep emergency savings separate if spending them would undermine your financial safety, and enter only the balance genuinely dedicated to this goal. For irregular income, use a conservative monthly average that you are likely to maintain instead of your best recent month. You can also recalculate after each milestone using the new current savings balance, which keeps the estimate relevant without pretending that the original plan never changed. The result should support budgeting decisions, not replace them: real accounts may earn interest, and real life may interrupt deposits. For automated planning tools, the API applies the same deterministic calculation for $0.002 per request, making repeated scenario comparisons consistent and auditable.
What you can do with it
Plan an emergency fund
Estimate how many monthly deposits are needed to build a chosen cash reserve from the amount already saved.
Prepare for a major purchase
Compare contribution amounts for a vehicle, trip, deposit, appliance, or other planned expense without assuming interest.
Add a timeline to a budget
Convert a target and recurring budget allocation into a simple month count that can be reviewed as balances change.
FAQ
How is the number of months calculated?
The calculator subtracts current savings from the target, divides the remaining amount by the monthly contribution, and rounds up to the next whole month.
Does the calculation include savings interest?
No. It intentionally ignores interest, investment returns, fees, taxes, and inflation to provide a simple fixed-contribution baseline.
What happens if I have already reached the goal?
The result is zero months and goal_already_reached is true, even if no positive future contribution is supplied.
Why is a zero monthly contribution rejected?
When the target exceeds current savings, a zero or negative contribution can never close the remaining gap, so no finite completion time exists.
How much does an API calculation cost?
Each API request costs $0.002. The same deterministic inputs always produce the same result.
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/calc2/savings-goal-time \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"current_savings":2500,"monthly_contribution":500,"target_goal":10000}'const res = await fetch("https://api.kit.forhosting.com/calc2/savings-goal-time", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"current_savings": 2500,
"monthly_contribution": 500,
"target_goal": 10000
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/calc2/savings-goal-time",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"current_savings": 2500,
"monthly_contribution": 500,
"target_goal": 10000
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/calc2/savings-goal-time", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"current_savings":2500,"monthly_contribution":500,"target_goal":10000}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"current_savings":2500,"monthly_contribution":500,"target_goal":10000}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/calc2/savings-goal-time", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"current_savings": 2500,
"monthly_contribution": 500,
"target_goal": 10000
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "calc2.savings_goal_time",
"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. |