Xero/Hubdoc got the bill total right. The tax came back ₹0. We tested on a real Indian GST invoice.
This is the third of three Indian-bill OCR tests we ran, after Zoho's Advanced Autoscan and Odoo's IAP OCR. Same bill in all three tests.
If you are evaluating Xero as a Tally alternative for an Indian SMB or CA practice, here is what its built-in OCR (Hubdoc, which Xero owns since 2018 and ships with Business Edition plans) actually returned on a real vendor bill today.
The Bill Hubdoc created
The source bill: Nice Packers and Movers, Delhi-to-Ahmedabad transport, ₹61,250 total in figures and in words, printed GSTIN at top.
Hubdoc's draft Bill in Xero:
| Field | Bill says | Hubdoc / Xero draft |
|---|---|---|
| Vendor (From) | Nice Packers and Movers | "No Contact" (empty, never matched) |
| Vendor GSTIN | 07GVCPS9174J1ZS | not captured |
| Bill Date | 22/12/2021 | 30 May 2026 (defaulted to today) |
| Due Date | (15 days after bill date) | empty |
| Reference | 101 | 101 ✓ |
| Currency | INR | INR Indian Rupee ✓ |
| Amounts are | (figure for clarity) | Tax Inclusive (default) |
| Line items | 8 distinct (Packing, Transport, Loading, Unloading, GST 5%, Service @ 10%, Insurance @ 3%, NGT Tax, Bilty) | 1 line, blank Item, blank Description, Qty 1.00, Unit Price ₹61,250.00, blank Account, blank Tax Rate |
| Subtotal | ₹61,250 | ₹61,250.00 ✓ |
| Tax | (₹2,250 GST + others) | zero |
| TOTAL | ₹61,250.00 | ₹61,250.00 ✓ |
Read that table from the bottom up. The total is right. The total is the only thing that is right.
Why this is the most expensive of the three failures
A CA reviewing this draft Bill in Xero sees "Total ₹61,250" matching the printed bill, glances at the Tax field showing zero, and a fast reviewer might approve. The bill posts. The books reconcile against the bank statement. Nothing looks broken.
Three months later, during GSTR-2B reconciliation, the ₹2,250 of ITC that Nice Packers reported in their GSTR-1 does not appear in your client's input tax credit. You go back to the bill, see it was posted at ₹61,250 with Tax ₹0, and realise Hubdoc lumped the GST into the Tax Inclusive line and never separated it out. The ₹2,250 ITC is recoverable but the client now wants to know why their reconciliation is wrong, and you spend an afternoon finding bills like this across their other 23 vendors.
This is a different failure mode than what Zoho did on the same bill, and different again from Odoo's catastrophic ₹6.00 result.
- Zoho silently dropped the GST line and posted a Bill that was ₹4,250 short of the printed total. The total mismatch is at least visible.
- Odoo returned ₹6.00 for a ₹61,250 bill. Obviously wrong, will be caught immediately, but no time saved over manual entry.
- Hubdoc returned the right total with the GST silently flattened into the inclusive unit price. The output looks correct to a skim review. The error does not surface until reconciliation, by which time the client is already annoyed.
Of the three, Hubdoc's failure is the easiest to miss and therefore the most expensive over a year of books. Right numbers, wrong structure.
The same bill through our pipeline
We ran the same Nice Packers bill through our own pipeline on the same day.
Vendor name, full address, mobile, website, email and the printed GSTIN 07GVCPS9174J1ZS all came through. Bill number 101, customer Kuldeep Kumar, route Noida Sector-72 to Ahmedabad, the consignment line LR-101 = 34 items. All eight line items came through with 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 with the GST broken out as its own line item rather than lumped into the unit price. 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. Hubdoc treats the bill as one inclusive number. Our pipeline reads the nine fields the way a CA would.
The three-of-three pattern
Across Zoho's Advanced Autoscan, Odoo's IAP OCR, and Hubdoc, all three bundled-OCR products failed to produce a Bill from which the client's ₹2,250 GST input tax credit could be correctly booked.
Each failed differently:
- Zoho silently dropped the GST, NGT, and Bilty lines.
- Odoo invented a ₹6 line item from nowhere.
- Hubdoc lumped everything into one inclusive line with Tax reported as zero.
Three different failure modes, one common outcome: the ₹2,250 of ITC the client is entitled to does not appear on any of the three draft Bills in a form that the accounting system will book correctly.
If you are wondering whether the bundled OCR your accounting software ships with will be enough for an Indian-bill-heavy practice, the answer on the evidence so far is no, not for the bills that matter most. Purpose-built Indian-bill OCR exists for the same reason purpose-built tax software exists: the bundled feature inside an everything-tool was never designed for the kind of bills Indian CAs actually receive.