Home / Odoo Problems / GST & Tax
Odoo GST

GSTR-1 & GSTR-2B Reconciliation Problems in Odoo

By Odoobots ERP TeamUpdated September 20266 min readCovers GSTR-1, GSTR-2B, TDS & TCS
TL;DR

GSTR pain in Odoo has one root: documents that don't carry clean GST data — manually edited invoices, unmapped credit notes, vendor bills without GSTINs. Fix the document discipline and the returns reconcile themselves; the report is only as clean as the ledger feeding it.

First, confirm the symptom

  • GSTR-1 totals from Odoo differ from what the portal accepts
  • Credit notes missing or double-counted in returns
  • GSTR-2B matching against purchase bills takes days each month
  • TDS deducted by customers has no home in your books

1. GSTR-1 data polluted by manual edits

Invoices whose tax amounts were hand-edited, or that carry ad-hoc duplicate taxes, produce rate-wise summaries that fail portal validation. The mismatch is born at billing time, not filing time.

Fix
  1. Run a month's audit: lines where tax ≠ rate × base. Correct via credit notes.
  2. Lock tax editing rights; keep one clean tax per rate (see our GST calculation guide).
Odoo taxes configuration list feeding GSTR rate-wise summaries
One tax per rate, correctly scoped: GSTR-1's rate-wise buckets are built from these records — duplicated or ad-hoc taxes split the buckets and break portal validation.

2. Credit notes and document types unmapped

Returns need credit notes reported as CDN with reference to originals. Credit notes issued as fresh negative invoices, or without the original invoice link, appear wrongly — or twice.

Fix
  1. Always issue credit notes from the original invoice (Credit Note button) so the reference travels with it.
  2. Audit standalone credit notes this quarter and link or replace them.

3. GSTR-2B reconciliation without vendor data discipline

2B matching dies when vendor bills lack the vendor's GSTIN, use inconsistent bill numbers, or post in the wrong month. Then every line is a manual hunt.

Fix
  1. Make GSTIN mandatory on vendors; enter the vendor's bill number exactly as printed (that is the matching key).
  2. Post bills in the period of the document date; late entries reconcile next month by design, not by accident.
  3. Use matching tooling (localization reports or our reconciliation setup) instead of Excel VLOOKUPs.

4. TDS (194C/194J...) not configured

Customers deduct TDS and pay you 98–99%; without TDS receivable accounts and payment write-off flows, invoices hang partially open forever and 26AS never ties out.

Fix
  1. Create TDS receivable accounts per section, plus reconciliation models that write the deducted amount there during payment matching.
  2. Mirror for vendor-side TDS you deduct: section-wise payable accounts and a deduction step in the payment flow.

5. TCS on sales ignored until audit

Businesses crossing TCS thresholds need it computed on qualifying sales and reported — retrofitting at audit time is painful.

Fix
  1. Configure TCS as a tax with its own account, applied via fiscal position or customer group where applicable.
  2. Review thresholds yearly with your auditor; toggle per customer accordingly.
Odoo accounting dashboard showing sales, purchases and tax return cards
The goal state: a dashboard where Tax Returns is a card you open with confidence — because every document beneath it carries clean GST data.
Want filing week to become filing hour?

We audit a full quarter of your GST data, fix the document discipline, configure TDS/TCS flows and set up 2B matching — then train your accountant on the routine. Written plan first.

Get a GST returns audit or WhatsApp +91 98414 81435

Frequently asked questions

Can Odoo generate GSTR-1 directly?

Yes — the Indian localization produces GSTR-1 data (and e-filing flows on Enterprise). Whether the portal accepts it depends entirely on document data quality — which is what this guide fixes.

Is GSTR-2B matching automatic?

Semi — with clean vendor GSTINs and exact bill numbers, the bulk auto-matches; the residual is genuine timing differences. Without that discipline, nothing matches.