GmbH Accounting Guide

From Milchbüchlein to Jahresabschluss

How to turn your simple revenue-and-expense tracking into proper double-entry books for your Swiss GmbH — and why it's more complicated than you think.

Swiss GmbH year-end accounting paperwork

The Gap Between Tracking and Accounting

You run a small Swiss GmbH. You've been tracking income and expenses all year in a spreadsheet — the famous Milchbüchlein. Now the year is over and your Treuhänder needs your books. This guide walks through the entire process.

📊

Double-Entry Required

A GmbH cannot use single-entry bookkeeping — it's a hard legal requirement
🏦

Bilanz is Mandatory

You need a full balance sheet, not just a list of income and expenses
🧾

MwSt Must Be Clear

Your VAT status and invoices must be consistent and legally correct

Disclaimer: This guide is educational. It does not replace professional advice from a licensed Swiss Treuhänder or Steuerberater. Swiss accounting and tax law (OR, DBG, StHG, MWSTG) are authoritative sources. When in doubt, ask a professional.

Who This Guide Is For

You run a small Swiss GmbH. Maybe it's a SaaS product, a consulting business, or a freelance operation you incorporated for liability or tax reasons. You've been tracking your income and expenses all year in a spreadsheet — the famous Milchbüchlein — and now the year is over. Your Treuhänder is asking for your books, or you're trying to figure out what you actually need to file.

This guide walks through the entire process of converting that simple cash-in / cash-out tracking into a proper Jahresabschluss (annual financial statements) that satisfies Swiss law. We'll use a realistic, anonymized example of a one-person software GmbH to show how things that look simple on the surface get complicated fast.

What "Double-Entry" Actually Means

In single-entry bookkeeping, you track money in and money out. Done. In double-entry bookkeeping, every transaction touches two accounts — a debit and a credit. This creates an inherent error-checking mechanism: if your Bilanz doesn't balance (Aktiven ≠ Passiven), something is wrong.

For example, when a client pays you CHF 1'000:

Debit:  1020 Bank (Flüssige Mittel)     +1'000
Credit: 3200 Dienstleistungsertrag       +1'000

The bank account goes up (asset increase = debit), and revenue goes up (income increase = credit). Both sides of the transaction are recorded.

This is what you need to get to from your Milchbüchlein. Let's look at what you're starting with.

The Milchbüchlein: Where You're Starting

A typical Milchbüchlein for a small GmbH looks something like this — a spreadsheet with three tabs:

Summary Tab:

CHF
Einnahmen
App Store Revenue7'400
Advertising Revenue890
Consulting (Intercompany)20'700
Direct Clients5'100
Total Revenue34'090
Ausgaben
Marketing(4'130)
Meals & Travel(4'530)
Software & Licenses(860)
Education(1'880)
Freelancers(620)
Hardware(380)
Other(3'100)
Total Expenses(15'500)
Gewinn18'590

Plus an Invoice Tab (all outgoing invoices with number, client, amount, dates, payment method) and an Expense Tab (all expenses with description, amount, date, category, payment method).

This is perfectly fine for tracking your cash flow. The problem? It's not a Jahresabschluss. It's not even close.

Gap 3: Accrual vs. Cash Basis — A Closer Look

The Milchbüchlein records things when cash moves. But proper accounting uses the accrual principle (Periodenabgrenzung): revenue is recognized when earned, expenses when incurred — not when paid.

In our example, three invoices from November and December 2024 weren't paid until February and March 2025:

InvoiceClientAmountInvoice DatePayment Date
#1App Store88231.12.202404.02.2025
#6Ad Network12418.11.202413.03.2025
#6Payment Processor24105.11.202413.03.2025

These are Debitoren (accounts receivable) — they belong in 2024's revenue and on the 31.12.2024 balance sheet as assets, even though the cash didn't arrive until 2025.

Gap 7: The Missing Anhang

The Anhang (notes) is the most overlooked part. Even for a small GmbH, you need to disclose:

  • Accounting principles used
  • Stammkapital and ownership
  • Any related-party transactions
  • Any contingent liabilities
  • Events after the balance sheet date

Building the Erfolgsrechnung (Income Statement)

The Erfolgsrechnung maps your revenue and expenses into the structure required by OR Art. 959b. For a small company, a simplified structure is sufficient.

Revenue Side (Betriebsertrag)

Your Milchbüchlein lumps all income together. The Erfolgsrechnung breaks it into sources:

BETRIEBSERTRAG

  3200  Dienstleistungsertrag Inland
        - App Store Revenue (Apple)             7'423
        - Payment Processor (Stripe)            3'234
        - Ad Network Revenue (Google)             891
        - Direct Client A                       4'525
        - Direct Client B                       4'945
        - Direct Client C                         300
        - Direct Client D                          14

  3210  Dienstleistungsertrag (Intercompany)
        - Related Company Ltd                  20'710
                                              --------
  Total Betriebsertrag                         42'042

Key decisions:

  • Revenue from a related company should ideally be shown separately or at least disclosed
  • If you're not MwSt-registered, these are gross = net amounts
  • Revenue is booked on the invoice date, not the payment date

Expense Side (Betriebsaufwand)

Map your Milchbüchlein categories to the Swiss Kontenrahmen KMU:

Milchbüchlein CategoryKontenrahmen AccountAmount
Marketing3800 Werbeaufwand(4'131)
Meals & Travel6700 Reise- und Repräsentationsaufwand(4'532)
Education5820 Weiterbildungskosten(1'882)
Software6500 Informatikaufwand(863)
Freelancers4000 Aufwand für Drittleistungen(616)
Hardware6510 Informatikaufwand(378)
Transportation6200 Fahrzeugaufwand(143)
Customer Gifts3890 Werbegeschenke(62)
Legal6530 Rechts- und Beratungskosten(60)
Uncategorized???(1'606)

The uncategorized problem: Those 13 uncategorized expenses need to go somewhere. Looking at our example data, most were Meta advertising expenses, accommodation for a conference, cloud computing credits, or language lessons. Each needs proper classification.

Partial deductibility: Some expenses are only partially business-related. A Spotify subscription used 40% for business? Only 40% goes on the books. This is where the Milchbüchlein's simple "I spent CHF 100" gets complicated.

The Result

BETRIEBSERTRAG
  Total Umsatz                                42'042

BETRIEBSAUFWAND
  Marketingaufwand                            (4'131)
  Reise- und Verpflegungskosten               (4'532)
  Weiterbildung                               (1'882)
  Übriger Aufwand                             (1'437)
  Software & Lizenzen                           (863)
  Fremdleistungen                               (616)
  Hardware                                      (378)
  Transportkosten                               (143)
  Kundengeschenke                                (62)
  Rechts- und Beratungskosten                    (60)
  Nicht kategorisiert                          (1'606)
                                             --------
  Total Aufwand                              (15'710)
                                             ========
  JAHRESGEWINN                                26'332

Gewinnmarge: 62.6%. This is a healthy software business with one employee.

Building the Bilanz (Balance Sheet)

This is where the Milchbüchlein truly falls apart. You've never tracked assets and liabilities — only flows. Now you need to reconstruct them.

The Opening Balance (Eröffnungsbilanz)

For a first-year GmbH, the opening balance is straightforward. On the day of incorporation:

AKTIVEN                              PASSIVEN
Flüssige Mittel (Bank)  20'000      Stammkapital          20'000
                        -------                           -------
Total Aktiven            20'000      Total Passiven        20'000

Important nuance: If there was already money in the bank account before the GmbH was founded (say, CHF 7'500 of personal funds), that money is not part of the GmbH. Either it was withdrawn, or it needs to be treated as a Gesellschafterdarlehen (shareholder loan) — which appears on the Passiven side as a liability.

The Closing Balance (Schlussbilanz)

At year-end, you need to figure out what the GmbH owns and owes.

Flüssige Mittel (Bank accounts):

Estimated closing bank balance:
  Opening balance (Stammkapital)           20'000
+ Cash received from invoices              37'920
- Cash paid for expenses                  (15'710)
                                          -------
= Estimated closing balance                42'210

Forderungen (Debitoren / Receivables):

Any invoice issued in 2024 but not paid until 2025 is a receivable:

  App Store - Invoice #1 (31.12.2024)         882
  Ad Network - Invoice #6 (18.11.2024)        124
  Payment Proc. - Invoice #6 (05.11.2024)     241
  Related Co. - Invoice #1 (19.02.2024)     2'860
  Ad Network - Invoice #6 (16.01.2024)         16
                                            -----
  Total Debitoren                           4'122

Why is a February invoice from the related company still unpaid at year-end? This is exactly the kind of thing that raises flags.

The Complete Closing Balance

AKTIVEN                                    PASSIVEN

Umlaufvermögen                             Fremdkapital
  Flüssige Mittel      42'210               Kreditoren           0
  Debitoren              4'122               Übrige Verbindl.     0
                                           Total Fremdkapital     0
Total Umlaufverm.       46'332

Anlagevermögen                             Eigenkapital
  Sachanlagen                0               Stammkapital    20'000
Total Anlageverm.            0               Gewinnreserve        0
                                             Jahresgewinn    26'332
                                           Total Eigenkapital 46'332

                        ------                              ------
TOTAL AKTIVEN           46'332             TOTAL PASSIVEN    46'332

The magic check: Aktiven = Passiven. If this doesn't balance, something is wrong. In double-entry bookkeeping, it must balance by construction. If it doesn't, look for:

  • Missing transactions
  • Cash movements not recorded
  • Expenses booked twice
  • Revenue recognized in the wrong period

Sachanlagen (Fixed Assets)

If you bought a laptop or phone for business use, you have a choice:

  • Expense directly (Sofortabschreibung): if the item is under ~CHF 1'000, common practice is to book it as an expense in the current year
  • Capitalize and depreciate: if the item is expensive or has multi-year use, you add it to the Bilanz and write it down over its useful life (typically 3–5 years for IT equipment)

For a CHF 378 phone, direct expensing makes sense.

The MwSt Question

MwSt (Mehrwertsteuer / VAT) is the single biggest source of confusion for small GmbHs.

Are You Even Registered?

In Switzerland, you're required to register for MwSt if your annual revenue exceeds CHF 100'000. Below that threshold, registration is optional (freiwillige Unterstellung).

If you're NOT registered (revenue under CHF 100'000):

  • You don't charge MwSt on invoices
  • You can't reclaim Vorsteuer (input tax) on your expenses
  • Your invoices must not show a MwSt line
  • Your Erfolgsrechnung is just revenue and expenses, no tax layer

If you ARE registered:

  • You charge MwSt (currently 8.1% standard rate) on invoices
  • You reclaim Vorsteuer on business expenses
  • You file quarterly MwSt returns with the ESTV
  • The difference (collected minus reclaimed) is what you owe

The Dangerous Gray Zone

Here's where people get into trouble: your accounting software (or your Milchbüchlein template) might automatically calculate MwSt on every invoice. If you're not registered and those calculations are just internal, that's fine — ignore them.

But if those MwSt amounts actually appear on invoices you sent to clients, you have a legal problem. Under MWSTG Art. 27 Abs. 2:

Wer in einer Rechnung eine Steuer ausweist, ohne zu deren Erhebung berechtigt zu sein, schuldet den ausgewiesenen Betrag.

Translation: if you show tax on an invoice without being authorized to collect it, you owe the stated amount. The ESTV will want that money.

Action items if you discover this issue:

  1. Issue corrected invoices (Korrekturrechnungen) to clients without MwSt
  2. Consult a Treuhänder about potential ESTV exposure
  3. Fix your invoicing setup going forward

If You're Close to CHF 100'000

If your revenue is approaching the threshold, consider registering voluntarily. The Saldosteuersatz method lets you apply a simplified flat rate instead of tracking Vorsteuer on every expense. For IT services, the Saldosteuersatz is typically 6.1%, meaning you keep 2% of the 8.1% you charge clients. On CHF 100'000 of revenue, that's CHF 2'000 in additional cost — weigh this against the benefit of reclaiming Vorsteuer on expenses.

Debitoren and Kreditoren: Accrual vs. Cash

This is the conceptual leap from Milchbüchlein to proper accounting.

The Principle

  • Cash basis (Milchbüchlein): I received CHF 5'000 in December → December revenue is CHF 5'000
  • Accrual basis (double-entry): I issued CHF 8'000 in invoices in December, of which CHF 5'000 was paid → December revenue is CHF 8'000, and I have CHF 3'000 in Debitoren

For Swiss GmbHs, the accrual principle is required. Revenue belongs to the period in which the service was provided, not when the cash arrives.

How to Identify Debitoren

Go through your invoice list and check: was every 2024 invoice paid before 31 December 2024?

  • Issued in 2024, paid in 2025 → Debitor
  • Issued in 2024, never paid → might still be a Debitor, or might need a Wertberichtigung (write-down) if it's likely uncollectable

How to Identify Kreditoren

Go through your expenses and check: are there any December 2024 expenses you hadn't paid by 31 December?

Common examples: annual software subscriptions billed in January for the prior year, freelancer invoices from December paid in January, credit card bills from December settled in January.

The Impact on the Bilanz

Without accruals:                    With accruals:
Bank           38'000               Bank           38'000
                                    Debitoren       4'000
               ------                              ------
Aktiven        38'000               Aktiven        42'000

Stammkapital   20'000               Kreditoren      1'500
Gewinn         18'000               Stammkapital   20'000
               ------               Gewinn         20'500
Passiven       38'000                              ------
                                    Passiven       42'000

The accrual-based version shows a higher profit (CHF 20'500 vs 18'000) because it includes revenue earned but not yet collected, and expenses incurred but not yet paid.

Intercompany Transactions

If you own multiple companies and they invoice each other, welcome to the world of intercompany accounting. This is more common than you'd think — many Swiss entrepreneurs have a GmbH for their product and a Ltd (UK) or other vehicle for other activities.

Why It Matters

In our example, roughly half of all revenue came from a related UK company owned by the same person. This is fine, but it requires:

  1. Arm's-length pricing: The invoiced amounts should reflect what an unrelated third party would pay for the same services. If your GmbH charges your UK company CHF 20'000 for "consulting" but similar services cost CHF 5'000 on the market, the Swiss tax authorities (and HMRC) may have questions.
  2. Actual settlement: Money needs to actually change hands. If you invoice your own company and nobody ever pays, you're creating artificial revenue.
  3. Disclosure: Related-party transactions must be disclosed in the Anhang. The Treuhänder will want to know the nature of the relationship, volume of transactions, outstanding balances, and whether pricing is arm's length.

How to Handle It

The cleanest approach:

  • Issue proper invoices between companies (just like for external clients)
  • Pay them via bank transfer within normal payment terms (30–60 days)
  • Keep the paper trail pristine
  • Disclose everything in both companies' financial statements

Trap Detail: Gewinnverwendung and Reserves

After accounts are finalized, 5% of annual profit goes to the gesetzliche Gewinnreserve until the reserve reaches 20% of Stammkapital (= CHF 4'000 for a CHF 20'000 company).

In our example: 5% of CHF 26'332 = CHF 1'317 must go to the reserve. The remaining CHF 25'015 can be distributed as dividends or retained as Gewinnvortrag.

Remember: Dividends from a GmbH are taxable income for you personally, subject to the Teilbesteuerungsverfahren (partial taxation, typically 50–70% depending on the canton).

Trap Detail: Gründungskosten

Setting up a GmbH costs money — notary fees, Handelsregister registration, bank account setup. These Gründungskosten can be expensed immediately (most common for small amounts) or capitalized as intangible assets and amortized over up to 5 years (OR Art. 959a). For a small GmbH, just expense them in year one.

Trap Detail: Corporate Taxes

Your GmbH owes taxes on its profit:

  • Gewinnsteuer (Bund): 8.5% of profit (effective ~7.8% after deducting the tax itself)
  • Gewinnsteuer (Kanton/Gemeinde): varies massively, from ~5% in Zug to ~15%+ in some places
  • Kapitalsteuer (Kanton): on equity, typically 0.01–0.5%

This should be accrued as a liability on the balance sheet (passive Rechnungsabgrenzung) — though many small companies don't bother and just pay it when the bill comes.

The Complete Checklist

Phase 1: Data Gathering

  • Export or compile all invoices for the year
  • Export or compile all expenses for the year
  • Get bank statements for all accounts (31 December closing balances)
  • Gather all contracts and agreements (especially intercompany)
  • Locate the Gründungsprotokoll / Handelsregisterauszug (for Stammkapital)
  • Collect any loan agreements (shareholder loans, bank loans)

Phase 2: Cleanup

  • Categorize every single expense — zero uncategorized items
  • Split mixed-use expenses (business vs. personal portion)
  • Verify all amounts against bank statements
  • Identify Debitoren (2024 invoices paid in 2025)
  • Identify Kreditoren (2024 expenses paid in 2025)
  • Flag intercompany transactions for separate disclosure
  • Confirm MwSt status and ensure invoices match (MwSt shown or not)

Phase 3: Construct Financial Statements

  • Build the Erfolgsrechnung (revenue by source, expenses by category)
  • Build the opening Bilanz (Stammkapital = bank for year 1, or prior year closing balance)
  • Build the closing Bilanz (bank + Debitoren = Aktiven, Stammkapital + reserves + profit = Passiven)
  • Verify: Aktiven = Passiven (must balance exactly)
  • Verify: Jahresgewinn on Bilanz = Jahresgewinn on Erfolgsrechnung
  • Prepare the Anhang (notes on accounting principles, Stammkapital, related parties)

Phase 4: Tax and Compliance

  • File MwSt returns if registered (quarterly with ESTV)
  • Prepare Steuererklärung documentation (Kanton + Bund)
  • Hold Gesellschafterversammlung to approve accounts
  • Decide on Gewinnverwendung (reserve + dividend/retention)
  • Keep all records for 10 years (OR Art. 958f)

Working With Your Treuhänder

Most small GmbH founders in Switzerland work with a Treuhänder (fiduciary / accountant) for at least the annual accounts. Here's how to make that relationship efficient.

What to Prepare Before the Meeting

  1. Your Milchbüchlein — cleaned up, with every transaction categorized
  2. Bank statements — PDF exports for all 12 months, highlighting the 31 December balance
  3. Invoice register — every outgoing invoice with date, amount, client, payment status
  4. Outstanding items — a list of anything unpaid at year-end (both receivables and payables)
  5. Intercompany documentation — contracts, invoices, and proof of payment between related entities
  6. Questions — everything you're unsure about

How Much Should It Cost?

For a simple one-person GmbH with ~50 invoices and ~150 expenses:

ApproachCost Range
Treuhänder doing everything from your MilchbüchleinCHF 2'000–4'000
You prepare proper books, Treuhänder reviews and filesCHF 800–1'500
Using accounting software, Treuhänder does year-end onlyCHF 500–1'200

The better your preparation, the less you pay.

What Accounting Software to Consider

If you want to move beyond the Milchbüchlein (and you should for a GmbH), the main options in Switzerland are:

  • Magic Heidi — built specifically for Swiss freelancers and small businesses, with QR invoices, AI expense scanning, and MwSt management
  • Bexio — most popular for small businesses, solid all-rounder
  • AbaNinja — free tier available, modern interface
  • Banana Accounting — Swiss-made, good for very small companies

Any of these will give you proper double-entry books, MwSt handling, and the ability to export a Jahresabschluss directly.

Appendix: Swiss Chart of Accounts (Kontenrahmen KMU)

For reference, here are the most relevant accounts for a small service GmbH.

Klasse 1: Aktiven (Assets)

KontoNameMilchbüchlein Equivalent
1000KasseCash expenses
1020BankBank balance
1100Forderungen aus Lieferungen (Debitoren)Unpaid invoices
1500Maschinen und GeräteHardware (if capitalized)

Klasse 2: Passiven (Liabilities + Equity)

KontoNameMilchbüchlein Equivalent
2000Verbindlichkeiten (Kreditoren)Unpaid bills
2100BankverbindlichkeitenBank loans
2300Passive RechnungsabgrenzungAccrued expenses (tax provisions)
2800StammkapitalGmbH share capital
2900Gesetzliche GewinnreserveMandatory profit reserve
2990Jahresgewinn / GewinnvortragP&L result / retained earnings

Klasse 3: Betriebsertrag (Revenue)

KontoNameMilchbüchlein Equivalent
3200DienstleistungsertragAll invoiced revenue
3400Übrige BetriebserträgeInterest, misc. income

Klasse 4–6: Aufwand (Expenses)

KontoNameMilchbüchlein Equivalent
4000Aufwand für DrittleistungenFreelancers & Consulting
5000Personalaufwand (Löhne)Salary (if you pay yourself)
5700SozialversicherungsaufwandAHV/IV/EO contributions
5820WeiterbildungEducation & Training
6000MietaufwandOffice rent
6200FahrzeugaufwandTransport costs
6500InformatikaufwandSoftware & Licenses
6530Rechts- und BeratungsaufwandLegal & consulting fees
6570TreuhandkostenTreuhänder costs
6700Reise- und RepräsentationsaufwandMeals & Travel
6950FinanzaufwandBank fees, FX losses
8900Direkte SteuernCorporate income tax
FAQ

Frequently Asked Questions

Can my GmbH use single-entry bookkeeping (Milchbüchlein)?

No. A GmbH must use double-entry bookkeeping (doppelte Buchhaltung) regardless of size or revenue. Single-entry bookkeeping is only permitted for Einzelunternehmen (sole proprietorships) with less than CHF 500'000 in revenue. This is a hard legal requirement under OR Art. 957.

Do I need to register for MwSt if my GmbH revenue is under CHF 100'000?

No, registration is optional below CHF 100'000. However, if you've been showing MwSt on invoices without being registered, you legally owe the stated amounts to the ESTV (MWSTG Art. 27 Abs. 2). Ensure your invoices match your registration status.

What's the difference between Debitoren and Kreditoren?

Debitoren (accounts receivable) are invoices you issued but haven't been paid yet — they're assets on your Bilanz. Kreditoren (accounts payable) are bills you received but haven't paid yet — they're liabilities. Both are required for proper accrual accounting.

How much does a Treuhänder cost for a small GmbH?

For a one-person GmbH with ~50 invoices and ~150 expenses: CHF 2'000–4'000 if they do everything from your Milchbüchlein, CHF 800–1'500 if you prepare proper books first, or CHF 500–1'200 if you use accounting software and they only handle year-end.

What mandatory reserves does a GmbH need?

Under OR Art. 671, a GmbH must allocate 5% of annual profit to the gesetzliche Gewinnreserve until the reserve reaches 20% of the Stammkapital. For a standard CHF 20'000 GmbH, that means reserving until you reach CHF 4'000.

How are intercompany transactions handled?

Invoices between related companies you own must use arm's-length pricing (market rates), be actually settled via bank transfer within normal payment terms, and be fully disclosed in the Anhang. Unsettled intercompany invoices raise red flags with tax authorities.

What taxes does my GmbH owe on its profit?

Gewinnsteuer (Bund) at 8.5% effective (~7.8% after deduction), Gewinnsteuer (Kanton/Gemeinde) varying from ~5% to ~15%+, and Kapitalsteuer (Kanton) on equity at 0.01–0.5%. On CHF 26'000 profit, expect roughly CHF 3'000–5'000 total depending on your canton.

How long do I need to keep business records?

All business records (invoices, receipts, bank statements, contracts, accounting documents) must be kept for 10 years per OR Art. 958f. Digital storage is accepted and recommended — thermal paper receipts fade after 2–3 years.

Simplify Your GmbH Accounting

The gap between a Milchbüchlein and a proper Jahresabschluss is bigger than most people expect. Start with the right tools and make year-end a routine, not a crisis.

Key Takeaways

  1. A GmbH requires double-entry bookkeeping. There's no way around it.
  2. The Bilanz is not optional. You can't file taxes without it.
  3. MwSt status must be clear. Either you're registered or you're not — and your invoices must reflect that.
  4. Accrual accounting matters. Debitoren and Kreditoren change your numbers.
  5. Intercompany transactions need documentation. Related-party revenue is legitimate but scrutinized.
  6. Categorize everything. "Other" is not an accounting category.
  7. Reconcile with the bank. Your spreadsheet is only as good as its match to reality.

This guide was written based on Swiss law as of 2024. Key references: OR Art. 957–963 (accounting obligations), MWSTG Art. 10 (registration threshold), Art. 27 (invoice requirements), OR Art. 671 (mandatory reserves). Always verify current rates and thresholds with official sources.