← Back to all articles

Factur-X vs ZUGFeRD vs UBL, a practical guide for European invoicing

SealDoc Team · · 5 min read

The naming around European structured invoicing is a mess. Factur-X, ZUGFeRD, and UBL sound like three competing formats, and a lot of vendor copy treats them that way. They are not really competing. Two of them are the same thing under different national branding, and the third lives at a different layer of the stack entirely. If your pipeline crosses borders, you will end up touching all three, and knowing how they relate saves a surprising amount of debugging.

Here is the practical version.

The short answer

  • ZUGFeRD is the German hybrid invoice standard. PDF/A-3 with embedded XML.
  • Factur-X is the French name for the same thing. The XML schemas are aligned with ZUGFeRD 2.x at the byte level for the profiles both standards share.
  • UBL is a different layer. It is the pure XML structured invoice format used over Peppol. No PDF involved.

So the real question is not “Factur-X vs ZUGFeRD vs UBL.” It is “hybrid PDF (Factur-X / ZUGFeRD) vs pure XML (UBL).”

ZUGFeRD and Factur-X: same file, different sticker

ZUGFeRD originated in Germany in 2014 (FeRD = Forum elektronische Rechnung Deutschland). France adopted the same architecture in 2017 under the name Factur-X. Since ZUGFeRD 2.1, the profiles MINIMUM, BASIC WL, BASIC, EN 16931, and EXTENDED are byte-aligned with the equivalent Factur-X profiles. A correctly-built ZUGFeRD 2.1 EN 16931 invoice is a valid Factur-X EN 16931 invoice. You do not convert between them. You label the file with the brand your buyer expects.

The shared profiles in increasing order of detail:

  • MINIMUM: just enough for accounting reference. Total, VAT, supplier, buyer.
  • BASIC WL (without lines): aggregate-level invoice, no line items.
  • BASIC: line items, but only the EN 16931 mandatory fields per line.
  • EN 16931: the full European semantic model from EN 16931. This is the level most B2B mandates target.
  • EXTENDED: vendor-specific extensions on top of EN 16931. Use only when both sides of the pipeline understand the extra fields.

If you are starting fresh and you do not have a specific buyer requirement, target EN 16931. It is the lowest common denominator that satisfies the major 2026 mandates and produces the same file regardless of which national badge you put on it.

Where UBL fits in

UBL (Universal Business Language, OASIS) is a different beast. It is not a PDF. It is an XML document, on its own, designed to travel between machines. The Peppol network runs on UBL. Belgium’s 1 January 2026 mandate, the Netherlands’ government invoicing, and the cross-border channel into France’s Chorus Pro all use UBL over Peppol BIS Billing 3.0.

So the relationship is:

  • Factur-X / ZUGFeRD = PDF/A-3 with XML inside. Optimised for “I need a human-readable copy AND a machine-readable copy in the same file.”
  • UBL = XML only. Optimised for “machines on both ends, the network handles transport.”

In practice, most EU pipelines need both. You issue the invoice as UBL over Peppol because that is what the mandate requires for transport, and you archive a Factur-X / ZUGFeRD copy as the human-readable record because that is what the tax archive law requires.

Note one quirk: ZUGFeRD 2.x and Factur-X 1.x can also embed UBL, not just CII. The same hybrid PDF can carry either CII (Cross Industry Invoice, the original schema) or UBL inside it. Most German pipelines use CII; most French pipelines use UBL. Both are valid. If you receive a Factur-X file and your parser only knows CII, you will silently miss half the German market’s incoming invoices.

When to use which

Use UBL alone when the invoice will only ever be processed by machines and the network already handles archival on both sides. This is the Peppol case, government-to-business, and most public-sector flows.

Use Factur-X / ZUGFeRD when:

  • Your buyer is a private business that wants to look at the invoice before paying it.
  • You need the human-readable PDF to be the legal archival copy.
  • You are crossing the German or French border, where hybrid is the dominant private-sector format.
  • You want one file you can email and one file you can ingest.

Use both, in parallel, when the mandate requires Peppol delivery (UBL) and the tax archive requires a human-readable copy (PDF/A-3). This is the actual reality for B2B in Belgium since January 2026 and will be the reality in France from September 2026 onwards.

The cross-border edge cases

A few patterns that catch people out:

  1. Buyer requires Factur-X, supplier sends ZUGFeRD. No conversion needed if both are 2.1 EN 16931. Just confirm the version. We see pipelines doing pointless XML rewrites here.
  2. Buyer requires UBL over Peppol, supplier has only Factur-X. You have to extract the embedded XML, transform CII to UBL, and ship over Peppol. This is the most common “hybrid to pure-XML” gap.
  3. Supplier sends Factur-X with UBL inside, buyer’s parser expects CII. Silently parses zero lines. You need a parser that probes both.
  4. PDF/A-3 valid, embedded XML invalid. PDF/A-3 validation does not look inside the attachment. You need a validator that checks the XML against EN 16931 separately.

This is exactly what our public validator at /check does: it inspects the PDF/A-3 conformance, extracts the attachment regardless of whether it is CII or UBL, and validates the XML against the EN 16931 semantic model. You get a verdict for each layer separately, so when something fails you know whether the problem is the container, the schema, or the data.

The takeaway

Stop thinking of Factur-X, ZUGFeRD, and UBL as alternatives. Factur-X and ZUGFeRD are the same hybrid envelope under two national brands. UBL is the pure-XML format over Peppol. Real cross-border pipelines in 2026 produce both, archive the hybrid, and ship the pure XML. Anyone telling you to pick one has not crossed enough borders.


← Back to all articles