{"id":310598,"date":"2026-05-16T04:46:51","date_gmt":"2026-05-16T04:46:51","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/gst-report-for-woocommerce\/"},"modified":"2026-05-16T04:57:24","modified_gmt":"2026-05-16T04:57:24","slug":"gst-report-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/gst-report-for-woocommerce\/","author":23495382,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.1.0","stable_tag":"2.1.0","tested":"6.9.4","requires":"5.9","requires_php":"7.4","requires_plugins":null,"header_name":"GST Report for WooCommerce","header_author":"Setups Works","header_description":"Native PHP GST Dashboard \u2014 direct DB, no REST API, no JavaScript frameworks.","assets_banners_color":"1b1b31","last_updated":"2026-05-16 04:57:24","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/gst-report-for-woocommerce\/","header_author_uri":"https:\/\/setups.works\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":36,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.0.8":{"tag":"2.0.8","author":"nitheeshdr","date":"2026-05-16 04:46:24"},"2.1.0":{"tag":"2.1.0","author":"nitheeshdr","date":"2026-05-16 04:57:24"}},"upgrade_notice":{"2.1.0":"<p>Adds plugin branding on WordPress.org and consolidates all 2.0.x fixes. Safe to upgrade \u2014 no database changes.<\/p>","2.0.4":"<p>Invoice buttons now work automatically using each order&#039;s own key \u2014 no access key configuration needed. Deactivate and reactivate the plugin after upgrading to trigger the updated wizard.<\/p>","2.0.0":"<p>Full rewrite. Deactivate and reactivate the plugin after upgrading.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3533545,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3533545,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3533545,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3533545,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.0.8","2.1.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Setup Wizard \u2014 welcome screen with Setups Works branding.","2":"Setup Wizard \u2014 HSN code check listing products missing HSN codes.","3":"Setup Wizard \u2014 GST tax rate check showing 18% and 5% rate status.","4":"Setup Wizard \u2014 PDF Invoices plugin check with access type status.","5":"GST Report tab \u2014 line-item breakdown with CGST\/SGST\/IGST columns.","6":"Orders tab \u2014 card-based view with per-order GST breakdown.","7":"Products tab \u2014 product list with HSN code and GST rate.","8":"Summary stat cards \u2014 total orders, revenue, GST collected, average order."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[15635,24215,12480,2012,286],"plugin_category":[45],"plugin_contributors":[263126],"plugin_business_model":[],"class_list":["post-310598","plugin","type-plugin","status-publish","hentry","plugin_tags-gst","plugin_tags-india","plugin_tags-invoice","plugin_tags-tax","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-nitheeshdr","plugin_committers-nitheeshdr"],"banners":{"banner":"https:\/\/ps.w.org\/gst-report-for-woocommerce\/assets\/banner-772x250.png?rev=3533545","banner_2x":"https:\/\/ps.w.org\/gst-report-for-woocommerce\/assets\/banner-1544x500.png?rev=3533545","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/gst-report-for-woocommerce\/assets\/icon-128x128.png?rev=3533545","icon_2x":"https:\/\/ps.w.org\/gst-report-for-woocommerce\/assets\/icon-256x256.png?rev=3533545","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>GST Report for WooCommerce<\/strong> is a lightweight, fast admin dashboard built entirely with native PHP and direct database queries. It generates GST-compliant reports for Indian WooCommerce stores, handles both intra-state (CGST + SGST) and inter-state (IGST) tax calculations across 18% and 5% GST rates, and lets you export to Excel or open a PDF tax invoice in one click \u2014 all without leaving WordPress admin.<\/p>\n\n<p>Designed for Indian store owners who need to file GSTR-1, GSTR-3B, or provide tax invoices to B2B buyers, without the overhead of a full accounting plugin.<\/p>\n\n<h4>Key Features<\/h4>\n\n<ul>\n<li><strong>Setup Wizard<\/strong> \u2014 On first activation, a guided wizard checks your HSN codes, GST tax rates, and PDF Invoices plugin configuration so your dashboard is accurate from day one.<\/li>\n<li><strong>GST Report tab<\/strong> \u2014 Line-item breakdown per order with CGST\/SGST (intra-state) and IGST (inter-state) at 18%, 5%, and 0% rates, with separate columns for each. Cancelled and refunded orders appear as negative entries.<\/li>\n<li><strong>Orders tab<\/strong> \u2014 Card-based order view showing customer name, GSTIN, billing state, order status, and a full per-order GST breakdown (CGST, SGST, IGST).<\/li>\n<li><strong>Products tab<\/strong> \u2014 All published products with thumbnail, SKU, HSN code, price, stock quantity, GST rate, and stock status.<\/li>\n<li><strong>Excel export<\/strong> \u2014 Download the filtered report as a properly formatted <code>.xlsx<\/code> file using a zero-dependency PHP XLSX writer. Includes date, invoice number, DC number, customer, GSTIN, state, HSN, quantity, subtotal, and all GST columns.<\/li>\n<li><strong>PDF invoice<\/strong> \u2014 Opens the WooCommerce PDF Invoices &amp; Packing Slips invoice for any order in a new tab with one click. Access key is read automatically from the order \u2014 no manual configuration needed.<\/li>\n<li><strong>Flexible HSN lookup<\/strong> \u2014 Reads HSN from product meta (<code>hsn<\/code>, <code>_hsn_code<\/code>), product attributes (any attribute whose name contains \"HSN\"), or order-item meta \u2014 whichever is present. Checks variation first, then parent product.<\/li>\n<li><strong>HPOS compatible<\/strong> \u2014 Works with both the classic <code>wp_posts<\/code> order table and WooCommerce High-Performance Order Storage (HPOS\/COT). Detects automatically.<\/li>\n<li><strong>Filtering &amp; search<\/strong> \u2014 Filter by start\/end date, sort newest or oldest, search by order ID or billing email. Paginated at 50 orders per page.<\/li>\n<li><strong>Summary stat cards<\/strong> \u2014 Total orders, total products, revenue, total GST collected, and average order value \u2014 calculated via a single SQL aggregation query (no N+1 queries).<\/li>\n<\/ul>\n\n<h4>Who Is This For?<\/h4>\n\n<ul>\n<li>Indian WooCommerce store owners filing GSTR-1 or GSTR-3B returns<\/li>\n<li>Stores selling to GST-registered buyers (B2B) who need tax invoices with GSTIN<\/li>\n<li>Accountants or store managers who need a quick Excel export of GST data for a given period<\/li>\n<li>Stores in Tamil Nadu (TN) needing CGST + SGST split, or any other state needing IGST<\/li>\n<\/ul>\n\n<h4>How GST Calculation Works<\/h4>\n\n<p>The plugin uses WooCommerce's own tax totals stored against each order line item:<\/p>\n\n<ul>\n<li><strong>Intra-state (TN):<\/strong> If billing state is Tamil Nadu, tax is split 50\/50 as CGST + SGST.<\/li>\n<li><strong>Inter-state:<\/strong> All other billing states are treated as IGST.<\/li>\n<li><strong>5% GST:<\/strong> Products assigned to a tax class whose name contains <code>5<\/code> (e.g. \"GST 5%\") are reported under the 5% columns.<\/li>\n<li><strong>18% GST:<\/strong> All other taxed products are reported under the 18% columns.<\/li>\n<li><strong>0% \/ Exempt:<\/strong> Products with no tax are reported under the zero-rated supply column.<\/li>\n<\/ul>\n\n<h4>Technical Notes<\/h4>\n\n<ul>\n<li>Pure PHP \u2014 no JavaScript frameworks, no React, no REST API.<\/li>\n<li>All data fetched via <code>WC_Order_Query<\/code> and direct SQL with <code>$wpdb-&gt;prepare()<\/code>.<\/li>\n<li>All <code>$_GET<\/code> input is sanitised with <code>sanitize_key()<\/code>, <code>sanitize_text_field()<\/code>, <code>absint()<\/code>, and <code>wp_unslash()<\/code>.<\/li>\n<li>All output escaped with <code>esc_html()<\/code>, <code>esc_url()<\/code>, <code>esc_attr()<\/code>, <code>wp_kses_post()<\/code>.<\/li>\n<li>Stats query result cached with <code>wp_cache_get\/set<\/code>.<\/li>\n<li>Nonce-protected on all export actions.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<h4>Automatic Installation<\/h4>\n\n<ol>\n<li>Go to <strong>WordPress Admin \u2192 Plugins \u2192 Add New<\/strong>.<\/li>\n<li>Search for <strong>GST Report for WooCommerce<\/strong>.<\/li>\n<li>Click <strong>Install Now<\/strong>, then <strong>Activate<\/strong>.<\/li>\n<li>The Setup Wizard will launch automatically \u2014 follow the 3 steps to verify your store configuration.<\/li>\n<\/ol>\n\n<h4>Manual Installation<\/h4>\n\n<ol>\n<li>Download the plugin zip file.<\/li>\n<li>Go to <strong>WordPress Admin \u2192 Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>.<\/li>\n<li>Choose the zip file and click <strong>Install Now<\/strong>.<\/li>\n<li>Activate the plugin. The Setup Wizard will launch automatically.<\/li>\n<\/ol>\n\n<h4>After Activation<\/h4>\n\n<ul>\n<li>The Setup Wizard checks HSN codes on your products, your GST tax rates, and whether PDF Invoices &amp; Packing Slips is correctly configured.<\/li>\n<li>You can re-run the wizard anytime from <strong>WordPress Admin \u2192 GST Report Setup<\/strong>.<\/li>\n<li>The dashboard is available at <strong>WordPress Admin \u2192 GST Report<\/strong>.<\/li>\n<\/ul>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WordPress 5.9 or higher<\/li>\n<li>WooCommerce 5.0 or higher<\/li>\n<li>PHP 7.4 or higher<\/li>\n<li>WooCommerce tax rates configured (18% on the Standard class; a tax class containing <code>5<\/code> for 5% GST items)<\/li>\n<li><strong><a href=\"https:\/\/wordpress.org\/plugins\/woocommerce-pdf-invoices-packing-slips\/\">PDF Invoices &amp; Packing Slips for WooCommerce<\/a><\/strong> \u2014 required for the Invoice button. Set <strong>Document link access type<\/strong> to <strong>Full<\/strong> in WooCommerce \u2192 PDF Invoices \u2192 Debug for invoice links to open without login.<\/li>\n<\/ul>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20the%20plugin%20work%20right%20after%20activation%3F\"><h3>Does the plugin work right after activation?<\/h3><\/dt>\n<dd><p>Yes. The Setup Wizard runs automatically on first activation and guides you through three checks: HSN codes, GST tax rates, and PDF Invoices plugin. After completing the wizard, the GST dashboard is ready to use.<\/p><\/dd>\n<dt id=\"how%20does%20the%20plugin%20determine%20cgst%2Fsgst%20vs%20igst%3F\"><h3>How does the plugin determine CGST\/SGST vs IGST?<\/h3><\/dt>\n<dd><p>The plugin reads the billing state of each order. If the billing state is <strong>TN<\/strong> (Tamil Nadu), the tax is split equally as CGST + SGST (intra-state). All other billing states are treated as IGST (inter-state). To change the home state, edit the <code>is_tn()<\/code> method in <code>includes\/class-gst-calculator.php<\/code>.<\/p><\/dd>\n<dt id=\"how%20do%20i%20set%20the%20hsn%20code%20for%20my%20products%3F\"><h3>How do I set the HSN code for my products?<\/h3><\/dt>\n<dd><p>Go to <strong>Products \u2192 Edit Product<\/strong> and add a custom field with the key <code>hsn<\/code> (or <code>_hsn_code<\/code>) and the HSN code as the value. Alternatively, add a product attribute whose name contains \"HSN\" (e.g. \"HSN Code\", \"HSN\/SAC\"). The plugin checks variations first, then the parent product.<\/p><\/dd>\n<dt id=\"how%20do%20i%20mark%20a%20product%20as%205%25%20gst%3F\"><h3>How do I mark a product as 5% GST?<\/h3><\/dt>\n<dd><p>Assign a WooCommerce tax class whose name contains <code>5<\/code> (e.g. \"GST 5%\", \"5 Percent\") to the product. The default tax class and all other classes are treated as 18% GST.<\/p><\/dd>\n<dt id=\"the%20invoice%20button%20is%20not%20working.%20what%20should%20i%20do%3F\"><h3>The Invoice button is not working. What should I do?<\/h3><\/dt>\n<dd><ol>\n<li>Make sure <strong>PDF Invoices &amp; Packing Slips for WooCommerce<\/strong> is installed and active.<\/li>\n<li>Go to <strong>WooCommerce \u2192 PDF Invoices \u2192 Debug \u2192 File System &amp; Access<\/strong>.<\/li>\n<li>Set <strong>Document link access type<\/strong> to <strong>Full<\/strong> and save.<\/li>\n<li>Invoice buttons will now open PDF invoices in a new tab directly from the GST dashboard.<\/li>\n<\/ol><\/dd>\n<dt id=\"does%20the%20plugin%20support%20woocommerce%20hpos%20%28high-performance%20order%20storage%29%3F\"><h3>Does the plugin support WooCommerce HPOS (High-Performance Order Storage)?<\/h3><\/dt>\n<dd><p>Yes. The plugin automatically detects whether HPOS is enabled and adjusts its SQL stats query between the <code>wc_orders<\/code> table (HPOS) and the classic <code>wp_posts<\/code> \/ <code>wp_postmeta<\/code> tables accordingly.<\/p><\/dd>\n<dt id=\"can%20i%20filter%20the%20excel%20export%20by%20date%20range%3F\"><h3>Can I filter the Excel export by date range?<\/h3><\/dt>\n<dd><p>Yes. Apply the date filters on the GST Report page, then click <strong>Export Excel<\/strong>. The exported <code>.xlsx<\/code> file will contain only the orders matching the active filter.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20work%20with%20variable%20products%3F\"><h3>Does the plugin work with variable products?<\/h3><\/dt>\n<dd><p>Yes. The HSN code lookup checks the specific variation first (more precise), then falls back to the parent product if no HSN is found on the variation.<\/p><\/dd>\n<dt id=\"can%20i%20search%20for%20a%20specific%20order%20in%20the%20dashboard%3F\"><h3>Can I search for a specific order in the dashboard?<\/h3><\/dt>\n<dd><p>Yes. Use the Search field to find orders by <strong>Order ID<\/strong> (numeric) or <strong>Billing Email<\/strong>. The search applies to all three tabs and to the Excel export.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20store%20any%20customer%20data%3F\"><h3>Does the plugin store any customer data?<\/h3><\/dt>\n<dd><p>No. The plugin only reads WooCommerce order and product data that already exists in your database. It does not create, modify, or transmit any customer data.<\/p><\/dd>\n<dt id=\"is%20the%20plugin%20compatible%20with%20multisite%3F\"><h3>Is the plugin compatible with multisite?<\/h3><\/dt>\n<dd><p>The plugin is designed for single-site WooCommerce installations. Multisite compatibility has not been tested.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.1.0<\/h4>\n\n<ul>\n<li>Added: Plugin icon and banner published on the WordPress.org directory.<\/li>\n<li>Improved: Setup Wizard now more clearly guides new users through HSN, GST rate, and PDF invoice configuration.<\/li>\n<li>Improved: Invoice URL generation uses per-order WooCommerce order key \u2014 no global key configuration required.<\/li>\n<li>Improved: WCPDF invoice number shown in the Inv. No column when available; falls back to sequential order number.<\/li>\n<li>Improved: Variation product HSN lookup uses on-demand wc_get_product() with static cache for accuracy and performance.<\/li>\n<\/ul>\n\n<h4>2.0.8<\/h4>\n\n<ul>\n<li>Fixed: Renamed all plugin classes to use the GST_Report_ prefix to meet WordPress.org naming standards.<\/li>\n<li>Added: Requires Plugins header declaring WooCommerce as a dependency.<\/li>\n<li>Fixed: HSN code now correctly resolved for product variations via on-demand wc_get_product() lookup with static cache.<\/li>\n<li>Fixed: Fatal error during Excel export caused by calling object methods on plain strings returned by WC_Product_Variation::get_attributes().<\/li>\n<li>Added: Invoice number column now shows WPO WCPDF invoice number when available, falling back to sequential order number.<\/li>\n<\/ul>\n\n<h4>2.0.4<\/h4>\n\n<ul>\n<li>Fixed: Invoice access key now read automatically from each order using <code>$order-&gt;get_order_key()<\/code> \u2014 matches the WPO WCPDF \"Full\" access type URL format (<code>wc_order_XXXXX<\/code>). No manual key entry needed.<\/li>\n<li>Fixed: Wizard step 4 now checks \"Document link access type\" setting and guides user to set it to Full if needed.<\/li>\n<li>Fixed: Removed crash-prone global access key detection via WPO_WCPDF PHP object.<\/li>\n<li>Fixed: Wizard simplified \u2014 no manual key input field; keys are per-order and automatic.<\/li>\n<\/ul>\n\n<h4>2.0.3<\/h4>\n\n<ul>\n<li>Fixed: Fatal error when accessing wizard step 4 \u2014 <code>$obj-&gt;settings-&gt;debug<\/code> accessed without null check causing crash on PHP 8.<\/li>\n<li>Fixed: Added <code>try\/catch \\Throwable<\/code> around all WPO WCPDF detection code.<\/li>\n<li>Fixed: Removed auto-save side effect from render method.<\/li>\n<\/ul>\n\n<h4>2.0.2<\/h4>\n\n<ul>\n<li>Added: Setup Wizard launches automatically on first plugin activation.<\/li>\n<li>Added: Wizard Step 1 \u2014 Welcome screen with Setups Works branding.<\/li>\n<li>Added: Wizard Step 2 \u2014 HSN code check scans all products and lists missing ones with edit links.<\/li>\n<li>Added: Wizard Step 3 \u2014 GST tax rate check verifies 18% and 5% rates are configured in WooCommerce.<\/li>\n<li>Added: Wizard Step 4 \u2014 PDF Invoices plugin check and access key configuration.<\/li>\n<li>Added: Invoice buttons open in a new tab (<code>target=\"_blank\"<\/code>).<\/li>\n<li>Fixed: Orders tab invoice URL was still pointing to the removed internal invoice handler.<\/li>\n<\/ul>\n\n<h4>2.0.1<\/h4>\n\n<ul>\n<li>Fixed: Escaped <code>$class<\/code> in tab navigation with <code>esc_attr()<\/code>.<\/li>\n<li>Fixed: Wrapped <code>paginate_links()<\/code> output with <code>wp_kses_post()<\/code>.<\/li>\n<li>Fixed: Replaced <code>date()<\/code> with <code>wp_date()<\/code> for timezone-safe Excel filename.<\/li>\n<li>Fixed: Replaced <code>tempnam()<\/code> with <code>wp_tempnam()<\/code> and <code>unlink()<\/code> with <code>wp_delete_file()<\/code>.<\/li>\n<li>Fixed: Added <code>wp_unslash()<\/code> to all <code>$_GET<\/code> reads before sanitization.<\/li>\n<li>Fixed: Added result caching to stats SQL query via <code>wp_cache_get()<\/code> \/ <code>wp_cache_set()<\/code>.<\/li>\n<li>Fixed: Replaced <code>phpcs:ignore<\/code> with <code>phpcs:disable<\/code>\/<code>phpcs:enable<\/code> blocks to cover multiline SQL queries.<\/li>\n<li>Fixed: Reduced plugin tags to the WordPress.org maximum of 5.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Complete rewrite \u2014 native PHP, direct DB queries, no JavaScript frameworks, no REST API.<\/li>\n<li>Added HPOS (High-Performance Order Storage) compatibility with automatic detection.<\/li>\n<li>Added 5% GST rate support alongside 18% \u2014 detected via tax class name.<\/li>\n<li>Added Excel (.xlsx) export using a zero-dependency PHP XLSX writer.<\/li>\n<li>Added PDF invoice button (via WooCommerce PDF Invoices &amp; Packing Slips plugin).<\/li>\n<li>Added Products tab with thumbnail, SKU, HSN code, price, stock, and GST rate.<\/li>\n<li>Added Orders tab with card-based view and per-order GST breakdown.<\/li>\n<li>Added HSN lookup across product meta, attributes, and order-item meta.<\/li>\n<li>Added SQL-based stats aggregation (no N+1 queries).<\/li>\n<li>Added nonce protection on all export and download actions.<\/li>\n<\/ul>","raw_excerpt":"A native PHP GST dashboard for WooCommerce \u2014 CGST\/SGST\/IGST breakdown, Excel export, and PDF tax invoices. No JavaScript frameworks, no REST API.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/310598","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=310598"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/nitheeshdr"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=310598"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=310598"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=310598"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=310598"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=310598"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=310598"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}