How to Set Up E-Invoicing in Odoo 17 — A Complete Guide (2026)

If you run Odoo 17 and operate across Europe, e-invoicing compliance is no longer optional. For a full overview of timelines and country scope, see EU B2B e-invoicing mandates in 2026. Belgium's Peppol mandate went live in January 2026. Poland's KSeF system is now enforced for large taxpayers. Italy's FatturaPA clearance has been mandatory since 2019. France goes live in September 2026. Germany follows in 2027. Spain's VeriFactu regime is active now.

Odoo 17 ships with meaningful e-invoicing improvements over Odoo 16, including native Factur-X generation and better UBL support. But format generation is only half the story. Submitting invoices to tax authority systems — SDI in Italy, KSeF in Poland, AEAT in Spain, DGFiP in France — requires a live connection, certificate management, real-time status tracking, and rejection handling that Odoo's built-in modules do not provide. This guide covers exactly what Odoo gives you, what it doesn't, and how to close the gap cleanly.

What Odoo 17 Includes Out of the Box

Odoo 17's accounting module has a genuinely useful foundation for e-invoicing. The improvements over prior versions are real:

What this means in practice: Odoo can produce the correct XML or hybrid PDF format for many European countries. If your buyer simply wants to receive a Factur-X PDF by email, Odoo handles that well.

What it does not mean: Odoo will automatically submit that invoice to a government clearance system, receive an official clearance number, track rejection reasons, or retry failed submissions. Those steps are where most compliance gaps live.

What You Still Need

The countries with active e-invoicing mandates don't just require a structured XML format — they require real-time or near-real-time submission to a government platform, with a legally binding response before the invoice is considered issued. Here is what Odoo's built-in modules don't cover:

These are not minor gaps. For Italy, an invoice that hasn't cleared SDI is not legally issued — you cannot collect payment on it. For Poland, the KSeF number must be returned to the buyer and referenced in payments. For Spain, the Huella and QR code must appear on every invoice output. Getting these wrong creates real legal exposure.

Installing the Clearvo Module

The Clearvo Odoo module bridges the gap between Odoo's format generation and the authority submission layer. It installs as a standard Odoo add-on and connects to the Clearvo API for all government-facing calls. Your invoice data stays in Odoo; Clearvo handles certificates, submission protocols, and status polling for each country.

Setup takes three steps:

Step 1 — Install the module. Download the Clearvo module from the Odoo App Store or from the Clearvo Odoo integration page and place it in your Odoo addons path. Then activate it from Settings → Apps:

# If self-hosting, add to your addons path in odoo.conf:
addons_path = /path/to/odoo/addons,/path/to/clearvo-odoo

# Then update the module list and install:
./odoo-bin -c odoo.conf -u clearvo_einvoicing

On Odoo.sh or Odoo Online, upload the module zip via the Apps menu and install it from the interface.

Step 2 — Add your API key. Go to Settings → Technical → Clearvo E-Invoicing. Enter your Clearvo API key and select whether to use the sandbox or production environment. The sandbox environment makes no real authority calls — it validates your invoice structure and returns mock clearance responses so you can test your full Odoo workflow before going live.

CLEARVO_API_KEY=sk_live_...
CLEARVO_ENV=production   # or: sandbox

Step 3 — Configure per-company country settings. For each Odoo company entity, navigate to Accounting → Configuration → E-Invoicing Settings and enable the relevant country modules (Italy SDI, Poland KSeF, Spain VeriFactu, France DGFiP, Belgium Peppol). The module will prompt for any country-specific identifiers — your Italian codice destinatario, your Polish NIP, your Spanish NIF — and validate them against the authority systems before you process your first invoice.

Once configured, the module intercepts Odoo's standard invoice confirmation flow. When you confirm an invoice, Clearvo submits it to the relevant authority, returns the clearance number or status, and attaches both to the Odoo invoice record. Rejections surface as chatter messages with the authority's error description and a suggested correction.

Country-by-Country: What Changes in Odoo

Each country's mandate has a different technical shape. Here is what the Clearvo module adds for each:

Country Format Authority Mandate status Key addition over vanilla Odoo
France Factur-X (EN16931) DGFiP Portail Public de Facturation Mandatory Sep 2026 (large), 2027 (mid), 2027 (small) — see France e-invoicing September 2026 PPF submission, Flux 1 clearance, e-reporting Flux 2/3 for B2C and payment events
Germany XRechnung / Factur-X Peppol network / PONTON Mandatory Jan 2027 (B2B receive), 2028 (send) XRechnung profile routing, Peppol delivery to German receivers, ELSTER alignment
Italy FatturaPA XML SDI (Sistema di Interscambio) Mandatory now (since Jan 2019) SDI submission, codice destinatario routing, async notification polling, RC/TD code handling
Poland FA(2) (KSeF XML) KSeF (Krajowy System e-Faktur) Mandatory now (large taxpayers) KSeF session token auth, FA(2) schema generation, KSeF number returned to invoice, NIP validation
Spain FacturaE / VeriFactu XML AEAT VERI*FACTU Live now (software certification required) SHA-256 hash chain per NIF/series, QR code + CSV generation on invoice PDF, AEAT SOAP submission
Belgium UBL 2.1 (BIS Billing 3.0) Peppol network Mandatory Jan 2026 Peppol SMP lookup for receiver endpoint, AS4 delivery, Peppol ID registration for your entity

A note on Germany: the 2027 mandate requires businesses to be capable of receiving XRechnung invoices, not necessarily sending them. The sending obligation for domestic B2B invoices phases in from 2028. However, configuring your Odoo instance to receive and parse incoming XRechnung documents now — and route them into your accounts payable workflow — is work worth doing early.

Testing Before Go-Live

Every country's authority provides a test environment, but accessing them varies considerably in difficulty. Italy's SDI test environment requires a separate registration and test codice destinatario. Poland's KSeF test system requires test NIP credentials issued by the Ministry of Finance. France's PPF sandbox is currently restricted to accredited PDP operators. Spain's AEAT test environment is the most accessible — it accepts test NIFs and returns mock acceptance responses.

The Clearvo sandbox handles this complexity for you. When you set CLEARVO_ENV=sandbox, all authority calls are intercepted and validated against the same schema and business rule checks that Clearvo runs in production — but no invoice reaches a real government system. The sandbox returns realistic responses including rejection codes, so you can verify your rejection-handling workflows before your finance team sees a live failure.

To run a complete end-to-end test in Odoo:

  1. Set your Clearvo API key to your sandbox key (prefix: sk_test_)
  2. Create a test customer with a valid format VAT number for the target country (e.g., FR12345678901 for France)
  3. Issue a test invoice and confirm it — the module will submit to the Clearvo sandbox and return a mock clearance number
  4. Test a rejection scenario by submitting an invoice with a known invalid field (e.g., a missing buyer VAT number for Italy) and confirm the chatter shows the correct SDI error code
  5. Switch to sk_live_ only once you have validated the happy path and at least one rejection path in sandbox

The sandbox key is available immediately on sign-up — no onboarding call required. For production keys, Clearvo verifies your company's identity and the authority credentials for each country you activate.


Getting Started

Odoo 17 is a strong foundation for European invoicing. The format generation is solid, the EDI framework is extensible, and the accounting module handles multi-company and multi-currency invoicing well. What it doesn't handle is the live government submission layer — and that layer is where mandate compliance actually lives.

The Clearvo module adds that layer without replacing any of Odoo's own invoicing logic. Your Odoo workflow stays the same; what changes is that confirmed invoices now clear through the relevant tax authority automatically, with the clearance number, rejection handling, and country-specific artefacts (KSeF numbers, VeriFactu QR codes, SDI receipt files) all attached to the Odoo invoice record.

If you run Odoo across France, Germany, Italy, Poland, Spain, or Belgium — or plan to expand into any of them — the time to configure this is before the mandate deadline, not after your finance team gets an authority rejection on a real customer invoice.

Connect Odoo 17 to every e-invoicing authority in minutes

Install the free Clearvo module, add your API key, and your Odoo invoices clear automatically. Sandbox included — no onboarding call required.

Get started free →