← Latest news
· 5 min read

Factur-X, ZUGFeRD, UBL: e-invoicing formats explained

Factur-X, ZUGFeRD, UBL: e-invoicing formats explained

If you take invoices from European suppliers, you have probably started seeing files that look like ordinary PDFs but behave oddly — or XML attachments you weren't expecting.

This is what those are.

The problem they solve

A normal PDF invoice is a picture of an invoice. It's designed to be read by a person. Software can extract data from it, but only by working out what the pixels mean, which is why extraction accuracy is a subject at all.

An e-invoice carries the data as structured fields. The supplier's system writes <TotalAmount>1248.00</TotalAmount> and your system reads exactly that. No interpretation.

The catch is that several standards exist for doing this, and they're not the same.

The main ones

UBL (Universal Business Language) — a pure XML format. No visual document at all, just structured data. Widely used in the Netherlands, Scandinavia and public procurement across Europe. Opened in a normal PDF reader it does nothing, because it isn't a PDF.

Factur-X — the French-German hybrid, and the one causing most of the confusion. It's a real PDF with an XML file embedded inside it. Open it and you see a normal invoice. Your software can also pull the embedded XML and read the data exactly. Both audiences served by one file.

ZUGFeRD — the German standard. From version 2.1 onward, ZUGFeRD and Factur-X are technically the same specification with two names, which is why you'll see them used interchangeably. Older ZUGFeRD 1.0 files are a different structure. Germany's phased e-invoicing mandate is why these are arriving in more inboxes.

PEPPOL BIS — not a file format so much as a delivery network with a format attached. Used for public-sector invoicing across much of Europe. The document is UBL; PEPPOL is how it travels.

FatturaPA — Italy's national format, XML, and mandatory for domestic invoicing there. Routed through the government's exchange system rather than sent directly.

At a glance

Format What it is Where you'll see it
UBL Pure XML, no visual document Netherlands, Scandinavia, EU public sector
Factur-X PDF with XML embedded inside France, Germany
ZUGFeRD Same spec as Factur-X from v2.1 Germany
PEPPOL BIS UBL delivered over the PEPPOL network EU public sector
FatturaPA XML via the government exchange Italy, mandatory domestically

Profiles: the part that catches people out

Factur-X and ZUGFeRD both come in profiles, which determine how much data the embedded XML actually contains.

  • MINIMUM — barely anything. Totals and a few identifiers.
  • BASIC WL — header data, no line items.
  • BASIC — header plus simple lines.
  • EN 16931 (sometimes "COMFORT") — the full European standard set.
  • EXTENDED — everything, plus optional extras.

A supplier can send you a technically valid Factur-X file at MINIMUM profile that contains almost no structured data. The file is compliant. It just doesn't have the lines in it.

So "we support Factur-X" is a claim worth interrogating. Supporting the format is not the same as getting useful data from every file that carries the name — a BASIC WL file has no lines in it, so line-level work still lands on a person.

What this means practically

You'll receive a mix, indefinitely. Some suppliers send structured e-invoices, most send PDFs, some send photographs of paper. Any process that only handles one of these doesn't handle your post.

Structured data should be read, not scanned. If a file has an embedded XML payload, running OCR over the visual layer is the wrong move — you'd be interpreting a picture when the exact values are sitting in the file. Some tools do this anyway.

Compressed attachments break the assumption. Factur-X permits the embedded XML to be compressed. Not every reader handles that, and when it can't, it falls back to reading the document visually — with the accuracy characteristics that implies.

Mandates are arriving on different timetables. Italy already requires domestic e-invoicing. France, Germany, Poland, Belgium and Spain are all at various stages. If you have EU suppliers, the proportion of structured invoices in your inbox is going to rise whether or not you do anything.

What to ask a tool

Which profiles does it read? "Factur-X support" that only handles EN 16931 misses BASIC files, and vice versa.

Does it detect embedded XML automatically? You shouldn't have to sort your inbox by file type.

What does it do with compressed payloads? The honest answer is usually "falls back to extraction". That's fine — but you want to know it's happening, because the accuracy profile is different.

Does it still handle a photo of a receipt? Structured invoicing doesn't remove the scruffy end of the post. It adds a new category alongside it.

The short version

UBL and FatturaPA are pure XML. Factur-X and ZUGFeRD are PDFs with XML inside. PEPPOL is how they travel. Profiles determine how much is actually in there.

None of it removes the need to handle the photograph a site manager sent at 6pm. It just means a growing slice of your documents could be read exactly rather than interpreted — if the software you're using bothers to look.


Cribble parses embedded XML where it's present and falls back to extraction where it isn't — including compressed Factur-X, which can't be read directly. Either way you get per-field confidence on the result.

See your own paperwork read.

One simple plan. Sign up and forward your first document today.

Get started