“We went live on Odoo. GST configuration looks fine. But the CA found mismatches in GSTR-1 and GSTR-3B after the first month.”
That sentence arrives in support conversations more than any other GST-related complaint. The module was installed. The taxes were set up. Invoices were raised. Everything appeared to be working. And then the first filing cycle revealed that CGST was being applied to an interstate transaction, or HSN codes were missing from the HSN summary, or reverse charge was not being captured at all.
Odoo’s Indian GST module is genuinely comprehensive. It covers CGST, SGST, IGST, reverse charge, TDS, TCS, e-invoicing, e-way bills, GSTR-1, GSTR-3B, and GSTR-9. All of it is included in the Enterprise subscription at no additional cost. The challenge is not the module itself. The challenge is configuring it correctly before the first live transaction, and understanding what it does and does not automate.
This guide covers both: what the module does, how to set it up, and the five places where Indian businesses most commonly get it wrong after go-live.
“We went live on Odoo. GST configuration looks fine. But the CA found mismatches in GSTR-1 and GSTR-3B after the first month.”
That sentence arrives in support conversations more than any other GST-related complaint. The module was installed. The taxes were set up. Invoices were raised. Everything appeared to be working. And then the first filing cycle revealed that CGST was being applied to an interstate transaction, or HSN codes were missing from the HSN summary, or reverse charge was not being captured at all.
Odoo’s Indian GST module is genuinely comprehensive. It covers CGST, SGST, IGST, reverse charge, TDS, TCS, e-invoicing, e-Way Bills, GSTR-1, GSTR-3B, and GSTR-9. All of it is included in the Enterprise subscription at no additional cost. The challenge is not the module itself. The challenge is configuring it correctly before the first live transaction and understanding what it does and does not automate.
This guide covers both: what the module does, how to set it up in the right sequence, and the five places where Indian businesses most commonly get it wrong after go-live.
What the Indian GST Module Covers: The Full Picture Before Configuration Begins
Most implementation guides jump straight to setup steps. Before those steps, it is worth being clear about scope: what is included in Odoo Enterprise’s Indian localisation, and what requires deliberate configuration before a single invoice is raised.
Included in Odoo Enterprise, no extra cost
- Indian chart of accounts (CoA)
- CGST, SGST, IGST, CESS tax groups at all GST slabs
- Fiscal positions for intrastate and interstate supply
- HSN and SAC code fields on products
- GSTR-1 report in JSON and CSV format
- GSTR-3B summary report
- GSTR-9 annual return support
- E-invoicing via NIC/IRP portal
- E-Way Bill via NIC portal
- TDS and TCS tracking and threshold alerts
- GSTIN verification for customers
- Reverse charge mechanism (RCM)
- Credit and debit notes with IRN linkage
Requires deliberate configuration or partner setup
- GSP credentials via NIC portal (BVM IT Consulting for Odoo 19)
- NIC portal API user creation for e-invoicing and e-Way Bill
- Fiscal position mapping assigned per customer
- HSN/SAC code assignment per product or category
- TDS section mapping per vendor account in the CoA
- Multi-GSTIN setup for multi-state businesses
- Invoice template update to display IRN and QR code
- GSTR-2B reconciliation workflow and discipline
The distinction between included and requires configuration is where most Indian businesses discover gaps mid-project. Everything in the left column exists in Odoo. None of it works correctly without the right column being done first, in the right sequence, before the first invoice goes out.
How Odoo Decides Whether to Apply CGST/SGST or IGST on Every Transaction
This is the most searched topic in Odoo’s Indian GST context, and the most commonly misconfigured. Understanding it clearly prevents the most frequent compliance problem Indian businesses encounter after go-live.
Odoo uses fiscal positions to determine whether a transaction is intrastate or interstate. A fiscal position is a tax mapping rule: it looks at the customer’s GSTIN, compares the state code in the GSTIN against the company’s registered state, and automatically applies the correct tax combination.
There are three scenarios to understand:
Intrastate supply. The customer’s GSTIN starts with the same state code as the selling company. Odoo’s intrastate fiscal position maps the product’s default tax (say, 18% GST) to 9% CGST plus 9% SGST. Example: a Delhi-registered company selling to a Delhi-registered customer.
Interstate supply. The customer’s GSTIN starts with a different state code. Odoo’s interstate fiscal position applies IGST at the full rate. Example: a Delhi-registered company selling to a Karnataka-registered customer. The same 18% GST becomes 18% IGST, not split into CGST and SGST.
Unregistered customer (B2C). No GSTIN exists. Odoo applies the product’s default tax. For B2C supplies above ₹2.5 lakhs that are interstate, the place of supply must be captured manually to ensure the correct tax treatment in GSTR-1.
The failure mode that creates the most compliance damage: fiscal positions are not assigned to customer masters. When a customer has no fiscal position set, Odoo applies whatever tax is on the product by default, with no state-based logic at all. This produces CGST/SGST on an interstate transaction, or IGST on an intrastate one. The buyer’s ITC is structured incorrectly. The seller’s GSTR-1 is wrong. Amendment is required in a subsequent return, and the buyer’s ITC is blocked until it is corrected.
Configuration rule: Assign fiscal positions to every customer master at the time of customer creation. Do not rely on the salesperson to set it transaction by transaction. In live operations, they will not. The accountant will find the error at month-end, after 30 or 40 invoices have gone out with the wrong tax split.
Setting Up Odoo’s Indian GST Module: The Configuration Sequence That Works
The order of these steps matters. Skipping or reversing any step creates conflicts that are time-consuming to resolve after invoices have been raised. Follow this sequence before go-live, not during parallel run.
STEP 1
Install the Indian Localisation
Go to Accounting, Configuration, Settings. In the Fiscal Localisation section, select India and save. This installs the Indian chart of accounts, all GST tax groups at standard slabs (5%, 12%, 18%, 28%), CESS groups, and the Indian GST report templates.
Do this before creating any accounts, taxes, or journals manually. Installing localisation after manual setup creates conflicts between auto-generated records and existing ones that require manual resolution. On a fresh Odoo database, localisation takes under two minutes to install and configure the entire tax structure.Important: Install localisation on the production database before any transactions are entered. It cannot be cleanly applied to a database that already has financial entries without professional data remediation.
STEP 2
Enable Indian Integration Features
In Accounting, Configuration, Settings, scroll to the Indian Integration section. Enable the features that apply to your business:
- Registered Under GST: required for all GST-registered businesses. Unlocks e-invoicing, e-Way Bill, and GST filing features.
- TDS/TCS: enables threshold tracking and section alerts on vendor bills. Required for businesses deducting tax at source.
- E-Invoicing: mandatory for businesses with aggregate turnover above ₹5 crore. Connects Odoo to the NIC/IRP portal via GSP.
- E-Way Bill: required for goods movement above ₹50,000. Connects Odoo to the NIC E-Way Bill portal.
- GST E-Filing and Matching: enables direct GSTR-1 submission and GSTR-2B retrieval from the GST portal.
- Check GST Number Status: allows Odoo to verify customer GSTINs against the government database before invoicing.
Businesses below the e-invoicing threshold can still use all GST reporting and filing features. They simply do not need the IRN generation workflow.
STEP 3
Configure GSP Credentials for E-Invoicing and E-Way Bill
For businesses required to generate e-invoices, the GSP (GST Suvidha Provider) connection must be configured before the first invoice is confirmed. In Odoo 19, the GSP is BVM IT Consulting Services India Private Limited. In Odoo 18, it was Tera Software Limited. Check your version before creating API credentials.
The process: log in to the NIC e-Invoice portal, go to API Registration, User Credentials, Create API User. Select Through GSP, select the correct GSP name, create an API username and password. Enter these credentials in Odoo’s Indian Integration settings under E-Invoicing. Repeat the same process on the NIC E-Way Bill portal for E-Way Bill credentials.
Once configured, confirming an invoice in Odoo triggers an automatic API call to the IRP. The portal returns the IRN and a digitally signed QR code. Odoo stamps both on the invoice PDF in the same step. The process takes under five seconds per invoice.Always test in the NIC sandbox environment before connecting Odoo to production. The sandbox accepts the same API flow. Validate that IRN generation, QR code stamping, and invoice PDF formatting are all correct before any live transaction goes through the production portal.
STEP 4
Assign HSN and SAC Codes to Products
Every product and service supplied in India requires an HSN code (for goods) or SAC code (for services) on every invoice. In Odoo, these codes are set on the product or product category. Setting them at the category level applies the code to all products in that category automatically, with product-level overrides for exceptions.
HSN codes populate the HSN summary in GSTR-1. The GST portal requires this summary to be complete and accurate before accepting the return. Missing HSN codes produce a blank or partial HSN summary and result in a portal rejection at the time of GSTR-1 upload.
Before go-live, run an HSN audit: export the product list, verify HSN/SAC codes against the GST rate schedule, and import the corrected codes. This audit takes one to two days for an average product catalogue and prevents the most common cause of GSTR-1 upload failure.Turnover rule: Businesses with aggregate turnover above ₹5 crore must use 6-digit HSN codes. Below ₹5 crore, 4-digit codes are acceptable. Configure product HSN codes at the correct digit level for your turnover bracket before the financial year begins.
STEP 5
Set Up Fiscal Positions for Intrastate and Interstate Customers
Odoo’s Indian localisation creates the standard fiscal positions when the localisation is installed. The configuration work is assigning these positions correctly to customer masters.
The intrastate fiscal position maps each GST tax (5% GST, 12% GST, 18% GST, 28% GST) to its CGST plus SGST equivalent. The interstate fiscal position passes IGST through unchanged. For unregistered B2C customers, a consumer fiscal position applies the default rate without GSTIN validation.
Assign the correct fiscal position to every customer in the customer master record, based on the first two digits of their GSTIN. Odoo applies the assigned position automatically on all invoices for that customer. No manual tax selection is needed at the invoice level once positions are correctly assigned.
For businesses with a large existing customer database, this assignment can be done via import. Export the customer list, add a fiscal position column, populate based on GSTIN state code, and re-import. A one-time exercise that prevents ongoing compliance errors.
STEP 6
Map TDS Section Codes to Vendor Accounts
In the chart of accounts, find each expense or payable account used for vendor transactions that attract TDS. Set the TDS/TCS Section field on the account to the applicable section code: 194C for contractors and sub-contractors, 194J for professional services, 194I for rent, 194Q for purchase of goods above threshold, and so on.
Once configured, Odoo displays a prominent banner on any vendor bill posted to that account when the cumulative payment to that vendor exceeds the TDS threshold for the financial year. The banner identifies the applicable section and the deductible amount. The accountant reviews and posts the TDS deduction entry manually. Odoo does not auto-deduct, which preserves the accountant’s judgement for edge cases.TDS is calculated on taxable value only, not on the GST-inclusive invoice total. Verify that your team understands this before go-live. TDS deducted on the total amount (taxable value plus GST) is excess deduction, which causes a mismatch in the vendor’s Form 26AS and a reconciliation problem that takes considerable time to resolve.
STEP 7
Configure Reverse Charge Mechanism for Applicable Services
For services where the recipient is liable to pay GST under the Reverse Charge Mechanism (legal and professional fees, goods transport agency freight, import of services, security services, and others notified under RCM), configure a dedicated RCM tax in Odoo.
The RCM tax, when applied to a vendor bill, posts the GST liability to the output tax account (creating a liability in GSTR-3B Table 3.1(d)) and simultaneously creates an ITC entry in the input tax account (eligible for claim in GSTR-3B Table 4(A)(3) in the following month, subject to payment). For a fully GST-eligible business, the net cash outflow is zero, but both entries must exist for the return to be correct.
Create a dedicated RCM purchase journal to route all reverse charge vendor bills. Train the accounts team to use this journal for every RCM-applicable service. Missing RCM entries are one of the most common triggers for GST notices in service-heavy businesses.
How E-Invoicing Works in Odoo: From Invoice Confirmation to IRN in One Step
For businesses configured with GSP credentials and registered for e-invoicing, the workflow in Odoo is as follows.
The accounts team creates an invoice in the standard way: select the customer, add line items with products, quantities, and rates. The tax is auto-populated based on the fiscal position and product tax configuration. The team reviews the invoice and clicks Confirm.
At the moment of confirmation, Odoo sends the invoice data as a JSON payload to the IRP via the GSP API. The portal validates the data against the GST database, generates a unique Invoice Reference Number (IRN), and returns a digitally signed QR code. Odoo receives the response, stamps the IRN and QR code on the invoice record, and regenerates the PDF. The entire sequence completes in under ten seconds. The accounts team sees the IRN displayed on the confirmed invoice without any manual intervention.
The most common reasons e-invoicing fails at the confirmation step:
- Customer GSTIN is missing, invalid, or cancelled on the GST portal
- HSN code is missing on one or more invoice line items
- Place of supply does not match the fiscal position applied
- GSP API credentials have expired or were entered incorrectly in settings
- The sandbox API username and password were used in the production environment
When the confirmation fails, Odoo rolls back the invoice to draft status and displays the portal error message. The accountant corrects the specific issue and confirms again. No partial state is left: either the IRN is generated or the invoice remains in draft.
Credit notes and debit notes issued against an e-invoice also require IRN generation. Odoo handles this automatically when the credit note is created using the Add Credit Note function on the original invoice. The credit note IRN links to the original invoice IRN in the portal records. Do not cancel and re-create invoices manually to handle adjustments. Use Odoo’s credit note workflow every time.
For e-Way Bills, auto-generation is triggered when a delivery order for goods valued above ₹50,000 is validated. Odoo sends the shipment details to the NIC E-Way Bill portal API and receives an e-Way Bill number, which is stored against the delivery order. For inter-branch transfers, job work returns, and goods receipts, e-Way Bills can be generated manually from the delivery order before the goods move.
Filing GSTR-1 and GSTR-3B Directly from Odoo
With GST E-Filing and Matching enabled, Odoo connects directly to the GST portal for return submission and GSTR-2B retrieval. The monthly workflow has three stages.
Stage 1: Verify GSTR-1 before filing. Go to Accounting, Reporting, India, GST Return Periods. Open or create the return period for the month. Click GSTR-1 Report. Odoo generates the invoice-level GSTR-1 data and runs basic validations: missing GSTINs, invoices with no place of supply, HSN summary completeness, and tax rate mismatches against fiscal positions. Review and correct any flagged items before proceeding.
Stage 2: Submit GSTR-1. Once verified, submit GSTR-1 to the GST portal directly from Odoo, or download the JSON file and upload it manually. Both paths use the same underlying data. The direct submission route is faster and eliminates manual download and upload steps. Either route generates the same GSTR-1 content.
Stage 3: Reconcile GSTR-2B before filing GSTR-3B. After the 14th of the month, GSTR-2B is available on the GST portal. Odoo retrieves GSTR-2B data and compares it against the purchase register. Invoices in Odoo’s purchase register that do not appear in GSTR-2B are flagged. ITC should only be claimed on invoices that appear in GSTR-2B. Once the reconciliation is reviewed and unmatched invoices are deferred or followed up with vendors, file GSTR-3B from Odoo’s summary.
The critical discipline: generate both GSTR-1 and GSTR-3B from Odoo’s data, not from a separate spreadsheet maintained in parallel. When both returns come from the same source, the structural mismatches that trigger most GST portal notices become impossible. When a parallel Excel is maintained for GSTR-3B while Odoo generates GSTR-1, discrepancies are almost guaranteed within three months.
The most expensive GST mistake Indian businesses make in Odoo: claiming ITC in GSTR-3B on invoices that the vendor has not yet filed in their GSTR-1. The invoice exists in Odoo’s purchase register. It does not appear in GSTR-2B. ITC is claimed. A notice arrives under Rule 36(4) of the CGST Rules. Reversal is required with 18% interest per annum from the date of the claim. The GSTR-2B matching step in Odoo takes 15 minutes before each GSTR-3B filing. The reversal and notice response takes weeks. Do the 15-minute check every month.
Five GST Configuration Mistakes That Create Compliance Problems After Go-Live
Each of the following mistakes is common, avoidable, and traceable to a specific configuration decision made during or before go-live. The compliance consequence listed for each is the typical outcome, not the worst case.
Mistake 1: Fiscal positions not assigned to customer masters.
What happens: CGST/SGST is applied to interstate supplies, or IGST is applied to intrastate ones. The buyer’s ITC is in the wrong tax head. The seller’s GSTR-1 is incorrect. The mismatch creates a DRC-01B advisory from the GSTN system and requires amendment in GSTR-1 for each affected invoice.
Prevention: Make fiscal position a mandatory field in the customer creation workflow. Assign it based on the first two digits of the customer’s GSTIN at the time the customer is created, not at the time of invoicing.
Mistake 2: HSN codes missing or incorrect on product masters.
What happens: The HSN summary in GSTR-1 is blank or partially populated. The GST portal rejects the upload. The filing deadline is missed. Late fees of ₹50 per day accrue. Businesses above ₹5 crore turnover face an additional 10% penalty on the tax amount for incorrect HSN reporting.
Prevention: Run an HSN audit before go-live. Treat HSN code as a required field. Block invoice confirmation for products with no HSN code using Odoo’s validation rules if your implementation partner can configure it.
Mistake 3: RCM vendor bills entered without the RCM tax applied.
What happens: GSTR-3B Table 3.1(d) (tax payable under RCM) is understated. The liability is not declared. The GST department issues a show cause notice for short payment, with interest at 18% per annum from the due date of the return in which the liability should have appeared.
Prevention: Create a dedicated RCM vendor journal in Odoo. Configure it so the RCM tax is applied automatically on bills posted to this journal. Train the accounts team to use this journal for all freight, legal, security, and import service bills.
Mistake 4: Adjustments handled by cancelling and re-creating the original invoice.
What happens: The original IRN is orphaned on the government portal. The replacement invoice has a new IRN with no link to the original. The buyer’s GSTR-2B shows the original invoice. The seller’s GSTR-1 shows the replacement. A mismatch is created that requires manual amendment, correspondence with the buyer, and correction across two return periods.
Prevention: Never cancel a confirmed e-invoice manually. Always use Odoo’s Add Credit Note or Debit Note function on the original invoice. This creates the adjustment document with the correct IRN linkage and preserves the audit trail on both sides.
Mistake 5: TDS deducted on the GST-inclusive invoice amount.
What happens: The vendor is over-deducted. Their Form 26AS shows a TDS credit that is higher than the amount they expect based on the taxable value. When they file their income tax return, the excess credit creates a reconciliation problem. The deductor may also face a notice for incorrect TDS deduction under Section 201 of the Income Tax Act.
Prevention: TDS is always calculated on taxable value, not on the total including GST. This is a statutory requirement under the Income Tax Act. Train the accounts team on this before go-live. Verify that Odoo’s TDS configuration uses the tax base amount and not the total invoice amount as the deduction base.
Odoo for Businesses with Multiple GSTINs or Multi-State Operations
A business registered in multiple states holds a separate GSTIN for each state of registration. In Odoo, each GSTIN operates as a separate company within the multi-company setup. Invoices raised from the Delhi entity carry the Delhi GSTIN. Invoices from the Maharashtra entity carry the Maharashtra GSTIN. Each entity files its own GSTR-1, GSTR-3B, and GSTR-9 separately.
The configuration requirement: each company in Odoo’s multi-company setup must have its own Indian localisation configured independently. The Indian chart of accounts, tax groups, fiscal positions, and GSP credentials are company-specific in Odoo. A centralised finance team can access all companies from a single Odoo login, but the filing is done entity by entity.
Inter-state stock transfers between branches of the same business attract GST as supplies to a distinct person under the GST Act. In Odoo, these are handled as inter-company transactions: the sending entity raises a transfer invoice with IGST, and the receiving entity posts a corresponding vendor bill to claim ITC. Both entries must appear in the respective GSTR-1 and GSTR-3B returns.
Consolidated reporting: Odoo’s multi-company setup produces entity-level P&L, balance sheet, and GST reports. Consolidated group-level financials are available through Odoo’s consolidation features. This structure works cleanly for groups with two to ten entities and adequate for most Indian mid-market businesses operating across multiple states.
Frequently Asked Questions on Odoo and Indian GST
Does Odoo support e-invoicing for Indian businesses?
Yes. Odoo Enterprise supports e-invoicing via direct API integration with the NIC/IRP portal through a registered GSP. When an invoice is confirmed, Odoo sends the data to the portal and receives the IRN and QR code automatically. E-invoicing is mandatory to configure for businesses with aggregate turnover above ₹5 crore. Businesses below this threshold can still use all of Odoo’s GST reporting and filing features without the IRN workflow.
Can Odoo file GSTR-1 directly to the GST portal?
Yes, with the GST E-Filing and Matching feature enabled. Odoo connects to the GST portal via the GSP and can submit GSTR-1 directly without downloading and uploading a JSON file. Alternatively, Odoo generates the GST portal-compliant JSON that can be uploaded manually. Both approaches use identical underlying data from Odoo’s invoice records.
How does Odoo handle reverse charge in India?
Odoo supports RCM through a dedicated tax configuration. On the vendor bill, the RCM tax posts the GST liability to the output tax account and simultaneously creates an ITC entry in the input tax account. The accountant identifies and marks RCM-applicable bills using a dedicated journal. Both the liability and the credit appear in GSTR-3B in the correct tables when the return is generated from Odoo.
Does Odoo support TDS for Indian businesses?
Yes. With TDS/TCS enabled in Indian Integration settings, Odoo tracks cumulative payment amounts per vendor and displays an alert banner on vendor bills when the TDS threshold is crossed. The banner identifies the applicable section code based on the account configuration. The deduction itself is posted by the accountant, preserving human oversight for edge cases and exceptions.
What happens if a vendor does not file their GSTR-1 and their invoice is not in my GSTR-2B?
ITC cannot be legally claimed on that invoice until it appears in GSTR-2B. Odoo’s GSTR-2B matching feature identifies these invoices before you file GSTR-3B. The correct approach is to defer the ITC claim and follow up with the vendor for their return filing. Claiming ITC before the invoice reflects in GSTR-2B attracts reversal with 18% interest per annum from the date of the original claim under Rule 36(4) of the CGST Rules.
Is Odoo’s Indian GST module free or does it cost extra?
The Indian localisation module (l10n_in) is included in Odoo Enterprise at no additional licence cost. E-invoicing, e-Way Bill, GSTR-1 filing, GSTR-3B reporting, GSTR-2B matching, TDS alerts, and the full Indian chart of accounts are all part of the standard Enterprise subscription. Implementation and configuration by a qualified partner is a separate service cost, but the module itself carries no additional licence fee.
Can Odoo handle GST for a business registered in multiple states?
Yes. Odoo’s multi-company structure supports multiple GSTINs, with each state entity configured as a separate company. Each entity has its own localisation, tax configuration, GSP credentials, and GSTR filing workflow. Inter-state stock transfers between entities are handled as inter-company transactions with IGST. Consolidated financial reporting is available at the group level, while GST filing happens separately per entity.
The Module Is Ready. The Question Is Whether the Configuration Is.
Every compliance problem described in this guide traces back to a configuration decision made before the first invoice was raised. Or not made.
The GSTR-1 mismatch from wrong fiscal positions. The blocked ITC from missing HSN codes. The RCM notice from vendor bills posted without the reverse charge tax. The orphaned IRN from a cancelled invoice. The TDS mismatch from deducting on the wrong base. Each one avoidable. Each one encountered regularly in Indian businesses that went live on Odoo with an incomplete setup.
Odoo’s Indian GST module is comprehensive for SME and mid-market businesses. It handles more compliance territory natively than most standalone accounting software, at no additional cost within Enterprise. What it requires is a configuration sequence done in the right order, validated against real transactions, reviewed with the business’s CA, before the first live invoice goes out.
At ochre.digital, we configure Odoo’s Indian GST module as part of every implementation we deliver. Our go-live sign-off includes a CA review of a test batch of transactions across intrastate, interstate, RCM, and export scenarios. That review takes one day. The compliance problems it prevents take months to resolve.
Implementing Odoo and need Indian GST configured correctly from day one?
After understanding your GST registration structure, transaction types, and compliance requirements, we will come back with a configuration plan specific to your business. Book a 30-minute session with the ochre.digital team. We do not start with a demo. We start with your situation.
