Investment ledger
Positions are built from shares and share prices, every figure above that is calculated, and statuses are derived rather than set by hand.
The ledger is the part of Fundra that has to be right. Everything else – reporting, analytics, LP communication – reads from it, so an error here propagates everywhere.
Built on shares, not summaries
A position isn't a row you fill in. It's derived from the transactions underneath it: shares acquired, the price paid for them, follow-ons, splits, convertible conversions, secondaries, write-downs and exits. Ownership, valuation and returns are all computed from that base.
This is why Fundra won't let you type in a pre-money valuation. Pre-money is among the most frequently wrong numbers in venture – wrong in term sheets, wrong in closing documents, wrong in the spreadsheets that get passed around afterwards. Entering it by hand means inheriting whoever's arithmetic error. Fundra derives it from share price and share count, which are the figures the documents actually get right.
The same rule applies everywhere: anything derivable is derived. You record what happened; Fundra computes what it means.
The payoff shows up in the awkward cases. A 10:1 share split, a bridge that converts at a discount, a partial secondary – these are where hand-maintained portfolio spreadsheets quietly go wrong. Fundra tracks the split multiplier and share lineage, so a measure like multiple on original share price stays correct across all of them. The model behind it was built against thousands of real transactions.
Core figures
Every amount below is in fund currency unless the field says otherwise, and each carries the currency it's denominated in.
Cost
| Figure | Meaning |
|---|---|
invested_capital | Total capital invested into the company |
original_invested_capital | The part invested in the first round |
followon_invested_capital | The part invested in later rounds |
total_transaction_costs | Transaction and investment costs |
total_acquisition_cost | invested_capital + transaction costs – the full cost of the position |
fund_divestment | Acquisition cost that has left the fund through exits |
remaining_acquisition_cost | total_acquisition_cost − fund_divestment – cost still held |
Value
| Figure | Meaning |
|---|---|
fmv | Fair market value of the holding, in fund currency |
fmv_local | The same value before FX conversion, with fmv_local_currency |
fx_rate, fx_date | The rate used and the date it was taken from |
company_valuation | Enterprise value of the company |
valuation_method | How the FMV was determined |
total_proceeds | Everything received back – exits, dividends, interest |
Ownership
| Figure | Meaning |
|---|---|
shares_acquired | All shares ever bought |
shares_owned | Shares held now |
shares_exited | Shares sold |
options_held | Options currently held |
shareholding_fd | Ownership, fully diluted |
shareholding_nfd | Ownership, not fully diluted |
shareholding_original_fd | Fully diluted ownership at first investment |
Performance
| Figure | Meaning |
|---|---|
moic | Multiple on invested capital: (fmv + total_proceeds) / total_acquisition_cost |
moosp | Multiple on original share price – current share price against the first price paid, adjusted for splits |
irr | Money-weighted return (XIRR) over the position's cashflows |
profit_loss | Total gain or loss on the position |
unrealized_gain_loss | Gain or loss on the remaining holding |
holding_period | Months held |
moic and irr are computed for you and returned on every portfolio company. Use them rather than recomputing, so your numbers match what the app and your LP reports show. The formula above is for when you need MOIC across an arbitrary grouping the API doesn't provide.
Why moosp matters. MOIC tells you what the money did. Multiple on original share price tells you what the share did – stripped of follow-on averaging and corrected for splits. A position where you invested at €1.00 per share and the latest round prices at €4.00 is a 4.0x on original share price, even if heavy follow-on investment at €3.50 has pulled MOIC down to 1.4x. Both are true; they answer different questions. When a valuation is written to zero but the position produced proceeds, Fundra falls back to the average exit share price so the multiple reflects the actual outcome rather than showing 0x.
Investment status
Status is derived from the ledger, never set by hand – so it can't drift out of line with the transactions.
| Status | When it applies |
|---|---|
new | Committed but nothing invested yet – no capital and no shares acquired |
active | Capital invested or shares held, not exited and not written off |
partially_exited | Some shares sold with proceeds received, while shares are still held |
exited | All shares sold, or the full acquisition cost divested |
inactive | Written off but still on the books – shares or capital remain, valuation is zero or the method is write-off |
A holding valued at zero with no proceeds is treated as a write-off. If it's exited on top of that, it's an exit that returned nothing – which is why exited and a zero return are distinguishable in reporting rather than collapsed together.
investment_phase is separate: it records the round the fund first invested in (Seed, Series A, and so on), not the current state of the position.
Cap tables in any format
Cap tables arrive as whatever the company happens to keep them in – an Excel model, a PDF from counsel, a screenshot in a WhatsApp message. Fundra reads all of them. Upload the file and it extracts the shareholder table directly, no reformatting required.
What comes out is structured rather than a transcription:
- Shareholders with shares owned (fully diluted), options and warrants.
- Related entities grouped –
Creandum IV (X) ABandCreandum VI (Y) ABbecome oneCreandumline, which is what you actually want in an ownership chart. - Types assigned: founder, fund, angel investor, individual, option pool – aligned with Invest Europe reporting categories for co-investor breakdowns.
- ESOP consolidated across options, VSOP and warrants, including jurisdiction-specific instruments.
- Summary rows, subtotals and option-only holders are excluded rather than double-counted.
It's checked against your ledger. The extracted shares outstanding is validated against what the ledger expects at that event, and the import fails loudly if the two disagree – usually meaning the wrong file, or the wrong date. A cap table that doesn't reconcile doesn't get saved silently. Documents with multiple tables or several levels of ownership are handled by picking the table that contains the full shareholder list.
Capital accounts and carry, calculated independently
Fundra computes LP capital accounts, allocations, management fees and carry from your fund terms – hurdles, preferred return, catch-up and loss carryforward – rather than importing what someone else calculated. Allocations use exact decimal arithmetic with a defined remainder policy, so they sum to the cent.
Running your own numbers alongside your fund administrator's is what makes discrepancies visible. In practice this surfaces a handful of differences per quarter – miscalculated carry, misallocated drawdowns – most of which turn out to be on the administrator's side. Finding them takes a comparison rather than a re-audit.
Funds of funds
Portfolio entries have a type of either company or fund. Fund entries carry fund_metrics instead of company-level figures, so fund-of-fund positions sit in the same ledger and roll up alongside direct investments.