# NPV
URL: https://docs.valsight.ai/npv/
Description: Calculates the net present value of an investment from a discount rate and a series of cash flows (payments and income).
**Category:** [Finance functions](/finance-functions/)

## Overview

The **NPV** function **calculates the net present value of an investment** by using a discount rate and a series of future payments and income.

Use this function when the discount rate is known and you want to calculate the net present value of a cash flow series.

## Syntax

`NPV('Rate', 'Cashflow' [, "Level"])`

## Parameters

| Parameter    | Description                                                                                                                                                         | Type           | Required |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- | -------- |
| **Rate**     | The rate of the discount over the time of the period.                                                                                                               | Node reference | Yes      |
| **Cashflow** | Series of payments or income. Negative values represent outgoing payments and positive values represent incoming payments.                                          | Node reference | Yes      |
| **Level**    | The period of time or a sequence over which the calculation is going to be made. If the level is not provided, the lowest time level from `'Cashflow'` is selected. | Level name     | No       |

## Watch out

* `'Cashflow'` is the leading input node. Its levels define the result's shape, except the dimension of the discounting `"Level"`, which is aggregated away.
* Rate values are percentages and must be entered and returned as decimals, for example `10% = 0.1`.
* If a `"Level"` is entered, it should be a level of the `'Cashflow'` node. It should also be the lowest level in the dimension that is found in `'Cashflow'`.
* The levels from the `'Rate'` input node need to be available in the `'Cashflow'` input node.
* Any level that is in the same dimension as the selected `"Level"` from the `'Cashflow'` node cannot be available in the `'Rate'` input node. That also counts for all linked levels in this dimension.
* The `'Cashflow'` data cannot have missing values.

## Example

### Discount cash flows by region

This example shows how a rate node and a cashflow node are combined to calculate net present value by region.
The result is aggregated over the year level.

**Input node:** `'Cashflow'`

| Year | Region | Value |
| ---- | ------ | ----- |
| 2025 | Asia   | +500  |
| 2026 | Asia   | -100  |
| 2027 | Asia   | +200  |
| 2025 | Europe | -100  |
| 2026 | Europe | +400  |
| 2027 | Europe | +500  |

**Input node:** `'Rate'`

| Region | Value |
| ------ | ----- |
| Asia   | 0.05  |
| Europe | 0.1   |

**Formula:** `NPV('Rate', 'Cashflow')`

**Equivalent to:** `NPV('Rate', 'Cashflow', "Year")`

| Region | NPV Result |
| ------ | ---------- |
| Asia   | 558.26     |
| Europe | 615.33     |

## Related

| Function     | When to use instead                                                                                    |
| ------------ | ------------------------------------------------------------------------------------------------------ |
| [PV](/pv/)   | When you want the present value of an annuity-style payment stream with structured parameters instead. |
| [IRR](/irr/) | When you want the implied discount rate at which `NPV = 0` instead of the discounted value itself.     |
