Free Factur-X & ZUGFeRD Validator (PDF + CII XML)

Validate Factur-X and ZUGFeRD 2.x PDF/A-3 invoices and their embedded CII XML against the official 1.08 schematron — all five profiles (MINIMUM, BASIC-WL, BASIC, EN 16931, EXTENDED). Upload the PDF directly. Free, no signup, instant report.

How the Factur-X / ZUGFeRD validator works

1

Upload the PDF (or raw CII XML)

Drop the Factur-X / ZUGFeRD PDF/A-3 file in. The server extracts the embedded factur-x.xml / ZUGFeRD-invoice.xml attachment automatically. If you only have the raw CII XML, you can upload that too.

2

Auto-detect profile, run profile rules

The validator reads the CustomizationID URN, identifies the profile (MINIMUM, BASIC-WL, BASIC, EN 16931 or EXTENDED) and applies the matching official Factur-X 1.08 schematron — including codelist enumerations (ISO 4217 currency, ISO 3166 country, UNCL codes).

3

Read the report and view extracted XML

See the profile name, rule IDs with their plain-English descriptions, and the extracted CII XML so you can inspect the actual invoice content embedded in the PDF. Re-upload after fixing — the validator runs again instantly.

What the Factur-X validator covers

All 5 conformance profiles

MINIMUM (header info only, no line items), BASIC-WL (without line items), BASIC (EN 16931 subset), EN 16931 (full European core, also called COMFORT), and EXTENDED (superset with additional UN/CEFACT structures). Each profile has its own schematron — the validator applies the right one based on the declared URN.

PDF extraction (PDFBox-powered)

The server uses Apache PDFBox to locate the embedded XML attachment in the PDF's /Names EmbeddedFiles tree or the /AF associated-files array (the PDF/A-3 way). Filename matching is case-insensitive and accepts factur-x.xml, ZUGFeRD-invoice.xml and xrechnung.xml.

Codelist enumerations

ISO 4217 currency codes, ISO 3166-1 alpha-2 country codes and UN/EDIFACT (UNCL) code lists for payment means, units of measure, document types and VAT categories — all validated against the official enumerations inlined in the compiled schematron.

Calculation and VAT logic

Line totals, tax breakdowns by category, charges, allowances, prepaid amounts and the final payable amount are all recalculated and cross-checked. VAT category logic (S, Z, E, AE, K, G, O) is validated per the EN 16931 BR-S-*, BR-Z-* etc. rules.

Factur-X vs ZUGFeRD — what's the difference?

Practically nothing. Factur-X 1.x and ZUGFeRD 2.x are the same format, defined jointly by France's FNFE-MPE and Germany's FeRD. Both use UN/CEFACT Cross Industry Invoice (CII) XML embedded in a PDF/A-3 wrapper. They share the same XML schema, the same five profiles and the same schematron rules. The only differences are branding and the specific code-list versions referenced by each profile. Any tool validating one validates the other — including aiDoks.

Factur-X is the mandated B2G format in France via Chorus Pro and becomes mandatory for B2B exchanges between French companies progressively from 2026. ZUGFeRD has been the dominant German hybrid format alongside XRechnung for almost a decade. If you exchange invoices in either market, your invoice must pass the validation rules — non-compliant invoices are rejected at the portal and never reach the buyer.

Common Factur-X validation errors

  • BR-01 — Mandatory field missing. Each profile has its own mandatory-field list; MINIMUM is the shortest, EXTENDED the longest. The error message names the missing element.
  • BR-CL-01 — Code-list value not in the official enumeration. Common offender: a currency code that does not exist in ISO 4217, or a UN/ECE Rec 20 unit code that has been retired.
  • BR-CO-13 — Tax total amount mismatch. Sum of tax-category subtotals must equal the document-level TaxTotalAmount.
  • BR-DEC-XX — Wrong number of decimal places. CII amounts must use 2 decimals for monetary totals, 4 for unit prices.
  • FX-SCH-A-XX — Profile-specific Factur-X schematron error. The error message names which profile rule fired and what value was expected.

Validating PDFs from any tool

Whether the PDF was generated by Mustangproject, akretion's factur-x library, SAP Document Compliance, DATEV, Lexware, Sage, Quadient AP, or your own PDFBox-based pipeline — if the PDF/A-3 contains an embedded CII XML attachment with a recognised filename, the aiDoks validator extracts and validates it. Useful for QA-ing your own Factur-X output before sending, and for verifying supplier invoices before importing them into accounting.

Factur-X / ZUGFeRD validator: FAQ

What is Factur-X and how does it relate to ZUGFeRD?

Factur-X is the Franco-German hybrid e-invoice standard: a PDF/A-3 file with a human-readable invoice layout AND a machine-readable CII XML invoice embedded inside it. ZUGFeRD 2.x and Factur-X 1.x are technically identical — same XML, same profiles. Factur-X is mandated for B2G in France (Chorus Pro) and B2B from 2026; ZUGFeRD is widely used in Germany alongside XRechnung. Upload the PDF and the validator extracts the embedded XML automatically.

Which Factur-X profiles are validated?

All five conformance profiles: MINIMUM, BASIC-WL (without line items), BASIC, EN 16931 (also called COMFORT) and EXTENDED. The validator detects which profile the document declares and applies the correct rule set for that level — a MINIMUM invoice is only checked against MINIMUM rules, an EXTENDED invoice gets the full EN 16931 baseline plus the EXTENDED additions.

Can I upload the PDF directly, or do I need to extract the XML myself?

Upload the PDF directly. The server uses Apache PDFBox to find the embedded factur-x.xml / ZUGFeRD-invoice.xml attachment, extracts the CII XML and validates it against the matching profile schematron. You also get the extracted XML in the response if you want to inspect it.

Does the validator work for ZUGFeRD 1.x or only Factur-X / ZUGFeRD 2.x?

Factur-X 1.x and ZUGFeRD 2.x (which are the same format) are fully supported. ZUGFeRD 1.x is a different older format with a different XML namespace and is not currently validated — most German producers have already migrated to 2.x / Factur-X.

Is the Factur-X validator free?

Yes, free without an account. Upload a Factur-X / ZUGFeRD PDF and get the full validation report instantly with the profile name, rule IDs and plain-English error descriptions.

What rule set powers the validation?

The validator loads the official Factur-X 1.08 schematron files (one per profile: MINIMUM, BASIC-WL, BASIC, EN 16931, EXTENDED) plus the EN 16931 CII baseline. Code-list enumerations (currency codes, country codes, UNCL codes) are also checked. The same rule set the official FNFE-MPE and ZUGFeRD validators use.

Validate your Factur-X PDF in seconds

Free, anonymous, all 5 profiles and full codelist enumeration checks.