Net present value calculator
Invest 10,000 today, receive 3,000, 4,200 and 6,800 over three periods, discount at 10%, and the NPV is 1,307.29: accept. The result also shows the present value of the stream and the profitability index. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Initial outlay
- 10,000
- Cash flows
- 3,000, 4,200, 6,800
- Rate percent
- 10
- Periods
- 3
- Rate decimal
- 0.1
- Discounted cash flows
- 2,727.27, 3,471.07, 5,108.94
- Present value of cash flows
- 11,307.29
Net present value is the time-value-of-money score of a project: the present worth of every future cash flow, minus the cash you put in today. Analysts, students, and product teams need a fast, deterministic NPV from an initial outlay, a series of end-of-period cash flows, and a discount rate without opening a spreadsheet or a full capital-budgeting library. This net present value calculator discounts each future cash flow by one plus the periodic rate raised to its period index, subtracts the initial outlay, and returns the rounded NPV together with the present value of the stream, each discounted cash flow, the profitability index, and an accept or reject decision. It fails clearly when the outlay is missing or not positive, the cash-flow list is empty or not finite, or the discount rate is at or below negative one hundred percent.
What net present value means and how the cash flows are timed
Net present value answers a capital-budgeting question that a raw total of cash receipts cannot: after you spend money today, is the project still worth more than that outlay once every later receipt and later cost is brought back to today at a required return? A dollar next year is not a dollar now, so each end-of-period cash flow is divided by one plus the periodic discount rate raised to the period number.
Period one is discounted once, period two twice, and so on through the last cash flow you supply. The sum of those present values is the present worth of the operating stream; subtracting the initial outlay—the cash that leaves at time zero—yields NPV. A positive NPV means the project earns more than the hurdle and the accept decision is the textbook rule; a negative NPV means the outlay is not recovered in present-value terms and the reject decision follows; a rounded NPV of zero is indifferent.
When the discount rate is exactly zero there is no time value, so each cash flow is left as-is and NPV collapses to the arithmetic sum of future flows minus the outlay. Cash flows may be inflows, further outlays, or zeros, which is how a mid-life overhaul or a terminal cleanup cost enters the same list.
This calculator does not solve for internal rate of return, payback months, or a changing term structure: you supply the single periodic rate you already trust, and it applies the classical identity so every consumer sees the same arithmetic.
Where a net present value calculator earns its keep
Corporate-finance courses and CFA-style exam prep need a live net present value calculator that students can trust against textbook tables when they already have the outlay, the year-by-year cash flows, and the hurdle rate. Interview screens and homework generators require a deterministic oracle that rejects an empty stream and an impossible discount base instead of returning NaN. Product landing pages that rank for net present value calculator benefit from a free browser path that matches the paid automation path on the same pure module.
Use it when the question is whether a known cash-flow list beats a known hurdle after subtracting the outlay, and layer richer capital-budgeting analytics in your own service when you need them.
What you can do with it
Classroom and exam checks
Verify textbook project NPV for a given outlay, year-by-year cash flows, and hurdle rate, including the accept or reject decision and the zero-rate identity.
Capital-budgeting model updates
Recompute NPV when a discount-rate assumption or a single period cash flow changes so investment memos use a consistent present-value score.
Product and onboarding widgets
Show founders and students the project NPV, profitability index, and accept or reject call next to the outlay and cash-flow list on calculator pages.
FAQ
Are cash flows timed at the beginning or the end of each period?
The initial outlay is the time-zero cash spent and is not discounted.
What if the discount rate is zero?
There is no time value, so each future cash flow is left undiscounted. The solver uses that identity instead of dividing by a zero rate.
Does this calculator find IRR or payback?
No. It applies a single supplied discount rate to a known cash-flow list. Solving for the internal rate of return or counting payback periods is a different question and a different search intent.
Can a cash flow be negative?
Yes. Enter receipts as positive numbers, later costs as negative ones, and zeros are allowed too. That is how a mid-life overhaul or a final cleanup cost goes into the same list as the income.
How do I enter the initial outlay and the rate?
Enter the outlay as a positive amount: 10,000 means you invest 10,000 today. The rate is the percentage per period, 10 for 10%, and it must be greater than minus 100%.
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/npv \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"initial_outlay":10000,"cash_flows":[3000,4200,6800],"rate_percent":10}'const res = await fetch("https://api.kit.forhosting.com/finance/npv", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"initial_outlay": 10000,
"cash_flows": [
3000,
4200,
6800
],
"rate_percent": 10
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/finance/npv",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"initial_outlay": 10000,
"cash_flows": [
3000,
4200,
6800
],
"rate_percent": 10
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/finance/npv", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"initial_outlay":10000,"cash_flows":[3000,4200,6800],"rate_percent":10}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"initial_outlay":10000,"cash_flows":[3000,4200,6800],"rate_percent":10}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/finance/npv", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"initial_outlay": 10000,
"cash_flows": [
3000,
4200,
6800
],
"rate_percent": 10
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "finance.npv",
"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.
Limits
max_items | 360 |
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
Input contract, formula, and response fields
Optionally set decimals to an integer from zero to eight for currency-style rounding of money outputs; the default is two. Money-like fields use half-up rounding once from the raw floating-point results so goldens stay byte-stable across runtimes. Example: outlay ten thousand, cash flows three thousand then four thousand two hundred then six thousand eight hundred, and a ten percent rate yield a positive NPV near one thousand three hundred seven and an accept decision. POST a JSON body with three required fields. initial_outlay is the time-zero cash invested, entered as a finite number strictly greater than zero (ten thousand means an outlay of ten thousand, not a signed negative). cash_flows is a non-empty list of one to three hundred sixty finite numbers in chronological order: the first value is the end of period one, the second the end of period two, and so on; inflows are positive, additional investments or costs are negative, and zeros are allowed. rate_percent is the discount rate per period expressed as a percent rather than a decimal fraction (ten means ten percent per period, not zero point one) and must be greater than negative one hundred so that one plus r stays positive. The engine forms r as rate_percent over one hundred, then for each period t computes CF_t divided by (one plus r) to the t, or CF_t itself when r is zero. present_value_of_cash_flows is the sum of those discounted amounts; npv is that sum minus initial_outlay; profitability_index is the present-value sum divided by the outlay. The response also echoes initial_outlay (rounded), rate_percent, periods, rate_decimal, the original cash_flows list, discounted_cash_flows, decision (accept, reject, or indifferent from the rounded NPV), and a short formula string. Missing fields, empty strings, non-finite values, a non-positive outlay, an empty or overlong cash-flow list, a rate at or below negative one hundred, and out-of-range decimals fail with invalid_input and are not billed.
Where a net present value calculator earns its keep
Product, real-estate, and FP&A templates often recompute NPV when a discount-rate assumption or a single year’s cash flow changes mid-model; a tiny parse API avoids reinventing the discount loop in every spreadsheet. Sweep rate_percent from your own code to show how NPV falls as the hurdle rises; pin npv and decision in tests; keep requests small. This tool does not produce internal rate of return, modified IRR, discounted payback, or a yield curve with a different rate each year—only the classical single-rate present value of a project.
Technical questions
How is net present value calculated?
With a periodic rate r = rate_percent/100: npv = −initial_outlay + the sum of each cash flow CF_t divided by (1+r) to the power t. When the rate is zero, npv = sum of cash_flows − initial_outlay. The API also returns each discounted cash flow, the present value of the stream, the profitability index, and an accept, reject, or indifferent decision.
What does the net present value calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.