Free Peppol tools

Validate UBL against UBL 2.1, EN 16931 and Peppol BIS 3.0

Use this free UBL validator to validate UBL files in two steps: first against the UBL 2.1 schema, then against EN 16931 and Peppol BIS 3.0. The validator uses the official Schematron rules from OpenPeppol and CEN and picks up every new release automatically. You find their full text on docs.peppol.eu.

Drop your XML file here or click to choose a file

UBL, CII or another e-invoice format (.xml, .p7m), or a PDF with embedded XML (Factur-X, ZUGFeRD). The file stays on your own computer.

All test invoices with explanation →

Validate UBL in two layers

A UBL invoice can be wrong in two ways: in its form or in its content. That is why the validator first checks the schema and then the rules.

  1. XML schema (XSD): does the file fit the official UBL 2.1 schema? This is about the right elements, in the right order and with the right data type.
  2. Business rules (Schematron): does the content meet EN 16931 and Peppol BIS 3.0? For example, mandatory fields, code lists and calculations.

An Access Point rejects a file that does not match the schema before the business rules even come into play. So fix the schema errors first and then validate again.

Common schema errors in UBL 2.1

These are the errors we see most often in a home-made UBL export. We tested every example in the validator above.

  • Wrong order: UBL fixes the order of the elements. For example, cac:TaxTotal must come before cac:LegalMonetaryTotal.
  • Typo in an element name: the schema does not know cbc:InvoiceTypecode, for instance. Upper and lower case therefore matter.
  • Wrong data type: write a date as 2026-10-09 and an amount with a decimal point, such as 363.00.
  • Missing currency: every amount needs the currencyID attribute, for example currencyID="EUR".
  • Missing namespace: without the cbc or cac declaration at the top, the file is not even valid XML.

UBL or CII?

UBL and CII are the two XML syntaxes of the European standard EN 16931. Peppol BIS Billing 3.0, the standard in Belgium, uses UBL. CII is mainly used by Factur-X and ZUGFeRD, and XRechnung supports both. The validator detects the syntax by itself. More about the Peppol rules is on the Peppol validator page. A ready-made file to test with is among our test invoices.

Which rules does the UBL validator check?

  • EN 16931 (CEN, UBL syntax): the European core rules for every e-invoice (BR-, BR-CO-, BR-S- and so on)
  • Peppol BIS Billing 3.0: the additional Peppol rules (PEPPOL-EN16931-R…) and the country-specific Peppol rules (including the Netherlands, Germany, Scandinavia, Italy and Greece)
  • Peppol self-billing: for invoices issued by the customer on behalf of the supplier
  • Other Peppol BIS documents: order, order response, despatch advice, catalogue and more

We therefore pick up every new OpenPeppol release automatically. During a transition period you can also test against the previous version with Show outdated versions.

Reading and fixing errors

Each message shows the rule ID, an explanation and the location in the file. An error (fatal) means an Access Point is likely to reject the invoice. A warning does not block it but points to something that could be better. Typical errors are a missing buyer VAT number, totals that do not match the lines, or the wrong VAT category for an exemption.

Can your customer receive the invoice?

Use the Peppol ID lookup to see whether the recipient is on Peppol and which document types it accepts.

Frequently asked questions about the UBL validator

What is the difference between EN 16931 and Peppol BIS 3.0?

EN 16931 is the European standard with the core rules for e-invoices. Peppol BIS Billing 3.0 builds on it with extra rules for the Peppol network. A valid Peppol invoice meets both.

Does the validator also check the XML schema (XSD)?

Yes. The validator first checks whether the file complies with the official schema (UBL 2.1, CII or the national schema), then the Schematron rules of EN 16931 and Peppol. Both checks run in your browser.

How up to date are the rules?

Every week we check whether OpenPeppol has published new rules and then switch to them automatically. In addition, the drop-down list shows the version in use.

Does it support CII, XRechnung or ZUGFeRD?

Yes. The validator automatically recognises CII, XRechnung and ZUGFeRD / Factur-X invoices, including the XML inside a Factur-X PDF. Under ‘Advanced’, you choose another rule set yourself. In Belgium, however, Peppol uses UBL.