Odoo 19 handles Indian GST mostly in Community. The l10n_in, l10n_in_edi and l10n_in_ewaybill modules give you CGST, SGST and IGST taxes, automatic intra- or inter-state selection from the place of supply, HSN/SAC codes, IRN e-invoicing, e-way bills and TDS/TCS. The GSTR-1, GSTR-2B and GSTR-3B workflow, including pushing GSTR-1 to the GST portal and matching GSTR-2B against your bills, is Enterprise (l10n_in_reports).
Community or Enterprise, feature by feature
| GST need | Module | Edition |
|---|---|---|
| GST, cess, exempt, nil-rated and non-GST taxes; fiscal positions | l10n_in | Community |
| HSN/SAC codes and digit validation | l10n_in | Community |
| TDS and TCS sections and entries | l10n_in | Community |
| E-invoice (IRN) | l10n_in_edi | Community |
| E-way bill from invoices, deliveries or the IRN | l10n_in_ewaybill, _stock, _irn | Community |
| GSTR-1 push, GSTR-2B fetch and match, GSTR-3B report | l10n_in_reports | Enterprise |
| Draft bills from vendors' e-invoices on the portal | l10n_in_reports | Enterprise |
| Tax report, TDS/TCS report on screen | account_reports | Enterprise |
The online services (e-invoice, e-way bill, GSTIN status check and GST portal calls) go through Odoo's IAP service and use credits. Buy them from the same settings page.
GST taxes and fiscal positions: how Odoo 19 picks CGST+SGST or IGST
The Indian chart loads GST taxes as groups. "18% GST S" on a sale is SGST 9% plus CGST 9%, and "18% IGST S" is the inter-state equivalent. There are versions for each rate from 1% to 40%, plus export, SEZ and LUT variants, reverse-charge taxes (flagged Reverse charge) and cess.
You put the intra-state tax on products, and fiscal positions switch it when needed. The chart creates these:
- Within <your state> and Inter State, both applied automatically.
- Special Economic Zone (SEZ) and Export for supplies with payment of IGST.
- SEZ - LUT (WOP) and Export - LUT (WOP) for supplies under a Letter of Undertaking.
- Reverse charge Intra State and Reverse charge Inter State, which add the reverse-charge note to the document.
On a sales invoice Odoo sets the Place of supply from the delivery address's state (a foreign address becomes "Foreign Country") and compares it with your company's state to choose the fiscal position. The invoice also carries the GST Treatment, copied from the customer: Registered Business - Regular, Composition, Unregistered, Consumer, Overseas, Special Economic Zone, Deemed Export or UIN Holders. SEZ treatment picks the SEZ position. A fiscal position set by hand on the customer overrides all of this.
Enter GSTINs on contacts. Odoo validates the format and can fill the state from the first two digits. With "Check GST Number Status" enabled, it can verify a GSTIN's status online and show it on the invoice.
HSN and SAC codes
Each product has an HSN/SAC Code field, copied to invoice lines and editable there. The HSN/SAC Validation setting sets how many digits you must give. Odoo offers 4 digits (turnover under ₹5 crore), 6 digits (over ₹5 crore) and 8 digits, and defaults to 4. Choose the level that matches your aggregate turnover, then clean the product master before go-live. A wrong HSN on an invoice flows straight into the e-invoice JSON and GSTR-1.
E-invoice and e-way bill
With E-Invoicing enabled and your portal API credentials verified, the invoice Send dialog submits eligible documents to the Invoice Registration Portal and stores the IRN. Eligible means B2B, exports, SEZ, deemed exports and their credit and debit notes. B2C invoices are not sent.
E-way bills are in l10n_in_ewaybill. It is not installed automatically, because service companies don't need it. Switch it on under E-Way bill in the same settings block. An e-way bill records the document type, the transport mode (By Road, Rail, Air or Ship), the distance, the vehicle number or transport document, and the transporter. You can generate it from an invoice. l10n_in_ewaybill_stock adds it on deliveries without an invoice, for example stock transfers. When e-invoicing is also active, l10n_in_ewaybill_irn generates the e-way bill through the IRN.
Settings › Invoicing › Indian Integration Registered Under GST [x] GST Number: 33XXXXXXXXXXXZX E-Invoicing [x] → credentials → Verify E-Way bill [x] GST E-Filing & Matching Feature [x] (Enterprise) HSN/SAC Validation 4 Digits (turnover < 5 CR.)
TDS and TCS
TDS and TCS are separate switches in the same block. TDS needs your TAN. The localisation preloads 34 TDS sections (192 to 195) and 13 TCS sections under 206C. Each section has per-transaction and aggregate thresholds, and Odoo checks them against the partner's PAN and warns when deduction or collection is advisable. On a posted bill, invoice or payment, the TDS Entry button creates the withholding entry. When a customer's PAN is missing or invalid, an Apply Higher TCS button appears. The details are covered in vendor bills and accounts payable.
GSTR-1, GSTR-2B and GSTR-3B (Enterprise)
Enabling "GST E-Filing & Matching Feature" installs l10n_in_reports. Returns then appear under Accounting › Closing › Tax Returns as periodic records with a status. Anything that talks to the portal needs your GST username and an OTP first.
- GSTR-1. Review the report and the document summary, then Push Data sends it to GSTN. Odoo checks the status and flags invoices the portal rejected. An XLSX export is also available. The final filing is done on the GST portal, and you then mark the return as filed in Odoo.
- GSTR-2B. Each month Odoo fetches your GSTR-2B from the portal and matches it against posted vendor bills (Match, Partially Matched), so you can see input tax that vendors haven't reported, or bills you haven't booked.
- GSTR-3B. A GSTR-3B version of the tax report, computed from your books to prepare the summary return. The 19.0 source has no push to the portal for 3B, so you file it on the portal.
Before trusting any return, lock the period with the tax return lock date so nothing moves after you file.
GST in Odoo 19 is mostly good master data: states, GST treatments, GSTINs and HSN codes. Get those right and the taxes follow. Next: financial reports, assets and closing. For a GST setup review, see our implementation service or contact us.
Questions we get asked
Is Odoo 19 GST compliant for Indian businesses?
Odoo 19 includes an Indian localisation covering GST taxes (CGST, SGST, IGST, cess), place of supply, HSN/SAC codes, e-invoicing with IRN, e-way bills and TDS/TCS, all in the Community modules. The GSTR-1, GSTR-2B and GSTR-3B return workflow is in the Enterprise module l10n_in_reports. Compliance still depends on correct contact, product and tax data, and on your CA reviewing returns.
Can Odoo 19 file GSTR-1 directly?
Odoo 19 Enterprise can push GSTR-1 data to the GST portal from the Tax Returns menu after you log in with your GST username and an OTP. It then checks the status and flags invoices with errors. The final filing is completed on the GST portal, after which you mark the return as filed in Odoo. Odoo can also export GSTR-1 as XLSX.
How does Odoo decide between IGST and CGST plus SGST?
Odoo compares the invoice's place of supply, taken from the delivery address's state, with the company's state. If they match, the automatic "Within your state" fiscal position keeps CGST plus SGST. If they differ, the Inter State position swaps in IGST. SEZ and overseas customers get their own positions, and a fiscal position set on the customer overrides the automatic choice.
Does Odoo 19 generate e-way bills?
Yes. The Indian - E-waybill module (l10n_in_ewaybill, Community) submits e-way bills to the government portal from invoices, recording transport mode, distance, vehicle and transporter. A stock add-on creates them from deliveries without an invoice, and when e-invoicing is enabled, another module generates the e-way bill through the IRN. It is not installed by default and uses IAP credits.