Why we built our own ZUGFeRD tool, and whether we should share it
We built a lean, self-hosted ZUGFeRD tool for the e-invoicing mandate. Should we share it?
This translation was produced automatically using AI. The German version is the editorially reviewed original.
We built a small e-invoicing tool for our own bookkeeping instead of taking out another cloud subscription, and now we are wondering whether others should have it too. It is called Belegt, runs self-hosted, and does exactly one thing cleanly: generate law-compliant ZUGFeRD invoices without customer or bank data ever leaving the building.
This piece explains why we built it, what it can do, where it honestly stops, and ends with an open question.
01. THE MANDATE, SHORT AND CORRECT
The electronic invoice is no longer optional in German B2B, it is mandatory, and the timeline is concrete.
- Since 1 January 2025, every domestic company must be able to receive and process e-invoices. No exceptions, no revenue threshold, small businesses included.
- Until the end of 2026, paper or PDF is still allowed for sending, but the PDF only with the recipient's consent.
- From 2027, companies with more than 800,000 euros in prior-year revenue must issue e-invoices, from 2028 then all companies.
E-invoice does not mean a PDF attachment, but a structured format under the European standard EN 16931. ZUGFeRD is the variant common in Germany: a PDF/A-3 file with embedded XML. The human sees a readable PDF, the software reads the XML directly, without retyping and without text recognition. The graphic below shows exactly these two views of the same file.
02. WHY WE DID NOT JUST TAKE OUT A SUBSCRIPTION
Everyone knows the trigger: the mandate is coming, so you need a tool. The obvious answer is a subscription, and that is exactly where we paused.
For a process that is fundamentally simple, generating a PDF with embedded XML, recurring costs add up quickly: common invoicing tools start at around 10 euros a month and go considerably higher for e-invoice sending, depending on the plan. For a business that only writes a handful of invoices a month, that means permanently paying for a full accounting suite you never actually use.
But the real reason was not the price, it was the data. An invoice contains names, addresses and often bank details. Send it through a cloud tool and that becomes data processing on behalf of a controller under Article 28 GDPR: a contract, a third-party provider, data leaving the building. Self-hosted, that disappears entirely. It is the same logic we apply to language models, covered in On-Premise vs. Cloud LLM: keep the benefit, do not give up data sovereignty.
03. WHAT BELEGT CONCRETELY DOES
Belegt is deliberately small and tightly scoped. It is a generator, not a replacement for accounting.
Technically, it is a web application that you run on your own computer or server. The data sits locally in a file, with sensitive fields such as bank details stored encrypted. It generates ZUGFeRD and Factur-X invoices in the EN 16931 profile, the level that legally counts as a fully valid e-invoice, validates them against the standard, assigns sequential invoice numbers, manages company and client profiles, and keeps track of open items and reports.
The two things that save us the most time: a guided workflow that completes a compliant invoice in a few steps, and the fact that the generated file immediately carries the machine-readable view the recipient needs. We use it ourselves, every month. That is the most honest recommendation we can give: we did not build it for a market, we built it for ourselves. It is one of several small tools that came about this way, like the Event Scout tool.
04. WHERE IT HONESTLY STOPS
A self-hosted single-purpose tool has real limits, and hiding them would be exactly the kind of marketing we do not do.
🔸 The standard keeps moving. EN 16931 and its code lists are updated regularly. A generator has to be maintained, or it will eventually produce invoices that are no longer compliant. That is work someone has to do.
🔸 Retention is not included. Generating is not the same as archiving in an audit-proof way. The GoBD require unalterable retention in the original format, now for eight years. A pure generator does not solve that, it remains the user's responsibility.
🔸 It does not replace a tax advisor. A technically valid invoice can still be incomplete in content. There is no direct connection to your accounting firm or to bookkeeping systems.
Fairly summarised: Belegt closes the mandatory gap of generation and validation cleanly and without a subscription. Archiving and the tax workflow remain outside its scope. Anyone who mistakes it for a full suite will be disappointed. Anyone who has exactly this one gap gets a tool without the extra weight.
05. SHOULD WE SHARE IT, AND HOW?
This piece deliberately ends with a question instead of an answer, because we do not know it ourselves yet.
There are two plausible paths. One: we release Belegt as a self-hosted solution that any small business can run on its own machine, subscription-free and with the data kept in-house. The other: we offer a maintained version that we keep current, help set up, and stand behind for standard updates, in exchange for a fair contribution. Both have their logic, and the maintenance burden from the last section is exactly why the answer is not trivial.
So here is our honest request: if a local, data-protection-compliant, subscription-free ZUGFeRD tool would be useful for you or your business, write to us. Would it be enough for you to run it yourself, or would you prefer a supported version? That signal is exactly what helps us decide whether something we built for ourselves becomes something we share.

