← Transparency dashboard

Transparency methodology

How Tahti ry records and publishes its financial data.

Principles

Tahti ry is a Finnish registered nonprofit association (yhdistys, Y-tunnus 3368171-8). All income and expenditure is accounted for and published here monthly after board approval. Data is final once a month is marked “finalized”.

The goal is radical transparency: any member or interested party can verify that the organisation runs at cost, surpluses are returned to artists, and no hidden fees exist.

Revenue categories

REVENUE_SUBSCRIPTION
Monthly membership fees from artist members (Artist and Studio tiers). Recorded at successful Stripe charge.
REVENUE_DISTRIBUTION
Distribution handling fees charged to artists for Revelator/DSP delivery (€3–5 per release). Pass-through cost is recorded separately.
REVENUE_GRANT_INBOUND
Grants received from public or private bodies (e.g. Taiteen edistämiskeskus).
REVENUE_DONATION
Voluntary donations from supporters.

Cost categories

COST_INFRASTRUCTURE
Servers, bandwidth, colocation, domain registrations, TLS certificates, cloud services. Primarily owned hardware in Helsinki.
COST_DISTRIBUTION_PASSTHROUGH
Revelator API cost passed directly through to artists. Net zero for Tahti ry.
COST_OPERATIONS
Payment processing fees (Stripe), subscriptions, software licenses, office materials.
COST_SALARY
Board compensation and any paid professional roles. Published in aggregate, never per-person.
COST_AUDIT
Annual statutory audit and accounting fees. Finnish associations law requires annual audit above certain thresholds.
COST_PROFESSIONAL_SERVICES
Legal advice, translation, ad-hoc consulting.

Disbursements

GRANT_DISBURSEMENT
Annual artist grants paid to member channels. Calculated March 1 for the prior calendar year. Formula: (channel engagement units / total eligible units) × grant pool. A 10% operating reserve is retained before the pool is calculated.
RESERVE_TRANSFER
Movements to or from the operating reserve fund. The reserve target is 3 months of operating costs.

How surplus is calculated

Surplus = total revenue − total costs (including salaries and professional services). Disbursements and reserve transfers are not costs — they are allocations of the surplus. The running surplus shown on the dashboard is revenue minus costs only; it does not yet subtract planned grant disbursements.

Engagement units (grant formula)

Grants are allocated proportionally by engagement units, not passive listener-hours. An engagement unit is a weighted measure that rewards listener commitment:

  • Download of a free track = 1 unit (listener committed enough to download)
  • Fan subscription = engagement_euros × multiplier (fan paid real money)

Passive streaming (HLS playback) does not generate engagement units. This prevents gaming via bots or loop plays. See docs/engagement-and-fansubs.md in the source repository for full formula details.

Data pipeline

  1. Stripe webhooks automatically create REVENUE_SUBSCRIPTION entries.
  2. The treasurer manually enters infrastructure invoices, salary, and other costs via the admin panel. All entries are audit-logged.
  3. On the first of each month a background job aggregates the prior month into a finalized MonthlyRollup row. The treasurer marks it finalized after board review.
  4. All data is immediately available via the public read-only API at /api/v1/transparency/.

Public API

All endpoints return JSON and are CORS-open for third-party use.

  • GET /api/v1/transparency/monthly_rollup?year=YYYY — all finalized month rollups for a given year
  • GET /api/v1/transparency/ytd — current year running totals
  • GET /api/v1/transparency/categories — category descriptions