GSTR-9 is the annual return, and its defining property in xMatix is that you do not re-key anything into it: its figures are the year's already-filed GSTR-1 and GSTR-3B returns and the GSTR-2B statements, added up. The platform computes it in parallel lanes, so before you file you can see the filed figure, your own books figure, and the difference — side by side on every row.
Read the screen
- 1
GSTIN identifies the registration whose monthly returns and ledgers feed this annual rollup.
- 2
Legal Name provides the filing identity that should agree with the selected registration.
- 3
Financial Year is the governing annual boundary for source periods and comparisons.
- 4
Period From and Period To make the exact coverage window explicit before computation or filing.
- 5
Status and Filed On preserve the transition from preparation through completed filing.
The annual-return header fixes the legal and time boundary before any table is computed. GSTIN and Legal Name must identify the same registration; Financial Year, Period From and Period To define exactly which filed monthly returns and statements can roll up. Status and Filed On preserve the workflow boundary between a working return and a completed statutory submission. A mismatch at this header level contaminates every downstream lane, so verify it against the registration master and fiscal calendar first.
After creating the header, compute the annual tables and reconcile the Computed lane to the set of filed GSTR-1 and GSTR-3B periods expected for the year. Compare Books independently, investigate differences and use an Override only with a specific reason and supporting evidence. Before filing, confirm every source period is complete, exceptions are resolved or documented, the final lane agrees with the approved position and the eventual portal acknowledgement updates the filing status rather than remaining only in external correspondence.
The four lanes
| Lane | Meaning |
|---|---|
| Computed | The rollup of what you filed monthly — the primary annual figure |
| Books | The same figure derived from your own ledger, for comparison (a handful of rows carry one) |
| Override | Your adjustment, recorded with a mandatory reason |
| Final | What goes on the return — follows Computed until you override |
Recomputing refreshes the Computed and Books lanes everywhere but preserves every row you overrode, so your adjustments and their reasons survive however often the rollup is rerun.
What feeds what
| Part of the form | Source |
|---|---|
| Part II — outward supplies | The year's twelve filed GSTR-1 returns |
| Part III — input tax credit | The filed GSTR-3B ITC tables plus the GSTR-2B statements |
| Part IV — tax paid (Table 9) | The payment rows recorded on each filed GSTR-3B |
| Table 17 — outward HSN summary | The GSTR-1 HSN summaries, rolled up |
| Parts V–VI and the unsourced rows | Manual — materialized as editable zeros for you to complete |
The word filed is doing real work here: the engine reads only returns whose status is Filed. A GSTR-1 sitting in Draft contributes nothing.
Prerequisites the return checks for you
- All twelve months' GSTR-1 and GSTR-3B filed. The return tracks this as a prerequisite verdict; the pre-file validation treats an incomplete year as a failure.
- Annual aggregate turnover entered by hand. AATO drives statutory thresholds, so it is your declaration — the platform never guesses it.
- Payment rows on each filed GSTR-3B — without them, the year's tax-paid table computes as zeros.
Working the return
The annual screen has three tabs — the annual summary, Table 9 (tax paid, pivoted by tax head), and validation. On any editable row you can override the figure (reason mandatory) or reset it back to the computed value. Three kinds of rows refuse an override: the portal-owned totals (total ITC availed, ITC as per GSTR-2B) and the Table 9 paid columns — a Table 9 shortfall is settled by paying it through the government's separate process, never by editing the return, so validation reports it as a warning rather than a failure.
Two behaviors to plan around:
- Overrides do not cascade into totals. Sub-totals are computed from the Computed lane, so after filling a manual row you must override the sub-totals it feeds as well. The screen keeps "what you filed" and "what you changed" visibly separate — that is the price.
- The books comparison is narrow. Only a few rows carry a Books lane, and the rows comparing blocked or ineligible inward credit show zero unless your purchase tax lines actually classify credit that way — the screen flags such rows as structurally zero rather than verified matches.
Validating, exporting, filing
Run validation to get the pre-file checklist: the prerequisite verdict, locked-row integrity and the Table 9 warnings. A clean run advances the return to Validated. Export produces the return's JSON payload from the Final lane; file on the portal, then record the filing with the ARN and date. A filed annual return is a statutory snapshot — recompute and further overrides are refused.
The form itself is data, not code: each financial year's row set is materialized from a versioned catalog, so a year whose form changed by notification computes under its own definition while prior years keep computing exactly as they did.
GSTR-9C
The Tax Center prepares GSTR-9; it does not currently prepare the GSTR-9C reconciliation statement. The Books lane gives you the books-versus-filed comparison for review, but the audited-financials reconciliation that 9C requires is done outside the product.
Common questions
Why is everything zero?
The monthly returns are not Filed. Only filed GSTR-1 and GSTR-3B returns are read — file them (or record the filings you made on the portal) and recompute.
Why is Table 9 empty when we paid tax all year?
The payment rows were never recorded on the monthly GSTR-3B returns. Record them there and recompute — the annual table is built from them.
I entered a manual row and the total did not move.
Expected — overrides do not cascade. Override the affected sub-totals and grand totals too, with the same reason.
