GST e-invoicing in Odoo works. The IRP (Invoice Registration Portal) integration submits invoices, gets back an IRN and QR code, and attaches them to the PDF automatically. The mechanics are solid. What we keep seeing on audits isn’t a software failure — it’s a handful of configuration and process gaps that Odoo will happily let you ship for months before anyone notices.
Here’s the checklist we actually run.
1. Every product needs a valid HSN code — not just the popular ones
Odoo’s l10n_in localisation blocks an invoice from generating without an HSN code on the line item. That sounds like a safety net, and it is — right up until someone creates a new SKU in a hurry and leaves the field blank “to fix later.” It gets forgotten. The invoice silently fails to submit to the IRP, or worse, gets created without HSN and has to be manually corrected after the fact. Audit your full product master for HSN gaps quarterly, not just at go-live.
2. IRP submission failures need a retry queue, not a shrug
The IRP occasionally rejects a submission — a validation mismatch, a timeout, a portal outage. If your process is “someone notices the invoice looks off and manually resubmits,” you will eventually miss one, and a missing e-invoice on a B2B transaction above the threshold is a compliance problem, not a bookkeeping one. Set up an actual monitored retry queue and a daily check of submission status, not an occasional glance.
3. The export invoice tax-selection mistake
This is the one we see most often. For exports, Odoo will offer both a standard IGST tax and a separate LUT/bond-based export tax code. They are not interchangeable — a genuine LUT (Letter of Undertaking) export should use the export-specific tax configuration, not a normal IGST rate. Select the wrong one and you’ve either overpaid tax that should have been zero-rated, or worse, misrepresented the transaction type entirely. Get your export tax configuration reviewed by someone who has specifically set up LUT exports before, not just general GST.
4. E-way bill auto-pairing needs to actually be checked, not assumed
When e-invoice and e-way bill generation are both active, Odoo can pair them so the e-way bill inherits the IRN. That’s the good path. The failure mode is a shipment going out with an e-way bill that was generated separately and doesn’t reference the matching e-invoice — usually because someone worked around a submission delay. Reconcile e-way bills against e-invoices periodically, not just at the point of dispatch.
5. Multi-GSTIN businesses need one view, not N logins
If you operate under several GST registrations — different states, different business verticals — each one is a separate submission stream to the IRP. Checking each GSTIN’s status separately doesn’t scale past two or three registrations before something gets missed. A consolidated dashboard that shows submission status across every GSTIN in one place is the difference between catching a failure same-day and finding out about it during a filing deadline crunch.
The invoices that cause real problems are never the ones that fail loudly. They’re the ones that fail quietly, get manually patched once, and then the process that caused the failure repeats the next month.
The pattern behind all five
None of these are Odoo bugs. Odoo’s GST localisation does exactly what it’s configured to do. The gap is always the same shape: a manual step that works fine until someone’s busy, on leave, or new to the process. The fix isn’t a smarter accountant — it’s a periodic, boring, automatable check that doesn’t depend on a person remembering to run it.
If you want a second set of eyes on your current GST e-invoicing setup, send us your configuration and we’ll run this exact checklist against it.