ZUGFeRD & XRechnung 2025 — the e-invoicing guide for small businesses in Germany
From 2025, the electronic invoice (E-Rechnung) is becoming mandatory step by step in German B2B business. For many small businesses and freelancers that sounds complicated at first — but it is not. In this guide you will learn what ZUGFeRD and XRechnung are, which deadlines apply, and how to get started with Invoice.app in a few minutes.
In short: an e-invoice is not a PDF attached to an email, but an invoice in a structured, machine-readable format that follows the European standard EN 16931. The good news: with an app like Invoice.app you do not have to deal with the technical details — you create your invoice as usual and the app takes care of the rest.
What is an e-invoice? ZUGFeRD and XRechnung explained
A plain PDF invoice or a paper invoice does not count as an e-invoice in the eyes of the law. An e-invoice carries all the invoice data in a structured data set that the recipient's accounting software can read and process automatically. Germany has two common formats for this — both meet the European standard EN 16931:
- ZUGFeRD — a hybrid format: an ordinary, human-readable PDF (specifically PDF/A-3) with the structured XML data embedded inside it. Your client sees the invoice they are used to; their software reads the data in the background. One file for people and machines alike.
- XRechnung — a pure XML document with no visible layout. It is the format public authorities (federal, state and municipal) require — that is, in business with public bodies (B2G).
Technically both formats rest on the same standards (UN/CEFACT CII, EN 16931). As the invoice issuer, one question matters most to you: who is the invoice going to — a business or a public authority? More on that in a moment.
When does the e-invoicing obligation apply?
With the Wachstumschancengesetz (Growth Opportunities Act), Germany is introducing the e-invoice for domestic B2B sales in stages. The timetable:
| Date | What applies |
|---|---|
| 1 January 2025 | Obligation to receive: every business must be able to receive and process e-invoices — regardless of size. |
| 1 January 2027 | Obligation to issue for businesses with more than €800,000 turnover in the previous year. |
| 1 January 2028 | Obligation to issue for all remaining businesses. |
For many small businesses only one thing changes at first: they must be able to receive e-invoices. The obligation to send e-invoices yourself only takes effect after the transition periods above.
And small-business owners? As a small-business owner under § 19 UStG you have also had to be able to receive e-invoices since 2025. Under the law as it currently stands, small-business owners are exempt from the obligation to issue e-invoices themselves — paper or PDF invoices remain permitted here. Small-amount invoices up to €250 and transport tickets are exempt as well. Your specific case is best clarified with your tax adviser.
ZUGFeRD or XRechnung — which one do you need?
The rule of thumb is simple:
- Invoice to a business (B2B) → a ZUGFeRD PDF. Your client receives a PDF as usual — just with the invoice data embedded.
- Invoice to a public authority (B2G) → an XRechnung XML. Public bodies generally require an XRechnung (or an equivalent permitted format) and will give you a Leitweg-ID — the unique routing identifier that assigns your invoice to the right recipient within the administration.
The best part: in Invoice.app you do not have to choose a format. As soon as you enable e-invoicing, ZUGFeRD is generated automatically for every invoice. If you also enter a Leitweg-ID for a client, the XRechnung XML is added automatically for that client.
Creating e-invoices with Invoice.app
Step 1 — Enable e-invoicing
Open your company settings. For German companies the “E-invoice” section appears there with the “Enable e-invoicing” switch. A single switch is enough — there is deliberately no separate setting for ZUGFeRD and XRechnung: “Embed the e-invoice data in every invoice PDF (ZUGFeRD), and attach the XRechnung XML for clients with a Leitweg-ID.”
Step 2 — Enter your VAT ID
To create German e-invoices, Invoice.app needs your company's VAT ID — the Tax number alone is not enough here. Enter your VAT identification number in the company profile (with the country code, e.g. DE123456789). If it is missing, the app points this out when you send.
Step 3 — Enter the Leitweg-ID (public authorities only)
If you are invoicing a public authority, fill in the “Client reference (Leitweg-ID)” field on the client form — it appears for clients whose country is Germany. The hint below the field says it clearly: “Required for XRechnung invoices to German public authorities.” For ordinary B2B clients you simply leave the field empty.
Step 4 — Create and share the invoice
Create your invoice as usual and share it. What you get when sharing depends on the client:
- Business client (no Leitweg-ID): a single ZUGFeRD PDF with the data embedded.
- Public authority (with Leitweg-ID): a ZIP archive with the PDF and the separate XRechnung XML.
The embedded e-invoice is produced when you send, share or export — not in the on-screen preview alone. By the way: in the accounting export you can include the XRechnung XMLs together using the “XRechnung XMLs” option.
Correcting invoices
You do not change an e-invoice that has already been sent — you create a Correction instead. In the invoice form choose the kind “Correction”, link the “Original invoice” and give a “Correction reason”. The correction is a complete, corrected invoice that restates the original values and references the original (e-invoice type 384). Since it is still an outgoing invoice, the correction automatically gets its ZUGFeRD or XRechnung data too.
What is checked? The most common pitfalls
Invoice.app checks every e-invoice before it is sent against the official validation rules (EN 16931 and the KoSIT XRechnung specifications). If something is wrong, “Validation Failed” appears with a list of the points you need to correct — before your invoice reaches the client. The most common ones:
- The company VAT ID is missing. To create an e-invoice, Invoice.app needs the issuer's VAT identification number.
- Tax-inclusive prices instead of net prices. Invoice.app currently creates German e-invoices only on the basis of net prices with the tax shown separately. Switch the invoice to net prices.
- An unstructured company address. The address must be converted into structured fields (street, postcode, city, country) — a free block of text is not enough.
- An unsupported tax category. Custom 0% rates do not work — use a built-in German VAT rate or one of the categories supported under EN 16931 (exempt, intra-community supply, export or reverse charge).
Receiving and importing e-invoices
The obligation to receive has applied to every business since 1 January 2025 — and it is the part that affects most people first. Invoice.app reads the ZUGFeRD and XRechnung files your suppliers send you and turns them into invoices you can work with.
- Upload the file. In the invoice list you will find the “Import e-invoice” entry. You can upload a ZUGFeRD PDF, a standalone XRechnung XML, or a ZIP archive with up to 50 invoices at once.
- Validation. Every file is checked against EN 16931 and the KoSIT XRechnung specifications before anything is created.
- Matching. Invoice.app compares your company against the seller and the buyer: if you are the buyer, a purchase invoice is created; if you are the seller — for an invoice you issued yourself, say — a sales invoice. Line items, taxes, discounts, payment terms and totals come along with it.
- Duplicate protection. An invoice you have already imported is recognised and not created a second time — so you can safely upload the same folder again.
- The original is kept. The uploaded file stays attached to the document that was created. Imported invoices are read-only so that they match the file your supplier sent.
Two limitations: the UBL syntax of XRechnung is not supported at the moment — import the ZUGFeRD variant (CII) in that case. And the import is part of the Premium subscription and is available for German companies.
Good to know
- Invoice.app creates the files — you handle the sending. The app produces the standard-compliant ZUGFeRD PDF or XRechnung XML. You send it to your client yourself (by email) or upload it to the authority's invoice portal. There is no automatic transmission to an authority or the tax office, and no Peppol.
- Only invoices and credit notes become e-invoices. Estimates and purchase orders do not produce ZUGFeRD or XRechnung data.
- The preview does not show embedded data. The e-invoice is only produced when you send, share or export.
This article is general orientation and does not replace tax advice. For your specific case, talk to your tax adviser.
Useful links
- ZUGFeRD & XRechnung in Invoice.app — all the details of the e-invoicing feature
- ferd-net.de — the Forum elektronische Rechnung Deutschland (ZUGFeRD)
- xeinkauf.de/xrechnung — the official XRechnung standard (KoSIT)