Mihir Jadhav
← Back to Writing

Indian GST in SaaS: The Billing Nightmare Nobody Warns You About

·3 min read
SaaSBillingIndia

If you're building a SaaS product for the Indian market, you will eventually face GST. I learned this the hard way with OneBiz.

What is GST (for non-Indian readers)

India's Goods and Services Tax is a multi-layered tax system with:

CGST (Central) + SGST (State) for intra-state transactions
IGST (Integrated) for inter-state transactions
Different rates for different service categories
Mandatory invoice formats with specific field requirements
Monthly/quarterly return filing

For SaaS products, the service category is "Information Technology Software Services" at 18% GST.

What went wrong

We built OneBiz's subscription billing from scratch. Custom GST calculation, custom invoice generation, custom subscription lifecycle management.

The bugs were brutal:

Rounding errors in tax calculations that compounded over multiple line items
Inter-state vs intra-state detection failing for edge cases (union territories)
Invoice numbering gaps when subscriptions were cancelled and recreated
Proration calculations that didn't account for GST correctly

What I'd do differently

Use a billing engine

I should have used Getlago (which we eventually self-hosted) or Stripe Billing from day one. Custom billing math is a trap - it seems simple until you hit edge cases that take weeks to debug.

Isolate and test financial math

GST calculation should be a pure function with exhaustive test coverage. We were testing billing flows end-to-end instead of unit-testing the math separately. When a test failed, we couldn't tell if it was a tax bug, a subscription bug, or a proration bug.

Start with a billing compliance checklist

Indian GST invoices have mandatory fields: GSTIN of supplier, GSTIN of recipient (if registered), HSN/SAC codes, place of supply, tax breakup. We discovered these requirements mid-development instead of upfront.

The current state

OneBiz now uses self-hosted Getlago for metering and billing, with a custom GST layer on top. The separation of concerns made everything simpler:

Getlago handles subscription lifecycle and metering
Our custom layer handles GST calculation and compliant invoice generation
Novu handles billing notifications

It's not perfect, but it's compliant and testable.

Advice for Indian SaaS builders

Don't build custom billing math unless you absolutely have to. Use Stripe, Getlago, or Chargebee.

Test GST edge cases early - union territories, SEZ, export invoices, B2B vs B2C.

Get the invoice format right first - it's easier to build billing around a correct invoice template than to retrofit compliance.

Budget 3x the time you think billing will take. GST compliance is not a weekend project.

The Indian SaaS ecosystem is booming. But the billing infrastructure for Indian compliance is still immature compared to US/EU options. If someone builds a great open-source Indian GST billing library, I'll be the first user.