OdooWiki OCA HUB

Account Invoice Import

account_invoice_import folder_open OCA/edi open_in_new
Accounting & Finance License: AGPL-3

This module has been started by lazy accounting users who hate entering their vendor bills manually in Odoo. Almost all companies have several vendor bills to enter regularly in the system from the same vendors: phone bill, electricity bill, Internet access, train tickets, etc. Most of these invoices are available as PDF. If we are able to automatically extract from the PDF the required information to enter the invoice as vendor bill in Odoo, then this module will create it automatically. To know the full story behind the development of this module, read this blog post.

In order to reliably extract the required information from the invoice, two international standards exist to describe an invoice in XML:

  • CII (Cross-Industry Invoice) developed by UN/CEFACT (United Nations Centre for Trade Facilitation and Electronic Business),
  • UBL (Universal Business Language) which is an ISO standard (ISO/IEC 19845) developed by OASIS (Organization for the Advancement of Structured Information Standards).

Some e-invoice standards such as Factur-X propose to embed the XML description of the invoice inside the PDF invoice. Other people think that the future is pure-XML invoices: a European initiative called Peppol aims at setting up an open network to exchange e-invoices as UBL XML. We don't know yet which standard and which practice will prevail on electronic invoicing in the future, but we hope that lazy accountants won't have to manually encode their vendor bills in the near future. This module is here to help achieve this goal!

This module doesn't do anything useful by itself; it requires other modules to work: each module adds a specific invoice format.

Here is how the module works:

  • the user starts a wizard and uploads the PDF or XML invoice,
  • if it is an XML file, Odoo will parse it to create the invoice (requires additional modules for specific XML formats, such as the module account_invoice_import_ubl for the UBL format),
  • if it is a PDF file with an embedded XML file in Factur-X/CII format, Odoo will extract the embedded XML file and parse it to create the invoice (requires the module account_invoice_import_facturx),
  • otherwise, Odoo will use the invoice2data Python library to try to interpret the text of the PDF (requires the module account_invoice_import_invoice2data),
  • if the partner is matched, Odoo will use the partner's vendor bill import settings or reuse the accounting configuration from the latest posted invoice of that partner,
  • otherwise, Odoo will create a new draft supplier invoice without a partner and propose to create or update the partner from the imported data.

This module also works with supplier refunds.

auto_awesome What this module does

AI-generated from the code · Odoo 19.0

Lets users upload PDF or XML supplier invoices and turns them automatically into draft vendor bills in Odoo, with warnings shown on the bill when something could not be matched.

This module adds an import wizard for supplier invoices and refunds. From the Payables area of Accounting, a new menu opens a screen where you pick one or more PDF or XML files; the module reads them and creates draft vendor bills, then shows a confirmation with a link to the created bill(s). The same import is triggered when you use the Upload button on the Vendor Bills list.

What it fills in automatically: - Supplier, invoice number, invoice date, due date, currency and journal. - Invoice lines with quantity, unit price, discount, taxes and expense account, or a single summary line depending on settings. - The original file is attached to the bill and a note is posted in the bill's chatter saying it was created by file import.

Business rules and safeguards: - If a bill with the same supplier and invoice number already exists, the import is skipped and a warning is shown. - If the supplier is unknown, the bill is still created and a wizard offers to create a new contact or update an existing one. - If the company cannot deduct VAT, taxes are removed and prices are adjusted. - A warning banner appears on draft bills when the import had issues.

Per-supplier defaults can be stored on the contact: default product, expense account, taxes, forced purchase journal, forced single line and forced description. Company settings hold adjustment debit/credit accounts and an option to auto-create the supplier's bank account.

Menus it adds

account_invoice_import_menu
Models and fields (7)
  • res.company · extends an existing modelinvoice_import_email (Mail Gateway: Destination E-mail), adjustment_debit_account_id, adjustment_credit_account_id, invoice_import_create_bank_account (Auto-create Bank Account of Supplier)
  • res.partner · extends an existing modelinvoice_import_label (Force Invoice Line Description), invoice_import_move_id (Related Imported Vendor Bill), invoice_import_tax_ids (Default Taxes), invoice_import_account_id (Default Expense Account), invoice_import_journal_id (Force Purchase Journal), invoice_import_product_id (Default Product), invoice_import_single_line (Force Single Invoice Line), invoice_import_move_partner_id
  • account.move · extends an existing modelimport_warnings, import_partner_data, show_import_warnings
  • account.journal · extends an existing model
  • res.config.settings · extends an existing modelinvoice_import_email, adjustment_debit_account_id, adjustment_credit_account_id, invoice_import_create_bank_account
  • account.invoice.import · new modelcompany_id, invoice_attachment_ids (PDF or XML Invoices to Import)
  • account.invoice.import.partner.create · new modelmove_id (Vendor Bill), partner_vat (Partner VAT Number), partner_name, create_or_update, update_partner_id (Partner to Update), import_partner_data

Text generated by AI (DeepSeek) from reading the Odoo 19.0 code on GitHub; it may contain mistakes, so check the code before deciding. The module is very large and only part of the code was read. View the code on GitHub

Availability by version

Reviewed: 2026-11-03
Confirmed (verified in repository and branch) Estimated (unverified) No information

Confirmation status: 5 confirmed, 4 with no information of 9 versions.

terminal Installation and usage

OCA documentation · Odoo 19.0

Go to the form view of the suppliers and configure them with the following parameters:

  • Individual/Company: Company
  • the VAT Number (this field is used by default when searching the supplier in the Odoo partner database)
  • in the Accounting tab, configure the Vendor Bills Import fields: default product, default expense account, default taxes, forced invoice line description, single-line import, and forced purchase journal.

You can configure a mail gateway to import invoices from an email:

  • Go to the menu Settings \> Technical \> Email \> Incoming Mail Servers and setup the access (POP or IMAP) to the mailbox that will be used to receive the invoices,
  • In the section Actions to perform on incoming mails, set the field Create a new record to Wizard to import supplier invoices/refunds (model account.invoice.import).
  • Go to the menu Invoicing \> Configuration \> Settings: in the section Vendor Bills Import, configure the adjustment accounts used for rounding differences. You can also enable supplier bank account auto-creation.
  • If you are in a multi-company setup, enter the email of the mailbox used to import invoices in the field Mail Gateway: Destination E-mail; it will be used to import the invoice in the proper company.

Go to the menu Invoicing \> Vendors \> Import Vendor Bills and follow the instructions of the wizard. You can also start the wizard from the Accounting Dashboard: on the purchase journal, click on the Upload button.

When a vendor cannot be matched automatically, the imported vendor bill is created without a partner. Use the Create or Update Partner button on the draft vendor bill to create a new partner or update an existing one from the imported data.

If you have a large volume of invoices to import, you may be interested by the script mass_invoice_import.py which is available in the scripts subdirectory of this module. If you run:

./mass_invoice_import.py --help

you will have detailed instructions on how to use the script.

A particular use case of this script is to have a directory where all the invoices saved are automatically uploaded in Odoo. For that, have a look at the sample script inotify-sample.sh available in the same subdirectory. Edit this sample script to adapt it to your needs.

No verified information in OCA: Installation.

info

Data imported from GitHub: this sheet reflects the latest catalog review, not a live lookup. Always check the module documentation and staging before installing in production.