Validate and explain UBL invoice errors
Paste a UBL Invoice or CreditNote XML, or upload a .xml file. Every issue is shown with a plain-English explanation, likely cause and suggested fix.
Paste or load UBL XML
Tools
UBL Viewer
Render a UBL XML invoice as a readable invoice summary.
Embedded PDF checker
Check whether the invoice has a valid embedded PDF attachment.
UBL totals checker
Verify line, tax and payable totals against LegalMonetaryTotal.
UBL VAT checker
Compare declared and calculated VAT per category.
UBL field explainer
Search UBL fields and read what each XML path means.
Peppol BIS Billing checker
Check common Peppol BIS Billing 3.0 invoice issues.
Frequently asked questions
βΊWhich UBL versions and profiles do you support?
All of them. The validator auto-detects the profile from cbc:CustomizationID, cbc:ProfileID and cbc:UBLVersionID. We recognise Peppol BIS Billing 3.0, NLCIUS 1.0, XRechnung, EN 16931 (bare), SI-UBL 1.x/2.0 (legacy), OIOUBL and plain OASIS UBL 2.0β2.4. Generic UBL structural checks always run; profile-specific rules (Peppol EndpointID, NLCIUS EUR-only / KvK 0106) are layered on top when applicable.
βΊDoes this validator certify my invoice for Peppol?
No. This tool performs browser-based structural and semantic checks and explains issues in plain English. It is not a replacement for official Peppol validation or access-point certification.
βΊWhich checks are included?
Well-formed XML, root element (Invoice or CreditNote), required fields (ID, IssueDate, supplier, customer, currency), invoice lines, tax totals, monetary totals, currency consistency, plus profile-specific rules when the document declares a known CustomizationID.
βΊAre my invoices uploaded?
No. Parsing and validation happen entirely in your browser. The XML never leaves the page.
What this tool does
The UBL validator parses your UBL XML invoice in the browser and surfaces missing fields, schema problems and common Peppol BIS Billing 3.0 issues with plain-English explanations.
Common UBL and Peppol problems it detects
- Missing required elements such as ID, IssueDate, AccountingSupplierParty or LegalMonetaryTotal.
- Invalid or missing CustomizationID / ProfileID for Peppol BIS Billing 3.0.
- Currency mismatches between LineExtensionAmount, TaxTotal and DocumentCurrencyCode.
- Totals that don't reconcile against LegalMonetaryTotal.
- Embedded PDF attachments with broken Base64 or wrong mimeCode.
Why this matters
Peppol access points and ERP systems reject invoices that do not conform to UBL 2.x and EN 16931. A single missing attribute can block payment and force manual rework. Catching issues before sending saves days of email back-and-forth.
Example: totals mismatch
If LegalMonetaryTotal/PayableAmount is 121.00 but the sum of LineExtensionAmount is 100.00 and TaxTotal/TaxAmount is 20.00, the difference is 1.00. Common causes are a forgotten ChargeTotalAmount, a rounding rule, or a prepaid PrepaidAmount that wasn't subtracted.
How to fix the issue
- Add any missing mandatory UBL elements flagged in the report.
- Set CustomizationID to urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0 and ProfileID to urn:fdc:peppol.eu:2017:poacc:billing:01:1.0 for Peppol BIS Billing 3.0.
- Ensure every monetary amount uses the same currencyID as DocumentCurrencyCode.
- Reconcile totals with: LineExtensionAmount + ChargeTotalAmount β AllowanceTotalAmount = TaxExclusiveAmount; TaxExclusiveAmount + TaxAmount = TaxInclusiveAmount; TaxInclusiveAmount β PrepaidAmount + PayableRoundingAmount = PayableAmount.
- Re-run the validator and verify with your Peppol access point before resending.
Frequently asked questions
βΊIs this an official Peppol validator?
No. UBL Explainer runs browser-based checks and offers plain-English explanations. For certification or production sign-off, also validate with your Peppol access point or the official Peppol validator.
βΊWhich UBL versions are supported?
UBL 2.1 and 2.2 Invoice and CreditNote documents, including Peppol BIS Billing 3.0.
βΊIs my invoice uploaded?
No. The entire validation runs locally in your browser. The XML never leaves your device.