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
| Feature | Where you find it | What it does |
|---|---|---|
| Business settings | WooCommerce > Bharat GST | GSTIN, PAN, address, bank details, footer notes |
| Tax engine | Automatic | Intra-state splits CGST+SGST/UTGST, inter-state charges IGST |
| Invoice PDF | uploads/bgi-invoices/ | Rule 46-ready tax invoice, rendered with bundled DOMPDF |
| E-invoicing (IRN) | WooCommerce > Bharat GST > E-invoicing | NIC payload, auto/manual IRN, QR code on the PDF |
| Credit notes | Order screen + My Account | Section 34 credit note per refund with its own series |
| GST Reports | WooCommerce > GST Reports | GSTR-1 JSON, B2B/B2C/CDNR/HSN CSVs, GSTR-3B summary |
| GST Dashboard | WooCommerce > GST Dashboard | Monthly cards, FY table, slab-wise breakdown |
| Audit log | WooCommerce > GST Audit Log | Every 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:
- Part 1 — Install, business settings, numbering and your first test invoice
- Part 2 — HSN codes, GST 2.0 slabs, checkout GSTIN and the tax split
- Part 3 — Managing invoices: generate, regenerate, cancel, customer downloads
- Part 4 — Refunds and Section 34 credit notes
- Part 5 — E-invoicing with IRN and QR code
- Part 6 — GSTR-1 / GSTR-3B exports and the GST dashboard
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.
| Slab | Typical goods and services | Example |
|---|---|---|
| 0% | Essentials, fresh produce, nil-rated goods | Unprocessed food grains |
| 5% | Standard-rate essentials and packaged goods | Packaged snacks, apparel below the threshold |
| 18% | Standard goods and services | Electronics, professional services, SaaS |
| 40% | Sin and luxury goods | Aerated 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.
| Export | Contents | Best for |
|---|---|---|
| GSTR-1 JSON | All sections in one file | Filing tools and portals |
| B2B CSV | One row per invoice item with buyer GSTIN | Accountant working papers |
| B2C CSV | B2CL and B2CS rows with rate splits | Reconciliation |
| CDNR CSV | Credit notes with original invoice reference | Return adjustments |
| HSN CSV | Code + rate-wise taxable and tax totals | HSN reconciliation |
| GSTR-3B CSV | Outward taxable supplies summary | 3B 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 .