MessyDocs
← Back to all posts

What Odoo's built-in OCR did to a ₹61,250 Indian vendor bill, tested today

If you are evaluating Odoo for an Indian SMB or recommending it to a client as a Tally alternative, here is what its built-in OCR actually returned when we fed it a real vendor bill today.

The bill is from Nice Packers and Movers, a Delhi-based goods transport operator. ₹61,250 total written both in figures and in words at the bottom, GSTIN printed across the top. The kind of bill a CA in Coimbatore or a shop owner in Surat sees forty times a week.

We uploaded it to a fresh Odoo trial with Accounting installed, used the built-in invoice digitization feature (Odoo's own documentation for the feature), and let it auto-create the Bill.

This is what Odoo produced.

The Bill Odoo created

Field Bill says Odoo's draft Bill
Vendor name Nice Packers and Movers Nice Packers and Movers ✓
Vendor address Plot No-10, G/F, Munrika, ... Delhi 110-043 Plot No.-10,G/F, South West Delhi 110043 ✓
Vendor GSTIN 07GVCPS9174J1ZS 07GVCPS9174J1ZS ✓
Bill type Vendor Bill Receipt (misclassified)
Bill # 101 "-10" (lifted from "Plot No.-10" in the address)
Bill Date 22/12/2021 empty
Accounting Date (within FY) 30 May (defaulted to today)
Line items 8 distinct (Packing, Transport, Loading, Unloading, GST 5%, Service @ 10%, Insurance @ 3%, NGT Tax, Bilty) 1 line, called "ENICE PACKERS", Qty 1, Price ₹6.00
GST line ₹2,250 dropped
NGT Tax ₹1,500 dropped
Bilty Charge ₹500 dropped
TOTAL ₹61,250.00 ₹6.00

Read that last row twice. Odoo created a Bill that says you owe Nice Packers and Movers six rupees against an invoice you actually have to pay sixty-one thousand two hundred and fifty for. That is off by approximately ten thousand two hundred times.

The "ENICE PACKERS" line item is a misread of the vendor name (the leading N dropped, presumably because the printed letterhead has decorative spacing). The ₹6.00 unit price has no obvious source in the bill; the closest digit cluster on the document is the postal code "110-043" or the Bill No "101" or the GSTIN ending "1ZS". Odoo grabbed a number, called it the bill total, and moved on.

The pattern, not the one-off

We ran a second bill to check. Different shape entirely: a thermal cash receipt from Wave 1st Silver Tower (a Bikanervala food outlet in Noida), dated 3 July 2017, two packets of namkeens at ₹20 each, GST ₹4.80, total ₹45.00.

What Odoo returned:

Field Bill says Odoo's draft
Vendor name Wave 1st Silver Tower / Bikanervala empty
Bill Reference 01/17180703/1330 01/17180703/1330 ✓
Bill Date 03/07/2017 3 Jul 2017 ✓
Line item Namkeens, Qty 2, Rate 20, Amount 40 1 line called "WAVE 1ST SILVER TOWER - 2017-07-03", Qty 1, Price ₹89.00
Tax split SGST ₹2.40 + CGST ₹2.40 dropped
TOTAL ₹45.00 ₹89.00

The ₹89.00 was lifted from a line lower on the receipt that reads "Your No Collection Paid 89.00" (a cash-drawer note about a separate transaction). It has no relationship to the actual bill total.

Two bills, two different shapes, the same failure mode: Odoo's OCR does not understand bill structure. It identifies digit clusters and assigns them to fields without semantic anchoring. When the digit it picks happens to be the right one (rare), the Bill is correct. When it picks the wrong one (most of the time on real Indian bills), the Bill is wrong by an arbitrary amount.

Why the failure mode matters for a CA

A CA reviewing Odoo's draft Bill for ₹6.00 on a clearly-₹61,250 invoice will catch the error in three seconds. The ₹6 is obviously wrong. It is not a silent failure in the way Zoho's ₹4,250-short Bill was.

The cost shows up elsewhere:

  1. You cannot batch. If you have 200 bills to process for a client, you cannot trust any of Odoo's drafts without opening every single one to read against the original. The OCR has saved you nothing; it has added a review step on top of typing.
  2. The "vendor name + GSTIN extracted" feeling is misleading. The header looks competent. A junior keying the rest manually after seeing the header populate might assume the line items below are equally competent. They are not.
  3. Across 4,000 bills per month (a real CA-firm volume), the false-confidence on the header drives more errors than fewer.

The Odoo IAP OCR works as a vendor-card auto-populator (header fields). It does not work as a bill-to-vouchers pipeline.

The same bill through our pipeline

We ran the Nice Packers bill through our own pipeline on the same day.

The vendor name, full address, mobile, website, email and the printed GSTIN 07GVCPS9174J1ZS came through. Bill number 101, customer Kuldeep Kumar, From Noida Sector-72, To Ahmedabad, the consignment line LR-101 = 34 items. All eight line items came through with their amounts: Transportation ₹45,000, Loading and Unloading marked Include, GST @ 5% = ₹2,250, Service Charge @ 10% = ₹4,500, Insurance Charge ≈ 3% = ₹7,500, NGT Tax ₹1,500, Bilty Charge ₹500. The printed total of ₹61,250 was returned correctly. The date 22/12/021 was flagged at medium confidence with a bounding box for human review (because the year is genuinely ambiguous on the form).

Same bill. Different pipelines. One returns ₹6.00 and a fake line. The other returns ₹61,250 and all eight lines with the only ambiguous field flagged for review. The CA or SMB owner who picks the wrong pipeline is doing rework or refunding ITC.

The wider pattern, three of three

We have now tested three bundled-OCR products on this exact bill: Zoho's Advanced Autoscan, Odoo's IAP OCR, and Xero/Hubdoc. All three failed to produce a usable Bill. They failed differently:

  • Zoho dropped the GST, NGT, and Bilty lines and posted a Bill ₹4,250 short of the printed total. Plausible-wrong.
  • Odoo returned ₹6.00 for a ₹61,250 bill. Catastrophic-wrong.
  • Xero / Hubdoc got the total exactly right (₹61,250) but lumped everything into a single line with tax reported as ₹0. Misleading-wrong; the ITC the client is entitled to silently disappears.

Across all three, none of the bundled OCRs returned a Bill from which the GST input tax credit could be correctly booked. Each failed in a different way, but every one of them lost the ₹2,250 of ITC on this particular invoice.

If you are using a bundled-OCR feature inside your accounting software for Indian vendor bills, you are paying for a feature that does not produce a Bill your CA can post without manual cleanup. For purpose-built Indian-bill OCR, that work is not needed.