Fintech technology
Businesses Fintech August 17, 2026 • 8 min read

GST Compliance Cheatsheet for SaaS Billing Engineers

For: A backend or billing engineer at a mid-stage Indian SaaS company who has just been handed a Zoho/Stripe billing integration and told to 'make it GST-compliant' — with no accountant in the room and a launch date in two weeks

For SaaS sold in India, place of supply is the billing address of the recipient, not your server location or your registered state. That single rule decides whether you charge IGST or CGST+SGST, and getting it wrong on inter-state B2C invoices is the most common billing bug in Indian SaaS. This cheatsheet maps the GST rules you need — invoice fields, tax splits, thresholds, reverse charge — to the decisions in your billing code. No accountant required to read it.

Not legal advice. Rules current as of the latest CGST notifications; confirm edge cases with a CA before go-live.

1. The one rule that drives everything: place of supply

SaaS is treated as an Online Information Database Access and Retrieval (OIDAR) service under GST when delivered over the internet with minimal human intervention. Place of supply is governed by Section 12 (domestic) and Section 13 (cross-border) of the IGST Act.

ScenarioPlace of supplyTax applied
Seller in Karnataka, buyer billing address in KarnatakaKarnatakaCGST 9% + SGST 9%
Seller in Karnataka, buyer billing address in MaharashtraMaharashtraIGST 18%
Seller in India, buyer outside India, payment in forexOutside IndiaZero-rated export (LUT) or IGST refundable
Seller in India, buyer outside India, payment in INRNot an exportIGST 18%
Unregistered B2C buyer, no address on recordLocation of supplierCGST + SGST

SaaS falls under HSN/SAC 998434 (software downloads/online) or 997331 (licensing) at 18%. Confirm the SAC with your CA — it affects reporting, not the rate.

2. B2B vs B2C: the field-level split

You need to know the buyer type before generating the invoice, because required fields differ.

FieldB2B (registered GSTIN)B2C
Buyer GSTINMandatory, must validateNot applicable
Buyer legal nameMust match GSTIN recordAs provided
Buyer state codeFrom GSTIN (first 2 digits)From billing address
Invoice serialUnique, sequential, ≤16 chars per seriesSame
HSN/SAC6 digits (turnover > ₹5 Cr) or 4 digitsSame rule
Reverse charge flagYes/No — usually No for SaaSN/A
E-invoice IRN + QRMandatory if turnover > ₹5 CrQR only, no IRN
SignatureDigital signature or physicalSame

GSTIN validation logic

3. Tax split decision tree (for your billing code)

if buyer.gstin:
    pos_state = buyer.gstin[:2]
else:
    pos_state = buyer.billing_address.state_code or seller.state_code

if buyer.country != "IN":
    if payment_currency == "INR":
        apply IGST 18%
    else:
        apply zero-rated (requires LUT filed)
elif pos_state == seller.state_code:
    apply CGST 9% + SGST 9%
else:
    apply IGST 18%

4. E-invoicing threshold and IRN flow

Mandatory for B2B invoices when aggregate turnover in any preceding FY from 2017-18 onward exceeded ₹5 Cr.

5. Reverse charge — when it hits SaaS

Forward charge is the default. Reverse charge triggers you actually need to handle:

6. Credit notes, refunds, and proration

7. Invoice numbering rules that break audits

8. Common bugs I've seen in production billing engines

  1. Applying seller-state CGST+SGST to inter-state B2C. A Bangalore-registered SaaS charging Karnataka split to a Mumbai consumer. Legally requires IGST. Fix: derive POS from billing state, not seller state.
  2. Trusting GSTIN state code against billing address without reconciliation. If they mismatch, log it and use the GSTIN state — but flag for review, because it often signals a wrong GSTIN paste.
  3. Charging INR to a foreign buyer as zero-rated. Zero-rating requires forex or an LUT-covered INR receipt from a Vostro account. Default INR receipts are taxable at 18%.
  4. Missing the reverse-charge self-invoice for imported SaaS you consume. GSTR-3B will not reconcile.
  5. Rounding at line level instead of invoice level. Rule 34 requires rounding at the invoice total, not per line item.

9. Field-by-field invoice checklist

FieldMandatory
Supplier name, address, GSTINYes
Invoice number and dateYes
Recipient name, address, GSTIN (if registered)Yes
Place of supply + state codeYes for inter-state
HSN/SACYes
Description, quantity, unitYes (quantity often "1" for subscriptions)
Taxable value, rate, amount (CGST/SGST/IGST separately)Yes
Whether tax is on reverse chargeYes
Signature / DSCYes (auto-fulfilled by IRN QR for e-invoices)
IRN + signed QRIf e-invoicing applies

10. What Zoho, Stripe, and Chargebee actually handle

Teams building custom billing on top of Stripe usually end up writing their own GST layer — invoice numbering, POS derivation, IRN push, credit note tracking. If you'd rather not, that's the kind of work fintech-heavy engineering teams like the one behind GimBooks spend their days on.

Frequently Asked Questions

Do I need to charge GST on SaaS sold to a customer outside India?

Only if you receive payment in INR without an LUT covering that receipt. Payment in convertible foreign exchange (or from a Vostro account under LUT) qualifies as zero-rated export of services. You still issue an invoice — just without tax — and file it under Table 6A of GSTR-1.

What tax do I charge if a customer gives me a GSTIN from a different state than their billing address?

Use the GSTIN's state code (first two digits) as the place of supply for B2B. That determines whether it's IGST or CGST+SGST. Log the mismatch and flag the record — it's a common signal of a mistyped GSTIN, and correcting it after the invoice is filed in GSTR-1 requires an amendment.

Is e-invoicing (IRN) mandatory for my SaaS company?

Yes, for B2B invoices, if your aggregate turnover in any FY from 2017-18 onward crossed ₹5 crore. B2C invoices don't need an IRN but need a dynamic QR if turnover exceeds ₹500 crore. Check the latest CBIC notification before assuming your threshold — the limit has been lowered multiple times.

How do I handle GST on annual subscriptions that span two financial years?

GST is chargeable at the time of supply — earlier of invoice date or payment receipt. For an annual upfront invoice, the entire tax is due in the month of invoicing, regardless of the service period. Refunds mid-year are handled via credit notes referencing the original invoice.

Can you help us build or audit a GST-compliant billing engine?

Yes. For scope, integration complexity, and delivery estimates specific to your stack, contact CodeNicely for a personalized assessment. We can share reference architectures from prior fintech and SaaS billing builds.

Found this useful? CodeNicely publishes engineering and product playbooks weekly. Browse the archive or tell us what you're building.