Purchase trouble? store.hemrock.com

Fund/SPV Reporting

Self-hosted reporting platform for venture capital funds and SPVs. Portfolio monitoring at the core, with deal screening, diligence, fund accounting, and an LP portal you can switch on as you need them. Deploy on your own infrastructure with your own AI keys.

Overview

The platform processes investor updates through email forwarding. Forward emails in any format, PDF, Excel, PowerPoint, plain text, and AI identifies the company, extracts metrics, and builds portfolio dashboards. Track and report investment performance metrics at company, fund, and portfolio levels.

That is the core, and it works on its own. Around it sit the other workflows a fund runs: screening inbound deals, drafting diligence memos, tracking LP capital, keeping a double-entry ledger, and giving LPs a portal to log into. LP capital tracking, the LP portal, LP documents, and fund accounting are independent switches, each off by default, so you can track LP capital from pasted statements with no accounting behind it, keep full books only for the vehicles you run yourself, or land anywhere in between.

Try the demo with sample data, no signup required.

Guides

This page is the overview. Each area has a deeper walkthrough:

Core features

Email forwarding and AI extraction

Give founders an inbound address. The system processes everything automatically, AI identifies companies and pulls metrics like MRR, burn rate, headcount, and any custom KPIs you configure. A review queue flags uncertain extractions before data is saved.

Portfolio dashboard

Real-time view of all active companies with headline metrics, sparkline charts, and badges for stage, industry, and portfolio group. Filter by portfolio group and sort by name, cash position, or other criteria.

Company detail

Each company has AI Analyst summaries, metric tracking with historical charts, investment transaction records, document storage, and team notes. The AI acts as a senior analyst, it highlights current performance, trends, strengths, risks, and follow-up questions.

Investment tracking

Fund-level view of all investment transactions with MOIC, IRR, and LP-specific return metrics (TVPI, DPI, RVPI, Net IRR). Portfolio group summaries show aggregate invested capital, realized and unrealized values, and performance metrics.

Fund cash flows

Track commitments, called capital, and distributions per portfolio group. Configurable carry rate and GP commit percentage. Computed LP return metrics including TVPI, DPI, RVPI, and Net IRR using XIRR.

LP letter generation

AI-generated quarterly LP update letters using your portfolio data, reported metrics, company summaries, investment performance, and team notes. Upload a previous letter and AI matches your writing style. Export as .docx or to Google Drive.

LP capital tracking

The LPs page is a live aggregate: every LP across every vehicle, rolled up to the investor, as of any date, with commitment, paid-in, distributions, NAV, DPI, TVPI, and IRR. It reads live from the underlying data, whether that data is pasted positions or a ledger, so it is never stale. Expand an investor to see their per-vehicle lines. A member who invests through your GP or associate entity is looked through to their share of what that entity holds.

For a vehicle you don't keep books on, you feed it by pasting a statement covering commitments, called and paid-in, distributions, and NAV, and AI maps the columns into a dated position. You can also type figures in or edit them by hand. Every import is stamped with its as-of date, so the set of dates is the history, and the capital account as of any date is the latest position on or before it. Roll-forward movements are derived by diffing consecutive dates, so what's stored is exactly what you were given and there's nothing to drift. When a vehicle is on the ledger instead, the same page shows the same accounts, sourced from the books.

LP reporting and snapshots

Print investor report cards, the per-investor summary aggregated across vehicles, straight from the live data, one at a time or the whole list at once. Or freeze a snapshot: a point-in-time set of positions kept exactly as it was, in an admin-only archive, with its own bulk PDF printing and Excel export. Snapshots no longer drive the numbers, since that's live now, but they remain the record for anything you've already sent. Every report footnotes when its data was last updated per vehicle, because vehicles report on irregular cadences.

The snapshot archive keeps the original tools: create a named snapshot, paste-import into it, edit inline, group investors under a parent, merge duplicates, filter portfolio groups, configure a header and footer, and batch-print or export to Excel.

LP portal

An optional private, fund-branded login where LPs view and download their capital account statements, quarterly letters, and fund documents, each as a web page or a PDF. Send any item by email to one LP, several, or the whole list, as a secure portal link, a PDF attachment, or both. Authorized users such as advisors and accountants are included automatically. An AI analyst answers LP questions using only that LP's own materials.

Fund accounting

Optional double-entry books for each vehicle you run: a fund, an SPV, a direct deal, or a GP entity. Turn it on for one vehicle or none, and the rest of the platform works exactly as before. A ledgered vehicle feeds the same LP capital accounts and reports as a tracked one, with more detail behind the lines because there was a close.

Onboarding. Seed the chart of accounts, then start the books either from full history, rebuilding the ledger from inception out of your existing portfolio and LP data, or from a cutover date with opening balances. GP and associate entities get their own chart, covering investment in fund, members' capital, and carried interest income, because they keep different books.

Bank transactions. Paste or upload a CSV or TSV export from your bank, Ramp, or QuickBooks. Columns are matched automatically, rows are de-duplicated, and each becomes a balanced draft entry for review. AI categorization suggests the account and entry type for a whole batch at once. An inflow can be booked as a capital call, funding an LP's open call or splitting across every LP pro-rata by commitment, and an outflow as a distribution, split by capital balance so it lands in each partner's capital account. Nothing posts itself.

Journal. Every entry in plain double-entry form, with create, edit, post, unpost, and void. A posted entry is never silently deleted, and an entry inside a closed period cannot be changed until the period is reopened, enforced in the database rather than only in the app.

Capital accounts. A per-partner roll-forward covering beginning capital, contributions, distributions, fees, expenses, income, realized and unrealized gains, FX translation, carried interest, and ending capital, derived entirely from the ledger so it always ties. Issue capital calls, recognized at the call with the receivable cleared when the wire arrives, track called, funded, and unfunded per LP, and publish per-partner capital account statements as PDFs straight to the LP portal.

Allocation terms. How the close splits each category across partners: the allocation basis, each partner's commitment over time (effective-dated, including transfers between LPs), and who bears which category, such as a GP entity that pays no management fee or a side letter with a negotiated rate. Carry terms are set per vehicle: none, a straight split, or a European waterfall with a preferred return and catch-up.

Period close. The single place allocation happens. Close through a date and the span is split into calendar months, each allocated and locked in turn, so gaps are impossible. The close allocates income and expenses to each partner's capital account, accrues interest on convertible notes, and accrues carried interest on unrealized gains as if the fund liquidated at that period's NAV, which is what keeps every LP's reported NAV net of what the GP would actually take. Reopening a period reverses its allocation exactly, voiding rather than deleting, and periods reopen newest-first.

Statements. A schedule of investments showing each position at cost and fair value with its unrealized gain and share of net assets, broken out by country, industry, and asset type, with the ledger as the control total and any variance surfaced rather than hidden. Full financial statements follow: balance sheet, income statement, cash flows, and changes in partners' capital. Out-of-balance books are reported as a blocker.

AI assistant. Scoped to the accounting section, it reads the books, interprets a statement, reconciles an account, and drafts an entry. It proposes and never posts. Everything it produces lands as a draft for review. An API-key-authenticated agent endpoint (REST and MCP) lets an external agent work against your books.

Deals

The inbound side of deal flow. Cold pitches, partner-forwarded intros, and scout submissions arrive at your existing inbound address and get screened against your thesis before they reach a partner's inbox.

Every inbound email runs through a content-aware classifier that picks one of four destinations: reporting (portfolio metrics, the existing pipeline), interactions (CRM-style email from fund members), deals (a company pitching the fund), or other (newsletters, recruiter spam, vendor pitches). Sender identity is a strong signal rather than a hard rule, so a partner forwarding a cold pitch lands in Deals where it belongs, and a portfolio founder pitching a side project routes correctly. Below a configurable confidence threshold, items go to a review queue with the top two predicted destinations for one-click resolution. Anything labelled "other" goes to an email audit log instead of being silently dropped.

For each pitch, a single AI call extracts company name, founder, intro source (referral, cold, warm intro, accelerator, demo day), referrer where applicable, stage, industry, raise size, a summary of 100 to 150 words, and a thesis-fit analysis scored strong, moderate, weak, or out of thesis. Out-of-thesis pitches auto-archive and surface in a weekly digest, so partners can sanity-check without eyeballing every cold pitch. Founders can also submit directly through a public form at a per-fund URL, with no signup, file upload support, a honeypot, and rate limiting.

The Deals page lists active pitches as a sortable table or a kanban board, with drag-and-drop across new, reviewing, advancing, met, and passed. Click a pitch for the summary, thesis-fit analysis, source email, attachments, founders, intro source, and a deal-scoped Analyst chat that knows both the pitch and your thesis. Settings covers the investment thesis, screening prompt, public submission token, confidence threshold, an optional routing-model override, a known-referrers list whose intros bias toward Deals, the email audit log, and a routing accuracy dashboard that reports manual reroutes per week as a drift signal.

Diligence

The pre-investment workflow. When a deal is worth real time, create a diligence record, upload the data room, and run an agent that ingests the documents, conducts external research, asks partner Q&A, drafts a structured memo, scores it against your rubric, and renders to Word or Google Docs.

The agent is operated by seven YAML and Markdown configuration files, called schemas, that partners edit per fund through an in-app editor: instructions (the operating manual), rubric (scoring dimensions), qa_library (the partner Q&A pool), data_room_ingestion (per-document extraction rules), research_dossier (external research scope), memo_output (memo structure), and style_anchors (metadata for uploaded reference memos). The editor is plain text with inline YAML validation and version history, and rolling back to a prior version takes one click. Each fund seeds defaults on first use and customizes from there.

Style anchors are reference memos that teach the agent your firm's voice. Upload three to eight prior memos, tag each with vintage, sector, voice representativeness, and partner notes, and the agent matches structure and tone while drafting. A confidence indicator (unavailable, preliminary, reliable, robust) reflects how many you've uploaded. Reference memos teach voice only. They never supply facts to a new memo.

The agent runs in stages, each producing structured output stored on a memo draft. Ingest classifies each document, extracts claims with provenance, and runs a gap analysis against expected document types. Research verifies or contradicts company-stated claims, builds a competitive map separating competitors named by the company from those identified by research, compiles founder dossiers, and lists research gaps. Q&A pulls batches from the library, applies skip logic against what ingestion and research already established, and captures partner answers. Draft assembles paragraphs per the memo_output schema with paragraph-level source citations.

The recommendation and team scoring are partner-only and can never be set by the agent. That's enforced by a database constraint, not a prompt.

Compliance calendar

Regulatory calendar tailored to your fund's registration status and structure. Covers SEC filings, tax deadlines, state compliance, AML/FinCEN, and internal compliance requirements. Auto-determines applicability based on a short fund questionnaire.

Review queue

Low-confidence extractions and new company detections are flagged for human decision-making before data is committed. The system errs on the side of flagging rather than silently writing bad data.

Import

Upload files directly (PDFs, Excel, Word, PowerPoint, CSV, images) or paste data covering multiple companies simultaneously. Bulk import historical data or onboard an entire portfolio in one step. Investment transactions and fund cash flows can also be pasted in freeform format.

Asks

Send reporting request emails to portfolio companies. Track what was sent and when. Replies flow into the inbound pipeline automatically.

AI Analyst

Interactive chat available on every page, company detail, portfolio dashboard, investments, asks, and notes. Persistent conversations with memory across sessions. Company chats have access to reported metrics, documents, investment data, and team notes. Portfolio chats have access to fund-level data across all companies.

CRM and interactions

BCC the fund's inbound address on conversations and the system classifies them as CRM interactions. AI generates summaries and detects introductions between parties.

Notes

Team members can post observations on individual companies or at the fund level. Supports @mentions and follow notifications. Notes are fed into the AI Analyst as context.

Storage integrations

Optional Google Drive or Dropbox integration for automatic document filing into company-specific folders.

Tech stack

  • Frontend: Next.js 14 with TypeScript, Tailwind CSS, Radix UI (shadcn/ui)
  • Backend: PostgreSQL via Supabase with Row Level Security
  • AI: Anthropic Claude, OpenAI, Google Gemini, OpenRouter, or local Ollama
  • Email: Postmark or Mailgun for inbound; Resend, Postmark, Mailgun, or Gmail for outbound
  • Charts: Recharts for metric visualization

Quick start

  1. Clone the repo, git clone https://github.com/tdavidson/reporting.git && npm install
  2. Create a Supabase project, Copy your project URL, anon key, and service role key
  3. Generate an encryption key, openssl rand -hex 32
  4. Deploy to Netlify or Vercel, One-click deploy buttons available
  5. Configure auth, Set Supabase redirect URLs and whitelist your email
  6. Add an AI key, Anthropic, OpenAI, Gemini, or run your LLM locally
  7. Forward your first email, Set up inbound email processing

Deploy with Supabase (free tier: 500MB database, 1GB storage), an AI provider, hosting on Netlify or Vercel (free tiers available), and inbound email via Postmark or Mailgun (free tiers available).

Security

  • Two-factor authentication (TOTP)
  • AES-256-GCM envelope encryption for stored secrets
  • Email whitelist for signup restrictions
  • Rate limiting on authentication and AI endpoints
  • Row Level Security on all database tables

Customization

You shape the platform to your fund at two levels. Settings cover the no-code layer: adjust colors, labels, and styling so the app reads as your firm rather than a generic tool, and configure the metrics, thesis, diligence schemas, and workflows that drive how it behaves.

Beyond settings, the whole codebase is yours. Because it is open source under Apache 2.0, you can install it and change any part of the app, the interface, the workflows, and the functionality, to fit how your fund actually runs. Nothing is locked behind a plan or a vendor. It is built to be edited: the same idea behind the financial model templates, applied to software. Start from a working structure and change it with your AI instead of building from a blank repo.

License

Open source under the Apache License 2.0. Free to use, modify, and deploy for any purpose, including commercial use across multiple clients (fund administrators, outsourced CFOs, and consultants included). See the full license on GitHub.

For setup and support, or the early-access hosted subscription: contact Taylor.