CGST, SGST and IGST Explained — How to Split GST Correctly for Every Transaction
India's GST is three separate taxes — not one. Which one applies depends entirely on where your buyer is. Get it wrong and your GSTR-1 misfires, your buyer loses ITC, and the wrong government collects the money. Here is the complete, plain-English breakdown with rupee examples.
The rule — in one sentence
Intrastate supply (seller and buyer in the same state): CGST + SGST apply. Equal halves of the total rate.
Interstate supply (seller and buyer in different states): IGST applies. Full rate to the Centre, which settles with the destination state.
That is the entire decision tree. Everything else is application.
Worked examples in rupees
Example 1: Laptop sold intrastate (seller in Maharashtra, buyer in Maharashtra)
| Line item | Amount | Calculation |
|---|---|---|
| Invoice value (ex-GST) | ₹80,000 | Base price |
| CGST @ 9% | ₹7,200 | ₹80,000 × 9% |
| SGST @ 9% | ₹7,200 | ₹80,000 × 9% |
| Total invoice value | ₹94,400 | CGST + SGST = ₹14,400 |
The CGST ₹7,200 goes to the Central Government. The SGST ₹7,200 stays with Maharashtra. Both appear as separate line items on the invoice. Both go into your GSTR-1 as separate entries.
Example 2: Same laptop sold interstate (seller in Maharashtra, buyer in Karnataka)
| Line item | Amount | Calculation |
|---|---|---|
| Invoice value (ex-GST) | ₹80,000 | Base price |
| IGST @ 18% | ₹14,400 | ₹80,000 × 18% |
| Total invoice value | ₹94,400 | Single IGST line |
The buyer in Karnataka pays the same ₹94,400. The Central Government collects the ₹14,400 IGST and then settles Karnataka's share. Karnataka gets its portion — it just comes from the Centre, not directly from the seller in Maharashtra.
Example 3: 18% GST in rupees — quick reference table
| Invoice value | CGST (9%) | SGST (9%) | IGST (18%) | Total GST |
|---|---|---|---|---|
| ₹5,000 | ₹450 | ₹450 | ₹900 | ₹900 |
| ₹10,000 | ₹900 | ₹900 | ₹1,800 | ₹1,800 |
| ₹25,000 | ₹2,250 | ₹2,250 | ₹4,500 | ₹4,500 |
| ₹50,000 | ₹4,500 | ₹4,500 | ₹9,000 | ₹9,000 |
| ₹1,00,000 | ₹9,000 | ₹9,000 | ₹18,000 | ₹18,000 |
The complete supply-type decision tree
| Situation | Tax applicable | Who receives it |
|---|---|---|
| Seller state = Buyer state | CGST + SGST | Centre + Seller's state |
| Seller state ≠ Buyer state | IGST | Centre (settles with destination state) |
| Supply to a Union Territory | CGST + UTGST | Centre + Union Territory |
| Export or SEZ supply | IGST @ 0% | Zero-rated — refund available |
| Import of goods | IGST + Customs | Centre |
The five most common mistakes
1. Applying IGST on intrastate sales. The most common error in e-commerce platforms that don't check the buyer's state before tax calculation. The total tax is the same but the tax filing is wrong — IGST collected on an intrastate sale shows as a mismatch in GSTR-2B reconciliation.
2. Treating SGST and IGST as alternatives. They are never alternatives for the same transaction. Either CGST+SGST applies, or IGST applies. Never both, never a choice.
3. Assuming Union Territory = State. UT supplies use UTGST, not SGST. Billing software that auto-fills SGST for all domestic intrastate supplies will produce incorrect invoices for buyers in Delhi, Chandigarh, and other UTs.
4. Hardcoding the supply type. An e-commerce platform where sellers are spread across states cannot hardcode "intrastate" or "interstate" — it depends on the seller's registered state vs the buyer's delivery state for each individual order. See why hardcoding GST data creates compliance risk.
5. Not separating CGST and SGST on the invoice. The GST invoice format mandated by CBIC requires CGST and SGST to appear as separate line items. A single "GST 18%" line without the split is a non-compliant invoice.
How developers handle this automatically
Every transaction needs to know the supply type before the tax split can be calculated. The correct approach is to determine supply type at order time — compare the seller's GSTIN state code against the buyer's delivery state — and then pass that to the rate API.
Here is the complete pattern in Python using the GST Accelerator API:
# pip install gstaccelerator from gstaccelerator import GSTAccelerator gst = GSTAccelerator("your_api_key") # Determine supply type from GSTIN state codes seller_state = "27" # Maharashtra GSTIN prefix buyer_state = "29" # Karnataka GSTIN prefix supply_type = "intrastate" if seller_state == buyer_state else "interstate" # Get the correct split for this specific transaction rate = gst.lookup( "laptop computer", supply_type=supply_type, branded=True ) invoice_value = 80000 r = rate[0]["tax_rates"] if supply_type == "intrastate": cgst = invoice_value * r["cgst"] / 100 # ₹7,200 sgst = invoice_value * r["sgst"] / 100 # ₹7,200 print(f"CGST: ₹{cgst:,.0f} | SGST: ₹{sgst:,.0f}") else: igst = invoice_value * r["igst"] / 100 # ₹14,400 print(f"IGST: ₹{igst:,.0f}")
The API returns all three values — CGST, SGST, and IGST — in every response. Your code picks which to apply based
on the supply type you passed. The notification_ref field in the response gives you the exact CBIC
notification that authorises the rate — which is your audit trail if a CA ever challenges it.
Frequently asked questions
What is the difference between CGST, SGST and IGST?
How do you calculate 18% GST in rupees?
Who receives CGST, SGST and IGST?
What is UTGST and when does it apply?
Get CGST, SGST and IGST in one API call
Pass your supply type and get all three values returned separately — with the notification reference and the condition that triggered the rate.
Get free API key →100 calls free · No card needed · View API docs · See pricing