Bharat GST Invoice for WooCommerce: Complete Setup & GST Compliance Guide (2026)

The complete guide to the free Bharat GST Invoice plugin for WooCommerce — setup, HSN codes and GST 2.0 slabs, invoice management, Section 34 credit notes, e-invoicing with IRN, and GSTR-1 / GSTR-3B exports. All in one post.

What is Bharat GST Invoice for WooCommerce?

Bharat GST Invoice is a free WordPress plugin that brings complete Indian GST compliance to WooCommerce stores without any external service. Tax calculation, invoice numbering, PDF generation and report exports all run inside your own WordPress install — no third-party API key is required for everyday invoicing, and your customer data never leaves your server.

The plugin covers the full compliance chain: GSTIN validation with the official checksum, Rule 46-consecutive invoice numbering per financial year, a CGST / SGST / UTGST / IGST engine that automatically splits tax by place of supply, GST 2.0 slabs (0% / 5% / 18% / 40%), HSN codes on products, a GST tax invoice PDF, e-invoicing with IRN and QR code, credit notes on refunds, and GSTR-1 / GSTR-3B report exports.

Feature overview at a glance

FeatureWhere you find itWhat it does
Business settingsWooCommerce > Bharat GSTGSTIN, PAN, address, bank details, footer notes
Tax engineAutomaticIntra-state splits CGST+SGST/UTGST, inter-state charges IGST
Invoice PDFuploads/bgi-invoices/Rule 46-ready tax invoice, rendered with bundled DOMPDF
E-invoicing (IRN)WooCommerce > Bharat GST > E-invoicingNIC payload, auto/manual IRN, QR code on the PDF
Credit notesOrder screen + My AccountSection 34 credit note per refund with its own series
GST ReportsWooCommerce > GST ReportsGSTR-1 JSON, B2B/B2C/CDNR/HSN CSVs, GSTR-3B summary
GST DashboardWooCommerce > GST DashboardMonthly cards, FY table, slab-wise breakdown
Audit logWooCommerce > GST Audit LogEvery compliance event with user, IP and timestamp

What this guide covers

This is the complete, single reference for the plugin — everything that used to live in six separate posts, now in one place:

Step 1 — Install and activate

Upload the plugin zip through Plugins > Add New > Upload Plugin (or copy the bharat-gst-invoice folder into wp-content/plugins/) and activate it. On activation the plugin creates its own database tables for invoices, sequences and the audit log — no manual SQL is needed. The tables upgrade in place when a new version ships, so your invoice history is safe across updates.

The plugin needs WooCommerce 5.0 or later and works with both classic posts-based orders and HPOS (high-performance order storage) — it uses WooCommerce CRUD everywhere, so it adapts to your store setup automatically.

Step 2 — Fill in your business details

Open WooCommerce > Bharat GST and complete the Business section: legal name, trading name if different, full registered address, city, state, PIN code, PAN and your 15-character GSTIN. The GSTIN is validated live against the official structure and mod-36 checksum, so a typing mistake is caught before it ever reaches an invoice.

The seller state you choose here drives the whole tax engine — same state orders become intra-state (CGST + SGST/UTGST), other states become inter-state (IGST). Double-check this field first if your tax split ever looks wrong.

Step 3 — Configure numbering and invoicing behaviour

Under the Invoicing section you choose the series prefix and number format. The default format {number}/{fy} produces numbers like 1/2026-27, allocated per financial year (April 1 – March 31) with a database row lock so two simultaneous orders can never receive the same number. Numbers are consecutive, never reused — exactly what Rule 46 of the CGST Rules expects.

Pick the order status that triggers invoice generation: processing, completed, or a manual mode where you press the button on each order. You can also set the default GST slab for products you have not tagged, choose whether shipping is taxable, and add footer notes, terms and bank details (including UPI) that print on every invoice.

Step 4 — Place a test order

Create a test product, place an order as a customer would, and let the order reach your trigger status. The invoice is generated automatically, the PDF is stored under wp-content/uploads/bgi-invoices/ with directory listing disabled, and the GST metabox appears on the order screen with the invoice number, totals and PDF link. Open the PDF and confirm your GSTIN, address, HSN summary and tax split all look correct before switching the store live.

Part 2 — Products: HSN codes, GST 2.0 slabs and checkout GSTIN

With the plugin active, set up every product correctly so invoices and returns carry the right codes and rates.

Why HSN codes and slabs are set per product

Under GST every taxable supply carries an HSN (Harmonised System of Nomenclature) code and a tax rate. WooCommerce does not model Indian GST natively, so Bharat GST Invoice adds its own "GST (India)" tab to every product's data — there you set the HSN code and the GST slab the product belongs to. The invoice prints an HSN summary with rate-wise totals, and the GSTR-1 HSN export is built from the same data.

Setting the HSN code on a product

Edit a product in WooCommerce and open Product data > GST (India). Enter the HSN code — 4 to 8 digits — in the HSN Code field. Variations can override the parent HSN, which is handy when a variable product spans different chapters. Leave the variation field blank to inherit the parent value.

The code is stored as digits only, so spacing or dashes typed by mistake are cleaned automatically. On the invoice the HSN summary groups identical code + rate combinations and shows taxable value, CGST, SGST/UTGST, IGST and CESS per group.

Choosing the GST slab (GST 2.0 rates)

The slab picker follows the current GST 2.0 structure. Choose 0% for essentials and nil-rated goods, 5% for standard-rate goods, 18% for standard services and most goods, and 40% for sin and luxury goods. Products without an explicit slab fall back to the default slab on the settings page, so you can leave niche products untagged and control their rate centrally.

SlabTypical goods and servicesExample
0%Essentials, fresh produce, nil-rated goodsUnprocessed food grains
5%Standard-rate essentials and packaged goodsPackaged snacks, apparel below the threshold
18%Standard goods and servicesElectronics, professional services, SaaS
40%Sin and luxury goodsAerated drinks, premium vehicles

GSTIN at checkout and automatic tax split

The plugin adds an optional GSTIN field to the checkout billing fields. The value is normalised and checksum-validated on the spot; an invalid GSTIN blocks checkout with a clear message, and a valid one is stored on the order. Orders carrying a buyer GSTIN are treated as B2B — they appear in the B2B section of GSTR-1 and become eligible for e-invoicing.

The tax split itself is automatic: the seller state from the settings page is compared with the buyer's place of supply. Same state produces CGST + SGST (or CGST + UTGST for union territories without a legislature such as Ladakh, Chandigarh, Lakshadweep, Andaman & Nicobar, and Dadra & Nagar Haveli and Daman & Diu); a different state produces IGST. Union territories are handled by name, so the split is correct even for the tricky cases.

Quick checklist

Set the HSN and slab on every sellable product, pick a sensible default slab for anything untagged, enable the checkout GSTIN field if you sell B2B, and place a test order in both an intra-state and an inter-state scenario to see the split before going live.

Part 3 — Managing invoices day to day

Once orders flow, these are the levers: automatic vs manual generation, regeneration, cancellation and how customers get their PDFs.

Where invoices live

Every order with an issued invoice shows a GST metabox on the order edit screen: invoice number, dates, buyer details, rate-wise totals, the PDF download link and the action buttons. The invoice PDF itself is stored under wp-content/uploads/bgi-invoices/ — the file name carries the invoice number, so files sort naturally in the folder.

Automatic vs manual generation

In automatic mode the invoice is issued the moment an order reaches the status you selected (processing or completed). The invoice number is allocated with a database row lock at that instant, so even two orders paid in the same second get consecutive unique numbers. In manual mode nothing is issued until you press Generate Invoice in the metabox — useful when you only invoice confirmed orders.

Regenerating without burning numbers

Fixed a typo in the address? Changed the bank details or footer note? Press Regenerate. The PDF is rebuilt from the current settings and order data while keeping the original invoice number and date — Rule 46 numbers are never wasted on a cosmetic fix. The buyer GSTIN, place of supply and totals are refreshed too, so a regenerated invoice always reflects the order as it stands now.

Cancelling an invoice

Cancel is for genuinely wrong invoices — wrong party, wrong amount. The row is kept and marked cancelled, the PDF is deleted, and the number is retired forever: the next invoice continues from the next number in the series. This preserves the consecutiveness rule that Rule 46 expects. If only part of an order changed, prefer Regenerate over Cancel.

Customers: email and My Account downloads

When enabled, the PDF is attached automatically to the customer's processing and completed order emails, each with its own switch on the settings page. Customers also get a "GST Invoice (PDF)" button in My Account — on the orders list and the order view. Downloads are ownership-checked: a logged-in customer can only fetch invoices belonging to their own orders, and guests are redirected to the login page instead of seeing an error.

Invoice copy labels

GST invoices traditionally print copy labels such as "Original for Recipient", "Duplicate for Transporter" or "Triplicate for Supplier". You choose the label printed on the PDF from the settings page; regenerate after a change to refresh existing PDFs.

Part 4 — Refunds and GST credit notes (Section 34)

Refunds are where most stores slip up compliance-wise. The plugin handles the paperwork automatically.

When a credit note is required

Under Section 34 of the CGST Act, whenever a supplier issues a credit note for a returned or over-charged supply, the tax liability must be reduced through a proper credit note document that references the original invoice. Bharat GST Invoice automates this end to end: process a refund in WooCommerce and the plugin issues a GST credit note from its own series, typically CN/{FY}/{number}.

What the credit note contains

The credit note PDF carries the credit note number and date, the reason for the credit, a reference to the original invoice number and date, the buyer identity and GSTIN, and the reversed tax split — taxable value, CGST, SGST/UTGST, IGST and CESS all in the reverse direction of the original supply. If the original invoice charged IGST, the credit note reverses IGST; if it split CGST + SGST, the credit note splits the same way. That symmetry keeps your GSTR-1 CDNR section consistent.

Partial refunds and the cumulative cap

Refund ₹300 of a ₹1,000 order and you get a credit note for exactly ₹300's worth of supply and tax, proportional to the original line items. Process a second partial refund later and a second credit note is issued — one per refund. The plugin caps the cumulative credit at the invoiced total, so it is impossible to accidentally credit more than the original supply, even if refunds are processed repeatedly.

Managing credit notes

Credit notes are listed in the GST metabox on the order screen with their PDFs, and they flow into reports automatically: unregistered-recipient credit notes reduce the B2CS table of GSTR-1, registered-recipient credit notes appear in CDNR, and the GSTR-3B outward summary nets them off for the filing period. The credit note series has its own numbering per financial year, independent of the invoice series.

Tip: refund through the WooCommerce order screen (Orders > select order > Refund) rather than manually in your payment gateway, so the plugin sees the refund event and issues the credit note instantly.

Part 5 — E-invoicing with IRN and QR code

For B2B sellers above the e-invoicing threshold, the plugin talks to the NIC IRP directly.

What e-invoicing (IRN) means for your store

E-invoicing is the mandatory reporting of B2B invoices to the Invoice Registering Portal (IRP) run by NIC. Each eligible invoice is submitted as a signed JSON payload and receives a 64-character Invoice Reference Number (IRN) plus a signed QR code that must appear on the printed invoice. Bharat GST Invoice implements the NIC e-invoice API (v1.03) end to end: payload building, authentication, IRN generation, cancellation and the QR block on the PDF.

Enabling e-invoicing safely

Turn the feature on under WooCommerce > Bharat GST > E-invoicing. The plugin ships with three environments. Mock mode needs no credentials and produces a deterministic fake IRN and QR payload locally — perfect for verifying the whole flow before touching the portal. Sandbox connects to the NIC sandbox with your trial credentials. Production is the live IRP. Credentials (endpoint, client ID/secret, username, password) live on the same settings screen, and the auth token is cached for an hour to avoid needless re-authentication.

Which invoices get an IRN

Eligibility is straightforward: an issued tax invoice with a buyer GSTIN (B2B), a configured seller GSTIN and a non-zero total. Invoices without a buyer GSTIN — everyday B2C retail — are not eligible and are simply skipped. With auto-generate enabled, the IRN is requested the moment the invoice is issued; otherwise the Generate IRN button in the order metabox does it manually. Every attempt is written to the audit log.

What happens after a successful IRN

The IRN, acknowledgement number, acknowledgement date and signed QR payload are stored on the invoice row, and the invoice PDF is regenerated automatically — it now shows an IRN block and the signed QR code. Cancelling an IRN (within the portal's 24-hour window) marks the row cancelled in mock and sandbox mode locally; on production the cancel request goes to the IRP first. A cancelled IRN can be regenerated if you need to re-file the document.

Testing the flow without credentials

Keep the environment on mock, place a B2B test order with a valid-format GSTIN, and complete it. You should see the IRN appear on the invoice within seconds, the QR block on the PDF, and the IRN count go up on the GST Dashboard. When you are satisfied, request NIC sandbox credentials, switch the environment, and run one more test before going live.

Part 6 — Filing: GSTR-1, GSTR-3B and the GST dashboard

Every return figure is derived from the documents the plugin issued, so filings match what customers received.

Reports built from real documents

Bharat GST Invoice builds returns from the invoices and credit notes it has already issued — not from raw orders — so every exported figure ties back to a document your customer actually received. Open WooCommerce > GST Reports, pick the filing month inside a financial year, and the page assembles the whole GSTR-1 picture plus the GSTR-3B outward summary.

GSTR-1 exports: JSON and CSV

The GSTR-1 JSON download produces the familiar section structure — B2B, B2CL (large inter-state), B2CS (small B2C, aggregated per place of supply and rate), CDNR (registered-recipient credit notes referencing their original invoices) and the HSN summary. The JSON carries your seller GSTIN and the filing period (fp), and is shaped for offline-tool-style consumption. Alongside it, per-section CSVs give you B2B rows, B2C rows, credit notes and the HSN summary in spreadsheet form for accountants who prefer Excel.

ExportContentsBest for
GSTR-1 JSONAll sections in one fileFiling tools and portals
B2B CSVOne row per invoice item with buyer GSTINAccountant working papers
B2C CSVB2CL and B2CS rows with rate splitsReconciliation
CDNR CSVCredit notes with original invoice referenceReturn adjustments
HSN CSVCode + rate-wise taxable and tax totalsHSN reconciliation
GSTR-3B CSVOutward taxable supplies summary3B table 3.1(a) preparation

The GSTR-3B summary

Below the exports the page shows a live 3.1(a) table: intra-state supplies with CGST and SGST/UTGST, inter-state supplies with IGST, and nil-rated supplies — each net of credit notes issued in the period. The CSV export mirrors this table so you can drop the numbers straight into your filing workflow. Remember that 3B also covers ITC and other tables this summary deliberately leaves out; the plugin covers the outward-supply side it can actually see.

GST Dashboard for month-round visibility

WooCommerce > GST Dashboard is the at-a-glance view: cards for taxable value, CGST, SGST/UTGST, IGST, CESS and net tax for any month, a full financial-year month table, a slab-wise breakdown (rate-wise taxable and tax, net of credit notes), counts of invoices, credit notes and active IRNs, and the amount credited back through refunds. It is the fastest way to sanity-check the month before you even open the reports page.

A simple monthly filing routine

At month end: open the dashboard and confirm the month's totals look sane, open GST Reports for the filing month, download the GSTR-1 JSON and the CSVs for your accountant, upload or import into your filing tool, and reconcile 3.1(a) from the GSTR-3B CSV. Everything is derived from issued documents, so what you filed is what the customer saw.

Need a hand with setup? This guide is written and maintained by Wasim Akram at digitalwasim.com . If the plugin saves you an hour every month, you can buy the developer a coffee .
#GST#WooCommerce#India#WordPress Plugins#HSN#E-invoicing#GSTR-1#GSTR-3B#Credit Note#Invoicing