Guide
ZUGFeRD Invoices on Shopify: How to Generate Them Automatically
Updated 2026-06-13
If you sell to business customers in Germany through Shopify, you have probably heard that a plain PDF invoice is on its way out. The format that most German B2B sellers will reach for is ZUGFeRD, a hybrid document that looks like an ordinary PDF but carries a machine-readable invoice inside it. This guide explains what ZUGFeRD actually is, why your current PDF stops counting as a B2B e-invoice, which ZUGFeRD profiles are valid under the German mandate, and how to produce the format automatically from Shopify orders without hand-building XML.
A note before we start: Faktwise is invoicing software, not a tax advisor. The facts below are drawn from the German e-invoicing rules and the official format specifications, but for your specific situation you should confirm with your accountant or Steuerberater.
What ZUGFeRD is, in plain terms
ZUGFeRD is a hybrid invoice format. A single file does two jobs at once:
- It is a normal PDF/A-3 document that a human can open and read, with your usual layout, logo and line items.
- Embedded inside that PDF is a structured XML file (named
factur-x.xml) that accounting software can read automatically, with no copy-typing and no OCR.
So one file serves both the person in the buyer’s accounts department who wants to glance at the invoice, and the software on their side that wants to book it. That dual nature is the whole point. The recipient does not have to choose between a readable document and a machine-readable one, because ZUGFeRD is both.
ZUGFeRD is built on the European invoice standard EN 16931, the same semantic standard behind XRechnung (covered in our Germany e-invoicing guide). The XML inside a ZUGFeRD file uses the UN/CEFACT CII syntax.
ZUGFeRD and Factur-X are the same thing
If you also sell into France, this matters. Factur-X is the French twin of ZUGFeRD. The two are the same specification published under two names, which is why a single hybrid file travels across both markets. France is running its own e-invoicing reform, with receiving for all businesses from 1 September 2026 and issuing phased in from September 2026 for larger companies and September 2027 for smaller ones. Preparing a clean ZUGFeRD output for Germany puts you most of the way toward France as well.
Why a plain PDF stops counting for B2B
Germany is phasing in mandatory e-invoicing for domestic B2B transactions, meaning supplies between two businesses that are both established in Germany. The timeline, as it stands and with no delays announced:
- 1 January 2025: every German business must be able to receive structured e-invoices. This is already live.
- 1 January 2027: issuing becomes mandatory for businesses with more than EUR 800,000 turnover in the prior year.
- 1 January 2028: issuing becomes mandatory for all German businesses for domestic B2B supplies.
Here is the part that catches people out. Under these rules an e-invoice has to be a structured electronic format conforming to EN 16931. A PDF attached to an email is not structured data, it is a picture of an invoice. From the relevant deadline, a plain PDF no longer counts as a B2B e-invoice in Germany. It becomes an “other invoice”, which does not satisfy the mandate for domestic B2B supplies.
ZUGFeRD is the bridge. Because the readable PDF carries the structured EN 16931 XML inside it, the same file that your customer can open and read also qualifies as a proper e-invoice. You keep the familiar-looking document and gain the machine-readable layer that the law now wants.
Which ZUGFeRD profiles are valid
ZUGFeRD is not one fixed level of detail. The specification defines several profiles, which control how much invoice data the embedded XML carries:
- MINIMUM
- BASIC-WL (basic without lines)
- BASIC
- EN 16931
- EXTENDED
This distinction is not cosmetic. For the German mandate, the embedded XML has to be a complete VAT invoice, and the two lowest profiles are not.
- MINIMUM and BASIC-WL do not satisfy the German mandate. They are too thin: they leave out invoice line detail, so they are not a full e-invoice on their own.
- BASIC, EN 16931 and EXTENDED are valid for the mandate.
In practice, EN 16931 is the sensible default profile for Shopify B2B invoices. It carries the full set of EN 16931 invoice fields, which is exactly what your customer’s accounting system expects to ingest. So when any tool or app claims “ZUGFeRD support”, the question to ask is always: which profile does it generate? A tool that only emits MINIMUM or BASIC-WL has not solved the mandate for you.
How to produce ZUGFeRD from Shopify orders
Shopify on its own does not generate ZUGFeRD. Order confirmations are not invoices, and they certainly do not contain an embedded EN 16931 XML layer. To get a valid ZUGFeRD file out of a Shopify order, something has to assemble the structured data, build the hybrid PDF, and check it. There are two broad routes.
Route one: an external invoicing or accounting system wired to your Shopify store. You export or sync order data, and a separate tool builds the ZUGFeRD documents. This can work, but it adds a system to maintain and a sync to keep healthy, and you have to make sure the data Shopify hands over (especially the buyer’s VAT ID) is captured in the first place.
Route two: a Shopify app that reads order data directly and produces the document inside the same flow. This is usually the lower-maintenance path for a store, because the invoice is generated from the order at the moment it is paid.
Either way, producing a correct ZUGFeRD invoice involves the same steps under the hood:
- Gather the right data from the order. Net amounts per VAT rate, the correct VAT treatment for the sale, the supply date, a unique sequential invoice number, and your full seller details. For B2B you also need the buyer’s VAT ID. Capturing that at checkout, rather than chasing it by email afterwards, saves a lot of back-and-forth.
- Apply the correct VAT logic and wording. A domestic German sale carries 19 percent (or the reduced 7 percent). An intra-EU B2B supply of goods to another EU business with a valid VAT ID is zero-rated under Art. 138, and the invoice must say so. A reverse-charge service shifts the VAT to the buyer and must carry the reverse-charge wording. Exports are handled differently again. The right exemption reference has to appear, not just the right number.
- Build the hybrid file. Render the human-readable PDF/A-3 and embed the
factur-x.xmlin the chosen profile (EN 16931 for the default B2B case). - Validate before it goes out. This is the step people skip and regret. A file that fails validation gets rejected by the recipient.
On that last point, you do not have to take a tool’s word for it. You can run a finished file through our free Rechnung validator to check that it is well-formed before you rely on it.
VAT IDs and the EU VIES check
For the zero-rated intra-EU B2B case in particular, the buyer’s VAT ID has to be valid. The EU runs a service called VIES that lets you confirm a VAT ID is registered. A good setup validates the VAT ID at checkout against VIES and stores the result, so you are not issuing a zero-rated invoice against a number that turns out to be wrong. We cover the mechanics of that scenario in our reverse charge and intra-EU guide.
Archiving: keep the original ZUGFeRD file
Generating the invoice is only half the obligation. German record-keeping rules (GoBD) require you to keep invoices unchanged, in their original format. For a ZUGFeRD invoice, the original format is the hybrid PDF/A-3 with its embedded XML. You keep that exact file, not a re-print, not a re-exported copy, and not the XML stripped out on its own.
A few practical points:
- Retention period: the legal minimum is 8 years (since 2025). Keeping the file for 10 years is a safe margin.
- Immutability: you must not edit or delete an issued invoice. If something is wrong, you correct it by issuing a credit note, not by changing the original.
- The XML is part of the record. Because the structured data is what makes a ZUGFeRD file an e-invoice, your archive has to preserve the whole hybrid file, not just a visual PDF.
Whatever produces your ZUGFeRD invoices should also store them this way automatically, so the archive is built as a by-product of normal selling rather than a manual filing job.
FAQ
Is ZUGFeRD a PDF or an XML file?
Both. ZUGFeRD is a hybrid: a readable PDF/A-3 with a structured EN 16931 XML file embedded inside it. A person reads the PDF, and software reads the embedded XML from the same file.
Which ZUGFeRD profile should I use for German B2B?
EN 16931 is the practical default. The mandate is satisfied by the BASIC, EN 16931 and EXTENDED profiles. The MINIMUM and BASIC-WL profiles do not satisfy it, because they do not carry a full invoice.
Is ZUGFeRD the same as Factur-X?
Yes. Factur-X is the French name for the same specification. One hybrid file works for both the German and French markets, which is convenient if you sell into both.
Can Shopify create ZUGFeRD invoices by itself?
No. Shopify order confirmations are not invoices and have no embedded XML layer. You need an external invoicing system connected to Shopify, or a Shopify app that generates the format directly from order data.
Does a plain PDF still work for German B2B?
Not as an e-invoice once the mandate applies to you. From the relevant deadline a plain PDF is treated as an “other invoice” for domestic B2B and does not meet the requirement. ZUGFeRD lets you keep a readable PDF while also meeting it.
If you would rather not assemble any of this by hand, Faktwise is a Shopify app that generates ZUGFeRD 2.4 and Factur-X invoices (in the EN 16931 profile) automatically when an order is paid, with the correct VAT treatment and wording, VAT ID capture and VIES validation at checkout, automatic credit notes on refunds, and a GoBD-style archive that keeps each original file. It is EU-hosted in Paris, free for up to 5 invoices a month, then a flat EUR 19/month. You can see the details on the pricing page. Faktwise is software, not tax advice, so check your own situation with your accountant.