xingen
Technical

XRechnung vs ZUGFeRD: Choosing the Right Format for Your Use Case

February 28, 2025  ·  5 min read

Both XRechnung and ZUGFeRD are EN16931-compliant e-invoice formats used in Germany. They're often mentioned in the same breath, but they serve different purposes and suit different workflows. Here's how to decide which one belongs in your integration.

The short answer

XRechnung: pure XML, machine-first

XRechnung is a pure XML format. There is no human-readable component — the invoice is a structured data file. It exists in two XML syntaxes:

XRechnung version 3.0 (current) adds the BT-24 specification identifier urn:cen.eu:en16931:2017#compliant#urn:xoev-de:kosit:standard:xrechnung_3.0 and tightens several Schematron rules around Leitweg-ID validation.

ZUGFeRD: PDF with embedded XML

ZUGFeRD wraps the same structured XML inside a PDF/A-3 attachment. The PDF is human-readable in any viewer; the embedded factur-x.xml file carries the machine-readable data. This makes ZUGFeRD ideal when your invoices need to be readable by both humans (accounts payable teams) and machines (ERP systems).

ZUGFeRD ships in five profiles ranked by data richness:

For most B2B use cases, EN16931 profile is the right choice — it maps 1:1 to XRechnung semantics.

Factur-X: same thing, French name

Factur-X is the French standardisation of ZUGFeRD 2.x. The data model is identical; only the filename convention differs (factur-x.xml vs ZUGFeRD-invoice.xml in older versions). If you're selling to French companies, use Factur-X. xingen treats both as the same format family.

Choosing for your integration

If you're building an API integration, the deciding factor is usually your customer's receiving system. Most German ERP procurement modules accept both, but public-sector e-procurement portals (OZG-RE, PEPPOL access points) require XRechnung specifically. When in doubt, generate XRechnung — it's the more interoperable of the two for automated processing.

The xingen Formats page lists all supported input/output combinations and the full conversion matrix.

← Back to Blog