GST-ready email billing: what you actually need for an Indian SaaS

CGST/SGST/IGST invoice schema, HSN/SAC 998314 for email SaaS, GSTIN validation, B2B vs B2C, reverse-charge, UPI/netbanking, GSTR-1 reporting, audit trail, sample invoice mockup.

GST-ready email billing: what you actually need for an Indian SaaS

If you are an Indian SaaS selling to Indian customers and you are not generating GST-compliant invoices, your finance team is doing a lot of manual work and your customers' finance teams are doing even more. The minimum bar is straightforward; getting it right saves a meaningful number of hours every month. Here is the schema, the codes, the validation, and the reporting — as we run it for LoopNow.

Why GST billing is the most under-engineered part of Indian SaaS

Three reasons it gets under-engineered:

  1. Most SaaS founders come from a product or engineering background, not a tax background. The first invoice template is usually a copy-paste from a friend's startup, with the friend’s GSTIN swapped for yours.
  2. Foreign SaaS tools (Stripe, Mailchimp, etc.) issue USD invoices with no GST, so Indian customers have to self-invoice under reverse charge. This becomes the default mental model — "SaaS does not have GST" — which is wrong for an Indian SaaS selling to Indian customers.
  3. GSTIN validation, B2B/B2C distinction, and HSN code selection are annoying-but-not-blocking the first time. The pain comes at the customer's year-end ITC reconciliation, when your invoice does not match their GSTR-2B and their finance team has to file a manual amendment.

LoopNow is Indian-incorporated, sells to Indian customers, and bills in INR with GST. The setup we run is the one below. It is also the setup that lets our customers claim the full ITC on their GST return without manual reconciliation.

The invoice schema: CGST/SGST/IGST split

An Indian GST invoice for a B2B transaction has these fields at minimum:

  • Supplier (LoopNow) name, address, GSTIN, state (Maharashtra, code 27)
  • Recipient (customer) name, address, GSTIN, state
  • Invoice number, invoice date, due date, place of supply
  • Line items with description, HSN/SAC code, quantity, unit price, discount, taxable value
  • Tax breakdown: CGST, SGST, IGST, cess — as applicable
  • Total invoice value in words and figures

The CGST/SGST vs IGST decision is purely a function of the supplier state and the recipient state:

  • Same state (e.g. LoopNow in Maharashtra, customer in Maharashtra): charge CGST 9% + SGST 9% = 18% total. The CGST goes to the Central government, the SGST to the State government.
  • Different states (e.g. LoopNow in Maharashtra, customer in Karnataka): charge IGST 18%. IGST goes to the Central government and is then apportioned to the destination state.

For a B2C transaction (customer without a GSTIN), you still charge GST the same way — same-state or inter-state based on the recipient's shipping address or billing address, depending on the nature of the service. For SaaS specifically, the "place of supply" rule is the location of the recipient — determined by their billing address.

Sample line item

Description: LoopNow Scale plan, monthly subscription
HSN/SAC:    998314
Quantity:   1
Unit price: INR 4,999.00
Discount:   INR 0.00
Taxable value: INR 4,999.00
CGST @ 9%:  INR 449.91
SGST @ 9%:  INR 449.91
Total:      INR 5,898.82

The 9% CGST and 9% SGST are applied to the taxable value (the price before tax), not to the price including tax. The totals add up correctly: 4,999 + 449.91 + 449.91 = 5,898.82.

HSN/SAC code for email SaaS

India uses two parallel classification systems for goods and services. HSN (Harmonised System of Nomenclature) is for goods. SAC (Services Accounting Code) is for services. SaaS is a service, so the relevant code is SAC.

For email SaaS (and SaaS in general), the most commonly used SAC codes are:

  • 998314 — "Information technology (IT) consulting and support services." This is the most commonly cited code for SaaS subscription services.
  • 998315 — "Data processing, hosting and related services." This is sometimes used for cloud-based SaaS where the host/Cloudflare relationship is more visible.
  • 997332 — "Licensing services for the right to use computer software and databases." This is used when the transaction is structured as a software license rather than a subscription service.

LoopNow invoices use SAC 998314. The 6-digit SAC became mandatory for B2B invoices in April 2021 under GST notification 78/2020.[1] (Before April 2021, a 4-digit SAC was acceptable; for invoices generated before that date you may see 9983, which is the parent code for 998314.)

GSTIN validation — do it before you invoice

A GSTIN (Goods and Services Tax Identification Number) is a 15-character alphanumeric code. The structure is:

22AAAAA0000A1Z5
^^ ^^^^^ ^^^^ ^^ ^
|  |     |    |  +-- Check digit (Z + alphanumeric)
|  |     |    +----- Entity code (1-9 + A-Z + letters)
|  |     +---------- PAN of the entity
|  +---------------- First 5 letters of the entity name
+------------------- State code (01-37, 97, 99)

Two things to validate on every invoice:

  1. Format check. Regex match for the 15-character pattern, with the first 2 digits being a valid state code.
  2. Active status check. The GSTIN may be validly formatted but cancelled, suspended, or "non-compliant" (the GSTN marks non-compliant taxpayers who have not filed returns). You can check this via the GSTN's public search API: https://gstapi.cleartax.in/v2/master/gstin/{GSTIN} or a similar wrapper.

LoopNow validates the GSTIN at the point of entry in the billing settings and re-validates it on every renewal. If a customer's GSTIN goes inactive, the next invoice is flagged for review.

B2B vs B2C distinction

The distinction matters because of the way GST reporting works:

  • B2B (customer has a GSTIN): the invoice is reported in the supplier's GSTR-1, which auto-populates the customer's GSTR-2B. The customer claims the ITC against the GST you charged them. The chain works end-to-end without manual intervention.
  • B2C (customer does not have a GSTIN): the invoice is reported in the supplier's GSTR-1, but it does not auto-populate anything for the customer (because there is no customer return to populate). There is no ITC claim. The customer just pays the GST as part of the invoice total.

For an email SaaS, B2B and B2C invoices are issued the same way — the distinction is at the reporting level. LoopNow's invoicing system tags each invoice as B2B or B2C based on whether the recipient has a GSTIN on file. GSTR-1 reporting then aggregates B2C invoices by state and B2B invoices by GSTIN, as the GST portal requires.

Reverse-charge for foreign SaaS — and why it does not apply to LoopNow

Under GST, services imported by an Indian recipient from a foreign supplier are subject to reverse charge under Section 9(4) of the CGST Act read with the relevant entries in the Reverse Charge Notification (Notification No. 13/2017-CT(Rate), as amended): the recipient (not the supplier) is liable to pay GST. This is the mechanism that Indian customers of Mailchimp, SendGrid, AWS, and other foreign SaaS have to navigate. The Indian customer has to self-invoice, pay IGST 18% on the imported service, and then claim it as ITC.

LoopNow is an Indian company. We are not a foreign SaaS. Reverse charge does not apply to invoices between LoopNow and an Indian customer. We charge GST on the invoice (CGST+SGST or IGST as applicable), the customer pays it, and the customer can claim full ITC against their output GST.

This is one of the operational wins of switching from a foreign ESP to LoopNow: your finance team stops having to file reverse-charge self-invoices and your ITC claim becomes a clean, automated reconciliation.

UPI and netbanking for payment collection

The minimum viable payment collection setup for an Indian SaaS in 2026:

  • UPI via a payment aggregator (Razorpay, Cashfree, or similar). Supports UPI, cards, and netbanking through a single integration. Payouts to your bank account typically next-business-day.
  • Direct netbanking for B2B customers who prefer to pay via NEFT/RTGS/IMPS against an invoice. Include your bank account details and IFSC on every invoice.
  • Auto-debit for subscriptions via e-NACH or UPI AutoPay. LoopNow uses UPI AutoPay for subscriptions ≤ ₹10,000/month and e-NACH for larger amounts.

LoopNow uses Razorpay as the payment processor for subscriptions and ad-hoc invoice payments. Razorpay charges ~2% per transaction, settled to a current account at HDFC. International credit cards are accepted at 3% with a forex markup.

GSTR-1 reporting tips

GSTR-1 is the outward supplies return — the return in which you report every invoice you issued during the month. For an email SaaS, the relevant sections are:

  • Table 4A, 4B, 4C, 6B, 6C — B2B invoices, reported individually by GSTIN.
  • Table 7 — B2C invoices, aggregated by state and by GST rate (CGST+SGST or IGST).
  • Table 9A, 9B, 9C — Credit / debit notes, if you issue any.

Three tips that save time and audit risk:

  1. Generate the GSTR-1 JSON from your invoicing system, do not hand-type it. The GSTN portal accepts JSON upload. Hand-typing 200+ invoices a month is how mistakes happen.
  2. Reconcile the GSTR-1 to your books before filing. The total invoice value in GSTR-1 should match the total invoice value in your revenue ledger (excluding GST, excluding credit notes). If it does not, find the delta before you file.
  3. File GSTR-1 on the 11th of every month, not the last day. The 11th-of-the-month date is for the previous month's data. Filing on the 11th gives you a 20-day buffer before the late-fee penalty kicks in if something goes wrong.

LoopNow's billing system auto-generates a GSTR-1 JSON file at the end of every month, ready for upload to the GSTN portal. The reconciliation report is a single CSV export.

Audit trail requirements

Under Section 36 of the CGST Act read with Rule 56 of the CGST Rules, you must retain the following for 6 years from the date of filing of the annual return for the relevant financial year:

  • A copy of every invoice issued.
  • A copy of every credit / debit note issued.
  • The relevant accounting records (the journal entry that booked the revenue, the payment receipt, the reconciliation against the bank statement).
  • The GSTR-1 and GSTR-3B returns as filed.

For a SaaS, the practical interpretation is: keep the signed PDF invoice, the JSON record of the invoice, the payment record from Razorpay, and the GSTR-1 / 3B as filed. Store them in a write-once archive (Cloudflare R2 with object lock, or equivalent). Do not rely on email inboxes — mailboxes are mutable and a deleted email is not an audit record.

LoopNow stores all of the above in Cloudflare R2 (ap-south-1) with object-lock enabled. The retention is 8 years (2 years beyond the statutory minimum, as a buffer). The records are signed and tamper-evident.

A sample invoice mockup

What a LoopNow invoice PDF looks like. A condensed mockup:

                                                                  Invoice #LN-2026-0142
                                                                  Invoice date: 14-Jan-2026
                                                                  Due date:       28-Jan-2026
                                                                  Place of supply: Maharashtra (27)

LoopNow Technologies Pvt. Ltd.                         Acme D2C Pvt. Ltd.
123, Maxus Mall, 150 Feet Road                        5th Floor, Vasant Plaza
Bhayandar West, Thane                                  MG Road
Maharashtra - 401101                                   Bangalore, Karnataka - 560001
GSTIN: 27AABCL1234M1ZP                                GSTIN: 29AAACA1234A1Z5
State: Maharashtra (27)                               State: Karnataka (29)

Description                          HSN/SAC   Qty   Unit Price   Taxable Value
--------------------------------------------------------------------------------
LoopNow Scale plan - Jan 2026        998314    1     4,999.00     4,999.00
                                      
                  Inter-state supply (MH to KA) - IGST applicable
                  IGST @ 18%:                                  899.82
                  ---------------------------------------------------
                  Total:                                       5,898.82

                  [Pay now via UPI: upi.loopnow.in/aci/1234]
                  [Or NEFT to HDFC 0123456789 / IFSC HDFC0001234]

                  E&OE. This is a computer-generated invoice and does not
                  require a physical signature.

Things to note in the mockup:

  • The place of supply is clearly the recipient's state (Karnataka, code 29), not the supplier's state.
  • The tax line is IGST 18%, not CGST+SGST, because the supplier (Maharashtra) and recipient (Karnataka) are in different states.
  • The HSN/SAC code is 6 digits (998314) — compliant with the post-April 2021 requirement.
  • The invoice number is sequential and the date is in the standard Indian format (DD-MMM-YYYY).
  • The QR code or UPI deep-link on a real invoice would let the customer pay in 2 seconds.
Need a real LoopNow invoice to look at? Email billing@loopnow.in and we will send you a redacted sample PDF (with the customer's GSTIN redacted, the financial numbers real).
Written by the LoopNow finance team.
Reviewed by our CA. Reach us at billing@loopnow.in with questions about your own billing setup.

Related reading: LoopNow pricing · DPDP compliance guide · Contact sales.

References

  1. CBIC, Notification No. 78/2020 – Central Tax, dated 15 October 2020 (6-digit HSN/SAC mandatory for B2B invoices from 1 April 2021) — https://cbic-gst.gov.in/central-tax-notifications.html (Notification No. 78/2020 – Central Tax).
  2. CBIC, Notification No. 13/2017 – Central Tax (Rate), dated 28 June 2017 (reverse-charge mechanism for services imported by a taxable person from a non-taxable / foreign supplier) — https://cbic-gst.gov.in/central-tax-rate-notifications.html (Notification No. 13/2017 – CT(Rate)).
  3. CGST Act, Section 36 read with CGST Rules, Rule 56 (six-year retention of accounts and records) — https://cbic-gst.gov.in (model CGST law published by CBIC).