Factur-X vs ZUGFeRD vs XRechnung vs Peppol: what is the difference?
If you work with European e-invoicing, you have almost certainly encountered all three names: Factur-X, ZUGFeRD, and XRechnung. They are often listed together as if they are competing products. They are not. Two of them are the same format with different branding, and the third is a different profile of the same underlying XML standard. The confusion is real, and it has practical consequences for which one you need to use and when.
Here is a plain-language breakdown.
The common foundation: UN/CEFACT CII and EN 16931
All three formats are built on the same XML schema: UN/CEFACT Cross Industry Invoice (CII). This is an international standard for representing invoice data in machine-readable form, covering everything from header information (seller, buyer, dates) to line items, tax breakdowns, and payment instructions.
On top of CII sits EN 16931, the European standard for the semantic data model of an electronic invoice. EN 16931 defines what fields are required, how VAT is represented, and what the relationships between data elements must be. Every compliant EU e-invoice, in whatever national flavour, is supposed to conform to EN 16931.
The differences between Factur-X, ZUGFeRD, and XRechnung are in the profiles (which fields are optional vs. required) and the delivery container (hybrid PDF vs. pure XML).
Factur-X and ZUGFeRD: the hybrid format
Factur-X is a French-German joint specification. It wraps CII XML inside a PDF/A-3 file. The result is a single document that is simultaneously human-readable (a normal PDF invoice layout) and machine-readable (the CII XML is attached as a file named factur-x.xml).
ZUGFeRD is the German predecessor and, from version 2.0 onwards, technically identical to Factur-X. ZUGFeRD 2.x and Factur-X 1.x use the same profiles and the same XML structure. The only meaningful difference is branding: German software vendors tend to say ZUGFeRD, French software vendors tend to say Factur-X, and both refer to the same format.
Both use a series of conformance profiles that control how much data is required:
| Profile | Use case |
|---|---|
| MINIMUM | Absolute minimum fields, process payment only |
| BASIC WL | Line items required, VAT detail at header level |
| BASIC | Full line items with tax per line |
| EN 16931 | Full EN 16931 semantic model |
| EXTENDED | Superset with additional fields for complex scenarios |
For most B2B invoicing in France and Germany, the EN 16931 or EXTENDED profile is what compliance frameworks expect.
XRechnung: the government XML profile
XRechnung is a German government specification. Unlike Factur-X/ZUGFeRD, it is pure XML with no PDF wrapper. An XRechnung invoice is a CII XML file (or optionally UBL XML, the other EN 16931 serialisation). There is no visual representation embedded in the file itself.
XRechnung is the mandatory format for invoices addressed to German federal government bodies and an increasing number of state and municipal bodies. If you invoice the Bundesbehörden, you send XRechnung. If you invoice a German private company, you may use Factur-X/ZUGFeRD or Peppol BIS Billing 3.0 UBL.
The key distinctions:
- XRechnung is pure XML, no visual layer, required for German B2G (business to government)
- Factur-X/ZUGFeRD is a hybrid PDF plus XML, used for B2B archival and cross-border transactions
- Peppol BIS Billing 3.0 is UBL XML (not CII), used as the transmission format over the Peppol network
These three can coexist in a single workflow: you might generate a Factur-X PDF for the buyer’s archive, transmit via Peppol BIS UBL over the network, and convert to XRechnung for any government-addressed line items.
When each is required
| Format | When you need it |
|---|---|
| Factur-X / ZUGFeRD | French or German B2B invoicing; archival copy for any Peppol invoice; Belgium B2B archive layer |
| XRechnung | Invoicing German federal or state government bodies |
| Peppol BIS Billing 3.0 UBL | Transmitting over the Peppol network in any EU country |
France’s e-invoicing mandate (receive obligation from September 2026) accepts Factur-X as a valid submission format on the Portail Public de Facturation. Germany’s B2B mandate (phased 2025 to 2028) accepts Factur-X, ZUGFeRD, and XRechnung.
What accounting software supports
Most mid-market European accounting platforms now support at least the EN 16931 profile of Factur-X/ZUGFeRD on both import and export. XRechnung support is widespread among German accounting software (Datev, Lexware, Sage Germany) and is increasingly present in cross-European platforms.
Pure XRechnung generation from non-German software is still patchy. If you need to submit invoices to German government portals, verify specifically that your software generates valid XRechnung 3.0 (the current version since November 2023) and not an older profile.
UBL-based Peppol export is handled by Access Point providers rather than accounting software directly. Your accounting software generates the invoice data; the Access Point wraps it in the correct UBL envelope and routes it.
The format is only half the story
Choosing the right format solves the transmission problem. It does not solve the legal proof problem.
An invoice stored as a Factur-X PDF on your file system is compliant for format purposes. But if you need to prove in court or during a tax audit that the invoice existed on a specific date and has not been altered since, the format alone does not give you that. What you need is an RFC 3161 timestamp bound to the document at the moment of creation, and a chain of custody record showing every processing step.
This is why SealDoc wraps Factur-X generation with a timestamping and evidence-pack layer. Every invoice we produce carries a timestamp from a trusted authority, an audit trail, and a manifest hash you can verify offline. The format is correct; the legal proof is also correct.
Validate your existing invoices
If you are unsure whether an invoice file you have received or generated is genuinely compliant, our free Validator tool checks Factur-X, ZUGFeRD, and XRechnung files against the EN 16931 schema and returns a plain-English report of any errors. No account required. Upload the file, read the result.