
E-Invoicing All in One for Factur-X and ZUGFeRD
Decide which Factur-X or ZUGFeRD profile each customer's invoice PDF claims to be, and check the invoice really carries what it promises.
Available for Odoo 16.0, Odoo 17.0, Odoo 18.0, Odoo 19.0, Odoo 20.0. Technical name bambooforge_facturx.
Transcript of the walkthrough (Odoo 20)
E-Invoicing All in One for Factur-X and ZUGFeRD. Decide which Factur-X or ZUGFeRD profile each customer's invoice PDF claims to be, and check the invoice really carries what it promises. Odoo silently embeds a Factur-X file inside every invoice PDF. Which profile that file claims to be is not a detail — each profile is a different promise about what the document contains, and a receiver expecting one will reject another.
MINIMUM and BASIC WL carry no lines. They are accounting summaries. France and Germany do not accept them as an invoice for VAT purposes, which is usually discovered by the customer's accountant months later. BASIC, EN 16931 and EXTENDED promise a quantity, a unit price and a tax category on every line.
A file that promises them and does not carry them fails on parse. In the next few minutes: what this is for, then the five profiles, then where the profile lives, then what gets checked, then how we make sure it works. Then what this app deliberately does not do, so you can tell before you buy whether it fits. 1.
Copy bambooforge_facturx into your addons path and update the app list, or install the ZIP from the Odoo Apps Store. 2. Install Factur-X & ZUGFeRD Profiles. What this is for.
Odoo silently embeds a Factur-X file inside every invoice PDF. Which profile that file claims to be is not a detail — each profile is a different promise about what the document contains, and a receiver expecting one will reject another. The five profiles. EN 16931 is the safe default: it is the European semantic standard, and every receiver understands it.
MINIMUM and BASIC WL carry no lines. They are accounting summaries. France and Germany do not accept them as an invoice for VAT purposes, which is usually discovered by the customer's accountant months later. BASIC, EN 16931 and EXTENDED promise a quantity, a unit price and a tax category on every line.
A file that promises them and does not carry them fails on parse. Where the profile lives. Agreed per customer (their system, their expectation), defaulted per company on the company record, and overridable per invoice for the occasional exception. What gets checked.
Findings appear in the same pre-flight list as the European rules. no profile agreed with this customer — a warning, because the default may be perfectly fine; MINIMUM used for a real invoice — a warning, with the VAT consequence spelled out; a line-level profile chosen while the lines are thin — blocking, naming the line and what it is missing; a tax line in a different currency from the invoice — blocking. Factur-X carries one tax currency, and when they differ the receiver's parser reads the wrong number. How we make sure it works.
Before every release, 9 automated checks run against this app on Odoo 16, 17, 18, 19 and 20. Among them: A summary profile does not demand line detail. A complete invoice on en16931 passes the profile rules. A line profile demands quantity price and tax.
The customer profile wins over the company one. The profile can be overridden on one invoice. The complete list is in the source you receive. Questions people ask.
Which Odoo versions does it run on? Odoo 16.0, 17.0, 18.0, 19.0, 20.0, on the series you buy it for; each series is its own listing. Community or Enterprise? Both.
It needs no Enterprise app. Now the part most videos leave out: what this does not do. The profile is recorded and checked here; producing the embedded file is Odoo's own job. EXTENDED has more optional content than is checked.
What is checked is what causes rejections. The complete manual is at docs dot bambooforge dot dev, the demo database is linked from the store page, and support answers within twenty-four hours. Links are in the description.


Transcript of the walkthrough (Odoo 19)
Factur-X & ZUGFeRD Profiles. Decide which Factur-X or ZUGFeRD profile each customer's invoice PDF claims to be, and check the invoice really carries what it promises. Odoo silently embeds a Factur-X file inside every invoice PDF. Which profile that file claims to be is not a detail — each profile is a different promise about what the document contains, and a receiver expecting one will reject another.
MINIMUM and BASIC WL carry no lines. They are accounting summaries. France and Germany do not accept them as an invoice for VAT purposes, which is usually discovered by the customer's accountant months later. BASIC, EN 16931 and EXTENDED promise a quantity, a unit price and a tax category on every line.
A file that promises them and does not carry them fails on parse. In the next few minutes: what this is for, then the five profiles, then where the profile lives, then what gets checked. Then what this app deliberately does not do, so you can tell before you buy whether it fits. What this is for.
Odoo silently embeds a Factur-X file inside every invoice PDF. Which profile that file claims to be is not a detail — each profile is a different promise about what the document contains, and a receiver expecting one will reject another. The five profiles. EN 16931 is the safe default: it is the European semantic standard, and every receiver understands it.
MINIMUM and BASIC WL carry no lines. They are accounting summaries. France and Germany do not accept them as an invoice for VAT purposes, which is usually discovered by the customer's accountant months later. BASIC, EN 16931 and EXTENDED promise a quantity, a unit price and a tax category on every line.
A file that promises them and does not carry them fails on parse. Where the profile lives. Agreed per customer (their system, their expectation), defaulted per company on the company record, and overridable per invoice for the occasional exception. What gets checked.
Findings appear in the same pre-flight list as the European rules. no profile agreed with this customer — a warning, because the default may be perfectly fine; MINIMUM used for a real invoice — a warning, with the VAT consequence spelled out; a line-level profile chosen while the lines are thin — blocking, naming the line and what it is missing; a tax line in a different currency from the invoice — blocking. Factur-X carries one tax currency, and when they differ the receiver's parser reads the wrong number. Now the part most videos leave out: what this does not do.
The profile is recorded and checked here; producing the embedded file is Odoo's own job. EXTENDED has more optional content than is checked. What is checked is what causes rejections. The complete manual is at docs dot bambooforge dot dev, the demo database is linked from the store page, and support answers within twenty-four hours.
Links are in the description.


Transcript of the walkthrough (Odoo 18)
Factur-X & ZUGFeRD Profiles. Decide which Factur-X or ZUGFeRD profile each customer's invoice PDF claims to be, and check the invoice really carries what it promises. Odoo silently embeds a Factur-X file inside every invoice PDF. Which profile that file claims to be is not a detail — each profile is a different promise about what the document contains, and a receiver expecting one will reject another.
MINIMUM and BASIC WL carry no lines. They are accounting summaries. France and Germany do not accept them as an invoice for VAT purposes, which is usually discovered by the customer's accountant months later. BASIC, EN 16931 and EXTENDED promise a quantity, a unit price and a tax category on every line.
A file that promises them and does not carry them fails on parse. In the next few minutes: what this is for, then the five profiles, then where the profile lives, then what gets checked. Then what this app deliberately does not do, so you can tell before you buy whether it fits. What this is for.
Odoo silently embeds a Factur-X file inside every invoice PDF. Which profile that file claims to be is not a detail — each profile is a different promise about what the document contains, and a receiver expecting one will reject another. The five profiles. EN 16931 is the safe default: it is the European semantic standard, and every receiver understands it.
MINIMUM and BASIC WL carry no lines. They are accounting summaries. France and Germany do not accept them as an invoice for VAT purposes, which is usually discovered by the customer's accountant months later. BASIC, EN 16931 and EXTENDED promise a quantity, a unit price and a tax category on every line.
A file that promises them and does not carry them fails on parse. Where the profile lives. Agreed per customer (their system, their expectation), defaulted per company on the company record, and overridable per invoice for the occasional exception. What gets checked.
Findings appear in the same pre-flight list as the European rules. no profile agreed with this customer — a warning, because the default may be perfectly fine; MINIMUM used for a real invoice — a warning, with the VAT consequence spelled out; a line-level profile chosen while the lines are thin — blocking, naming the line and what it is missing; a tax line in a different currency from the invoice — blocking. Factur-X carries one tax currency, and when they differ the receiver's parser reads the wrong number. Now the part most videos leave out: what this does not do.
The profile is recorded and checked here; producing the embedded file is Odoo's own job. EXTENDED has more optional content than is checked. What is checked is what causes rejections. The complete manual is at docs dot bambooforge dot dev, the demo database is linked from the store page, and support answers within twenty-four hours.
Links are in the description.


Transcript of the walkthrough (Odoo 17)
Factur-X & ZUGFeRD Profiles. Decide which Factur-X or ZUGFeRD profile each customer's invoice PDF claims to be, and check the invoice really carries what it promises. Odoo silently embeds a Factur-X file inside every invoice PDF. Which profile that file claims to be is not a detail — each profile is a different promise about what the document contains, and a receiver expecting one will reject another.
MINIMUM and BASIC WL carry no lines. They are accounting summaries. France and Germany do not accept them as an invoice for VAT purposes, which is usually discovered by the customer's accountant months later. BASIC, EN 16931 and EXTENDED promise a quantity, a unit price and a tax category on every line.
A file that promises them and does not carry them fails on parse. In the next few minutes: what this is for, then the five profiles, then where the profile lives, then what gets checked. Then what this app deliberately does not do, so you can tell before you buy whether it fits. What this is for.
Odoo silently embeds a Factur-X file inside every invoice PDF. Which profile that file claims to be is not a detail — each profile is a different promise about what the document contains, and a receiver expecting one will reject another. The five profiles. EN 16931 is the safe default: it is the European semantic standard, and every receiver understands it.
MINIMUM and BASIC WL carry no lines. They are accounting summaries. France and Germany do not accept them as an invoice for VAT purposes, which is usually discovered by the customer's accountant months later. BASIC, EN 16931 and EXTENDED promise a quantity, a unit price and a tax category on every line.
A file that promises them and does not carry them fails on parse. Where the profile lives. Agreed per customer (their system, their expectation), defaulted per company on the company record, and overridable per invoice for the occasional exception. What gets checked.
Findings appear in the same pre-flight list as the European rules. no profile agreed with this customer — a warning, because the default may be perfectly fine; MINIMUM used for a real invoice — a warning, with the VAT consequence spelled out; a line-level profile chosen while the lines are thin — blocking, naming the line and what it is missing; a tax line in a different currency from the invoice — blocking. Factur-X carries one tax currency, and when they differ the receiver's parser reads the wrong number. Now the part most videos leave out: what this does not do.
The profile is recorded and checked here; producing the embedded file is Odoo's own job. EXTENDED has more optional content than is checked. What is checked is what causes rejections. The complete manual is at docs dot bambooforge dot dev, the demo database is linked from the store page, and support answers within twenty-four hours.
Links are in the description.


Transcript of the walkthrough (Odoo 16)
Factur-X & ZUGFeRD Profiles. Decide which Factur-X or ZUGFeRD profile each customer's invoice PDF claims to be, and check the invoice really carries what it promises. Odoo silently embeds a Factur-X file inside every invoice PDF. Which profile that file claims to be is not a detail — each profile is a different promise about what the document contains, and a receiver expecting one will reject another.
MINIMUM and BASIC WL carry no lines. They are accounting summaries. France and Germany do not accept them as an invoice for VAT purposes, which is usually discovered by the customer's accountant months later. BASIC, EN 16931 and EXTENDED promise a quantity, a unit price and a tax category on every line.
A file that promises them and does not carry them fails on parse. In the next few minutes: what this is for, then the five profiles, then where the profile lives, then what gets checked. Then what this app deliberately does not do, so you can tell before you buy whether it fits. What this is for.
Odoo silently embeds a Factur-X file inside every invoice PDF. Which profile that file claims to be is not a detail — each profile is a different promise about what the document contains, and a receiver expecting one will reject another. The five profiles. EN 16931 is the safe default: it is the European semantic standard, and every receiver understands it.
MINIMUM and BASIC WL carry no lines. They are accounting summaries. France and Germany do not accept them as an invoice for VAT purposes, which is usually discovered by the customer's accountant months later. BASIC, EN 16931 and EXTENDED promise a quantity, a unit price and a tax category on every line.
A file that promises them and does not carry them fails on parse. Where the profile lives. Agreed per customer (their system, their expectation), defaulted per company on the company record, and overridable per invoice for the occasional exception. What gets checked.
Findings appear in the same pre-flight list as the European rules. no profile agreed with this customer — a warning, because the default may be perfectly fine; MINIMUM used for a real invoice — a warning, with the VAT consequence spelled out; a line-level profile chosen while the lines are thin — blocking, naming the line and what it is missing; a tax line in a different currency from the invoice — blocking. Factur-X carries one tax currency, and when they differ the receiver's parser reads the wrong number. Now the part most videos leave out: what this does not do.
The profile is recorded and checked here; producing the embedded file is Odoo's own job. EXTENDED has more optional content than is checked. What is checked is what causes rejections. The complete manual is at docs dot bambooforge dot dev, the demo database is linked from the store page, and support answers within twenty-four hours.
Links are in the description.


Key facts
- What it is
- Decide which Factur-X or ZUGFeRD profile each customer's invoice PDF claims to be, and check the invoice really carries what it promises.
- For
- Accounting
- Odoo versions
- 16.0, 17.0, 18.0, 19.0, 20.0 - Community and Enterprise
- Runs on
- Odoo.sh or Odoo you host yourself - not Odoo Online, which accepts no third-party apps
- Price
- 318 EUR, one-time, on the Odoo Apps Store
- Technical name
- bambooforge_facturx
- Not for
- The profile is recorded and checked here; producing the embedded file is Odoo's own job.; EXTENDED has more optional content than is checked. What is checked is what causes rejections.
- Manual last updated
- 2026-10-15
E-Invoicing All in One for Factur-X and ZUGFeRD
What this is for
Odoo silently embeds a Factur-X file inside every invoice PDF. Which profile that file claims to be is not a detail — each profile is a different promise about what the document contains, and a receiver expecting one will reject another.
The five profiles
MINIMUM and BASIC WL carry no lines. They are accounting summaries. France and Germany do not accept them as an invoice for VAT purposes, which is usually discovered by the customer's accountant months later.
BASIC, EN 16931 and EXTENDED promise a quantity, a unit price and a tax category on every line. A file that promises them and does not carry them fails on parse.
EN 16931 is the safe default: it is the European semantic standard, and every receiver understands it.
Where the profile lives
Agreed per customer (their system, their expectation), defaulted per company on the company record, and overridable per invoice for the occasional exception.
What gets checked
no profile agreed with this customer — a warning, because the default may be perfectly fine;
MINIMUM used for a real invoice — a warning, with the VAT consequence spelled out;
a line-level profile chosen while the lines are thin — blocking, naming the line and what it is missing;
a tax line in a different currency from the invoice — blocking. Factur-X carries one tax currency, and when they differ the receiver's parser reads the wrong number.
Findings appear in the same pre-flight list as the European rules.
Known limits
The profile is recorded and checked here; producing the embedded file is Odoo's own job.
EXTENDED has more optional content than is checked. What is checked is what causes rejections.
How we make sure it works
Before every release, 9 automated checks run against this app on Odoo 16, 17, 18, 19 and 20. Among them:
A summary profile does not demand line detail.
A complete invoice on en16931 passes the profile rules.
A line profile demands quantity price and tax.
The customer profile wins over the company one.
The profile can be overridden on one invoice.
The complete list is in the source you receive.
Install
Copy bambooforge_facturx into your addons path and update the app list, or install the ZIP from the Odoo Apps Store.
Install Factur-X & ZUGFeRD Profiles.
Questions people ask
- Which Odoo versions does it run on?
Odoo 16.0, 17.0, 18.0, 19.0, 20.0, on the series you buy it for; each series is its own listing.
- Community or Enterprise?
Both. It needs no Enterprise app.
- What does it need?
The standard Web; einvoice (BambooForge) must be installed first app. No extra Python package.
- Does anything leave my server?
No. It makes no call outside your Odoo server: no telemetry, no licence check, no third-party service.
- What happens if I uninstall it?
Odoo drops the app's own tables and fields; the standard records it worked on (contacts, orders, products) stay as they are.