All posts
General9 min read

Odoo vendor bill digitization: AI-powered OCR, the accounting inbox, and automated coding

Odoo's digitization feature reads vendor bill PDFs and images with an OCR pipeline, extracts vendor, date, amount, and line items, then proposes a draft bill ready for validation. Here is how the feature works, what it requires, and how to configure it for reliable processing.

Manual invoice entry is the highest-friction routine task in accounting. A vendor sends a PDF. An accountant opens it, reads it, opens Odoo, enters the vendor, the date, the amount, each line, the tax, the account. Ten minutes per bill. Five hundred bills a month.

Odoo's digitization feature reduces this to: upload or email the PDF, review the pre-filled draft, validate. The OCR pipeline extracts the relevant fields automatically and Odoo applies learned mappings from past bills to fill in account codes and taxes. When it works well, validation takes under a minute per bill.

This post covers how the feature works technically, what plan tier it requires, the email inbox configuration, the OCR confidence thresholds, and the common failure modes.

What digitization does and does not do#

Digitization extracts: vendor name, bill date, due date, total amount, subtotal, tax amount, currency, bill reference, and line-item descriptions with unit prices and quantities.

Digitization does not: guarantee correct account coding (it learns from your history), handle multi-currency with exchange rate application (you validate currency manually), or work offline (it calls an Odoo cloud OCR service regardless of deployment mode).

The output is a draft vendor bill in status "Draft." The accountant reviews it, corrects any misread fields, applies the correct accounts and analytic if needed, then confirms. The workflow does not skip human review - it eliminates data entry, not judgment.

Requirements#

Digitization requires Odoo Enterprise with an active subscription or IAP (In-App Purchase) credits. Each digitization consumes one credit. Credits are bundled in plans or purchasable separately.

Enable it at Accounting > Configuration > Settings > Digitization. You will see:

  • Vendor Bills: enables digitization for incoming bills.
  • Customer Invoices: enables digitization for customer invoices (useful when scanning paper invoices you issue).
  • Automatic Sending: if enabled, newly uploaded bills are sent to OCR immediately without requiring a manual trigger.

You also set the action to take after digitization: move to "In Review" stage, or notify a specific user.

The accounting inbox (alias)#

Each Odoo journal has an email alias. For vendor bills, the default alias is typically vendor-bills@yourcompany.odoo.com. When a vendor emails a bill to this address, Odoo:

  1. Creates a new vendor bill draft.
  2. Attaches the PDF.
  3. Triggers digitization if automatic sending is enabled.

Configure the alias at Accounting > Configuration > Journals > Vendor Bills > Advanced Settings. Set the alias domain (your Odoo instance domain, configured in Settings > Technical > Email > Alias Domain) and the alias name.

To give vendors a simple inbox: tell them to always CC or send to vendor-bills@yourcompany.odoo.com. Odoo maps the sender's email to an existing partner via the res.partner email field. If no match exists, it creates a new partner.

Uploading bills manually#

From Accounting > Vendors > Bills, click Upload. Odoo accepts PDF, JPG, PNG, and TIFF. After upload, the bill appears in Draft state with a "Waiting for OCR" status badge. Digitization typically completes within 10–60 seconds depending on Odoo server load.

You can also drag-and-drop files directly onto the bill list view, or upload multiple files in bulk using the Batch Digitize option.

How OCR maps vendors and products#

Odoo's OCR service returns raw extracted text. The Odoo application layer then applies business logic:

Vendor matching - extracted vendor name is matched against res.partner records using fuzzy string matching. If the match confidence is high, Odoo fills the vendor field. If ambiguous, it leaves the field empty for manual selection.

Product and account mapping - Odoo maintains a hidden mapping table (accessible only internally) that records which account and tax combination was used last time a similar line description appeared on a bill from this vendor. On subsequent bills with the same vendor and similar descriptions, it proposes the same accounts. This is the "learning" behavior.

Tax detection - tax percentages extracted from the bill are matched against existing taxes in the company's fiscal position. If a 20% VAT rate is extracted and a 20% tax record exists, Odoo proposes it.

Reviewing and validating a digitized bill#

After OCR completes, the bill status changes from "Waiting for OCR" to "In Review" (if you configured that action) or remains "Draft." The bill form shows yellow highlighting on fields that were auto-filled by OCR.

You can click any highlighted field to see the extracted raw value and the confidence score. If the score is below a threshold (configurable but defaulting to around 70%), Odoo leaves the field empty rather than guess.

Review workflow:

  1. Confirm the vendor is correct.
  2. Check the bill date and due date.
  3. Verify the total - Odoo shows a warning if extracted totals do not match the sum of journal lines.
  4. Review each line's account code - this is where OCR most commonly errs.
  5. Apply analytic accounts or tags if required.
  6. Click Confirm.

On confirmation, Odoo posts the journal entry and removes the OCR highlights. The bill moves to "Posted" state.

Configuring purchase order matching#

If you use purchase orders, Odoo can automatically match a digitized bill to an existing PO. When the bill reference on the PDF matches a PO number in Odoo, or when the vendor and amounts match a pending PO receipt, Odoo proposes the match and pre-fills the bill lines from the PO.

Enable this at Accounting > Configuration > Settings > Lock Posted Entries with Hash (this is the section for purchase order matching configuration, oddly named). The setting is called Bill Control or Purchase Order Matching depending on your version.

When the match fires correctly, the accountant clicks Add a Bill from inside the PO or the receipt, and the digitized bill lines auto-reconcile with received quantities. This closes the three-way matching loop (PO → receipt → bill) with minimal manual work.

IAP credit consumption and monitoring#

Each digitization uses one IAP credit. Monitor consumption at Settings > Technical > IAP Account or directly from the billing portal at iap.odoo.com.

You will receive an email warning when credits drop below a threshold. Odoo stops auto-digitizing and queues bills as "Waiting" until credits are recharged. Bills do not fail permanently - they resume automatically when credits are available.

If you have a high bill volume, estimate your monthly cost: 1 credit ≈ €0.05–0.10 depending on your Odoo plan. A company processing 200 vendor bills per month spends roughly €10–20 per month on digitization credits in addition to their subscription.

Common failure modes#

OCR returns wrong vendor name. Usually caused by a vendor letterhead that uses a trading name different from the legal name in Odoo. Fix: add the trading name as an alias to the res.partner record (in the "Sales & Purchases" tab, use the "Alternative Names" field if your version supports it, or set a secondary email that the vendor sends from).

Lines extracted but wrong account codes. The mapping learned from a misposted historical bill. Correct the current bill, then optionally reset the vendor's learned mappings by navigating to the vendor's accounting settings and clearing the auto-code history (this is a technical action, only available in debug mode).

Duplicate bill detection triggers incorrectly. Odoo compares bill reference numbers and vendors to detect duplicates. If two legitimate bills from the same vendor have the same reference, Odoo blocks the second with a duplicate warning. Override by clicking "Force Duplicate" with an explanation note.

Email attachment not picked up. Odoo requires the email to have the PDF as a direct attachment, not as a link. Forwarded emails with the original as an attachment-within-an-attachment are not parsed. Vendors must send the PDF directly.

Currency mismatch. If the extracted currency does not exist as an active currency in Odoo's multi-currency setup, the digitization fails. Enable the currency at Accounting > Configuration > Currencies.

Automating the review with approval rules#

For high-volume environments, configure approval rules at Accounting > Configuration > Bill Approval Rules (Enterprise). Rules can auto-confirm bills under a certain amount from trusted vendors, routing only large or first-time-vendor bills to human review. This further reduces the accountant's queue.


For three-way matching between purchase orders, receipts, and vendor bills, see the three-way matching guide. For the full accounting journal entry model, see the Odoo accounting journal entries guide.

Try ERPeek on your own Odoo module - ask questions, scaffold tests, and explore your codebase in plain language.

Get started free