What is UBL, and why convert a PDF to it?
UBL (Universal Business Language) 2.1 is an OASIS XML standard and one of the two syntaxes the European e-invoicing standard EN 16931 allows (the other is UN/CEFACT CII). A PDF is a picture of an invoice; a UBL file carries the same invoice as fields that software can book without retyping. It is the format the Peppol network carries.
In Belgium, VAT-registered companies established there must send and receive B2B invoices as structured e-invoices over Peppol since 1 January 2026. In the Netherlands, suppliers to central government have had to send e-invoices on new contracts since 2017, and all government bodies must be able to receive them since 18 April 2019; between companies there is no obligation yet. Converting the PDF your software already produces is the quickest way to meet a customer who asks for UBL.
Peppol BIS 3.0 or NLCIUS?
Both are UBL 2.1 and both build on EN 16931. Peppol BIS Billing 3.0 is the default on the Peppol network: it is what Belgian companies exchange and what most receivers in other countries expect. NLCIUS (SI-UBL 2.0) adds the Dutch BR-NL rules; choose it when a Dutch government body is the buyer. That body's electronic address is its OIN (Peppol scheme 0190).
Good to know
- aiDoks does not send the invoice — upload the XML to your Peppol access point or to an invoicing tool that accepts UBL files. Delivery over Peppol needs an access point, and aiDoks is not one.
- Credit notes too — the same flow creates UBL credit notes, not just invoices.
- Already have CII or Factur-X? — skip the OCR: the free CII-to-UBL converter turns structured XML into UBL directly.
- Check what you receive — the free validator reports the exact rule IDs, and the UBL viewer opens any UBL file as a readable PDF.
The recommended workflow
Convert the PDF, check the VAT numbers, IBAN and totals (OCR mistakes there are what get an invoice rejected), pick the profile, download the UBL and send it through your access point. If you edit the XML by hand afterwards, run it through the free validator again.