How to add document OCR to Odoo
Short answer
Odoo Enterprise includes Document Digitization for vendor bills through Odoo's IAP service, which works for common invoice layouts. For packing slips, certificates, drawings and local formats, run your own OCR or layout model, post extracted fields to Odoo drafts through the API, and send low-confidence items to a review queue.
Paper still moves manufacturing: supplier invoices, packing slips, certificates of conformance, mill test reports and inspection sheets. In Odoo, each of those ends up as an attachment someone has to read and key in.
Odoo's built-in digitization handles the best-known case, vendor bills, using a hosted service billed by credits. It is a good first step if the formats are common and sending invoices to a hosted service is acceptable. It does not cover receiving documents or technical paperwork.
The useful design question is not how accurate the OCR is, but what happens when it is wrong: how fields are checked against the PO and receipt, and how quickly a reviewer can correct them.
What teams use it for
Vendor bill capture
Extract vendor, bill number, date, totals and lines into a draft account.move, then match against the purchase.order and receipts.
Packing slip to receipt
Read supplier packing slips, match to open PO lines and pre-fill done quantities on the incoming stock.picking.
Certificates of conformance and mill certs
Extract heat or lot numbers and attach the certificate to the lot (stock.lot) so traceability reports include the document.
Customer POs and drawings
Read customer purchase orders and pull drawing numbers and revisions to check against the product's current revision.
Inspection sheet digitisation
Read handwritten or printed inspection forms and post results to quality checks, flagging unclear readings for a person.
Odoo integration surface
- Document Digitization (Enterprise, account_invoice_extract and related) using Odoo IAP credits for vendor bills; availability and behaviour depend on version.
- ir.attachment holds files; attachments linked to account.move, purchase.order, stock.picking and stock.lot via res_model and res_id.
- External API (XML-RPC, JSON-RPC, newer JSON-2 on recent versions) to create draft records and attach files from an outside OCR service.
- Documents app (Enterprise) with workflow rules that turn a file in a folder into a bill, which can be used as the inbox for scans.
- Lot and traceability: stock.lot and stock.move.line lot names, used for linking certificates to material.
How it works
- 1
Classify documents
Detect type first (invoice, packing slip, CoC, drawing). Each type has a different extraction schema and review rule.
- 2
Choose the engine
Use Odoo digitization for plain vendor bills, or your own OCR plus layout or vision-language model for tables, stamps and non-Latin text.
- 3
Extract with confidence
Return field values with a confidence score and the page location, so a reviewer can see where each came from.
- 4
Validate against Odoo
Check vendor against res.partner, lines against the PO, totals against the sum, and duplicates by vendor plus bill number.
- 5
Create a draft
Post a draft record through the API with the file attached. Do not post bills or validate receipts automatically.
- 6
Review queue
Route only low-confidence or mismatched documents to a person, with a side-by-side view of the scan and the draft.
- 7
Feed back corrections
Store reviewer corrections to tune templates and mapping tables for repeat vendors.
Example flows
Packing slip receiving
Trigger: A scanned packing slip is dropped in the receiving folder.
- The OCR service reads PO number, part numbers and quantities.
- It matches lines to the open incoming stock.picking.
- It pre-fills quantities and flags differences.
- The receiver confirms and validates the receipt.
Result: Receiving takes a quick check instead of keying, with exceptions visible.
Mill cert attached to lot
Trigger: A certificate PDF is emailed or scanned for a steel shipment.
- The service extracts heat number, grade and standard.
- It finds the lot in stock.lot by name.
- It attaches the PDF to the lot and notes the extracted values.
Result: Quality can open the lot and see its certificate without searching folders.
Keeping data on-prem
Odoo's built-in digitization is a hosted IAP service, so documents leave your network; check that against your policy for supplier invoices, and note that it is not available on every deployment type. For on-prem, run OCR yourself: open-source engines such as Tesseract or PaddleOCR for text, plus a document layout or vision-language model served from your own GPUs with vLLM or Ollama for tables and messy scans. The service reads files from a local share or Odoo attachments, writes drafts back through the internal API, and keeps both documents and extracted data inside your network. For defense and aerospace paperwork, a private pipeline is usually the only acceptable design. Plan GPU capacity for peak scanning batches rather than average load.
Security checklist
- Scan uploads for malware and restrict allowed file types and sizes.
- Store extraction results and originals under the same access rules as the Odoo record.
- Never let extracted text trigger actions; treat it strictly as data.
- Keep a full audit trail of original file, extracted values, reviewer changes and final record.
- For controlled documents, restrict the pipeline to a network enclave with no outbound access.
Ways to get it done
Odoo Document Digitization
Effort: Configuration only, plus per-document credit cost.
Enterprise customers with standard vendor bills and no restriction on hosted processing.
In-house OCR pipeline with the Odoo API
Effort: Four to eight weeks for several document types.
Teams with a developer who can maintain extraction rules and a review screen.
Partner build with Netray
Effort: Several weeks per document family, including review UI.
Private on-prem extraction of receiving, quality and engineering documents.
Pitfalls
- !Trusting totals without checking the sum of lines and tax.
- !Duplicate bills created by re-scanning the same document.
- !Part numbers misread (zero versus letter O), creating wrong matches; use fuzzy matching with a human step.
- !Handwriting and stamps that reduce accuracy; measure on your own documents, not a vendor demo.
- !No plan for rotated, skewed or multi-page scans.
Frequently asked questions
Does Odoo have built-in invoice OCR?
Odoo Enterprise offers Document Digitization for vendor bills through its IAP service, which needs credits. The specifics vary by version and plan. Community does not include it, so Community users add an external OCR service through the API.
Can OCR handle packing slips and certificates?
Not through the standard digitization, which targets invoices. A custom pipeline can read packing slips and certificates, but layouts vary by supplier, so you test on real samples, map part numbers carefully and route low-confidence results to a reviewer.
How accurate will it be?
It depends on scan quality and layout consistency. Clean digital PDFs from repeat vendors can be extracted well, while skewed scans and handwriting are harder. Measure accuracy per field on your documents and set thresholds so risky fields are always reviewed.
Can we keep documents on our own servers?
Yes. Run OCR and a layout or vision model on your own hardware, and write drafts into Odoo over the internal API. You give up the convenience of Odoo's hosted digitization but keep documents and extracted data within your network.
Should extracted bills post automatically?
Generally no. Create drafts, match against the PO and receipt, and let a person validate. Auto-posting is only reasonable for narrow cases with strong matching and a good history, and even then audit samples regularly.
Want Document OCR working on your Odoo?
A free 30 minute assessment: we map the integration path for your version and setup, and where it should run.
Get a free assessment