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:

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:

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:

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.

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:

  1. 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.
  2. 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.
  3. Build the hybrid file. Render the human-readable PDF/A-3 and embed the factur-x.xml in the chosen profile (EN 16931 for the default B2B case).
  4. 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:

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.