Factur-X and ZUGFeRD: hybrid PDF invoice standard
Factur-X (France/Germany) and ZUGFeRD embed a structured XML invoice inside a PDF/A-3 file. Here is how the standard works and how to read these hybrid invoices.
What is a hybrid invoice?
A Factur-X or ZUGFeRD invoice is a PDF file that contains two things at once: a human-readable PDF (the visible invoice) and a machine-readable XML file embedded as an attachment (the structured data). Both coexist in a single PDF/A-3 file.
This dual format is the best of both worlds: humans read the PDF, accounting software reads the XML automatically. It is the mandatory e-invoicing format in France (since 2026) and widely adopted in Germany and Belgium.
The format was standardized by FNFE-MPE (France) and FeRD (Germany) and is now the official e-invoicing format for B2G and B2B transactions in both countries.
The EN 16931 standard
The embedded XML follows the European standard EN 16931 (the semantic data model for electronic invoices). Factur-X and ZUGFeRD are both implementations of this standard — they use the same data structure, with minor naming differences.
There are several compliance profiles, from the simplest (MINIMUM, only 6 fields) to the most complete (EXTENDED, all optional fields). Most businesses use the EN 16931 or COMFORT profile.
The alignment between Factur-X 1.0 and ZUGFeRD 2.0+ means that a single implementation can serve both markets — reducing development costs and enabling seamless cross-border invoicing.
Key fields in the embedded XML
- ExchangedDocument / ID — Invoice number — unique identifier for the document.
- SellerTradeParty / Name — Seller's name and VAT number (mandatory for tax compliance).
- SpecifiedTradeSettlement / GrandTotalAmount — Grand total including VAT — must match the PDF.
- ApplicableTradeTax — VAT breakdown: rate, basis amount, and tax amount for each VAT rate.
- BuyerTradeParty / Name — Buyer's legal name and VAT number — required for tax deduction on the buyer side.
- InvoiceReferencedDocument — Reference to the original invoice (for credit notes) or purchase order number.
- SpecifiedTradePaymentTerms — Payment due date, discount terms, and penalty conditions.
- SpecifiedTradeAllowanceCharge — Discounts and surcharges applied to the invoice — itemized by type and amount.
Factur-X vs ZUGFeRD: what is the difference?
Factur-X is the Franco-German standard, marketed as Factur-X in France and ZUGFeRD in Germany. Since ZUGFeRD 2.0 (2019), both are technically identical and fully interoperable.
The only real difference is branding and local adoption: French public entities and platforms (like Chorus Pro) use the Factur-X name, while German invoicing systems refer to ZUGFeRD. The embedded XML schema (CII — Cross Industry Invoice) is the same.
For implementers, this means you only need one XML parser to handle both. ValidateFin supports both names transparently.
Factur-X / ZUGFeRD profiles comparison
The standard defines multiple compliance profiles, from minimal to fully detailed:
| Profile | Fields | Line items | Use case |
|---|---|---|---|
| MINIMUM | ~6 fields | No | Archival — PDF is authoritative |
| BASIC WL | ~20 fields | No | Simple invoices without line detail |
| BASIC | ~30 fields | Yes | Standard invoices with line items |
| EN 16931 (COMFORT) | ~60 fields | Yes | Full EU compliance — recommended |
| EXTENDED | ~100+ fields | Yes | Industry-specific extensions |
| XRECHNUNG | ~60 fields | Yes | German public sector (B2G) |
Most businesses should target the EN 16931 (COMFORT) profile as it provides full compliance with the European standard while remaining manageable.
How to create a Factur-X invoice
Creating a Factur-X invoice involves three steps: generating the CII XML, embedding it in a PDF/A-3 container, and validating the result. Here is the workflow:
- Generate the CII XML — Create the XML file following the EN 16931 schema with all required fields for your target profile.
- Create the PDF/A-3 container — The PDF must conform to PDF/A-3 (ISO 19005-3), which allows embedding arbitrary files as attachments.
- Embed the XML as an attachment — Attach the XML file (named factur-x.xml or zugferd-invoice.xml) with the AFRelationship set to 'Alternative'.
- Add XMP metadata — Include Factur-X XMP metadata in the PDF catalog to declare the profile and conformance level.
- Validate the output — Use a Factur-X validator to verify PDF/A-3 conformance, XML schema validity, and profile compliance.
ValidateFin's Factur-X tool can extract and verify the XML from any existing Factur-X or ZUGFeRD PDF.
Common Factur-X validation errors
These are the most common issues found when validating Factur-X/ZUGFeRD invoices:
Missing XML attachment
The PDF does not contain an embedded XML file, or the file is named incorrectly (must be factur-x.xml or zugferd-invoice.xml).
PDF/A-3 non-conformance
The PDF is not a valid PDF/A-3 file — common when generating PDFs with standard libraries that don't support the archival format.
Profile mismatch
The XML claims a profile (e.g. EN 16931) but is missing required fields for that profile level.
VAT total inconsistency
The sum of individual VAT line amounts does not match the declared total VAT. Rounding differences above 1 cent trigger this error.
Missing XMP metadata
The PDF catalog does not include the required Factur-X XMP metadata declaring the profile and version.
Extract and verify your Factur-X invoices
Our Factur-X / ZUGFeRD viewer extracts the embedded XML from your PDF invoice and displays all billing data — seller, buyer, amounts, VAT lines, and invoice lines. 100% local, no data transmitted.
Open the Factur-X ViewerFrequently Asked Questions
What is the difference between Factur-X and ZUGFeRD?
Factur-X and ZUGFeRD are essentially the same format — a hybrid invoice that embeds structured XML inside a PDF/A-3 file. Factur-X is the French/European branding while ZUGFeRD is the German branding. Since ZUGFeRD 2.0, both are fully aligned and conform to EN 16931.
What are the Factur-X/ZUGFeRD profiles?
There are 6 profiles: MINIMUM (basic identification), BASIC WL (without line items), BASIC (with line items), EN 16931/COMFORT (full compliance), EXTENDED (additional fields), and XRECHNUNG (German public sector). Higher profiles enable more automated processing.
How can I extract XML data from a Factur-X PDF?
ValidateFin's Factur-X Viewer automatically extracts the embedded XML from any Factur-X or ZUGFeRD PDF file. Upload the PDF — the tool reads the embedded attachment, parses the XML, and displays all structured invoice data. Everything runs locally in your browser.
Is Factur-X mandatory in France?
Yes. Starting in 2026, all B2B invoices in France must be issued in electronic format, with Factur-X being one of the three accepted formats alongside UBL and CII. B2G invoicing through Chorus Pro already requires structured formats.
Can I use Factur-X for international invoicing?
Yes. Factur-X/ZUGFeRD is based on the European EN 16931 standard and is accepted across the EU. The EN 16931 COMFORT profile ensures compatibility with most European e-invoicing requirements.
What tools can generate Factur-X invoices?
Most modern ERP and accounting software (SAP, Sage, DATEV, Cegid) support Factur-X/ZUGFeRD export. Open-source libraries like Mustang (Java) and Factur-X (Python) are also available for custom implementations.
How do I know which profile to use?
For most B2B transactions, EN 16931 (COMFORT) is recommended. For French B2G via Chorus Pro, MINIMUM or BASIC may suffice. For German public sector (B2G), XRECHNUNG is required. Check your trading partner's requirements.
What is the difference between Factur-X and UBL?
Factur-X embeds CII (Cross Industry Invoice) XML inside a PDF. UBL is a standalone XML format without a PDF wrapper. Factur-X is preferred when human readability matters (the PDF), while UBL is used for pure machine-to-machine exchange (e.g. Peppol).
Can I convert a UBL invoice to Factur-X?
Yes, but it requires mapping UBL fields to CII fields and generating a PDF/A-3 wrapper. The semantic content is similar since both implement EN 16931, but the XML schemas differ. Specialized tools handle this conversion.
How does Chorus Pro handle Factur-X invoices?
Chorus Pro, the French government's invoicing platform, accepts Factur-X as one of its supported formats. It extracts the XML data for automated processing while archiving the PDF for legal purposes. The MINIMUM profile is the minimum requirement.