Odoo E-Invoice Formats Compared: Factur-X, XRechnung, UBL, Peppol BIS
Odoo e-invoice formats compared: Factur-X, ZUGFeRD, XRechnung, UBL and Peppol BIS in Odoo 19 and 20, with defaults by country and which one to choose.
Choosing an e-invoice format sounds like a technical detail, but a wrong choice means rejected invoices and late payments. Our Odoo implementation services include a format map for every customer group before the first invoice goes out.
Related service: Odoo implementation in Germany — GoBD, XRechnung/ZUGFeRD and DATEV export done properly.
This guide is for finance leads and Odoo admins in Europe who invoice across borders. It compares formats only; for mandates by country, start with our guide to Odoo localization gaps and the country posts linked below.
What are the main e-invoice formats in Odoo 19 and 20?
Odoo 19 and 20 ship the same seven UBL and CII e-invoice formats in the customer's eInvoice format field. You pick one per customer, or let Odoo suggest it from the country.
The list sits in the account_edi_ubl_cii module: France (FacturX), Germany (ZUGFeRD), Germany (XRechnung), EU Standard (Peppol BIS 3.0), Netherlands (NLCIUS), Australia (BIS Billing 3.0 A-NZ) and Singapore (BIS Billing 3.0 SG).
Other countries use their own clearance formats in separate modules, such as FatturaPA in Italy, CFDI in Mexico or FA(3) for KSeF in Poland. Those are not interchangeable with the formats above.
How do UBL, CII and EN 16931 fit together?
EN 16931 is the European rulebook for what an invoice must contain, while UBL and CII are the two XML languages allowed to write it. Every format in this guide is one of those two languages plus a national or network rule set.
Think of it in three layers:
- The data model: EN 16931 defines the fields, such as seller, buyer, VAT breakdown, payment terms and line items.
- The syntax: UBL 2.1 or UN/CEFACT CII, the two XML structures EN 16931 accepts.
- The rule set (CIUS): extra rules for one country or network, such as XRechnung for Germany or Peppol BIS Billing 3.0 for the Peppol network.
So a Peppol BIS file and an XRechnung file share a syntax but can still fail each other's checks.
Factur-X vs XRechnung vs UBL vs Peppol BIS: how do they compare?

Factur-X is a human-readable PDF with data inside, while XRechnung and Peppol BIS are machine-only UBL files with stricter field rules. The table shows how each one behaves in Odoo 19 and 20.
| Format | Syntax | What the customer gets | Sent over Peppol by Odoo | Typical use |
|---|---|---|---|---|
| Factur-X | CII inside PDF/A-3 | One PDF with embedded XML | No, email or platform | French and EU B2B by email |
| ZUGFeRD | CII inside PDF/A-3 | One PDF with embedded XML | No, email | German B2B by email |
| XRechnung | UBL | XML file only | Yes | German public sector (B2G) |
| Peppol BIS Billing 3.0 | UBL | XML file, PDF optional inside | Yes | Cross-border EU B2B and B2G |
| NLCIUS | UBL | XML file | Yes | Dutch B2B and government |
| BIS A-NZ and SG | UBL | XML file | Not through Odoo's access point yet | Australia, New Zealand, Singapore |
Odoo's code marks A-NZ and Singapore as valid Peppol formats not yet available through its own access point.
Factur-X vs XRechnung: what is the real difference?
Factur-X is a hybrid PDF that a person can read and a system can parse, while XRechnung is a pure XML file built for automated public-sector processing. Both meet EN 16931, but they suit different buyers.
Choose Factur-X or ZUGFeRD when customers still read or archive PDFs. The file works whether or not their software reads the XML.
Choose XRechnung when the buyer is a German public body, or a private company whose portal asks for it. XRechnung needs a buyer reference, which for German B2G is the Leitweg-ID, and Odoo fills the BuyerReference field from it.
Field coverage also differs in practice. On the Odoo forum, users found that invoice period dates appeared only in XRechnung, not in Factur-X, and one German user needed a custom build on Odoo 16. Test the fields your customers check.
Is ZUGFeRD in Odoo the same as Factur-X?
Yes, technically: Odoo builds ZUGFeRD and Factur-X from the same CII template and only changes the file name. German customers get a file named with _zugferd.xml, everyone else gets _factur_x.xml.
The French and German bodies behind the standard publish it jointly; the current release pairs Factur-X 1.09.2 with ZUGFeRD 2.5.2. Factur-X defines five profiles, from MINIMUM up to EXTENDED. Odoo writes its XML with the EXTENDED profile identifier, which conforms to EN 16931.
That matters in Germany. German guidance treats ZUGFeRD from version 2.0.1 as a valid e-invoice, except the MINIMUM and BASIC WL profiles. Odoo's output is above both, so a correctly filled ZUGFeRD invoice from Odoo counts as a structured e-invoice for German B2B.
Odoo also embeds a Factur-X XML in its invoice PDFs when you choose another format, for portability.
What does Peppol BIS mean in Odoo, and is it a format or a network?
Peppol is the network and Peppol BIS Billing 3.0 is the main invoice format that travels on it. Odoo acts as a Peppol access point and SMP, so you can send and receive without a third-party provider.
Odoo's electronic invoicing documentation says Peppol registration is free, works in Odoo Community, and supports sending BIS Billing 3.0, XRechnung CIUS and NLCIUS. Registration is usually activated within a day.
Peppol BIS Billing 3.0 is a UBL format that follows EN 16931 plus Peppol and national rules; the current release is from May 2026. Studio can add extra Peppol fields such as contract or project references.
Over Peppol, Odoo uses only formats its access point allows. A German customer set to ZUGFeRD gets Peppol BIS 3.0 instead, or XRechnung if they have a Leitweg-ID.
For Belgium, where Peppol is the mandate route, see our Odoo Peppol guide for Belgium.
Which format does Odoo choose by default for each customer?
Odoo suggests a format from the customer's country and identifiers, and you can override it on the customer's Accounting tab.
| Customer country | Formats offered | Odoo's default suggestion | Over Peppol |
|---|---|---|---|
| Germany | ZUGFeRD, XRechnung, Peppol BIS | ZUGFeRD | Peppol BIS 3.0 |
| Germany, with Leitweg-ID | Same | XRechnung | XRechnung |
| France | Factur-X, Peppol BIS | Factur-X | Peppol BIS 3.0 |
| Netherlands | NLCIUS, Peppol BIS | NLCIUS | NLCIUS |
| Belgium and other Peppol countries | Peppol BIS | Peppol BIS 3.0 | Peppol BIS 3.0 |
| Australia, New Zealand, Singapore | BIS A-NZ or BIS SG | The local BIS variant | Not via Odoo's access point |
To set the format yourself:
- Open the customer record from Accounting, then Customers.
- On the Accounting tab, pick the eInvoice format.
- Enter and verify the Peppol endpoint, usually a VAT or registry number.
- Set the sending method, for example by Peppol.
- Send one test invoice and check the XML first.
There is one Odoo 19 vs 20 detail for German public customers. Odoo 19.0 detects B2G when the Peppol EAS is 0204, while Odoo 20 reads a Leitweg-ID stored as a routing identifier. Check these records after an upgrade; our Odoo 19 vs Odoo 20 guide covers the wider choice.
Which e-invoice format should you choose in Odoo?

Choose by buyer type and delivery channel first, then by country: Peppol BIS for Peppol-connected buyers, XRechnung for German public bodies, and Factur-X or ZUGFeRD for buyers who still take email. Work through these questions for each customer group.
- Is the buyer a public body? In Germany, use XRechnung with the Leitweg-ID. In France, B2G goes to Chorus Pro, which Odoo reaches through Peppol.
- Is the buyer on Peppol? Verify their endpoint in Odoo. If valid, send Peppol BIS 3.0, or NLCIUS for Dutch buyers.
- Is the buyer French and in scope for the domestic reform? Use Odoo's approved platform module, which sends in UBL. Factur-X stays useful for buyers outside the reform.
- Is the buyer German B2B, not on Peppol? ZUGFeRD by email is the practical default and counts as an e-invoice.
- Does the country run its own clearance system? Poland, Italy, Mexico and others need their own module, not one of these formats.
- Does the buyer's portal name a format? Then use that one, even if Odoo suggests another.
Want a budget for the setup across several countries? The free Odoo project estimate tool gives a first range in minutes.
How do country mandates change the format choice?
Mandates decide who must send or receive structured invoices and by when, which narrows the formats you can use. Our country posts cover the full setup.
- Germany: all businesses must be able to receive e-invoices since 1 January 2025. Issuing becomes mandatory from 1 January 2027 for firms with prior-year turnover above EUR 800,000, and for nearly all firms from 1 January 2028. XRechnung and ZUGFeRD both qualify.
- France: every company must receive e-invoices via an approved platform from 1 September 2026, and all must send from 1 September 2027. Odoo's France localization page says its platform receives Factur-X, UBL and CII but sends only UBL. Our France e-invoicing guide covers the PA setup.
- Belgium: the B2B mandate runs on Peppol, so Peppol BIS 3.0 is the format.
- Poland: KSeF uses its own FA(3) structure, not UBL or CII.
- UAE: the UAE model uses PINT AE over accredited service providers; see our UAE e-invoicing setup guide.
If you trade into Germany from abroad, our Odoo implementation partner page for Germany explains how we run DACH rollouts.
What are the common Odoo e-invoice format problems?
Most format problems come from missing master data, not from the format itself. These are the issues we and other Odoo users see most often.
- Two invoices in one email: an Odoo Online user found that sending ZUGFeRD attached both the PDF and a separate XML, so customer systems booked two invoices. Odoo 20 code now skips the separate XML when it is already embedded; test on your version.
- Missing bank account: Odoo's CII builder requires payment instructions on outgoing invoices, so an invoice without a recipient bank account fails validation.
- Wrong endpoint: a VAT number in the wrong EAS scheme makes Peppol verification fail. Verify every customer before sending.
- No Leitweg-ID: German public customers without it get ZUGFeRD or Peppol BIS instead of XRechnung, and the portal rejects them.
- Missing order fields: add order references or invoice periods with the Studio fields Odoo documents for Peppol.
- Custom PDF layouts: a custom invoice template can lose the embedded XML unless it is added to Odoo's list of Factur-X templates.
Which e-invoice format fits your industry?
The industry changes who your buyers are, and the buyer type usually decides the format. Public-sector suppliers need XRechnung or Peppol, while trading firms mostly need hybrid PDFs plus Peppol.
| Industry | Pain or cost driver | Odoo approach | How iVentureTeam helps |
|---|---|---|---|
| Public-sector suppliers | Portals reject invoices without buyer references | XRechnung with Leitweg-ID, Peppol delivery | Load Leitweg-IDs, test portal acceptance |
| Wholesale and distribution | Many buyers, mixed formats and channels | Format per customer, Peppol where verified | Build a customer format map |
| Manufacturing | Order and delivery references on every invoice | Peppol BIS with order reference fields | Add Studio fields, link sales orders |
| Professional services | Invoice periods and contract references | XRechnung or Peppol BIS with period dates | Map timesheet periods to invoice fields |
| eCommerce and B2C | Few structured invoice needs | Factur-X PDF by email | Keep B2C simple, separate B2B rules |
| Healthcare and labs | Hospital buyers on Peppol or portals | Peppol BIS, NLCIUS in the Netherlands | Verify endpoints, set receiving journals |
How iVentureTeam helps with Odoo e-invoice formats
We turn the format question into a tested customer map, so every buyer gets the file their system accepts. We have delivered 150+ ERP projects across 35+ countries with 40+ Odoo specialists over 13+ years.
- Format map: each customer group matched to Factur-X, ZUGFeRD, XRechnung, Peppol BIS or a national format.
- Peppol setup: registration, endpoint verification, receiving journals and Documents routing.
- Country modules: France approved platform, Chorus Pro, German Leitweg-ID handling and other localizations.
- Portal and EDI links: where a buyer needs a portal or a third-party network, our Odoo integration services build and monitor the connection.
- Testing: sample invoices validated before go-live, and checks after every Odoo upgrade.
Odoo e-invoice formats case study: Fernando Tax Management
A Dutch tax practice moved to Odoo 18 with localized, compliance-ready reporting, the groundwork any e-invoicing rollout depends on. The firm works across the Netherlands and Curaçao.
The firm had outgrown a rigid legacy system. Hand-keyed data produced duplicate records, and reports had translation gaps.
We migrated the firm to Odoo 18 in 10 weeks, fixed a hidden journal lines issue, built custom tax compliance reports for both jurisdictions and corrected translation defects in the tax and reporting modules.
The firm now runs its processes on one Odoo platform and cut manual data entry by 60%. Clean accounting data like this is what makes structured formats such as NLCIUS work. Read the Fernando Tax Odoo accounting automation case study.
The bottom line on Odoo e-invoice formats
Use Peppol BIS wherever your buyer is on Peppol, XRechnung for German public bodies, and Factur-X or ZUGFeRD for buyers who still take email. Then follow each country's mandate for the rest.
Odoo 19 and 20 already include the formats most European firms need. The real work is master data: endpoints, Leitweg-IDs, bank accounts and buyer references. Get those right and test real files.
Ready to map your Odoo e-invoice formats?

Tell us your countries and buyer types, and we will tell you which formats to switch on. Get an Odoo e-invoice format review, call +91-90235-15208, or email business@iventureteam.com.
Frequently Asked Questions
What is the difference between Factur-X and XRechnung?
+
Factur-X is a PDF/A-3 invoice with CII XML embedded, readable by people and systems. XRechnung is a pure XML file, usually UBL in Odoo, built for German public-sector processing and requiring a buyer reference such as the Leitweg-ID.
Is ZUGFeRD the same as Factur-X?
+
Yes. Factur-X and ZUGFeRD are the same hybrid standard under two names. Odoo builds both from one CII template and only changes the XML file name for German customers.
Does Odoo support XRechnung?
+
Yes. Odoo 19 and 20 include a Germany (XRechnung) format to the XRechnung 3.0 rules. Odoo suggests it automatically when a German customer has a Leitweg-ID and can send it over Peppol.
Is Peppol a file format?
+
No. Peppol is a network of access points for exchanging documents. Peppol BIS Billing 3.0 is the main invoice format sent on it. Odoo acts as a free access point and also sends XRechnung and NLCIUS over Peppol.
Is Peppol registration in Odoo free?
+
Yes. Odoo's documentation says Peppol registration is free and available in Odoo Community. Activation usually completes within a day after you submit your company identifier, email and phone.
Which e-invoice format should a German company use in Odoo?
+
Use XRechnung for public-sector buyers with a Leitweg-ID. For private B2B buyers, ZUGFeRD by email or Peppol BIS over Peppol both meet the German e-invoice definition.
Does a normal PDF count as an e-invoice?
+
No. In Germany and France, a plain PDF is not a structured e-invoice. A Factur-X or ZUGFeRD PDF counts because it carries EN 16931 XML inside.
Can Odoo receive Factur-X and Peppol invoices from suppliers?
+
Yes. Odoo can receive Peppol documents as draft vendor bills or into the Documents app, and it reads UBL and CII XML from incoming files. French approved-platform reception accepts Factur-X, UBL and CII.
Do Odoo 19 and Odoo 20 offer different e-invoice formats?
+
No. Both offer the same seven UBL and CII formats. The main change is how Odoo 20 stores the German Leitweg-ID, so check B2G customers after upgrading.
Free e-invoicing and tax readiness check
Getting Odoo ready for Peppol e-invoicing?
We check your Odoo version, localization and invoice flows against Peppol e-invoicing, then send what to set up, what to test and the effort involved.
Free, with no obligation. A senior consultant replies within 12 business hours.
Free Odoo tools
All tools- Odoo Health CheckVersion, modules, findings and upgrade cost
- Odoo App SelectorWhich apps you need, by industry
- Odoo Project EstimateIndicative cost and timeline in minutes
- Odoo Implementation Cost CalculatorImplementation cost and timeline, in minutes
- Odoo Migration Cost CalculatorVersion jump or legacy ERP, priced in minutes
Continue reading
Odoo CFDI 4.0 Setup Checklist: CSD, PAC, Payments and Carta Porte
Set up Odoo CFDI 4.0 in Odoo 19 or 20: CSD certificates, PAC, fiscal regimes, payment complements, cancellations, global invoices, Carta Porte and tests.
Odoo KSeF Integration: Poland FA(3) E-Invoicing Setup in Odoo 19/20
Odoo KSeF guide for Poland: who must use KSeF 2.0 and when, FA(3) setup in Odoo 19 and 20, rejection codes, offline24 gaps and connector options compared.
Odoo E-Invoicing Compliance in Egypt: ETA E-Invoice, E-Receipt and KSA
Odoo e-invoicing compliance for Egypt: what Odoo 19 and 20 cover for ETA e-invoices, why the e-receipt needs a partner, and how it compares with ZATCA.
