Data model

Companies are global, portfolio companies are fund-specific, and custom fields let every team model what they need on top.

Two ideas carry most of the data model: the split between a company and a position in it, and custom fields for everything a particular team needs to track.

Companies vs. portfolio companies

A company is a global entity in your workspace. It exists once, no matter how many of your funds have invested in it, and most of its data is shared:

  • Name, legal name, domain, description, logo
  • Country, city, founding date, segment
  • Cap table, funding rounds and share classes
  • Contacts, investor updates, board notes, files
  • KPIs and financials

A portfolio company is one fund's investment in that company – the company–fund pair. It holds everything specific to that position:

  • Invested capital, acquisition cost, proceeds
  • Shares acquired, owned and exited
  • Fair market value, valuation method, investment status
  • Ownership percentage, IRR, MOIC
  • Investment manager, deputy and board representation for that fund

So a company held by two of your funds appears once as a company and twice as a portfolio company. The reported ARR is the same number in both places – it's a property of the business. The MOIC is not, because the funds bought at different prices.

This is the distinction that matters most when working with the API: company_id identifies the business, portfolio_company_id identifies one fund's position in it. Reach for portfolio companies for anything about performance, and companies for anything about the business itself.

Sharing at the company level is what makes context compound. An investor update sent once is visible to every fund holding the company; a board deck extracted once produces KPIs everyone sees. Nobody files the same document twice.

Several funds in the same company

This is what makes multi-fund structures manageable. Update a valuation once and every fund holding the company picks it up – correctly, against its own cost basis and share count. There's no reconciliation step and no way for two funds to end up carrying the same company at different values by accident.

It holds for the structures that usually break portfolio spreadsheets: several vehicles co-investing in the same set of companies, sub-funds investing pro rata alongside a main fund, or a continuation vehicle holding part of an existing position. Each is a separate portfolio company over one shared company record.

Custom fields

Firms track different things, and different teams within a firm track different things again. Rather than guess, Fundra lets you add custom fields to the records you work with, so the investment team, finance, legal and marketing can each model what they need without asking for a feature.

Fields are managed in Settings → Fields. They can be added on companies, portfolio companies, funds, people and other core records, and they behave like built-in fields – filterable, groupable in views, available in reports and templates, and readable through the API.

Available field types:

TypeUse for
textShort free text
richtextFormatted notes with headings, lists and links
numberPlain numbers
currencyAn amount plus its currency, converted where needed
percentPercentages
dateDates
booleanYes/no toggles
selectOne option from a list
multi_selectSeveral options from a list; new options can be added inline
listAn ordered list of free-text items
userOne or more people in your workspace
relationA link to another record
locationA country
imageA logo or picture

Typical uses look like this – legal tracking board seat rights and information rights, finance tracking audit classifications and valuation policy notes, investment teams tracking thesis, conviction or sourcing channel, marketing tracking whether a company has agreed to be named publicly.

Fields defined as currency carry their currency with the value rather than assuming one, so they aggregate correctly in mixed-currency portfolios. Prefer currency over number for any money amount.

Roles and access

Fundra is meant to be used by the whole firm, which only works if people see what's relevant to them and not what isn't. Access is role-based:

RoleFor
AdminWorkspace owners – full access, plus settings, users, fields and templates
Investment teamDeal and portfolio work – companies, updates, board material, KPIs, performance
Finance teamThe ledger – transactions, valuations, capital accounts, fees, carry, LP reporting
Legal teamTerms and documents – agreements, side letters, cap table detail
Fund adminExternal fund administrators – the numbers they need to do the books, and nothing more
ViewerRead-only access

There is no per-user charge, so there's no reason to ration seats. Invite the whole firm and let roles decide what each person sees – that's the setup the product is designed around.

Fund admin is the role worth understanding. External administrators need the ledger to produce accounts and LP statements, but they have no business reading a founder's confidential update or a board deck. So the role is explicitly walled off from files, investor updates, contacts and audit history, and cannot modify companies, fundraisings or report submissions. They see the numbers, not the story behind them.

Why this matters for data accuracy

Roles aren't only about confidentiality – they're how the data stays right. Finance owns the ledger, so transactions and valuations have a single accountable owner rather than five people editing the same figures. Everyone else reads those numbers rather than maintaining a parallel copy in a spreadsheet, which is where portfolio data normally goes wrong.

Collaboration happens on top of that shared record instead of around it. Comments attach to the company, valuation or report they're about, so the question "why did we write this down?" is answered in the place you'd look for it. With the Slack integration, those conversations reach the people who live in Slack and their replies come back to the record – so the investment team can raise something without editing the ledger, and finance can resolve it without leaving an audit gap.

On this page