GST invoices in WooCommerce: the complete setup guide

For GST-registered stores in India. Updated November 2026. Written by Jasmeet Saini, developer of GSTLayer. Nothing here is legal or tax advice; confirm your own case with a chartered accountant.

WooCommerce was built for a world of one tax rate per region. Indian GST splits one rate into two components inside your state and swaps it for a third outside it, demands HSN codes on every line, numbers invoices in an unbroken series per financial year, and expects the whole thing to land in GSTR-1 every month. This guide explains what a WooCommerce store actually has to produce, how to do it with WooCommerce's own tax tables, and where a plugin saves you the repetitive parts.

In this guide

  1. Who needs GST invoices from their store
  2. What a tax invoice must contain (Rule 46)
  3. CGST + SGST or IGST: place of supply
  4. Setting up GST rates in WooCommerce by hand
  5. HSN and SAC codes
  6. B2B orders: collecting the buyer's GSTIN
  7. Invoice numbering
  8. Refunds and credit notes
  9. From orders to GSTR-1 and GSTR-3B
  10. E-invoicing: when it applies
  11. Doing all this with GSTLayer
  12. Launch checklist

1. Who needs GST invoices from their store

If your business is registered under GST, every taxable sale needs a tax invoice, and the invoice has to be issued in the form the CGST Rules prescribe, not just a WooCommerce order email. Registration is compulsory above the turnover threshold (₹40 lakh for goods in most states, ₹20 lakh for services, lower limits in some special-category states) and, for most sellers, as soon as you sell to another state or through an e-commerce operator that collects tax at source. Many WooCommerce stores therefore register long before they reach the threshold.

Two kinds of registered sellers issue different documents. A regular taxpayer charges GST on each sale and issues a tax invoice. A composition taxpayer pays a flat rate on turnover, may not charge GST to customers, and issues a bill of supply instead. Composition sellers also may not make inter-state sales of goods, which matters for an online store.

2. What a tax invoice must contain (Rule 46)

Rule 46 of the CGST Rules lists the particulars of a tax invoice. For a store the ones that need data WooCommerce does not hold by default are in bold.

Invoices for goods are issued at or before removal or delivery; for services within 30 days of the supply. For an online order that ships from your stock, the practical reading is: issue the invoice when the order is confirmed for dispatch, and keep its number fixed from then on.

3. CGST + SGST or IGST: place of supply

Every GST rate is really two rates. If the place of supply is in the same State as your registration, you charge CGST and SGST (UTGST in the Union Territories without their own legislature) at half the rate each. If it is in another State, you charge IGST at the full rate. An 18 % product is therefore 9 % + 9 % to a customer in your State and 18 % IGST to everyone else, and the invoice has to say which.

For goods that are delivered, the place of supply is where the delivery ends, which for a store means the shipping address. For services supplied to an ordinary consumer it is the recipient's address on record, so a services-only store usually goes by the billing address. Getting this wrong is the most common GST mistake in WooCommerce stores, because WooCommerce calculates tax on the billing or shipping address according to one global setting and nothing warns you when the GST split disagrees with the address used.

The State on the invoice is identified by its two-digit code (Punjab 03, Delhi 07, Maharashtra 27, Karnataka 29 and so on). The code is also the first two characters of every GSTIN, which is how a buyer's GSTIN tells you their State without asking.

4. Setting up GST rates in WooCommerce by hand

WooCommerce can express all of this with its standard tax tables, and it is worth understanding even if you let a plugin build them.

  1. Enable taxes under WooCommerce → Settings → General and set your store address to your State.
  2. Under Settings → Tax create one tax class per GST slab you sell in: 0 %, 5 %, 12 %, 18 %, 28 %, plus 3 % for jewellery or 0.25 % for rough diamonds if that is your trade.
  3. In each class add three rows. Two rows for your own State: CGST at half the rate and SGST (or UTGST) at half the rate, each with the country IN and your State code, and different priority values so WooCommerce applies both. One row for every other State: IGST at the full rate, country IN, State left as a wildcard, and a higher priority still.
  4. Decide whether prices include tax, and whether tax is calculated on the shipping or billing address. For goods choose shipping.
  5. Set the shipping tax class. Shipping is taxed at the rate of the goods it carries; most stores pick the slab that covers most of the catalogue.
  6. Edit every product: tax status Taxable, tax class the right slab.

That is three rows per slab, so fifteen rows for the five main slabs. Maintainable, but easy to mistype and impossible to audit from the order screen, because WooCommerce stores only the rate labels and amounts. Nothing checks that a Karnataka order was in fact charged IGST, nothing records the place of supply, and nothing prints HSN codes or the buyer's GSTIN.

5. HSN and SAC codes

Every line of a tax invoice carries the HSN code of the goods (Harmonised System of Nomenclature) or the SAC of the service. Since April 2021, businesses with aggregate turnover up to ₹5 crore must show at least 4 digits on B2B invoices (optional on B2C), and businesses above ₹5 crore at least 6 digits on all invoices. Eight digits are always allowed. The same codes feed Table 12 of GSTR-1, the HSN-wise summary, so a product without a code is a filing problem, not just an invoice cosmetic.

WooCommerce has no HSN field. The usual workaround is a custom attribute, which does not print on invoices and cannot be summarised. A proper implementation stores the code on the product, lets variations inherit it, lets a category supply a default, validates the digit count and totals it per code and rate for the return.

6. B2B orders: collecting the buyer's GSTIN

A registered buyer can claim input tax credit only if your invoice carries their GSTIN and you report the invoice against it in GSTR-1 Table 4. Business customers will ask for it after the fact if you do not collect it at checkout, and a re-issued invoice is a correction you would rather avoid.

The field should be optional, validated, and stored on the order. A GSTIN is 15 characters: two-digit State code, the ten-character PAN, an entity number, the letter Z, and a check character computed from the other fourteen. Checking the format and the check character at checkout catches almost every typo. With the GSTIN present the order is B2B; it goes invoice-wise into GSTR-1 Table 4A and the HSN summary's B2B half. Without it the order is B2C and is reported in aggregate, except for the large inter-state ones described below.

7. Invoice numbering

Invoice numbers are a series, not the WooCommerce order ID. Orders get IDs when a cart is created, including for orders that are never paid, so order IDs have gaps and cannot be the invoice series. Keep a separate counter that starts again each financial year, pad it so it sorts, and give it a prefix that fits in 16 characters, for example INV/26-27/0001. Assign the number once, when the invoice is issued, and never renumber. If an order is cancelled after invoicing, the invoice is cancelled with a credit note; the number is not reused. GSTR-1 Table 13 asks for the number ranges issued and cancelled in the period, which is only answerable if the series is clean.

8. Refunds and credit notes

Under Section 34 of the CGST Act, a reduction in the value or tax of an invoice already issued is documented by a credit note that references the original invoice. A WooCommerce refund is exactly that event. The credit note needs its own series, the original invoice number and date, the items or amount returned and the tax reversed, and it is reported in GSTR-1 Table 9B (registered buyers) or netted into the B2C tables. Credit notes for a financial year can be reported up to the 30 November of the following year or the annual return, whichever is earlier. Refund the specific line items rather than a round amount so the tax reversal is exact per rate.

9. From orders to GSTR-1 and GSTR-3B

GSTR-1 is the monthly (or quarterly, under the QRMP scheme) statement of outward supplies. For a store, the tables that matter are:

TableWhat goes inLevel
4A, 4B, 6B, 6CInvoices to registered buyers (B2B), SEZ units and deemed exportsInvoice-wise
5A, 5BInter-state invoices to unregistered buyers above ₹1,00,000 (B2C Large; the limit was ₹2,50,000 before August 2024)Invoice-wise
7All other B2C salesTotals per State and rate
9BCredit and debit notes, registered and unregisteredNote-wise
6AExportsInvoice-wise, with shipping bill details
12HSN-wise summary, split into B2B and B2C from the April 2025 tax period (GSTN Phase III)Totals per HSN and rate
13Documents issued: number ranges and cancellationsSeries

GSTR-3B is the monthly summary return and payment. Table 3.1(a) takes your total outward taxable supplies and the tax on them, net of credit notes. The purchase side, input tax credit and reverse-charge inward supplies come from your purchase records, not from the store.

Most sellers prepare GSTR-1 in the free GST Returns Offline Tool from the GST portal, which imports one CSV per table and generates the JSON the portal accepts. The CSV layouts are fixed by the tool's templates: dates as dd-Mon-yy, place of supply as “03-Punjab”, and specific column headers per table. A spreadsheet export from WooCommerce has to be reshaped into those layouts every month, which is the step most store owners pay an accountant to do by hand.

10. E-invoicing: when it applies

E-invoicing (reporting each B2B invoice to an Invoice Registration Portal, which returns an IRN and QR code that must appear on the invoice) is mandatory for businesses whose aggregate turnover exceeded ₹5 crore in any financial year from 2017-18 onwards. It applies to B2B and export invoices, not to B2C sales. If your store is below that threshold, your invoices are issued the ordinary way and this guide covers you. If you are above it, you need an IRP integration in addition to everything above; GSTLayer does not provide one at present.

11. Doing all this with GSTLayer

GSTLayer is a free WordPress plugin that does the parts above that WooCommerce cannot, on your own server, with no data sent anywhere.

GSTLayer Pro adds the filing side: credit notes on refunds, the full set of GSTR-1 section CSVs in the offline tool's 3.2.4 layouts (B2B, B2C Large, B2C Small, credit notes, exports, HSN B2B and B2C, documents issued) with a warnings list for anything the tool would reject, and a GSTR-3B outward-supplies table. Pro is ₹2,999 a year for one site; every feature keeps working if you do not renew, you only stop receiving updates.

12. Launch checklist

Sources: CGST Act 2017 sections 31 and 34; CGST Rules 2017 rules 46, 46A, 49 and 53; Notification 78/2020 – Central Tax (HSN digits); Notification 12/2024 – Central Tax (B2C Large limit); GSTN advisory on Table 12 B2B/B2C split (May 2025); GST Returns Offline Tool 3.2.4 templates. Figures as understood on 10 November 2026; thresholds and formats change, so check the current notifications before filing.