Financials
The numbers the board actually cares about — managed as first-class data, not slides that rot in an email thread.
Why not just attach a spreadsheet?
You can. But the problem with "board financials as a monthly attachment" is that nobody can answer "what did we report last quarter?" without excavating an email. BoardHerald stores financials as structured time-series data: each KPI has a history, each update preserves the values shown at that point, and every viewer sees the same numbers. You still export to Excel / PDF when you need to — but the source of truth lives inside BoardHerald.
Where KPIs live
Admins manage KPIs at /admin/kpis — card grid with current value, delta, sparkline, target status, and a forecast projection. Click a card for the full detail page where you record period values, restate, define time-varying targets, and wire integrations.
Members see KPIs on /financials, above the list of financial reports. The grid uses the same cards minus the admin actions. Access rides the FINANCE access group — a board member who doesn't hold FINANCE doesn't see /financials at all, so they never learn a KPI exists. Grant FINANCE (and optionally INVESTOR for INVESTOR_ONLY KPIs) via /admin/users.
KPIs
A KPI is a named metric with a unit and a reporting cadence. BoardHerald ships with sensible defaults — MRR, ARR, Runway, Cash burn, Headcount, NPS — and you add your own as you need. Each KPI:
- Has a display unit (currency, percentage, count, duration-in-months).
- Has one or more targets — time-varying goals with a start and end date. A KPI can hold different targets for 2026 vs 2027, or a single open-ended target that applies forever. The card surfaces an on-track / at-risk / off-track badge against whichever target covers the latest period.
- Has a cadence — monthly, quarterly, or custom. The cadence drives the x-axis of the time series and tells you when a period is overdue.
- Has a visibility setting — per-role gating (see below).
Periods + history
You enter values period-by-period. A period is typically a month or a quarter. Each entry is timestamped, signed by the entering admin, and audit-logged. Five paths land a period value in BoardHerald — manual entry in the admin UI, a CSV import, a webhook, the MCP kpis_record_period tool, and the built-in Stripe connector. See Agents → Sync KPIs for copy-paste examples of all five.
Made a mistake? Open the period, restate the value, add a note explaining why. The restated value replaces the current displayed number, but the original value is preserved in the period's history and annotated — so your board can't accuse you of quiet revision.
Visibility rules
Not every number goes to every board member. Financials get their own visibility layer on top of the base role permission (see Platform → Permissions for how the three layers — role, scope, visibility — compose). Common patterns:
- Full-board KPIs — MRR, runway, headcount. Everyone sees them.
- Investor-only KPIs — metrics you want the investor audience on the board to see but not the rest (ownership percentages, option pool remaining, fundraise-round size). Visible to members who hold the INVESTOR access group.
- Leadership-only KPIs — individual compensation breakdowns, runway projections in multiple scenarios. Visible only to ADMINs plus specific allow-listed members.
Visibility is enforced server-side — a member who shouldn't see a KPI doesn't just have it hidden in their UI; the API never returns it to them. Same for agents: a key with financials:read respects the same visibility rules as the human who issued it.
The update-and-financials pattern
Most tenants reference "key numbers this month" in every board update. Instead of typing the value by hand (which drifts from the authoritative source the moment you restate), drop a KPI block into the update body directly.
In the update editor, press the 📊 KPI button, pick the KPI from the modal, and it inlines as a live pill showing the current value plus a 6-period sparkline. Readers see the same pill, fetched fresh through a visibility-gated endpoint — so a KPI they can't see shows up as an opaque "restricted" token, not as the value.
If you later restate a period, every published update that referenced it gains a restated badge. Hover the badge to see the previous value, the new value, and the note you wrote when restating. Admins who read the update can click the pill to jump straight to the KPI's detail page.
Exports
Exports live in the upcoming Proof-of-Governance Pack — a tenant-wide download that bundles governance stats + KPI history (CSV per KPI) + per-resolution PDFs + the audit log for a chosen period. Shippable as a signed ZIP, anonymisable for data-room sharing. Tracked as a separate feature on the roadmap.
Accessibility
KPI narrative text renders through the same accessibility stack as updates — dyslexia-friendly fonts, adjustable size, Listen button. Numbers are announced with their units by screen readers ("forty-two thousand euros per month", not "42K").
Agent access
financials:read gives an agent access to every KPI the issuing human can see (the same visibility rules apply). financials:write unlocks entering and restating values — useful for the "agent imports monthly numbers from Stripe / QuickBooks into BoardHerald on cron" pattern.
When an agent calls updates_get, the response now includes an embeddedKpis array — one entry per KPI referenced inline in the update body, carrying name, unit, current value, publish-time value, the restated flag, and the latest restatement note when drift is detected. Invisible KPIs are omitted entirely, so the agent never learns about a reference it can't resolve. See Agents → Capabilities for the full tool catalogue.