FinchContext
Run with

Build the GSTR-9 Annual Return JSON

Skill: Convert a financial year's GST data into the GSTR-9 offline-utility JSON

Region: India Category: Tax — GST annual return Does: Takes a financial year's outward supplies, ITC, tax paid and prior-year amendment figures and maps them onto the GSTR-9 JSON in the GST offline-utility format — Part II tables 4–5, Part III tables 6–8, Part IV table 9, and Part V tables 10–13 — for upload to the GST portal. System: GST portal (gst.gov.in) — Returns, Annual Return GSTR-9 (offline tool)

GSTR-9 is the annual return consolidating the twelve monthly/quarterly GSTR-1 and GSTR-3B filings for a financial year (1 April–31 March). It is due by 31 December following the FY (e.g. FY 2024-25 due 31 December 2025); filing is optional for taxpayers with aggregate turnover up to ₹2 crore. Much of the form is auto-populated from filed GSTR-1/3B and GSTR-2A/2B and is partly editable. The JSON top level carries gstin, fp (MMYYYY, always the period 032025 for FY 2024-25) and gt/gross_turnover. Table numbers and offline-tool schema change between releases — always generate against the current GSTR-9 offline tool and validate on the portal before filing.


When this applies


Conversion procedure

  1. Read the source — accept the FY summary as CSV, JSON, pasted trial-balance/GST workings, or the downloaded GSTR-9 System Computed values plus the taxpayer's books. Identify the GSTIN and the FY.
  2. Extract fields — gather, table by table: table 4 taxable outward supplies (B2B, B2C, exports, SEZ, RCM, advances, credit/debit notes, amendments); table 5 nil-rated/exempt/non-GST and outward RCM; table 6 ITC availed (inputs/capital goods/services, import, RCM, ISD, TRAN credit); table 7 ITC reversed (Rule 37/39/42/43, section 17(5)); table 8 ITC reconciliation with GSTR-2A/2B; table 9 tax paid; tables 10–13 prior-year amendments declared in Apr–Nov of the next FY. If a figure is missing or ambiguous, ask — do not guess.
  3. Normalize — amounts in rupees with 2 decimals, dot separator, no thousands separator; rates as plain numbers; fp = 032025 for FY 2024-25; gstin 15 chars.
  4. Compute — recompute every total from the books and cross-check against the system-computed values; compute net ITC (table 6 − table 7), table 8 differences (8D = 8A − 8B − 8C), and any late fee. Flag every mismatch.
  5. Emit the output — assemble the GSTR-9 JSON following the document structure and the worked example as the template.
  6. Validate — run the validation checklist before upload.

Source → GSTR-9 field map

From the source → Target table / field
GSTIN gstin
Filing period (032025 for FY 24-25) fp
Aggregate turnover gt (Pt I)
B2C outward taxable table 4 → t4 row A (txval, iamt, camt, samt, csamt)
B2B outward taxable t4 row B
Exports on payment of tax t4 row C
SEZ supplies on payment t4 row D
Deemed exports t4 row E
Advances received (tax paid, no invoice) t4 row F
Inward RCM supplies (tax payable) t4 row G
Credit notes issued (−) t4 row I
Debit notes issued (+) t4 row J
Amendments to 4 (+/−) t4 rows K/L
Exports without payment (zero-rated) table 5 → t5 row A
SEZ without payment t5 row B
Outward RCM (recipient pays) t5 row C
Exempted supplies t5 row E
Nil-rated supplies t5 row F
Non-GST supplies t5 row G
ITC availed per GSTR-3B (auto) table 6 → t6 row A
Inward inputs ITC t6 row B (iamt,camt,samt,csamt)
Inward capital-goods ITC t6 row C/D
Import of goods/services ITC t6 rows E/F
Inward RCM ITC t6 row D
ISD credit t6 row G
ITC reversed (Rule 37/39/42/43, 17(5)) table 7 → t7 rows AH
ITC as per GSTR-2A/2B table 8 → t8 row A
ITC availed (from 6B+6H) t8 row B
ITC on inward RCM/import t8 row C
Tax payable / paid through cash & ITC table 9 → t9 (tx_pay, paid_cash, paid_itc)
Prior-year supplies declared Apr–Nov tables 10/11 → t10, t11
Prior-year ITC availed/reversed tables 12/13 → t12, t13
Late fee payable / paid table 9 lf heads

Every required table appears above. Many rows are split by tax head (iamt/camt/samt/csamt) and taxable value (txval).


Document structure (offline-utility JSON)

{
  "gstin": "29AABCU9603R1ZM",
  "fp": "032025",                         // FY 2024-25 → 032025
  "gt": 52000000.00,                       // aggregate turnover (Pt I)
  "sgt": 50000000.00,                      // sum of turnover declared in returns

  // Part II — Outward supplies
  "t4": { "a": {..b2c..}, "b": {..b2b..}, "c": {..exports..}, ... ,
          "n": { "txval", "iamt", "camt", "samt", "csamt" } },   // 4N = total
  "t5": { "a": {..exp wopay..}, "e": {..exempt..}, "f": {..nil..}, "g": {..non-gst..},
          "n": { "txval" } },                                    // 5N = total

  // Part III — ITC
  "t6": { "a": {..3B ITC..}, "b": {..inputs..}, "c": {..capital goods..},
          "d": {..RCM..}, "e": {..import..}, "o": { "iamt","camt","samt","csamt" } },
  "t7": { "a": {..rule37..}, "c": {..rule42..}, "h": {..others..},
          "j": { "iamt","camt","samt","csamt" } },                // 7J = total reversed
  "t8": { "a": {..as per 2A/2B..}, "b": {..6B+6H..}, "c": {..RCM/import..},
          "d": {..difference A-(B+C)..}, "e","f","g","h","i","j","k" },

  // Part IV — Tax paid
  "t9": [ { "ty": "IGST", "tx_pay": 7200000.00, "paid_cash": 1200000.00, "paid_itc": 6000000.00 },
          { "ty": "CGST", ... }, { "ty": "SGST", ... }, { "ty": "CESS", ... },
          { "ty": "I_LF", "tx_pay": 0, "paid_cash": 0 },          // interest / late fee heads
          { "ty": "LF",   "tx_pay": 0, "paid_cash": 0 } ],

  // Part V — Prior-year transactions declared Apr–Nov of next FY
  "t10": { "txval","iamt","camt","samt","csamt" },                // additions (+)
  "t11": { ... },                                                 // reductions (−)
  "t12": { ... },                                                 // ITC reversed for prior FY
  "t13": { ... }                                                  // ITC availed for prior FY
}

Part II/III rows are auto-populated from GSTR-1/3B and are partly editable. Part V (tables 10–13) captures prior-FY transactions declared between April and November of the following FY (amendments and ITC availed/reversed in the subsequent year's returns).


Code tables

Tax heads (ty in table 9 / row keys)

Key Meaning
iamt / IGST Integrated GST
camt / CGST Central GST
samt / SGST State / UT GST
csamt / CESS GST Compensation Cess
I_LF Interest
LF Late fee

Table 7 — ITC reversal reasons

Row Reason
a As per Rule 37 (non-payment to supplier within 180 days)
b As per Rule 39 (ISD credit note)
c As per Rule 42 (input/input services — exempt/non-business)
d As per Rule 43 (capital goods — exempt/non-business)
e As per Section 17(5) (blocked credits)
f Reversal of TRAN-I credit
g Reversal of TRAN-II credit
h Other reversals
j Total ITC reversed (= a+…+h)

Table 8 — ITC reconciliation rows

Row Meaning
a ITC as per GSTR-2A / 2B (auto)
b ITC as per sum of 6(B) and 6(H)
c ITC on inward RCM / import not in 8A
d Difference [8A − (8B + 8C)]
e ITC available but not availed
f ITC available but ineligible
k Total ITC to be lapsed (8E + 8F)

Calculation rules


Worked example (end-to-end)

Lakshmi Traders (GSTIN 29AABCU9603R1ZM, Karnataka) for FY 2024-25 (fp = 032025): aggregate turnover ₹5.20 crore. B2B outward taxable base ₹4,00,00,000 (IGST ₹40,00,000; CGST ₹16,00,000; SGST ₹16,00,000 — 18% blended); B2C ₹50,00,000 (CGST ₹4,50,000 + SGST ₹4,50,000). Exempt supplies ₹70,00,000. ITC availed per GSTR-3B: IGST ₹30,00,000, CGST ₹12,00,000, SGST ₹12,00,000; section 17(5) reversal CGST ₹50,000 + SGST ₹50,000. Tax paid as below. No prior-year amendments; filed on time (no late fee).

{
  "gstin": "29AABCU9603R1ZM",
  "fp": "032025",
  "gt": 52000000.00,
  "sgt": 52000000.00,
  "t4": {
    "a": { "txval": 5000000.00, "iamt": 0.00, "camt": 450000.00, "samt": 450000.00, "csamt": 0.00 },
    "b": { "txval": 40000000.00, "iamt": 4000000.00, "camt": 1600000.00, "samt": 1600000.00, "csamt": 0.00 },
    "n": { "txval": 45000000.00, "iamt": 4000000.00, "camt": 2050000.00, "samt": 2050000.00, "csamt": 0.00 }
  },
  "t5": {
    "e": { "txval": 7000000.00 },
    "n": { "txval": 7000000.00 }
  },
  "t6": {
    "a": { "iamt": 3000000.00, "camt": 1200000.00, "samt": 1200000.00, "csamt": 0.00 },
    "b": { "iamt": 3000000.00, "camt": 1200000.00, "samt": 1200000.00, "csamt": 0.00 },
    "o": { "iamt": 3000000.00, "camt": 1200000.00, "samt": 1200000.00, "csamt": 0.00 }
  },
  "t7": {
    "e": { "iamt": 0.00, "camt": 50000.00, "samt": 50000.00, "csamt": 0.00 },
    "j": { "iamt": 0.00, "camt": 50000.00, "samt": 50000.00, "csamt": 0.00 }
  },
  "t8": {
    "a": { "iamt": 3050000.00, "camt": 1210000.00, "samt": 1210000.00, "csamt": 0.00 },
    "b": { "iamt": 3000000.00, "camt": 1200000.00, "samt": 1200000.00, "csamt": 0.00 },
    "c": { "iamt": 0.00, "camt": 0.00, "samt": 0.00, "csamt": 0.00 },
    "d": { "iamt": 50000.00, "camt": 10000.00, "samt": 10000.00, "csamt": 0.00 }
  },
  "t9": [
    { "ty": "IGST", "tx_pay": 4000000.00, "paid_cash": 1000000.00, "paid_itc_igst": 3000000.00 },
    { "ty": "CGST", "tx_pay": 2050000.00, "paid_cash": 900000.00, "paid_itc_cgst": 1150000.00 },
    { "ty": "SGST", "tx_pay": 2050000.00, "paid_cash": 900000.00, "paid_itc_sgst": 1150000.00 },
    { "ty": "CESS", "tx_pay": 0.00, "paid_cash": 0.00 },
    { "ty": "I_LF", "tx_pay": 0.00, "paid_cash": 0.00 },
    { "ty": "LF", "tx_pay": 0.00, "paid_cash": 0.00 }
  ],
  "t10": { "txval": 0.00, "iamt": 0.00, "camt": 0.00, "samt": 0.00, "csamt": 0.00 },
  "t11": { "txval": 0.00, "iamt": 0.00, "camt": 0.00, "samt": 0.00, "csamt": 0.00 },
  "t12": { "iamt": 0.00, "camt": 0.00, "samt": 0.00, "csamt": 0.00 },
  "t13": { "iamt": 0.00, "camt": 0.00, "samt": 0.00, "csamt": 0.00 }
}

Normalisations and checks shown: FY 2024-25 → fp 032025; turnover ₹5.20 cr52000000.00; 4N = 4A + 4B per head (450000 + 1600000 = 2050000 CGST); 7J = 7E (only 17(5) reversal); net ITC = 6O − 7J = CGST 1200000 − 50000 = 1150000; 8D = 8A − (8B + 8C) = 3050000 − 3000000 = 50000 IGST; table 9 paid_cash + paid_itc = tx_pay per head. Upload via the GSTR-9 offline tool; the portal recomputes and presents the summary for filing with DSC/EVC.


Validation checklist


Last updated: 2026-06-13 — confirm the active GSTR-9 offline-tool schema/version, table structure, late-fee slabs, and turnover thresholds against the current GSTN (gst.gov.in) specifications before use.