ZUGFeRD for Shopify: the PDF invoice with the data inside it
Last updated 16 August 2026
ZUGFeRD is the format that lets you keep sending an invoice people can actually read. It looks like an ordinary PDF — logo, layout, totals — but a structured XML invoice is hidden inside the file, so your buyer's accounting software can book it without anyone re-typing a line. This is a plain-English explainer for Shopify merchants: what ZUGFeRD is, how it differs from XRechnung and Peppol, which profile to send, and what it takes to produce a valid one from a Shopify order.
What ZUGFeRD actually is
ZUGFeRD is a hybrid e-invoice format maintained by FeRD, the German forum for electronic invoicing. One file does two jobs:
- a PDF/A-3 document — the invoice as a person expects to see it, archivable and unchanged in the buyer's inbox;
- an EN 16931 XML invoice embedded inside that PDF — the same invoice as structured data, which software reads directly.
Since version 2.x, ZUGFeRD is technically aligned with the French Factur-X format — the same hybrid approach under a different name — so a single implementation covers both markets. See our EN 16931 explainer for the data model underneath.
ZUGFeRD vs XRechnung vs Peppol
These names get treated as competing options. They aren't — they sit at different layers, and a German B2B invoice usually involves more than one:
| Name | What it is |
|---|---|
| EN 16931 | The European semantic standard — what data an invoice must carry. Everything below is built on it. |
| ZUGFeRD | A hybrid format: PDF/A-3 with EN 16931 XML (CII) embedded inside. Human-readable and machine-readable in one file. The everyday B2B choice. |
| XRechnung | Germany's pure-XML profile of EN 16931 — no PDF, machine-only, required by public bodies. See XRechnung for Shopify. |
| Peppol BIS Billing 3.0 | Another profile of EN 16931, in UBL — the document shape used on the Peppol network. |
| Peppol (the network) | Not a format — the delivery route. ZUGFeRD is usually emailed, but it can travel other ways too. |
When a Shopify merchant needs ZUGFeRD
- You sell B2B in Germany. German businesses have had to be able to receive structured e-invoices since 1 January 2025, and the obligation to send them phases in across 2027–2028. ZUGFeRD is one of the two formats in everyday use — see our guide to the 2027 mandate.
- Your buyer still wants to look at the invoice. Small and mid-sized German buyers often prefer ZUGFeRD precisely because nothing about their process visibly changes — the PDF still arrives by email.
- You also sell into France. Factur-X is the same hybrid format, so one pipeline serves both mandates — see EU B2B e-invoicing on Shopify.
Which profile to send
ZUGFeRD ships several profiles — how much of the invoice is in the XML. Picking the wrong one is the most common way a merchant ends up with a file that looks fine and isn't compliant:
| Profile | What it's for |
|---|---|
| Minimum / Basic WL | Header totals only, no full line items. Useful for booking aids — not a compliant e-invoice under the German rules on its own. |
| Basic | Line items included, but a restricted subset of EN 16931. Fine for simple cases, short of the full standard. |
| EN 16931 (Comfort) | The one to send for German B2B. A complete EN 16931 invoice — this is what "ZUGFeRD-compliant" should mean for a Shopify store. |
| XRechnung | The German public-sector profile carried in the ZUGFeRD family. Needed when you invoice public bodies, with a Leitweg-ID. |
| Extended | Extra fields for specialised industry flows. More than a Shopify store normally needs. |
Can Shopify produce a ZUGFeRD on its own?
No. Shopify emails a PDF, and that PDF is exactly what it looks like — a picture of an invoice. Out of the box Shopify cannot:
- map an order into the EN 16931 core fields the embedded XML has to carry,
- produce a PDF/A-3 container, which is what makes embedding legal and archivable,
- embed the XML under the filename and relationship the standard expects,
- validate the result against the EN 16931 and ZUGFeRD rules before it goes out, or
- keep the printed page and the embedded data in agreement when either one changes.
That last point is the one that bites. A PDF with an XML file stapled to it is not a ZUGFeRD; it's a PDF with an attachment. That's the gap an e-invoicing app fills.
What a valid ZUGFeRD has to get right
| Element | Why it matters |
|---|---|
| PDF/A-3 container | Not any PDF. The archival profile is what permits an embedded file and keeps the invoice readable years later. |
| Correct embedding | The XML must sit inside the PDF under the expected filename with the right relationship and metadata — otherwise nothing downstream finds it. |
| Page and data agree | What is printed and what is embedded must be the same invoice. A mismatch is a hard failure, and the classic cause is a PDF template edited independently of the data. |
| Seller & buyer identity | Legal names, addresses and VAT numbers (USt-IdNr.) as structured fields, not a block of text on the page. |
| Line items | Quantity, unit price, net amount and VAT category per line — structured, not a free-text description. |
| VAT breakdown | Tax grouped by rate and category, with the correct code and legal note for reverse charge or exemption. |
| Totals that reconcile | Net, VAT and gross must add up to the cent, in the XML as well as on the page, or validation rejects the invoice. |
How a Shopify store sends a ZUGFeRD
| Step | What happens |
|---|---|
| 1 · Capture | Collect the buyer's company name and VAT number at checkout or on the order — a B2B invoice needs a buyer, not just a shipping address. |
| 2 · Map | Turn the Shopify order into the EN 16931 core fields under the EN 16931 (Comfort) profile. |
| 3 · Get VAT right | Derive net and VAT correctly — including reverse charge for cross-border B2B — and check the buyer's VAT number against VIES. |
| 4 · Render & embed | Produce the human-readable PDF from the same data, as PDF/A-3, and embed the XML inside it. |
| 5 · Validate | Run the file against the EN 16931 and ZUGFeRD rules so it passes before it is ever sent. |
| 6 · Deliver | Email it — the normal route for ZUGFeRD — or send it over a Peppol Access Point if that is what the buyer expects, and track the outcome. |
The part everyone underestimates: VAT correctness
ZUGFeRD is friendlier than XRechnung to look at, and just as unforgiving underneath. The embedded invoice is checked to the cent, and it is checked against the page — if net, VAT and gross don't reconcile, the invoice is rejected, and a rejected invoice that was legally required is a sale that hasn't been billed. Getting clean figures out of Shopify is harder than it looks: whether your prices include or exclude tax changes how net and VAT are derived, rounding across many lines can leave you a cent out, and selling to a VAT-registered business in another EU country usually means reverse charge — 0% VAT with the right category code and legal note on the face of the invoice. Producing a valid hybrid file is only half the job; the numbers inside it have to be right too.
Frequently asked questions
What is ZUGFeRD?
Germany's hybrid e-invoice format: a PDF/A-3 invoice a person can read, with an EN 16931 XML invoice embedded inside it so software can book the data directly. It's maintained by FeRD and technically aligned with the French Factur-X format.
Can Shopify create a ZUGFeRD invoice?
No. Shopify's order confirmations and PDF invoices are plain PDFs — no embedded EN 16931 XML, no PDF/A-3 container, no validation. You add ZUGFeRD output with an app that maps the order to EN 16931 data, renders a matching PDF and embeds the XML correctly.
What's the difference between ZUGFeRD and XRechnung?
Both carry an EN 16931 invoice, packaged differently. ZUGFeRD is hybrid — a readable PDF with the XML embedded — and suits ordinary B2B. XRechnung is pure XML with no PDF and is what German public bodies require. Many German merchants need both, because the buyer decides.
Which ZUGFeRD profile should I send?
The EN 16931 profile — previously called Comfort. Minimum and Basic WL aren't valid e-invoices under the German rules on their own, the XRechnung profile targets public-sector buyers, and Extended adds industry fields a Shopify store rarely needs.
Is a ZUGFeRD file just a PDF invoice?
It looks like one — that's the point — but a plain PDF isn't a ZUGFeRD. It has to be PDF/A-3 with the EN 16931 XML attached inside under the expected filename, and the numbers in the XML must match what's printed on the page.
How do I send a ZUGFeRD invoice from a Shopify store?
Capture the buyer's company details and VAT number; map the order to the EN 16931 fields; get the VAT right including reverse charge; render the PDF from the same data and embed the XML as PDF/A-3; validate; then send by email, or over Peppol if the buyer prefers.
This guide is general information for Shopify merchants, not legal or tax advice. Rules, mandates and thresholds vary by country and change over time — confirm your obligations with a qualified tax adviser.
E-invoices from your Shopify B2B orders
Zeppol turns every B2B order into an EN 16931 document, checks it against the EU and the German rules, and sends it over Peppol or by email. Join the list and I'll be in touch before the deadline.