ZUGFeRD for WooCommerce: A Complete Guide to Germany's 2027 B2B Mandate
Germany requires e-invoices in ZUGFeRD or XRechnung from January 2027. Here is what every German B2B WooCommerce store needs to know about the format, the mandate timeline, and how to comply.
From January 1, 2027, every German B2B store with turnover above €800,000 must issue invoices in a structured electronic format. Plain PDF is no longer enough. This guide explains what ZUGFeRD is, what the mandate actually requires, and how to make your WooCommerce store compliant — practically, today.
What is ZUGFeRD?
ZUGFeRD (Zentraler User Guide des Forums elektronische Rechnung Deutschland) is Germany's national standard for electronic invoicing. It's a hybrid format: a single PDF/A-3 file that contains both a human-readable PDF and a machine-readable XML attachment. Recipients without an automated processing system can read the PDF; recipients with one parse the embedded XML directly.
ZUGFeRD aligns with the European EN 16931 norm and is accepted across the EU as one of the compliant e-invoice formats. The current version is 2.3.x (as of 2026), with backward compatibility for 2.0/2.1.
Germany's B2B e-invoicing mandate timeline
The mandate was introduced via the Wachstumschancengesetz (Growth Opportunities Act), passed in March 2024. It's rolled out in three phases:
- Phase 1 — January 1, 2025 (already live): every German business must be able to receive EN 16931-compliant e-invoices.
- Phase 2 — January 1, 2027: businesses with annual turnover above €800,000 must issue e-invoices for B2B transactions. Plain PDF and unstructured electronic formats are no longer accepted.
- Phase 3 — January 1, 2028: the issue requirement extends to all businesses (with the small-business exemption under §19 UStG retaining a small carve-out).
Accepted formats: ZUGFeRD 2.x and XRechnung. Exemptions: B2C, exports outside the EU, and small businesses under §19 UStG (annual turnover up to €22,000).
Why ZUGFeRD over plain XML?
Germany also accepts XRechnung — a pure XML format with no PDF wrapper — as a compliant alternative. So why does ZUGFeRD dominate B2B sales workflows?
The hybrid format wins because:
- Recipients without an AP (accounts payable) automation system can still read the human-readable PDF.
- Recipients with AP automation parse the embedded XML directly — no manual data entry.
- Same file works for both — no need to ship different formats per buyer.
XRechnung wins for B2G (business-to-government) workflows where the recipient's system is XML-only (e.g., the federal Zentrale Rechnungseingangsplattform / ZRE). For pure B2B WooCommerce stores, ZUGFeRD is the more practical default.
ZUGFeRD profiles — which one do you need?
ZUGFeRD ships in five profiles, each adding more detail:
- BASIC — header-level data only (totals, parties). Rare in production.
- BASIC WL — basic without lines. Even rarer.
- EN16931 (Comfort) — full line-item detail. The default for B2B WooCommerce. Use this.
- EXTENDED — additional fields for industry-specific cases (construction, freight forwarding).
- XRECHNUNG — strictest profile, B2G-aligned. Use if you sell to German federal/state buyers.
For a typical WooCommerce B2B store: pick the EN16931 (Comfort) profile. It carries full invoice line-item data, satisfies the EU mandate, and works with virtually all German AP systems.
How to generate ZUGFeRD invoices in WooCommerce
The technical challenge is threefold. ZUGFeRD generation requires:
- Building EN 16931-compliant CII XML from your WooCommerce order data (line items, tax rates, buyer info, etc.).
- Generating a PDF/A-3 file (not a regular PDF). PDF/A-3 is an archival-grade variant that supports embedded file attachments.
- Embedding the XML as a PDF/A-3 attachment named
factur-x.xml(legacy name kept for compatibility), with the correct AFRelationship and XMP metadata.
Most WooCommerce invoice plugins generate basic PDFs. They'll satisfy the "has an invoice" requirement but miss steps 2 and 3 — meaning the result is a PDF, not a ZUGFeRD-compliant hybrid PDF/A-3. German AP systems will reject it.
invoice9 generates ZUGFeRD 2.x natively as part of its core feature set. It's the only plugin on the WooCommerce Marketplace shipping the German country-specific format. Per-locale format auto-selection means a German B2B order automatically generates a ZUGFeRD invoice; no per-order configuration needed.
GoBD compliance — beyond just the format
German tax law (GoBD — Grundsätze zur ordnungsmäßigen Führung und Aufbewahrung von Büchern) requires more than just the right format. It also requires:
- Immutable invoice records — once issued, the invoice must be unalterable. Edits aren't allowed; you issue a credit note and a new invoice instead.
- Sequential numbering — invoice numbers must be a continuous sequence (gaps are explicitly permitted under UStAE 14.5 Abs. 10, but most stores still aim for unbroken).
- 10-year archive — invoices must be retained for 10 years per §147 AO.
- Tamper-evident hash — recommended for digital archives to prove the file hasn't been modified.
These are operational concerns separate from the format itself. Any plugin you choose for ZUGFeRD generation should also handle these archival requirements out of the box.
Validation — proving your ZUGFeRD invoice is compliant
Generating XML that looks like ZUGFeRD is not the same as generating XML that passes German recipient validation. EN 16931 defines a Schematron rule set with hundreds of constraints (mandatory fields, format constraints, cross-field consistency). ZUGFeRD adds further profile-specific rules.
A syntactically valid CII XML can fail Schematron validation if a required field is empty, a date format is wrong, or a tax breakdown doesn't reconcile. German AP systems run these validations before ingesting; a failure means rejection.
Best practice: validate every invoice before delivery. invoice9 ships built-in Schematron validation against the EN 16931 ruleset, so you know the invoice is compliant before it leaves your store.
Common pitfalls when generating ZUGFeRD
- Forgetting the seller VAT identifier (
BT-30) — German B2B invoices require it. - Wrong currency code: must be ISO 4217 (
EUR, not the symbol). - Date formats: dates must be
YYYY-MM-DDin the XML (GermanDD.MM.YYYYonly goes in the human-readable PDF). - Decimal separators: always
.in XML, never,(German PDFs show commas; XML doesn't). - Reverse-charge invoices missing the legal reverse-charge text (required for cross-border B2B intra-EU).
Getting started checklist
- Identify whether you're in mandate scope:
- B2B sales? (B2C is exempt)
- Annual turnover > €800K? (Phase 2 scope)
- If under €22K turnover, you're exempt under §19 UStG.
- Choose a WooCommerce plugin that generates ZUGFeRD natively (not generic PDF + XML).
- Configure your seller info: legal company name, VAT ID, registered address, IBAN, BIC.
- Generate a sample invoice and validate it against the EN 16931 Schematron ruleset.
- Send to a known German B2B buyer with an AP system; confirm they can parse the embedded XML.
- Configure auto-attachment to the WooCommerce
customer_completed_orderemail so every paid order ships with a compliant invoice. - Set sequential numbering, e.g.,
RE-{YYYY}-{NNNNN}. - Archive every issued invoice for 10 years (audit-ready).
FAQ
Can I use ZUGFeRD if I'm under €800K turnover?
Yes — voluntary use is allowed and recommended. You'll be ready when Phase 3 (Jan 2028) brings all businesses into scope.
What about international (non-German) customers?
ZUGFeRD is recognized EU-wide and increasingly internationally. Non-EU buyers may prefer a plain PDF. Per-locale format selection (which invoice9 does automatically) is the cleanest answer.
How does ZUGFeRD relate to PEPPOL?
They solve different problems. ZUGFeRD is a format (how the invoice is structured). PEPPOL is a network (how invoices are transmitted between parties). You can send a ZUGFeRD-formatted invoice via PEPPOL — the two are complementary.
I sell on both Shopify and WooCommerce. Do I need different plugins?
invoice9 ships on both. The same template format and same e-invoice library powers both stores, so a customer who orders from your Shopify store and your WooCommerce store gets visually identical, format-equivalent invoices.
Try invoice9 for WooCommerce
ZUGFeRD 2.x. XRechnung. Factur-X. PEPPOL. Drag-drop template editor. EU-hosted. From $5/month.
See plugin →