# How the public APIs calculate.

Understand the calculation before interpreting the result. These methods explain what is measured, which population it describes, and where the available evidence ends.

Updated: 2026-11-10
Documentation edition: 2026-11-10.1
Portfolio model: 2026-10-15.3
Calculator model: 2026-11-10.3

[HTML](https://investboard.com/calculators/api/methodology) · [API documentation](https://investboard.com/calculators/api)

**Observed:** Provider reference data, reported revenue segments and historical prices, with available dates.

**Calculated:** Deterministic summaries of your submitted portfolio and the available reference data.

**Modeled:** Explicit assumptions for fee projections, crisis proxies and hypothetical historical portfolios.

## Inputs, units and precision

Supply the complete portfolio you want analyzed. Securities use ISINs; cash specifies assetClass: cash and its currency. Repeated ISINs are pooled, and cash in the same currency is pooled. Shared identifier mappings, listing profiles and security classifications are checked for identity conflicts; a conflicting identity is not guessed from its ticker or name.

For basis: values, supply market values already converted to baseCurrency. Snapshot analysis fetches neither valuation prices nor FX to convert your inputs. For basis: weights, use positive fractions summing to one (tolerance 0.000001); accepted weights are normalized to their actual sum. Snapshot and stress monetary results are null for weights. Replay instead uses its explicitly supplied hypothetical investment amounts.

Portfolio weights, coverage, returns, fees and weight deltas use fractions: 0.6 means 60%, 0.002 means 0.2%, and a weight delta of 0.05 means five percentage points. The separate financial calculator API uses percentage-point inputs, such as 6 for 6%; read each calculator's contract for output units.

Exposure calculations use a common internal scale to reduce cent-rounding distortion, then convert monetary outputs back to caller units. Monetary boundary helpers round to two decimals; individual engines also apply their documented rounding. Rounded totals may differ slightly from the sum of displayed rows. The internal scale is never an investment amount or a market observation.

**Worked example · illustrative inputs**

Illustration: with baseCurrency EUR, USD cash with value 1,000 means EUR 1,000 worth of USD cash, not USD 1,000.

## Read the denominator first

Allocation and held currencies refer to the whole submitted portfolio. Equity classification buckets, look-through holdings, industry/theme weights and revenue geography are expressed as whole-portfolio shares of their resolved equity population. portfolioShare identifies how much of the portfolio that population occupies; coverage describes how much of the stated population is classified or measured.

Concentration issuer weights use the equity portfolio, aggregated by issuer. Pairwise overlap uses constituent weights inside each fund. weightedTer uses only funds with known TER. These denominators differ, so the numbers cannot be added or substituted for one another.

Bond, cash, gold and crypto funds stay whole. Equity country, sector and industry dimensions exclude off-axis direct holdings and fund legs. Unresolved inputs retain their place in the portfolio denominator and may contain further equities. A resolved population is not proof that the rest of the portfolio has no equity exposure.

Glossary: [Asset Allocation](https://investboard.com/knowledge/glossary/asset-allocation), [ETF look-through](https://investboard.com/knowledge/glossary#look-through), [TER (Total Expense Ratio)](https://investboard.com/knowledge/glossary/ter)

## Coverage, unknowns and withheld results

Read status and reasons even after HTTP 200. ok means the section has no blocking incompleteness reason; it can still report no_equities or fewer_than_two_funds. partial means useful but incomplete evidence. unavailable means the requested result cannot be established. not_requested marks snapshot sections omitted from that call.

null means unavailable or unmeasured, never zero. Empty lists require their reasons and coverage to be interpreted. Unknown exposure and unresolved fund remainders describe missing evidence; tailWeight describes measured rows omitted by a display limit. Do not treat either as zero or renormalize the visible list to 100%.

Coverage is measure-specific: known asset classes, named issuers, fund constituents, industry labels, revenue reports and historical series answer different questions. Provider failures can leave partial results. Concentration is withheld below 80% issuer coverage; alternatives require effectively complete comparison evidence; replay requires every submitted leg to be usable. No single coverage threshold applies to all capabilities.

**Worked example · illustrative inputs**

Illustration: a 60% equity population with 75% industry coverage has 45% of the whole portfolio classified by industry. The remaining 15% equity weight is unknown, not spread over known industries.

## Portfolio methods

### Asset allocation (allocation)

Group submitted holdings by their resolved asset class. Unresolved securities remain in an unknown bucket and in the total portfolio value. This is the allocation of the submitted portfolio; the service cannot know about omitted accounts or holdings.

**Calculation**

```text
class weight = sum(values in class) / sum(all submitted values)
```

**Worked example · illustrative inputs**

Illustration: 6,000 in equities, 3,000 in bonds and 1,000 in cash gives weights 0.6, 0.3 and 0.1. An unresolved holding is retained rather than redistributed.

Glossary: [Asset Allocation](https://investboard.com/knowledge/glossary/asset-allocation)

[API contract and example](https://investboard.com/calculators/api#portfolio-allocation)

### ETF overlap (overlap)

For each pair of eligible equity funds, sum the smaller constituent weight for every shared security identity. The result describes the funds themselves, independently of how much of each fund you hold. Pairs below 1% overlap are omitted. Missing constituents can understate measured overlap; an empty pair list does not establish zero overlap when coverage is incomplete.

Constituent coverage and dates accompany the funds. A sharedTail preserves common weight omitted from the displayed shared-holdings list.

**Calculation**

```text
overlap(A, B) = Σ shared securities min(weight in A, weight in B)
```

**Worked example · illustrative inputs**

Illustration: A holds X at 0.4 and Y at 0.6; B holds X at 0.2 and Z at 0.8. Their measured overlap is 0.2 (20%).

Glossary: [ETF look-through](https://investboard.com/knowledge/glossary#look-through)

[API contract and example](https://investboard.com/calculators/api#portfolio-overlap)

### Equity look-through (look-through)

Multiply each fund's portfolio weight by its constituent weights, then merge matching security identities with direct holdings. Provenance separates direct ownership from exposure through each fund. The equity view describes companies; bond, cash, gold and crypto funds are held whole and never dissolved into equity constituents.

Undissolved equity-fund mass is reported as unresolvedFundWeight. Named holdings beyond the requested limit remain in tailWeight. Neither is silently reassigned to the visible companies.

**Calculation**

```text
company exposure = direct portfolio weight + Σ(fund portfolio weight × company share in fund)
```

**Worked example · illustrative inputs**

Illustration: a fund is 60% of the portfolio and holds 5% in X. It contributes 3% portfolio exposure to X; a direct 2% holding brings the combined exposure to 5%.

Glossary: [ETF look-through](https://investboard.com/knowledge/glossary#look-through)

[API contract and example](https://investboard.com/calculators/api#portfolio-look-through)

### Company concentration (concentration)

Aggregate security holdings onto resolved company issuers, including multiple share classes where the identity mapping supports it. Issuer weights use the equity portfolio as their denominator, including unattributed equity mass. They are lower bounds when some of that portfolio cannot be attributed.

Named issuers, HHI and effectiveN are withheld below 80% issuer coverage. Any unresolved submitted holding makes this section unavailable. At 80% or more but incomplete coverage, the section remains partial; missing issuer mass is not renormalized away. No personal concentration limit or suitability verdict is assumed.

**Calculation**

```text
HHI = Σ issuer weights²; effectiveN = 1 / HHI (when HHI > 0)
```

**Worked example · illustrative inputs**

Illustration with full coverage: two issuers at 0.5 each give HHI 0.5 and effectiveN 2. This is an equivalent concentration measure, not a count of independent risk factors.

Glossary: [Concentration risk](https://investboard.com/knowledge/glossary/concentration-risk)

[API contract and example](https://investboard.com/calculators/api#portfolio-concentration)

### Sector diversification (sectors)

Classify the resolved underlying equity population by company sector. Bucket weights refer to the whole submitted portfolio; coverage describes the classified fraction of the equity population. Unknown classifications remain unknown. These are company classifications, not sector revenue estimates or the fund wrapper's own sector.

**Worked example · illustrative inputs**

Illustration: an equity population is 60% of the portfolio and half of that population is classified as technology. Technology contributes 30% of the portfolio, not 50%.

Glossary: [Asset Allocation](https://investboard.com/knowledge/glossary/asset-allocation), [ETF look-through](https://investboard.com/knowledge/glossary#look-through)

[API contract and example](https://investboard.com/calculators/api#portfolio-sectors)

### Countries and regions (geography)

Group resolved underlying equities by company country and the maintained country-to-region mapping. This is company geography, not a fund's domicile, trading venue or the location of its sales. Country and region dimensions retain their own coverage. An unresolved input may contain further equities outside the resolved population.

Glossary: [ETF look-through](https://investboard.com/knowledge/glossary#look-through)

[API contract and example](https://investboard.com/calculators/api#portfolio-geography)

### Currency exposure (currencies)

equityExposure models currency exposure from underlying company countries and recognizes currency hedges from fund names. It is a classification model, not measured exchange-rate sensitivity or a company's revenue-currency breakdown.

heldCurrencies separately groups the resolved listing currencies and caller-stated cash currencies across the submitted portfolio. A different listing currency does not by itself change the underlying company exposure. Named hedged funds are disclosed; the model does not measure the effectiveness of a hedge.

Glossary: [ETF look-through](https://investboard.com/knowledge/glossary#look-through)

[API contract and example](https://investboard.com/calculators/api#portfolio-currencies)

### Ongoing fund costs (costs)

weightedTer is weighted across funds with known ongoing charges, not across the entire portfolio. coveredPortfolioWeight, fundPortfolioWeight and unknownPortfolioWeight expose that distinction. A missing or provider-reported zero TER is unavailable, not a free fund.

knownAnnualCost sums only measured fund charges. It is a subtotal if charges remain unknown and is null for weights-only requests. This excludes brokerage charges, bid–ask spreads, taxes and tracking difference.

**Calculation**

```text
weightedTer = Σ(covered fund value × TER) / Σ(covered fund value)
knownAnnualCost = Σ(covered fund value × TER)
```

**Worked example · illustrative inputs**

Illustration: a 10,000 portfolio has 6,000 in a fund with TER 0.002 and 4,000 cash. weightedTer is 0.002 (0.2%); knownAnnualCost is 12. The whole-portfolio known cost rate would be 0.0012, a different denominator.

Glossary: [TER (Total Expense Ratio)](https://investboard.com/knowledge/glossary/ter), [Tracking Difference](https://investboard.com/knowledge/glossary/tracking-difference)

[API contract and example](https://investboard.com/calculators/api#portfolio-costs)

### Long-term cost drag (cost-drag)

Use explicit caller assumptions for the initial amount, nominal annual return, annual fee and monthly contribution. Divide the annual return and fee by 12; add contributions at each month-end. The fee applies to the entire modeled balance. This nominal monthly convention differs from converting an effective annual return geometrically.

Compare the paths with and without the fee. totalCostDrag includes both fees and lost compounding; averageAnnualCostDrag is that total divided by years, not a yearly invoice. The projection excludes inflation, taxes, trading fees and changing returns. It fetches no market data.

**Calculation**

```text
withoutFee[m+1] = withoutFee[m] × (1 + annualReturn/12) + contribution
withFee[m+1] = withFee[m] × (1 + annualReturn/12 − annualFeeRate/12) + contribution
```

**Worked example · illustrative inputs**

Illustration: initialValue 1,000, annualReturn 0.06, annualFeeRate 0.012 and no contribution gives 1,005 without fees and 1,004 with fees after the first month.

Glossary: [TER (Total Expense Ratio)](https://investboard.com/knowledge/glossary/ter)

[API contract and example](https://investboard.com/calculators/api#portfolio-cost-drag)

### Industries and themes (industries)

Industry labels come from provider classifications and are not a promised GICS industry taxonomy. Maintained industry-interest definitions group those labels; versioned thematic baskets group identified issuers. Equity scope is applied to each direct holding and fund before company identities are merged.

Weights use the whole portfolio denominator. Unknown and omitted industry mass remain separate. Interests and baskets can overlap, so their weights need not sum to one. A measured theme weight is a lower bound with incomplete coverage; null means no measurement, while zero can mean no match in the measured population. Read definitionVersion and registryVersion when comparing results.

Glossary: [ETF look-through](https://investboard.com/knowledge/glossary#look-through), [Concentration risk](https://investboard.com/knowledge/glossary/concentration-risk)

[API contract and example](https://investboard.com/calculators/api#portfolio-industries)

### Revenue geography (revenue-geography)

Examine at most the 25 largest identifiable underlying equity companies, after applying equity scope before identity merging. Verify the company listing, select its latest available observation explicitly marked FY, and normalize geographic revenue segments to standard regions. Invalid or negative segment sets are rejected as a whole.

Weight each company's revenue-region shares by its whole-portfolio exposure. Unexamined companies and missing observations remain unknown rather than being scaled up to full coverage. Broad or unmapped segments remain in other. reportAsOf is the oldest report date used; companies may report for different fiscal years. This measures reported sales geography, not domicile, profit geography or revenue currency.

**Calculation**

```text
region weight = Σ(company portfolio weight × reported share of revenue in region)
```

**Worked example · illustrative inputs**

Illustration: a company is 10% of the portfolio and reports 40% of revenue in Europe. It contributes 4% to the portfolio's modeled European revenue exposure.

Glossary: [ETF look-through](https://investboard.com/knowledge/glossary#look-through)

[API contract and example](https://investboard.com/calculators/api#portfolio-revenue-geography)

### Portfolio comparisons (compare)

Analyze two complete caller-supplied snapshots independently, using the same input basis and base currency. Each metric retains its original population. Request-local reference lookups are shared, but underlying reference tables are not read as one atomic historical snapshot.

A delta is returned only when both corresponding sections are ok and both numbers exist; otherwise it is null. A positive delta means the metric increased, not necessarily that the portfolio improved. These snapshots do not reconstruct transactions or realized performance.

**Calculation**

```text
delta = after − before
```

**Worked example · illustrative inputs**

Illustration: a sector weight moves from 0.20 to 0.25. The delta is 0.05, meaning 5 percentage points, not a 5% relative increase.

Glossary: [Allocation drift](https://investboard.com/knowledge/glossary#allokationsdrift)

[API contract and example](https://investboard.com/calculators/api#portfolio-compare)

### Contribution planning (contribution-plan)

Use a complete value-based portfolio and caller-selected asset-class targets. Compute positive monetary target shortfalls using portfolio value plus the new contribution. Distribute the budget across these shortfalls with exact-cent largest-remainder rounding. A share below minimumAllocation moves to the classes with the largest shortfalls when that does not take the portfolio further from its targets; otherwise it stays unallocated.

Unallocated money is included as cash in the after allocation. The post-contribution denominator avoids buying past a feasible target. Limited cash makes buy-only partial progress; this does not model fees, taxes or broker constraints. An unresolved asset class makes the plan unavailable. It produces no instrument selections, prices, quantities, sell instructions or orders.

**Calculation**

```text
need[class] = max(target weight × (portfolio value + contribution) − class value, 0)
allocation[class] ≈ contribution × need[class] / Σ positive needs
```

**Worked example · illustrative inputs**

Illustration: a 100,000 portfolio holding 70,000 equities and 30,000 bonds, targeting 60/40, receives 100,000. Allocating 50,000 to each reaches 60/40.

Glossary: [Asset Allocation](https://investboard.com/knowledge/glossary/asset-allocation), [Rebalancing](https://investboard.com/knowledge/glossary/rebalancing), [Allocation drift](https://investboard.com/knowledge/glossary#allokationsdrift)

[API contract and example](https://investboard.com/calculators/api#portfolio-contribution-plan)

### ETF alternatives (etf-alternatives)

Compare an equity fund with up to ten explicit candidate ISINs, or a bounded list from the shared alternatives catalog. This is not an exhaustive market search. Scores require known TER and effectively complete holdings, sector and country coverage (at least 0.999999) for both funds.

Similarity combines constituent overlap with cosine similarity of provider fund sector and country vectors. Those fund vectors differ from the constituent-company classifications used in snapshot sector and geography results. A match requires score ≥ 0.7 and a strictly lower TER. terSaving is the source TER minus candidate TER, not an estimated investor cash saving.

Candidate and source evidence includes constituent dates; a catalog computation date does not date all the evidence. This comparison excludes taxes, spreads, switching fees, tracking difference and suitability.

**Calculation**

```text
score = 0.5 × holdings overlap + 0.25 × sector cosine + 0.25 × country cosine
cosine(a,b) = Σ(aᵢbᵢ) / (√Σaᵢ² × √Σbᵢ²)
```

Glossary: [TER (Total Expense Ratio)](https://investboard.com/knowledge/glossary/ter), [Tracking Difference](https://investboard.com/knowledge/glossary/tracking-difference)

[API contract and example](https://investboard.com/calculators/api#portfolio-etf-alternatives)

### Approximate stress scenarios (stress-scenarios)

Apply the maintained crisis assumptions for 2008, COVID-19, the 2022 rate shock, the euro crisis or the dot-com period. Direct equities use a known sector proxy where available; funds use an asset-class proxy rather than a weighted reconstruction of their sectors. Other supported classes use the registry's class proxies.

Compound the price proxy with the listing/cash currency shock relative to the reporting currency once. EUR and USD reporting are supported. Missing classifications, currency assumptions or class shocks withhold the scenario. Return the episode, sources, methodology and review date with approximate: true.

These are modeled shocks applied to today's supplied mix, not measured historical returns of those holdings, forecasts or recovery estimates. Listing-currency proxies do not measure a company's economic FX sensitivity.

**Calculation**

```text
holding shock = (1 + price proxy shock) × (1 + FX shock) − 1
portfolio shock = Σ(portfolio weight × holding shock)
```

**Worked example · illustrative inputs**

Illustration: a price shock of −20% and FX shock of +10% combine to −12%: 0.8 × 1.1 − 1. Adding the shocks would give a different result.

Glossary: [Asset Allocation](https://investboard.com/knowledge/glossary/asset-allocation)

[API contract and example](https://investboard.com/calculators/api#portfolio-stress-scenarios)

### Historical replay of the current mix (historical-replay)

Start with today's supplied portfolio weights and replay verified listing histories over the requested past window, with an explicit hypothetical initialValue and optional monthly contributions. Use each history's actual quote currency and dated FX to convert to the reporting currency. Total-return and price-only bases are disclosed per leg; price-only histories exclude dividends.

Every holding must have usable history and required FX. Missing, invalid, stale or late-inception legs withhold the whole replay; they are never dropped and renormalized. Price gaps or an end-date lag beyond seven calendar days are refused. The engine aligns usable observed dates and carries observations across shorter gaps; actual start/end dates are returned. Mixed-portfolio cash follows observed security dates; cash-only portfolios use weekdays. Cash earns no interest, but foreign cash changes with FX.

The first monthly contribution arrives on the starting day in addition to initialValue. Later contributions follow monthly anniversaries on available dates. Rebalancing is none, annual or quarterly. Mix return and CAGR describe a separate path without contributions; contribution-path results include endingValue, totalContributed and a money-weighted annualized return where solvable.

CAGR is withheld for runs shorter than one year. Maximum drawdown is a non-positive fraction measuring the worst peak-to-trough decline of the mix path; recoveryDate can be null. This is a current-mix simulation subject to survivorship bias, not actual account performance. It excludes taxes, trading costs and slippage and is not a forecast.

**Calculation**

```text
base-currency price[t] = native price[t] × dated FX[t]
mix return = mix index[end] / mix index[start] − 1
maxDrawdown = min over t (mix index[t] / running peak[t] − 1)
CAGR (elapsed ≥ 365.25 days) = (mix index[end] / mix index[start])^(365.25 / elapsed days) − 1
```

Glossary: [Maximum Drawdown](https://investboard.com/knowledge/glossary/maximum-drawdown), [Rebalancing](https://investboard.com/knowledge/glossary/rebalancing)

[API contract and example](https://investboard.com/calculators/api#portfolio-historical-replay)

## Financial calculator methods

The financial calculator endpoints reuse the same methods as their interactive pages. Their assumptions, sources and limitations are included below from the existing methodology catalog. Rates and year-dependent tax rules follow each calculator's contract; a chosen asOf date does not turn a model into a historical legal rules engine.

### Capital gains tax calculator (Germany) (abgeltungssteuer)

The calculator models German flat tax on private capital income. It shows a computed tax burden and does not replace tax advice.

**Tax base:** Capital income is reduced by the remaining saver's allowance. The flat tax is calculated on the taxable amount.

**Surcharges:** The solidarity surcharge is calculated on the flat tax. Church tax is included depending on federal state and selection.

**Result:** The output shows tax amount, effective rate and net income for the entered example.

**Sources**

- German Income Tax Act sections 20 and 32d for capital income and flat-tax rate.
- German Income Tax Act section 20 paragraph 9 for the saver's allowance.
- Solidarity surcharge law and church-tax logic by federal state.

**Limits**

- Loss pots, foreign withholding tax and broker-specific bookings can differ.
- The calculator models an example, not a full tax return.

[Open calculator](https://investboard.com/calculators/capital-gains-tax) · [API contract and example](https://investboard.com/calculators/api#abgeltungssteuer)

### Net dividend calculator (Germany) (netto-dividende)

The calculator shows what remains from a dividend after German capital income tax. For funds, it applies the selected partial exemption. It shows a computed tax burden and does not replace tax advice.

**Gross to taxable:** For funds, first apply the selected partial exemption; then deduct the remaining saver's allowance from taxable income.

**Tax profile:** Creditable foreign withholding reduces income tax under Section 32d EStG before solidarity surcharge and optional church tax are calculated on the remaining German tax.

**Net dividend:** The calculator shows the tax amount and net payout for the entered dividend.

**Sources**

- German Income Tax Act sections 20 and 32d for capital income and flat tax.
- German Income Tax Act section 20 paragraph 9 for the saver's allowance.
- German Investment Tax Act section 20 for fund partial exemptions.

**Limits**

- Foreign withholding tax, double-tax treaties and broker offsetting are simplified.
- The calculation is an approximation for private German taxpayers.

[Open calculator](https://investboard.com/calculators/net-dividend) · [API contract and example](https://investboard.com/calculators/api#netto-dividende)

### Vorabpauschale calculator 2026 (German advance tax on funds) (vorabpauschale)

The calculator models the German advance lump sum for investment funds and ETFs. It makes visible the logic German brokers typically apply automatically. It shows a computed tax burden and does not replace tax advice.

**Base return:** Fund value at the beginning of the year × base interest rate × 70 %. The base return is capped by the actual increase in value.

**Partial exemption:** Depending on fund type, the taxable amount is reduced by the applicable partial exemption.

**Tax:** After the saver's allowance, flat tax, solidarity surcharge and optional church tax are calculated.

**Sources**

- German Investment Tax Act section 18 for the advance lump sum.
- German Investment Tax Act section 20 for partial exemptions by fund type.
- Federal Ministry of Finance base rate by tax year and Income Tax Act section 20 paragraph 9.

**Limits**

- In-year purchases, broker rounding and foreign accounts can differ.
- The actual debit depends on the broker and settlement-account balance.
- Public API v1 models one holding kept for the full year. Multi-holding and acquisition-month inputs are not supported. steuerjahr selects the supported tax year; asOf is not the tax year.

[Open calculator](https://investboard.com/calculators/vorabpauschale) · [API contract and example](https://investboard.com/calculators/api#vorabpauschale)

Glossary: [Vorabpauschale (deemed fund income)](https://investboard.com/knowledge/glossary/vorabpauschale)

### Accumulating vs. distributing fund calculator (Germany) (thesaurierer-vs-ausschuetter)

The calculator compares accumulating and distributing ETFs as an after-tax model. It shows how return, distribution and tax assumptions work over time.

**Two paths:** Accumulating and distributing ETFs are calculated with the same return, cost and tax assumptions.

**Taxes:** Distributions, advance lump sum, partial exemption and saver's allowance are included in the model.

**Comparison:** The result shows modeled final wealth and tax burden, not the right ETF for an individual.

**Sources**

- German Investment Tax Act section 18 for the advance lump sum and section 20 for partial exemptions.
- German Income Tax Act sections 20, 20 paragraph 9 and 32d for capital income, allowance and tax rate.
- User assumptions for return, distribution rate, costs and duration.

**Limits**

- Market returns, fund domicile, distribution policy and broker rounding can differ.
- The result is a scenario comparison, not a recommendation for an ETF type.

[Open calculator](https://investboard.com/calculators/accumulating-vs-distributing) · [API contract and example](https://investboard.com/calculators/api#thesaurierer-vs-ausschuetter)

### Freistellungsauftrag optimizer (German tax exemption order) (freistellungsauftrag)

The calculator allocates the German saver's allowance across banks and brokers. Its goal is transparency on where allowance is used or left unused. It shows a computed allocation and does not replace tax advice.

**Collect income:** Interest, dividends, advance lump sums and other capital income are reviewed per bank or broker.

**Allocate allowance:** The available saver's allowance is matched against expected or already incurred income.

**Show reserve:** The calculator shows where allowance is used up, tight or likely unused.

**Sources**

- German Income Tax Act section 20 paragraph 9 for the saver's allowance.
- German exemption-order rules for capital income at banks and brokers.
- Broker or bank data entered or connected by the user.

**Limits**

- The calculator does not submit exemption orders to banks.
- Final offsetting, reversals and annual tax statements can differ.

[Open calculator](https://investboard.com/calculators/freistellungsauftrag) · [API contract and example](https://investboard.com/calculators/api#freistellungsauftrag)

### Compound interest calculator (etf-sparplan)

The calculator models the path of a regular savings plan before tax, in the currency you choose. With EUR it can also deduct the German advance lump sum (Vorabpauschale) each year. It shows a computed path, not a forecast, and does not replace tax advice.

**Savings path:** Initial capital and the monthly contribution compound monthly at the assumed return; the contribution optionally rises each year by the chosen increase. The math is the same in every currency; nothing is converted.

**German tax drag (optional, EUR):** With the option on, the advance lump sum is calculated each year (base rate, 70% factor, partial exemption by fund type, saver's allowance) and deducted from the portfolio value. Without it, the result is before tax.

**Result:** The output shows final wealth with and without the German tax drag, contributions, growth and the year-by-year path.

**Three return scenarios:** Historical mode uses horizon-matched 10th, 50th and 90th percentiles of annualized US equity total returns compiled by NYU Stern for 1928–2025. Custom mode lets you enter all three annualized rates. Neither mode predicts future returns. Three smooth paths use constant effective annual returns, converted to monthly rates as (1 + r)^(1/12) − 1. Contributions enter at the beginning of each month. Historical references or your own assumptions are not forecasts.

**Sources**

- NYU Stern / Aswath Damodaran: US equity total returns, 1928–2025 (January 2026). https://pages.stern.nyu.edu/~adamodar/New_Home_Page/datafile/histretSP.html
- German Investment Tax Act section 18 for the advance lump sum and section 20 for partial exemptions (German option).
- German Income Tax Act section 20 paragraph 9 for the saver's allowance; Federal Ministry of Finance base rate by tax year.
- User assumptions for currency, return, contribution, increase and duration.

**Limits**

- The return is a constant assumption; real market returns can differ. Fund costs and inflation are not modeled.
- No sale tax is deducted at the end of the term in any mode; final wealth is calculated before disposal, and outside the German option no tax is deducted at all.

[Open calculator](https://investboard.com/calculators/wealth-growth) · [API contract and example](https://investboard.com/calculators/api#etf-sparplan)

### Emergency fund calculator (notgroschen)

The calculator turns your monthly expenses into an emergency-fund target and shows how long the build-up takes at your savings rate and your interest rate, in the currency you choose.

**Target:** Monthly expenses × the chosen buffer months (3, 6, 9 or 12).

**Savings path:** The existing reserve earns interest monthly at the entered rate and the savings rate is added until the target is reached. With EUR the rate starts at an illustrative value per place to hold the money (instant-access savings 2.5%, money market fund 3.2%, fixed-term deposit ladder 3.5% a year); in other currencies only the rate you enter is used. The math is the same in every currency.

**Orientation:** The calculator also names an illustrative place to hold the money based on the build-up period and shows the target date and interest share.

**Sources**

- The three-to-six-months-of-expenses rule of thumb from consumer guidance.
- The interest rate you enter; the euro example rates are model assumptions, not quotes or live market conditions.

**Limits**

- Interest on the reserve is calculated before tax; tax on interest income is not modeled.
- Nominal view without inflation; actual account rates can differ with the market environment and the provider.
- When the target is unfunded and monthlySavingsCapacity is 0, targetUnreachable is true. monthsToTarget = 0 and targetDate = asOf are sentinel values, not a successful timeline.

[Open calculator](https://investboard.com/calculators/emergency-fund) · [API contract and example](https://investboard.com/calculators/api#notgroschen)

### Home equity calculator (Germany) (eigenkapital)

The calculator determines ancillary purchase costs and the equity requirement for a property purchase, and shows the savings path to the target.

**Ancillary costs:** Property transfer tax by federal state plus a flat 2% notary/land registry and 3.57% agent commission on the purchase price.

**Equity target:** Ancillary costs plus purchase price × the chosen equity ratio (10 to 30%).

**Savings path and installment:** Savings compound monthly at the chosen rate and the savings rate is added; the later monthly installment is shown as a simplified interest illustration.

**Sources**

- Property-transfer-tax rates of the federal states (3.5 to 6.5%).
- GNotKG for notary and land-registry costs; Sections 656c, 656d BGB for the agent-fee split.

**Limits**

- The agent commission is a flat assumption and does not apply to purchases without an agent.
- The installment is an interest illustration without an amortization schedule or a live mortgage rate; real conditions can differ.
- When the target is unfunded and monthlySavingsCapacity is 0, targetUnreachable is true. monthsToTarget = 0 and targetDate = asOf are sentinel values, not a successful timeline.

[Open calculator](https://investboard.com/calculators/home-equity) · [API contract and example](https://investboard.com/calculators/api#eigenkapital)

### Pension gap calculator (rentenluecke)

The calculator compares your expected state pension with the income you want in retirement and translates the gap into a capital target and a monthly savings rate. The pension is either the amount you enter or, for Germany, an estimate from salary via earnings points.

**State pension:** Entered amount: your expected monthly state pension after deductions, used as given. German estimate (EUR): earnings points = gross income ÷ average income (capped by the contribution ceiling), multiplied by the pension value (EUR 42.52, as of July 2026), less a flat deduction of around 11% for health and long-term-care insurance.

**Gap:** Desired income minus the state pension, monthly and per year.

**Capital requirement:** The annual gap is grossed up for tax on withdrawals and capitalized at a 3.5% withdrawal rate. Germany: a flat 18.5% on the whole withdrawal. Elsewhere: your own rate on the whole withdrawal. Existing provision (at its current value) and the savings rate are netted against it. The math is the same in every currency.

**Sources**

- German estimate: statutory pension formula inputs (pension value as of July 2026, average income, contribution ceiling). The earnings-point estimate retains the dated 2025 average income (EUR 50,493) and the 2025 contribution ceiling (EUR 96,600).
- The state pension and the tax rate on investment gains you enter.
- Model flat assumptions for deductions (11%), German withdrawal tax (18.5%) and withdrawal rate (3.5%).

**Limits**

- The German estimate assumes constant income (constant earnings points per year); individual careers can differ. Amounts are not adjusted for inflation.
- Withdrawal tax is a flat proxy, and the own rate applied to the whole withdrawal is cautious; the binding source is your pension statement, in Germany the pension information of the Deutsche Rentenversicherung.

[Open calculator](https://investboard.com/calculators/pension-gap) · [API contract and example](https://investboard.com/calculators/api#rentenluecke)

### Withdrawal plan calculator (entnahmeplan)

The calculator simulates the withdrawal phase year by year. Tax follows the choice of where you are taxed: the German model, with flat tax on withdrawals, the annual advance lump sum and crediting under Section 19 InvStG, or your own rate on investment gains.

**Strategies:** Constant nominal, inflation-adjusted or a percentage of the current portfolio value; the withdrawal is set per strategy each year.

**Gross-up:** Each withdrawal is grossed up so the desired amount remains after tax, assuming a 70% gain share. Germany: crediting of taxed advance lump sums, 30% partial exemption, the remaining saver's allowance, then 26.375%. Elsewhere: your own rate on the gain share, with no advance lump sum, allowance or exemption.

**Path:** The assumed return (and, for Germany, the annual advance lump sum) acts on the remaining capital until it is depleted or 50 years are reached. The math is the same in every currency; German tax requires EUR.

**Sources**

- German model: Investment Tax Act section 18 (advance lump sum), section 19 (crediting) and section 20 (partial exemption).
- German model: Income Tax Act section 20 paragraph 9 and section 32d for the saver's allowance and tax rate.
- Elsewhere: the tax rate on investment gains you enter.
- User assumptions for currency, portfolio value, withdrawal, return, inflation and strategy.

**Limits**

- Constant return and no sequence-of-returns risk; real withdrawal paths can differ.
- A flat 70% gain share, a fixed 30% partial exemption (German model, equity funds) and one own rate on gains are simplifications; individual portfolios can differ.
- The public adapter applies the equity-fund partial exemption to taxable investment gains; it does not model an arbitrary mixture of tax treatments.

[Open calculator](https://investboard.com/calculators/withdrawal-plan) · [API contract and example](https://investboard.com/calculators/api#entnahmeplan)

### Gift tax calculator (Germany) (schenkungsteuer)

The calculator models German gift tax by allowance, tax class and stepped tariff, including the ten-year logic.

**Allowance:** Current and earlier gifts are split equally across donors. Each donor has a separate allowance by kinship (Section 16 ErbStG) and a separate taxable acquisition.

**Tax rate:** Apply Section 19 ErbStG separately per donor, including hardship adjustment. Under Section 14, deduct the current-law tax on earlier gifts, subject to the minimum tax on the new gift alone and the 50% cap on the new gift.

**Optimization:** Optimization mode splits a total amount into allowance-sized tranches on a ten-year rhythm and compares the tax burden with a lump-sum transfer.

**Sources**

- ErbStG Section 14 (earlier gifts and credit), Section 15 (tax classes), Section 16 (allowances), Section 19 (rates and hardship adjustment).
- ErbStG Section 30 for the duty to report gifts.

**Limits**

- The model assumes financial assets, equal gifts from donors with the same relationship, and current-law tax on earlier gifts. A higher actual earlier tax payment is not entered; property/business exemptions and valuations are excluded, so actual tax can differ.
- The calculator does not replace tax advice on concrete transfers.

[Open calculator](https://investboard.com/calculators/gift-tax) · [API contract and example](https://investboard.com/calculators/api#schenkungsteuer)

### Junior depot calculator (Germany) (junior-depot)

The calculator models the full lifecycle of a child's account with an equity-fund ETF: savings phase, annual advance lump sum and sale tax at the target age.

**Savings path:** Lump sum and savings rate (optionally child benefit, EUR 259 per month) compound monthly up to the target age.

**Annual advance lump sum:** Base rate, 70% factor, 30% partial exemption and the child's own saver's allowance (EUR 1,000). With an NV certificate the withholding at source is skipped; the crediting under Section 19 InvStG continues.

**Sale:** At the target age the gain is reduced by advance lump sums already taxed, partial exemption and allowance are applied, and the rest is taxed at 26.375%.

**Sources**

- German Investment Tax Act sections 18, 19 and 20; Income Tax Act section 20 paragraph 9 and section 44a (NV certificate).
- Federal Ministry of Finance base rate by tax year; child benefit of EUR 259 per month (as of 2026).

**Limits**

- Constant return as an assumption; the model is fixed to an equity-fund ETF.
- The basic personal allowance and the favorable-assessment check at sale are deliberately not modeled; the actual tax can differ and is often lower.
- The public adapter uses an equity fund. With useKindergeld enabled, the current modeled child-benefit amount replaces monthlyContribution; the normalized inputs disclose that amount.

[Open calculator](https://investboard.com/calculators/junior-depot) · [API contract and example](https://investboard.com/calculators/api#junior-depot)

### FIRE calculator (fire-rechner)

The calculator determines the FIRE number, the wealth at which a chosen withdrawal rate covers your annual expenses after tax, and models the Regular, Coast and Barista variants. Tax follows the choice of where you are taxed: the German model or your own rate on investment gains.

**Tax uplift:** Each withdrawal assumes a 70% gain share. Germany: the effective rate (26.375%, more with church tax) after the 30% partial exemption on that share. Elsewhere: your own rate on the gain share, with no exemption or allowance; 0 shows the result before tax. Annual expenses are grossed up accordingly.

**FIRE number:** Grossed-up annual expenses divided by the chosen withdrawal rate (3.0, 3.5 or 4.0%). The math is the same in every currency; German tax requires EUR.

**Variants and timeline:** Monthly capital path to the target at the real return (after a fixed 2% inflation); Coast discounts the FIRE number back to today, Barista nets a part-time income against expenses.

**Sources**

- German model: Income Tax Act section 32d for the tax rate; Investment Tax Act section 20 for the partial exemption.
- Elsewhere: the tax rate on investment gains you enter.
- The Trinity study and analyses by Kitces and Pfau as context for withdrawal rates.
- User assumptions for currency, expenses, return, savings rate and withdrawal rate.

**Limits**

- Constant real return (after an assumed 2% inflation), no sequence-of-returns risk, no allowances; all figures in today's purchasing power, real paths can differ.
- The 70% gain share is a flat assumption and one rate on gains simplifies any tax system; the withdrawal rate remains your decision.

[Open calculator](https://investboard.com/calculators/fire) · [API contract and example](https://investboard.com/calculators/api#fire-rechner)

### Investment fee calculator (fondskosten)

The calculator compares two annual cost levels on the same savings path and shows what the higher cost takes from the final value. Costs work the same in every country; the figures are before tax and the math is the same in every currency.

**Net rate:** The annual cost is deducted from the return before costs, and the net annual rate is converted to a monthly rate: (1 + return − cost)^(1/12) − 1.

**Savings path:** Both paths start from the same amount. The balance compounds monthly at its net rate, and the monthly contribution is added at the end of each month for the chosen term.

**Fees and difference:** Fees paid sum the balance times the gap between the monthly rate before costs, (1 + return)^(1/12) − 1, and after costs. The headline is the difference of the two final values; its share is that difference divided by the larger final value.

**Sources**

- Compound-interest arithmetic with monthly compounding of an annual net rate.
- The cost figures you enter, for example the ongoing charges a fund publishes in its key information document.
- User assumptions for currency, starting amount, monthly contribution, term and return before costs.

**Limits**

- Constant return and constant costs over the whole term; real returns and fund costs can differ from year to year.
- Before tax and inflation, without one-off costs such as entry charges or order fees; the result compares two costs, not two funds, and is not a recommendation.

[Open calculator](https://investboard.com/calculators/investment-fees) · [API contract and example](https://investboard.com/calculators/api#fondskosten)

### Loss recovery calculator (verlust-aufholen)

The calculator shows the gain a portfolio needs to return to its value before a fall and, at a return you assume, how many years that takes. The arithmetic is the same in every country and currency, and no historical market data is used.

**Gain needed:** Gain needed = loss ÷ (1 − loss). A 30% fall needs a 42.9% gain; a table lists the gain needed for falls of 10, 20, 30, 40, 50 and 60%.

**Time to recover:** Years = ln(1 ÷ (1 − loss)) ÷ ln(1 + return), shown only for a return above zero. At 7% a year a 30% fall takes about 5.3 years.

**Amounts:** With a portfolio value before the fall: the value after the fall and the amount that has to be regained.

**Sources**

- Percentage arithmetic and compound growth at a constant rate.
- User assumptions for the fall in value, the portfolio value and the return after the fall.

**Limits**

- Constant return from the day after the fall, with no contributions or withdrawals; real recoveries are uneven, and their length can differ widely.
- No historical crash or recovery data, costs, tax or inflation; the years describe an assumption, not a forecast and not a recommendation.

[Open calculator](https://investboard.com/calculators/loss-recovery) · [API contract and example](https://investboard.com/calculators/api#verlust-aufholen)

### Portfolio rebalancing calculator (rebalancing)

The calculator compares current holdings by asset class with target shares and shows the amounts that restore the target, by buying and selling or with new money only. It shows amounts and places no orders; the math is the same in every currency.

**Current and target:** One row per asset class, from the eight an investment policy uses: current value and target share. The target shares add up to 100%; the current share is each value divided by the total.

**Buy and sell:** Change = target share × total − current value; above zero a purchase, below zero a sale. The total to move is the sum of the purchases, which equals the sum of the sales.

**New money only:** Nothing is sold. New total = current total + new money; shortfall = max(0, target share × new total − current value). New money is split in proportion to the shortfalls, and any remainder follows the target shares.

**Sources**

- Proportional allocation arithmetic on the values you enter.
- Your target shares by asset class, for example from an investment policy statement.

**Limits**

- Tax, transaction costs, spreads and unit rounding are not included; selling can realize taxable gains, and the amounts you can trade can differ slightly.
- Works on asset classes, not individual holdings, and takes the target as given; the result is not a recommendation and not a suggested allocation.

[Open calculator](https://investboard.com/calculators/rebalancing) · [API contract and example](https://investboard.com/calculators/api#rebalancing)

### Dividend income calculator (dividenden-einkommen)

The calculator determines the capital whose dividends pay a chosen monthly income after tax at a dividend yield you assume. Tax follows the choice of where you are taxed: the German model or your own rate on dividends.

**Income after tax:** The monthly income after tax × 12 is the annual amount the dividends have to leave after tax.

**Gross-up for tax:** Elsewhere: dividends before tax = income after tax ÷ (1 − own rate), applied to the whole dividend; 0 shows the result before tax. Germany: (income after tax − rate × saver's allowance) ÷ (1 − rate × (1 − partial exemption)), with a 30% partial exemption for equity funds and none for individual shares; no tax while the taxable part stays within the allowance. German tax requires EUR.

**Capital needed:** Capital needed = dividends before tax ÷ dividend yield. The result also shows dividends before tax, tax and dividends after tax, per year and per month.

**Sources**

- German model: Income Tax Act sections 20 and 32d for the flat tax and the saver's allowance; Investment Tax Act section 20 for the partial exemption.
- Elsewhere: the tax rate you enter.
- User assumptions for currency, monthly income after tax and dividend yield.

**Limits**

- Constant yield, with no dividend growth, inflation, costs or price changes; real dividends can be cut or raised, and the income can differ.
- German model: no foreign withholding tax and no Vorabpauschale, with the full saver's allowance assumed to be available; the result is an approximation, not a recommendation.

[Open calculator](https://investboard.com/calculators/dividend-income) · [API contract and example](https://investboard.com/calculators/api#dividenden-einkommen)

## Data sources and observation dates

Portfolio inputs and projection assumptions come from the caller; crisis shock assumptions come from the maintained scenario registry. Shared market reference services supply identifier mappings, listing profiles, fund information and constituents, company classifications, geographic revenue segments, price histories and dated FX. The public adapters reuse Investboard's classification and calculation engines. Current integrations include Financial Modeling Prep and the shared identifier and FX services; the provider's availability and coverage constrain results.

computedAt is the request time. constituentsAsOf records the oldest known constituent date in the relevant result; it does not date every classification. reportAsOf dates the oldest annual revenue observation used. Alternative comparisons disclose fund dates and catalog computation dates separately. Stress sources, episode dates and reviewedAt describe a maintained approximation. Replay discloses requested and actual windows, quote currencies and price/total-return basis per leg.

Reference data can be cached, stale, corrected or incomplete; it is not one synchronized historical snapshot. Dates that are absent remain unknown. A repeat request can change because reference data changed even when modelVersion did not. The submitted portfolio and analysis results are not saved; shared reference data may be cached.

## Versions and methodology changes

2026-11-10 · Historical mode uses horizon-matched 10th, 50th and 90th percentiles of annualized US equity total returns compiled by NYU Stern for 1928–2025. Custom mode lets you enter all three annualized rates. Neither mode predicts future returns. Three smooth paths use constant effective annual returns, converted to monthly rates as (1 + r)^(1/12) − 1. Contributions enter at the beginning of each month. Historical references or your own assumptions are not forecasts.

modelVersion identifies the calculation contract returned by the API. The documentation edition below identifies this explanation separately; editing wording does not imply a model change. Thematic definitions also expose their own registry and definition versions. Retain these versions and available observation dates when comparing outputs.

2026-10-15 · Initial public methodology edition: documents the sixteen portfolio capabilities and incorporates the existing thirteen calculator methods, sources and limitations. This publication changes documentation and discovery links; it does not change calculation behavior.
