Two ways out of the XML
A UBL invoice is deeply nested XML with namespaces such as cac: and cbc:. This converter reads it in your browser and gives you data you can use directly in code or a spreadsheet:
- Invoice model JSON: a stable structure with
supplier,customer,lines,taxTotals,totalsandpaymentMeans. Amounts are numbers with their currency; prefixes are gone; embedded PDFs are summarised (name, type, size) instead of dumped as base64. - Generic XML to JSON: every element, for fields the model does not include.
- CSV: one row per invoice line, with the invoice header repeated on each row.
Sample CSV output
invoice_id,type,issue_date,due_date,currency,supplier,supplier_vat,customer,customer_vat,
line_id,item,sellers_item_id,quantity,unit,price,line_net,vat_category,vat_percent
INV-2026-0042,Invoice,2026-10-01,2026-10-31,EUR,Voorbeeld BV,BE0417497106,Klant NV,BE0xxxxxxxxx,
1,Consulting,CONS-01,8,HUR,95.00,760.00,S,21
INV-2026-0042,Invoice,2026-10-01,2026-10-31,EUR,Voorbeeld BV,BE0417497106,Klant NV,BE0xxxxxxxxx,
2,Travel,TRV,1,C62,40.00,40.00,S,21
Because the header columns repeat, a pivot table can sum line amounts per supplier, per VAT rate or per month without lookups.
Edge cases
- Credit notes keep
type=CreditNote; amounts stay positive as in the XML, so subtract them yourself when you combine them with invoices. - Document-level allowances and charges are in the JSON totals but not in the line rows; line sums can therefore differ from the invoice total.
- Unit codes stay as UN/ECE codes (
C62one/piece,HURhour). - Numbers in spreadsheets. Amounts use a dot as decimal separator; set the import locale accordingly in Excel.
Who uses it
Accountants who want e-invoice lines in a spreadsheet, developers who need a clean JSON shape for an import script or an API, and controllers who analyse purchases per supplier or VAT rate use the converter instead of writing their own XML parser. Because each invoice line becomes one row, the CSV is ready for pivot tables, and because the JSON keeps amounts as numbers with their currency, totals can be checked in code without string handling.
To read an invoice as a person, use the UBL invoice viewer; to check it, the Peppol validator; to process many at once, the batch auditor. The Peppol and UBL guide explains the format.
Frequently asked questions
How do I convert a Peppol XML invoice to Excel?
Drop the XML here and download the CSV. It has one row per invoice line with the invoice header repeated, which opens directly in Excel or any spreadsheet.
What does the JSON contain?
Supplier, customer, lines, VAT totals, document totals and payment means, with amounts as numbers and namespaces removed. Embedded attachments are summarised instead of included as base64.
Can I convert credit notes?
Yes. Credit notes are converted the same way and marked with type CreditNote, so you can treat them separately.
Why do the line totals not equal the invoice total?
Document-level allowances and charges and the VAT are not part of the line rows. They are in the JSON totals.
Is my invoice uploaded?
No. Conversion runs in your browser and the file never leaves your device.