Odoo Solutions

Odoo Accounting and Indian GST: What the Module Does, How to Configure It, and Where Businesses Go Wrong
GST & Accounting Odoo India · April 2026
Odoo accounting for
Indian GST: what the
module does, how to configure
it, and where businesses go wrong

The module was installed. Invoices were raised. Everything appeared to be working. Then the CA found GSTR-1 and GSTR-3B mismatches after the first filing cycle. A complete guide to getting it right before the first transaction goes out.

“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. 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 included in the Enterprise subscription at no additional cost. The challenge is not the module. The challenge is configuring it correctly before the first live transaction.

What the Indian GST module covers

Before setup steps, it is worth being clear about scope: what is included in Odoo Enterprise’s Indian localisation, and what requires deliberate configuration.

Included — no extra cost
  • Indian chart of accounts
  • CGST, SGST, IGST, CESS tax groups at all slabs
  • Fiscal positions for intrastate and interstate supply
  • HSN and SAC code fields on products
  • GSTR-1 report in JSON and CSV
  • 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 configuration — must be done first
  • GSP credentials via NIC portal (BVM IT for Odoo 19)
  • NIC portal API user creation
  • Fiscal position mapping per customer
  • HSN/SAC code assignment per product
  • TDS section mapping per vendor account
  • Multi-GSTIN setup for multi-state businesses
  • Invoice template update for IRN and QR code
  • GSTR-2B reconciliation workflow

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

This is the most commonly misconfigured element of Indian GST in Odoo. Understanding it prevents the most frequent compliance problem after go-live.

Odoo uses fiscal positions to determine whether a transaction is intrastate or interstate. A fiscal position looks at the customer’s GSTIN, compares the state code against the company’s registered state, and automatically applies the correct tax combination.

The three scenarios

Intrastate supply: Customer’s GSTIN starts with the same state code. Odoo maps 18% GST → 9% CGST + 9% SGST.

Interstate supply: Different state code. Odoo applies 18% IGST — not split into CGST/SGST.

Unregistered B2C customer: No GSTIN. Odoo applies the product’s default tax. For B2C interstate supplies above ₹2.5 lakhs, place of supply must be captured manually.

The failure mode: 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. CGST/SGST lands on an interstate transaction, or IGST lands on an intrastate one. The buyer’s ITC is in the wrong tax head. GSTR-1 is wrong. Amendment is required, 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 — based on the first two digits of their GSTIN. 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.

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.

1
Install the Indian localisation
Go to Accounting → Configuration → Settings → Fiscal Localisation → select India → Save. This installs the Indian chart of accounts, all GST tax groups at standard slabs (5%, 12%, 18%, 28%), CESS groups, and Indian GST report templates. Do this before creating any accounts, taxes, or journals manually.
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.
2
Enable Indian integration features
In Accounting → Configuration → Settings → Indian Integration, enable the features that apply to your business: Registered Under GST (required for all registered businesses), TDS/TCS, E-Invoicing (mandatory above ₹5 crore), E-Way Bill (goods above ₹50,000), GST E-Filing and Matching, and Check GST Number Status.
3
Configure GSP credentials for e-invoicing and e-way bill
For businesses required to generate e-invoices: log in to the NIC e-Invoice portal → API Registration → User Credentials → Create API User → Through GSP → select BVM IT Consulting Services India (for Odoo 19) → create API username and password. Enter credentials in Odoo’s Indian Integration settings. Repeat on the NIC E-Way Bill portal for E-Way Bill credentials.
Always test in the NIC sandbox environment before connecting to production. Validate that IRN generation, QR code stamping, and invoice PDF formatting are correct before any live transaction goes through the production portal.
4
Assign HSN and SAC codes to products
Set HSN codes (for goods) or SAC codes (for services) on each product or product category. Setting at the category level applies the code to all products in that category automatically. HSN codes populate the HSN summary in GSTR-1 — missing codes cause a blank HSN summary and portal rejection at GSTR-1 upload time.
Turnover rule: businesses above ₹5 crore aggregate turnover must use 6-digit HSN codes. Below ₹5 crore, 4-digit codes are acceptable. Run an HSN audit — export the product list, verify codes against the GST rate schedule, and re-import. Takes 1–2 days for an average catalogue.
5
Set up fiscal positions for intrastate and interstate customers
The localisation creates standard fiscal positions automatically. The work is assigning them to customer masters. Assign the correct fiscal position to every customer based on the first two digits of their GSTIN. For large existing customer databases, do this via import: export customer list, add fiscal position column, populate by GSTIN state code, re-import.
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 to the applicable section code: 194C for contractors, 194J for professional services, 194I for rent, 194Q for purchase of goods above threshold. Odoo then displays a banner on vendor bills when the cumulative payment to that vendor crosses the TDS threshold.
TDS is calculated on taxable value only — not the GST-inclusive invoice total. Verify your team understands this before go-live. TDS deducted on the total amount causes a mismatch in the vendor’s Form 26AS.
7
Configure Reverse Charge Mechanism for applicable services
For services where the recipient pays GST under RCM (legal/professional fees, GTA freight, import of services, security services): create a dedicated RCM tax in Odoo. On the vendor bill, the RCM tax posts the GST liability to the output tax account (GSTR-3B Table 3.1(d)) and simultaneously creates an ITC entry in the input tax account (GSTR-3B Table 4(A)(3) in the following month). Create a dedicated RCM purchase journal to route all reverse charge vendor bills.
How e-invoicing works in Odoo: from confirmation to IRN in one step

When an invoice is confirmed, Odoo sends the invoice data as a JSON payload to the IRP via the GSP API. The portal validates the data, generates a unique Invoice Reference Number (IRN), and returns a digitally signed QR code. Odoo stamps both on the invoice record. The entire sequence completes in under ten seconds.

The most common reasons e-invoicing fails at confirmation:

  • Customer GSTIN is missing, invalid, or cancelled on the 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
  • Sandbox credentials were used in the production environment
Important

Never cancel a confirmed e-invoice manually to handle adjustments. 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. Manual cancellation and re-creation orphans the original IRN on the government portal and creates GSTR-2B mismatches with the buyer.

Filing GSTR-1 and GSTR-3B directly from Odoo

With GST E-Filing and Matching enabled, the monthly workflow has three stages:

Stage 1 — Verify GSTR-1 before filing

Go to Accounting → Reporting → India → GST Return Periods. Open the return period for the month, click GSTR-1 Report. Odoo runs basic validations: missing GSTINs, invoices with no place of supply, HSN summary completeness, and tax rate mismatches. Review and correct all flagged items before proceeding.

Stage 2 — Submit GSTR-1

Submit directly from Odoo via the GSP API, or download the JSON and upload manually to the portal. Both paths use identical underlying data from Odoo’s invoice records.

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 that do not appear in GSTR-2B are flagged. ITC should only be claimed on invoices that appear in GSTR-2B.

The most expensive GST mistake in Odoo

Claiming ITC in GSTR-3B on invoices 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.

Five GST configuration mistakes that create compliance problems
Mistake 1
Fiscal positions not assigned to customer masters
CGST/SGST is applied to interstate supplies, or IGST to intrastate ones. Buyer’s ITC is in the wrong tax head. GSTR-1 is incorrect. A DRC-01B advisory from GSTN requires amendment for each affected invoice.
Prevention: Make fiscal position a mandatory field in the customer creation workflow. Assign based on the first two digits of the customer’s GSTIN at the time of creation — not at the time of invoicing.
Mistake 2
HSN codes missing or incorrect on product masters
The HSN summary in GSTR-1 is blank or partial. The GST portal rejects the upload. Filing deadline is missed. Late fees of ₹50 per day accrue. Businesses above ₹5 crore face an additional 10% penalty on 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.
Mistake 3
RCM vendor bills entered without the RCM tax applied
GSTR-3B Table 3.1(d) is understated. The liability is undeclared. The GST department issues a show cause notice for short payment with interest at 18% per annum from the due date.
Prevention: Create a dedicated RCM vendor journal configured so the RCM tax applies automatically on bills posted to it. Use this journal for all freight, legal, security, and import service bills.
Mistake 4
Adjustments handled by cancelling and re-creating the original invoice
The original IRN is orphaned on the government portal. The buyer’s GSTR-2B shows the original invoice. The seller’s GSTR-1 shows the replacement. A mismatch is created requiring amendment 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.
Mistake 5
TDS deducted on the GST-inclusive invoice amount
The vendor is over-deducted. Their Form 26AS shows a TDS credit higher than expected based on taxable value. The deductor may face a notice for incorrect TDS deduction under Section 201 of the Income Tax Act.
Prevention: TDS is always calculated on taxable value — not the total including GST. This is a statutory requirement. Verify that Odoo’s TDS configuration uses the tax base amount, not the total invoice amount.
Multi-GSTIN businesses and multi-state operations

A business registered in multiple states holds a separate GSTIN for each state. In Odoo, each GSTIN operates as a separate company within the multi-company setup. Invoices 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 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 filing is done entity by entity.

Inter-state stock transfers between branches of the same business attract GST as supplies to a distinct person. In Odoo, 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 returns.


Common questions
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.
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, or generate a portal-compliant JSON for manual upload. 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. Both the liability and the credit appear in GSTR-3B in the correct tables when the return is generated from Odoo.
What 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. Claiming ITC before the invoice reflects in GSTR-2B attracts reversal with 18% interest per annum under Rule 36(4) of the CGST Rules.
Is Odoo’s Indian GST module free or does it cost extra?
The Indian localisation (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.

Need help configuring Odoo’s Indian GST correctly?

ochre.digital configures GST, e-invoicing, TDS, and multi-GSTIN setups for Indian businesses — and involves your CA in UAT before go-live.

Talk to ochre.digital →

Leave a Comment

Your email address will not be published. Required fields are marked *