Ga naar hoofdinhoud

Beancount Setup voor Startups

Een praktische, copy-pasteable basis om startup boeken in plain text te runnen. Werkt voor pre-seed tot Series A. Dit is geen juridisch of fiscaal advies.


beancount-setup-for-startups

Een startup runnen betekent veel hoeden dragen, en een van de belangrijkste is "boekhouder". Voordat je je dure software of een fulltime accountant kunt veroorloven, heb je een systeem nodig dat nauwkeurig en controleerbaar is, en je niet opsluit in een propriëtair ecosysteem. Betreed Beancount: een open-source, plain-text boekhoudsysteem.

Het gebruik van Beancount betekent dat je financiële grootboek in tekstbestanden staat, direct naast je code in een Git repository. Het is versiebeheerd, transparant en oneindig aanpasbaar. Deze handleiding biedt een complete, copy-pasteable setup om de boeken van je startup te runnen vanaf de oprichting tot je Series A, gebouwd op solide, accrual-based accounting principes.

1) Wat je gaat instellen

Deze handleiding leidt je door het maken van een complete, professionele accounting setup. Aan het einde heb je:

  • Een single-source-of-truth grootboek beheerd in Git (main.beancount), waardoor je een complete, controleerbare geschiedenis van de financiën van je bedrijf hebt.
  • Fava voor prachtige rapporten en grafieken. Fava is een webinterface voor Beancount die je tekstbestanden omzet in interactieve winst- en verliesrekeningen, balansen en cashflowanalyses.
  • Een structuur voor importeurs die je later kunt toevoegen om de transactie-invoer van je bank-, creditcard-, PayPal- en Stripe-accounts te automatiseren. We beginnen handmatig om het systeem te leren kennen, en automatiseren later.
  • Een accrual-ready rekeningstelsel ontworpen voor moderne startups, met ingebouwde ondersteuning voor uitgestelde inkomsten, vooruitbetaalde kosten en loonbelastingverplichtingen.
  • Primitieven voor seed financiering, inclusief duidelijke voorbeelden voor het vastleggen van SAFE notes (als schuld of eigen vermogen) en converteerbare obligaties met rente.

2) Project structuur (drop in je repo)

Begin met het creëren van deze directory structuur binnen de Git repository van je bedrijf. Deze organisatie houdt je grootboek schoon en schaalbaar.

/ledger
main.beancount
/includes
accounts.beancount
opening-balances.beancount
policies.beancount
/documents
/bank
/invoices
/receipts
/importers # optional; add when you automate CSV ingestion
bank_importer.py
card_importer.py
  • main.beancount: Het centrale bestand dat alles samenbrengt.
  • /includes: Bevat je rekeningstelsel, beginbalansen en accounting policies.
  • /documents: Een plek om PDF's van bankafschriften, facturen en ontvangstbewijzen op te slaan voor een schoon audit trail.
  • /importers: Waar je toekomstige Python scripts voor het parseren van bank CSV's zullen staan.

3) Minimale, gezonde main.beancount

Dit is het entry point voor je grootboek. Het stelt een paar globale opties in en include de andere component bestanden. Kopieer deze content naar ledger/main.beancount en customize de titel.

option "title" "Acme, Inc. Grootboek"
option "operating_currency" "USD"
option "documents" "ledger/documents"

include "includes/accounts.beancount"
include "includes/opening-balances.beancount"
include "includes/policies.beancount"

; If you later add importers, you’ll add plugin lines here.
; plugin "beancount.plugins.implicit_prices"

4) Starter rekeningstelsel (accrual‑first)

Je rekeningstelsel is de complete lijst van categorieën voor de financiële transacties van je bedrijf. Deze starter template is gebouwd voor accrual accounting, wat een veel nauwkeuriger beeld geeft van de gezondheid van je bedrijf dan cash-based accounting.

Plaats dit in includes/accounts.beancount. Voel je vrij om accounts te verwijderen die je niet direct nodig hebt.

; --- Activa ---
1970-01-01 open Assets:Bank:Checking USD
1970-01-01 open Assets:Bank:Savings USD
1970-01-01 open Assets:AR USD ; Accounts Receivable
1970-01-01 open Assets:Prepaid:Software USD
1970-01-01 open Assets:Prepaid:Insurance USD
1970-01-01 open Assets:Deposits USD ; Security deposits
1970-01-01 open Assets:Equipment USD
1970-01-01 open Assets:Intangibles USD
1970-01-01 open Assets:Crypto:BTC BTC
1970-01-01 open Assets:Other

; --- Passiva ---
1970-01-01 open Liabilities:AP USD ; Accounts Payable
1970-01-01 open Liabilities:CreditCard:Corporate USD
1970-01-01 open Liabilities:DeferredRevenue USD
1970-01-01 open Liabilities:Payroll:Withholding USD
1970-01-01 open Liabilities:Payroll:EmployerTaxes USD
1970-01-01 open Liabilities:SalesTax:CA USD
1970-01-01 open Liabilities:SAFE USD
1970-01-01 open Liabilities:NotesPayable USD
1970-01-01 open Liabilities:Other

; --- Eigen Vermogen ---
1970-01-01 open Equity:CommonStock USD
1970-01-01 open Equity:APIC USD ; Additional Paid-in Capital
1970-01-01 open Equity:SAFE USD ; If you classify SAFEs as equity
1970-01-01 open Equity:RetainedEarnings USD
1970-01-01 open Equity:OpeningBalances USD

; --- Inkomsten (negatieve saldi) ---
1970-01-01 open Income:Revenue:SaaS USD
1970-01-01 open Income:Revenue:Services USD
1970-01-01 open Income:Other USD

; --- Kosten ---
1970-01-01 open Expenses:COGS USD
1970-01-01 open Expenses:Payroll:Wages USD
1970-01-01 open Expenses:Payroll:EmployerTaxes USD
1970-01-01 open Expenses:Benefits USD
1970-01-01 open Expenses:Contractors USD
1970-01-01 open Expenses:Software:Subscriptions USD
1970-01-01 open Expenses:Cloud USD
1970-01-01 open Expenses:Rent USD
1970-01-01 open Expenses:Meals USD
1970-01-01 open Expenses:Travel USD
1970-01-01 open Expenses:Marketing USD
1970-01-01 open Expenses:Legal USD
1970-01-01 open Expenses:Accounting USD
1970-01-01 open Expenses:Insurance USD
1970-01-01 open Expenses:BankFees USD
1970-01-01 open Expenses:Taxes:Income USD
1970-01-01 open Expenses:Taxes:Sales USD
1970-01-01 open Expenses:Other USD

Notities

  • Inkomstenrekeningen zijn negatief omdat ze credits vertegenwoordigen in double-entry accounting. Maak je hier geen zorgen over; Fava draait automatisch de tekens in rapporten om, zodat je omzet als een positief getal op de winst- en verliesrekening verschijnt.
  • Houd smalle, doelgerichte categorieën om mee te beginnen. Het is veel gemakkelijker om later nieuwe accounts toe te voegen dan om een rommelige, overdreven gedetailleerde rekeningstelsel op te schonen.

5) Openingsbalansen (eerste dag)

De eerste transactie in je grootboek zet de toon. Het registreert de initiële staat van je accounts op de dag dat je begint met tracken. Plaats deze transactie in includes/opening-balances.beancount, en pas de datum en bedragen aan om je daadwerkelijke startpositie weer te geven.

2025-01-01 * "Openingsbalansen"
Assets:Bank:Checking 5.000,00 USD
Liabilities:CreditCard:Corporate -500,00 USD
Equity:OpeningBalances -4.500,00 USD

Deze entry stelt vast dat het bedrijf is begonnen met $ 5.000 op de bank en een saldo van $ 500 op zijn creditcard. De Equity:OpeningBalances account is een speciale account die wordt gebruikt om ervoor te zorgen dat de transactie naar nul balanceert, zoals vereist door double-entry accounting.


6) Common startup transacties (copy‑paste)

Hier zijn recepten voor de meest voorkomende financiële events in een early-stage startup. Kopieer, plak en pas ze aan voor eigen gebruik.

Oprichtingsaandelen aankoop (simpel, currency‑only)

Wanneer oprichters hun initiële aandelen kopen tegen nominale waarde, komt het geld het bedrijf binnen en wordt het vastgelegd als eigen vermogen. Je cap table (Carta, Pulley, of een spreadsheet) is de source of truth voor het aantal aandelen; het grootboek boekt alleen de dollars.

2025-01-05 * "Oprichtingsaandelen aankoop @ par"
Assets:Bank:Checking 800,00 USD
Equity:CommonStock -0,80 USD
Equity:APIC -799,20 USD
; 8.000.000 common @ $0.0001 — counts maintained off-ledger

(Optioneel) Track je eigen aandelen als een commodity

Als je het grootboek het aantal uitgegeven aandelen wilt laten tracken, kun je je aandelen definiëren als een "commodity". Dit is complexer, maar biedt een completere in-ledger registratie.

2025-01-05 commodity ACME
name: "Acme, Inc. Common"

2025-01-05 * "Oprichtingsaandelen uitgifte"
Assets:Bank:Checking 800,00 USD
Equity:APIC -799,20 USD
Equity:CommonStock -8.000.000 ACME {0.0001 USD}

SAFE cash in (kies classificatie)

Een SAFE (Simple Agreement for Future Equity) kan worden behandeld als een schuld of een vorm van eigen vermogen (specifiek "mezzanine equity"). Overleg met je accountant om de juiste aanpak te kiezen en consistent te zijn.

; (A) Equity classificatie (mezzanine)
2025-02-01 * "Post-money SAFE — SeedFund"
Assets:Bank:Checking 500.000,00 USD
Equity:SAFE -500.000,00 USD

; (B) Liability classificatie (tot conversie)
2025-02-01 * "Post-money SAFE — SeedFund"
Assets:Bank:Checking 500.000,00 USD
Liabilities:SAFE -500.000,00 USD

Wanneer een geprijsde ronde sluit, herclassificeer je het SAFE saldo naar Preferred Stock en Additional Paid-in Capital op basis van de sluitingsdocumenten.

Converteerbare obligatie met opgebouwde rente

In tegenstelling tot een SAFE is een converteerbare obligatie ondubbelzinnig een schuld die rente ophoopt. Je registreert de initiële cash en boekt vervolgens periodiek de rentekosten (bijvoorbeeld per kwartaal).

2025-03-01 * "Converteerbare obligatie — 6% jaarlijks"
Assets:Bank:Checking 250.000,00 USD
Liabilities:NotesPayable -250.000,00 USD

2025-06-30 * "Rente opbouw obligatie Q2"
Expenses:Interest 3.750,00 USD
Liabilities:NotesPayable -3.750,00 USD
; 250.000 * 6% * 0.25 = 3.750

Jaarlijkse SaaS verkoop (deferred revenue + maandelijkse erkenning)

Dit is een hoeksteen van accrual accounting. Wanneer een klant vooraf betaalt voor een jaar, verdien je niet al die omzet in één keer. Je boekt het op een schuld (DeferredRevenue) en herkent vervolgens 1/12e ervan elke maand.

2025-03-10 * "Jaarlijks abonnement — AcmeCo — INV-001"
Assets:AR 1.200,00 USD
Liabilities:DeferredRevenue -1.200,00 USD
narration: "SaaS annual prepay"

2025-03-20 * "Betaling INV-001"
Assets:Bank:Checking 1.200,00 USD
Assets:AR -1.200,00 USD

; Herken maand 1/12 (herhaal maandelijks of script het)
2025-04-01 * "Revenue recognition 1/12 — INV-001"
Liabilities:DeferredRevenue 100,00 USD
Income:Revenue:SaaS -100,00 USD

Prepaid expense en amortisatie

Dit is het omgekeerde van deferred revenue. Wanneer je vooruit betaalt voor een dienst (zoals jaarlijkse software of verzekering), registreer je het als een activa (Prepaid) en "amortiseer" of expense je een deel ervan elke maand.

2025-03-01 * "Jaarlijkse software prepaid"
Assets:Prepaid:Software 1.200,00 USD
Assets:Bank:Checking -1.200,00 USD

2025-04-01 * "Amortise prepay 1/12"
Expenses:Software:Subscriptions 100,00 USD
Assets:Prepaid:Software -100,00 USD

Payroll (netto cash, met inhoudingen + werkgeverslasten)

Een payroll entry heeft verschillende onderdelen: de bruto loonkosten, de belastingkosten van de werkgever, de netto cash die aan werknemers wordt betaald en de schuld voor belastingen die je hebt ingehouden en die aan de overheid moeten worden afgedragen.

2025-04-15 * "Payroll — 15 apr"
Expenses:Payroll:Wages 15.000,00 USD
Expenses:Payroll:EmployerTaxes 1.200,00 USD
Liabilities:Payroll:Withholding -4.000,00 USD
Assets:Bank:Checking -12.200,00 USD

Omzetbelasting inning en afdracht (voorbeeld CA)

Wanneer je omzetbelasting int, is het niet jouw geld. Het is een schuld die je aan de staat verschuldigd bent. Je registreert de schuld wanneer je de verkoop doet en vereffent het wanneer je de belasting afdraagt.

2025-05-10 * "Factuur #123 — CA taxable"
Assets:AR 1.088,75 USD
Income:Revenue:SaaS -999,00 USD
Liabilities:SalesTax:CA -89,75 USD

2025-06-05 * "Betaling #123"
Assets:Bank:Checking 1.088,75 USD
Assets:AR -1.088,75 USD

2025-07-20 * "Afdracht CA omzetbelasting Q2"
Liabilities:SalesTax:CA 89,75 USD
Assets:Bank:Checking -89,75 USD

FX en crypto (lightweight)

Beancount behandelt meerdere valuta native. Gebruik price directives om wisselkoersen te registreren en de {} cost syntax voor specifieke transacties.

2025-03-01 price EUR 1,0832 USD

2025-03-02 * "AWS EU charge"
Expenses:Cloud 90,00 EUR
Liabilities:CreditCard:Corporate -90,00 EUR

2025-03-05 * "Koop BTC voor testen"
Assets:Crypto:BTC 0,0200 BTC {3400,00 USD}
Assets:Bank:Checking -3.400,00 USD

7) Fava gebruiken (rapporten in één commando)

Fava is de briljante webinterface die Beancount data tot leven brengt. Het is de beloning voor je zorgvuldige data entry.

  • Installeren: $ pip install fava
  • Runnen: $ fava ledger/main.beancount
  • Handige views: Winst- en verliesrekening, Balans, Journaal (voor filteren op account/tag) en Query (voor custom SQL-achtige queries).

Snelle Fava filters:

  • account:DeferredRevenue: Toon alle activiteit in je deferred revenue account.
  • tag:#invoice-001: Tag transacties gerelateerd aan een specifieke factuur en filter erop.
  • from:2025-01-01 to:2025-12-31: Focus op een specifieke financiële periode.

8) Maandelijkse afsluit checklist (15–45 min)

Aan het einde van elke maand doorloop je deze checklist om ervoor te zorgen dat je boeken nauwkeurig en up-to-date zijn. Deze discipline maakt belastingtijd en investor diligence een eitje.

  • Bank/creditcards: Importeer of voer handmatig alle transacties in. Stem de saldi af met je afschriften.
  • AR/AP: Boek alle uitgegeven facturen en ontvangen rekeningen; markeer betaalde items als vereffend.
  • Omzet: Boek de maandelijkse revenue recognition entries voor alle prepaid contracten.
  • Prepaids: Amortiseer 1/12e (of de juiste fractie) van alle prepaid expenses.
  • Payroll: Boek de journaalpost van het rapport van je payroll provider.
  • Omzetbelasting: Boek je omzetbelastingsschuld voor de maand.
  • Seed instrumenten: Bouw rente op op converteerbare obligaties.
  • Sanity checks:
    • Komt de omzet van je winst- en verliesrekening ongeveer overeen met je verwachte MRR/ARR?
    • Sluiten je burn rate en runway aan op je financieel plan?
    • Voert $ bean-check uit zonder errors? Zien Fava's rapporten er correct uit?
  • Commit to Git met een bondige, consistente notitie (bijv. close: 2025-04).

9) Metadata & documenten (maak audits gemakkelijk)

Je grootboek moet self-documenting zijn. Gebruik metadata en link naar bron documenten om een bulletproof audit trail te creëren. Toekomstige jij (en je accountant) zullen je dankbaar zijn.

  • Voeg metadata toe zoals payee:, narration:, invoice:, customer:, of link: aan transacties voor duidelijkheid.
  • Voeg bron PDF's (facturen, ontvangstbewijzen, bankafschriften) toe aan je ledger/documents/ folder en link ze met behulp van de document: metadata tag.
  • Gebruik tags (#payroll, #saas, #vendor-aws, #invoice-001) voor eenvoudig filteren en analyseren.

Voorbeeld:

2025-03-10 * "Jaarlijks abonnement — AcmeCo" #saas #invoice-001
payee: "AcmeCo"
invoice: "INV-001"
document: "documents/invoices/INV-001.pdf"
Assets:AR 1.200,00 USD
Liabilities:DeferredRevenue -1.200,00 USD

10) Importeer later (wanneer je tijd hebt)

Begin met het handmatig invoeren van transacties voor de eerste maand of twee. Dit is de beste manier om het systeem en je eigen uitgavenpatronen te leren kennen. Zodra je comfortabel bent, kun je eenvoudige Python importeurs schrijven om het proces te automatiseren en de moeite te verminderen.

Een typische importer order of battle:

  1. Bank CSV → Assets:Bank:Checking
  2. Creditcard CSV → Liabilities:CreditCard:Corporate
  3. Stripe/PayPal Payout rapporten → Revenue en cash mapping

Bewaar je importeurs in /ledger/importers en beoordeel hun gegenereerde transacties zoals je elke andere code change zou doen.


11) Policies (plaats in includes/policies.beancount)

Dit bestand is waar je je accounting beslissingen documenteert voor consistentie. Het is een simpel tekstbestand, maar het is cruciaal voor het handhaven van discipline.

  • Accrual basis; herken SaaS omzet pro-rata.
  • Functionele valuta is USD; registreer FX tegen de dagelijkse koers of transactiekoers.
  • Kapitalisatie drempel (bijvoorbeeld items boven $ 2.500 worden een Assets:Equipment item; anders worden ze direct geëxpenseerd).
  • Travel/Meals: Zakelijk doel moet worden gedocumenteerd in het narration veld.
  • Equity recording: Geef expliciet aan of je de currency-only of share-commodity methode gebruikt.
  • SAFEs/notes: Documenteer je gekozen classificatie (Liability of Equity).

Voorbeeld policies.beancount:

; Policy: Accrual basis, omzet uitgesteld en maandelijks herkend.
; Policy: USD functionele valuta. FX winsten/verliezen zijn afgeleid van cost/price data.
; Policy: Kapitaliseer materiële activa boven $ 2.500 met een 3-jarige lineaire afschrijving.
; Policy: SAFEs worden geregistreerd als schulden tot conversie in een geprijsde ronde.

12) Snelle troubleshooting

  • Omzet ziet er negatief uit in het journaal: Dit is correct! Income is een credit. Fava rapporten zullen het weergeven als een positief nummer.
  • Saldi niet naar nul: Je hebt waarschijnlijk een incomplete transactie. De postings van een transactie moeten optellen tot nul. Gebruik Fava's Journal view om de boosdoener te vinden. Als tijdelijke maatregel kun je een balancerende leg toevoegen aan een Equity:Suspense account om het bestand valide te maken, en vervolgens de oorzaak onderzoeken en verhelpen.
  • FX mismatches: Zorg ervoor dat je price directives hebt voor de relevante datums of dat je de cost basis specificeert in je operationele valuta, zoals 90,00 EUR {97,49 USD}.

Beancount is voor je financiële transacties, maar sommige dingen kunnen beter worden beheerd in dedicated systemen. De sleutel is om ernaar te linken vanuit je grootboek.

  • Cap Table: Gebruik Carta, Pulley of een spreadsheet. Link naar de ondertekende sluitingsdocumenten van je financieringstransacties in Beancount.
  • Board Consents, Equity Plan, 409A Rapporten: Bewaar deze op een veilige locatie en voeg link: metadata toe aan relevante equity transacties.
  • Belastingaangiften: Bewaar de definitieve PDF's en link ernaar vanuit een jaarafsluitingstransactie.

Copy‑ready starter bestand (all‑in‑one)

Als je liever begint met een enkel bestand voordat je uitbreidt naar de include structuur, kun je eenvoudig de inhoud van de bestanden uit de bovenstaande secties in één grote main.beancount plakken. Je kunt het later altijd refactoren naarmate je grootboek groeit.

Dit framework biedt een solide, schaalbare basis voor de financiën van je startup. Door je boeken in plain text onder versiebeheer te houden, krijg je ongeëvenaarde transparantie en controle, waardoor je bedrijf vanaf dag één klaar is voor financiële discipline.