A free, open-source command-line tool to file your German E-Bilanz — the electronic balance sheet that every German company is legally required to submit to the tax office.
Fill in an Excel template, run one command. ebilanz-submit validates your figures, generates an HGB-compliant XBRL document, and transmits it to the Finanzamt through the official ERiC (ELSTER) interface. Local, free, open source — no cloud, no subscription, no telemetry.
The E-Bilanz can only be filed through software — and all of it costs money.
Since 2013 (§5b EStG), every German company that prepares a balance sheet — every GmbH, and most other businesses — must transmit its balance sheet and profit-and-loss statement to the tax office electronically, in XBRL format. There is no opting out.
And there is no manual way to do it. Unlike an income-tax return, the E-Bilanz cannot be typed into a free ELSTER web form — it can only be transmitted through software that speaks the official ERiC interface. ERiC itself is free, but until now every application built on top of it has been commercial:
- Priced for tax advisors, not founders. Licenses run into the hundreds of euros per year.
- Overblown for a small company. Most packages are bloated with features a one-person GmbH will never touch.
- So you must pay just to comply. To meet a legal obligation, a small company either buys software it barely uses, or hands the job — and a few hundred euros — to its Steuerberater, every single year.
A legal requirement should not be paywalled. ebilanz-submit is the missing free path: it drives the same official, free ERiC interface from a simple Excel template, on your own machine — so a small, owner-run company can file its own E-Bilanz without paying anyone, and without its financial data ever leaving the building.
Scope: GmbH (§266 Abs. 1 HGB), balance sheet + P&L (Gesamtkostenverfahren). No cash-flow statement, notes, or management report — deliberately focused on the simple balance sheets of small companies. Contributions extending the scope are welcome.
- Solo-Unternehmer mit kleiner GmbH (§266 Abs. 1 HGB)
- Die keine teure Steuerberater-Software benötigen
- Die ihre E-Bilanz selbst erstellen und übermitteln möchten
Scope:
- ✅ Nur GmbH (keine UG/AG)
- ✅ Bilanz + GuV (Gesamtkostenverfahren)
- ❌ Keine Kapitalflussrechnung
- ❌ Kein Anhang, kein Lagebericht
✅ Excel-basierte Dateneingabe — Einfaches Template statt komplizierter Software ✅ Automatische Validierung — 12 Prüfregeln für korrekte Bilanzen ✅ HGB Taxonomie 6.8 — Aktuelle XBRL-Standards ✅ ElsterBasis-Wrapper — Korrekte XML-Struktur für ELSTER ✅ Test-Modus — Vorproduktion-Server zum Testen ✅ macOS-native — Entwickelt und getestet auf macOS
brew install cmake pugixml cli11 spdlog nlohmann-json catch2git clone <repository-url>
cd ebilanz
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(sysctl -n hw.ncpu)Nutze templates/ebilanz-template.xlsx:
| Sheet | Inhalt |
|---|---|
| Stammdaten | Firmendaten, Steuernummer, BuFa-Nr, Wirtschaftsjahr |
| Bilanz | Aktiva & Passiva nach HGB §266 (aktuelles + Vorjahr) |
| GuV | Gewinn- und Verlustrechnung (Gesamtkostenverfahren) |
| Validierung | Automatische Checks (eingebaute Formeln) |
| Info | Hilfe & Anleitung |
Hinweis:
- HerstellerID (Zeile 24): Pflicht für die Übermittlung. Jeder Hersteller benötigt eine eigene, bei ELSTER registrierte HerstellerID — siehe Abschnitt „HerstellerID & DatenLieferant". Alternativ via
--hersteller-id. - DatenLieferant (Zeile 25): Optional, falls abweichend vom Firmennamen
./build/ebilanz-submit --validate meine-bilanz.xlsxPrüft:
- ✅ Bilanz ausgeglichen (Aktiva = Passiva)
- ✅ Jahresüberschuss konsistent (Bilanz = GuV)
- ✅ Stammkapital ≥ 25.000 EUR (GmbH)
- ✅ Steuernummer-Format korrekt
- ✅ Alle Pflichtfelder vorhanden
./build/ebilanz-submit --output /tmp meine-bilanz.xlsxErzeugt:
/tmp/ebilanz-2024.xbrl— Pure XBRL (zum Inspizieren)/tmp/ebilanz-2024-elster.xml— ElsterBasis-Wrapper (zur Übermittlung)
./build/ebilanz-submit --test --cert zertifikat.pfx meine-bilanz.xlsxDie HerstellerID identifiziert die übermittelnde Software gegenüber ELSTER. Es ist keine HerstellerID eingebaut — jeder Nutzer/Hersteller muss seine eigene, bei ELSTER registrierte HerstellerID verwenden. Ohne HerstellerID bricht die Übermittlung mit einem Fehler ab.
HerstellerID beantragen: https://www.elster.de/elsterweb/entwickler
Setzen:
- Via CLI:
--hersteller-id XXXXX - Via Excel: Eintragen in Stammdaten Zeile 24
Priorität: CLI-Flag > Excel-Feld (B24)
Was ist das?
- Name des Datenlieferanten (wer übermittelt die Daten)
- Standard: Ihr Firmenname aus Stammdaten
- Kann überschrieben werden
Wann überschreiben?
- Steuerberater übermittelt für Mandant
- Dritter übermittelt in Ihrem Auftrag
Wie nutzen?
- Standard: Automatisch = Firmenname
- Override: Eintragen in Stammdaten Zeile 25
ebilanz-submit [OPTIONEN] <bilanz.xlsx>| Parameter | Beschreibung |
|---|---|
<bilanz.xlsx> |
Excel-Datei mit Bilanzdaten |
| Option | Beschreibung |
|---|---|
-v, --validate |
Nur validieren, nicht übermitteln |
-t, --test |
Test-Modus (Vorproduktion-Server) |
-o, --output <dir> |
XBRL-Dateien speichern (ohne Übermittlung) |
| Option | Beschreibung |
|---|---|
-c, --cert <file> |
ELSTER-Zertifikat (.pfx) |
-p, --password <pw> |
Zertifikat-Passwort ( |
--hersteller-id <id> |
ELSTER HerstellerID (Pflicht; alternativ Excel-Feld B24) |
| Option | Beschreibung |
|---|---|
--verbose |
Ausführliche Debug-Ausgabe |
--quiet |
Nur Fehler anzeigen |
--log <file> |
Log-Datei (Standard: ebilanz.log) |
| Option | Beschreibung |
|---|---|
--taxonomie <json> |
Taxonomie-Config-Datei |
--bufa <json> |
BuFa-Verzeichnis-Datei |
| Option | Beschreibung |
|---|---|
--version |
Versionsnummer anzeigen |
-h, --help |
Hilfe anzeigen |
Validierung:
./ebilanz-submit --validate bilanz-2024.xlsxXBRL generieren (ohne Übermittlung):
./ebilanz-submit --output /tmp bilanz-2024.xlsxTest-Übermittlung:
./ebilanz-submit --test --cert zertifikat.pfx bilanz-2024.xlsxProduktiv-Übermittlung:
./ebilanz-submit --cert zertifikat.pfx bilanz-2024.xlsxMit Passwort-Datei:
./ebilanz-submit --cert zertifikat.pfx --password "Geheim123!" bilanz-2024.xlsxAlternative: Nutze --output zum Generieren der XML-Dateien und übermittle diese manuell über das ELSTER-Portal.
-
Download: https://www.elster.de/elsterweb/entwickler Datei:
ERiC-43.3.2.0-Darwin-universal.jar(oder aktueller) -
Extrahieren:
cd ~/Downloads unzip -q ERiC-*.jar -d eric-extracted
-
Kopieren:
cd /pfad/zum/ebilanz-projekt mkdir -p external/eric-sdk cp -r ~/Downloads/eric-extracted/ERiC-*/Darwin-universal/include external/eric-sdk/ cp -r ~/Downloads/eric-extracted/ERiC-*/Darwin-universal/lib external/eric-sdk/
-
macOS Security Fix:
# Quarantine entfernen xattr -d com.apple.quarantine external/eric-sdk/lib/*.dylib 2>/dev/null || true find external/eric-sdk/lib/plugins -name "*.dylib" -exec xattr -d com.apple.quarantine {} \; 2>/dev/null || true # Ad-hoc Signieren codesign --force --deep --sign - external/eric-sdk/lib/*.dylib 2>/dev/null || true find external/eric-sdk/lib/plugins -name "*.dylib" -exec codesign --force --deep --sign - {} \; 2>/dev/null || true
-
Neu bauen:
cmake -B build -DWITH_ERIC=ON cmake --build build
Das Tool prüft automatisch:
| # | Regel | Typ | Bedingung |
|---|---|---|---|
| 1 | Bilanz ausgeglichen | ERROR | |Aktiva - Passiva| < 0,01 € |
| 2 | Jahresüberschuss konsistent | ERROR | |Bilanz.JÜ - GuV.JÜ| < 0,01 € |
| 3 | GmbH-Kapital | ERROR | Stammkapital ≥ 25.000 € |
| 4 | Steuernummer Format | ERROR | Pattern: XX/XXX/XXXXX |
| 5 | BuFa-Nummer | ERROR | 4-stellig numerisch |
| 6 | Bundeseinh. Steuernummer | ERROR | 13-stellig numerisch |
| 7 | Handelsregister | ERROR | Pattern: HRB XXXXX |
| 8 | Pflichtfelder | ERROR | Alle Stammdaten vorhanden |
| 9 | Erstjahr-Konsistenz | WARNING | Vorjahr = 0 wenn Erstjahr |
| 10 | Ergebnisverwendung | ERROR | Ausschüttung > 0 wenn nicht Thesaurierung |
| 11 | Wirtschaftsjahr | WARNING | Dauer ≤ 18 Monate |
| 12 | Bilanzstichtag | ERROR | = Wirtschaftsjahr-Ende |
ebilanz/
├── CMakeLists.txt # Build-Konfiguration
├── README.md # Diese Datei
├── CLAUDE.md # Entwickler-Anweisungen
├── config/
│ ├── taxonomie-6.8.json # HGB Taxonomie 6.8 Mapping
│ └── bufa-verzeichnis.json # Bundesland → BuFa Mapping
├── templates/
│ └── ebilanz-template.xlsx # Excel-Vorlage für Nutzer
├── external/
│ └── eric-sdk/ # ERiC SDK (optional, nicht im Repo)
├── src/
│ ├── main.cpp # CLI Entry Point
│ ├── excel_parser.* # Excel-Parsing (xlnt)
│ ├── validator.* # Datenvalidierung
│ ├── xbrl_generator.* # XBRL-Generierung (HGB 6.8)
│ ├── elster_wrapper.* # ElsterBasis XML Wrapper
│ ├── eric_connector.* # ERiC SDK Integration
│ ├── steuernummer.* # Steuernummer-Konvertierung
│ └── ...
├── tests/
│ ├── test_*.cpp # Unit & Integration Tests
│ └── testdata/ # Test-Excel-Dateien
└── docs/
└── lastenheft-*.md # Vollständige Spezifikation
cd build
ctest --output-on-failureTest-Abdeckung:
- ✅ Excel-Parsing (4 Test-Cases)
- ✅ Validierung (12 Regeln)
- ✅ Steuernummer-Konvertierung (3 Bundesländer)
- ✅ XBRL-Generierung (5 Test-Cases)
- ✅ ElsterBasis-Wrapper (8 Test-Cases, 42 Assertions)
- ✅ ERiC-Integration (2 Test-Cases)
→ ERiC SDK Bibliotheken müssen signiert werden (siehe ERiC SDK Setup)
→ macOS blockiert ERiC-Plugins aufgrund von Code-Signing-Problemen
→ Workaround: Nutze --output und übermittle XML manuell
→ Prüfe Excel: Summe Aktiva muss exakt Summe Passiva entsprechen → Nutze Sheet "Validierung" für automatische Checks
→ Dieses Tool ist nur für GmbH (nicht UG) → GmbH benötigt mindestens 25.000 € Stammkapital
Contributions are very welcome — this tool exists to save small companies money, and every improvement compounds across everyone who uses it. Good places to start:
- Broaden the scope: UG (haftungsbeschränkt) and other legal forms, or balance-sheet positions not yet mapped.
- Annual taxonomy updates: the HGB taxonomy changes most years; the mapping is data, not code — see
config/taxonomie-6.8.json. - Cross-platform: Windows/Linux build and packaging (the core is portable C++17; only password entry and the ERiC setup are platform-specific).
- Tests for new validation rules or taxonomy positions.
Please open an issue to discuss anything non-trivial first, and run ctest before opening a PR. Codebase conventions and architecture live in CLAUDE.md.
Disclaimer: This tool does not constitute tax advice. You are responsible for the correctness of the data you submit. When in doubt, consult a Steuerberater.
MIT License — siehe LICENSE-Datei
Entwickelt für Solo-GmbH-Unternehmer, die die Kontrolle über ihre E-Bilanz behalten möchten.
Dependencies:
- xlnt — Excel-Verarbeitung
- pugixml — XML-Generierung
- CLI11 — Command-Line Parsing
- spdlog — Logging
- nlohmann/json — JSON-Parsing
- Catch2 — Testing
ELSTER:
- ERiC SDK © Bayerisches Landesamt für Steuern
- HGB Taxonomie © XBRL Deutschland e.V.
- Issues: GitHub Issues
- Fragen: Siehe
docs/lastenheft-*.mdfür Details - ELSTER Support: https://www.elster.de/elsterweb/entwickler
Hinweis: Dieses Tool ersetzt keine steuerliche Beratung. Konsultiere bei Unsicherheiten einen Steuerberater.