Free GST invoice generator

Create a GST tax invoice with the tax split worked out for you, and the amount written out in words. No sign-up, and no watermark.

  • No sign-up
  • No watermark
  • 10 free PDFs a day
pdfgen.com/tools/gst-invoice-generator

Add your logo

PNG, JPG or WebP

1Your business (supplier)
2Customer (bill to)
3Invoice details
4Items

Grand total ₹1,77,000.00

5Bank details
6Declaration

Live preview

Grand total ₹1,77,000.00

Free for up to 10 PDFs a day. Includes a small “Made with PDFgen” line at the foot of each page.

Your GST invoice in three steps

  1. NT/2026-27/0458

    Step 1

    Fill in your details

    Add your logo, the GST invoice details and each item. The page updates as you type.

  2. ₹1,77,000.00

    Step 2

    Check the preview

    What you see is what you get, and totals are worked out for you.

  3. PDF

    gst-invoice.pdf

    Step 3

    Download the PDF

    Download your GST invoice, ready to send or print.

Anatomy of a GST invoice

Everything that belongs on the page, and where it goes.

How GST is split on an invoice

The split depends on where the supply takes place. When the supplier’s state and the place of supply are the same, the supply is intra-state and tax is divided equally into CGST and SGST. When they differ, it is inter-state and the full rate is charged as IGST.

This generator compares the two states you choose and applies the right treatment to every line. An 18% item within Karnataka shows 9% CGST and 9% SGST, while the same item sold into Maharashtra shows 18% IGST.

This tool creates the invoice document only. Businesses covered by e-invoicing must also report invoices to the Invoice Registration Portal to get an IRN, which this tool does not do. Check the rules that apply to you with your accountant.

Make every GST invoice automatic

This request creates the document in the form above, and it updates as you type. Connect it to your app or order system and each GST invoice makes itself.

  • The same template, filled from your own data
  • A PDF back from a single POST request
  • No browsers or servers to run yourself
curl -X POST https://pdfgen.com/api/v1/generate \
-H "Authorization: Bearer pdfg_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"data": {
"supplier": {
"name": "Nimbus Technologies Pvt. Ltd.",
"address": "4th Floor, Prestige Tower, MG Road\nBengaluru, Karnataka 560001",
"gstin": "29ABCDE1234F1Z5",
"state": "Karnataka",
"stateCode": "29"
},
"buyer": {
"name": "Saffron Retail LLP",
"address": "22, 80 Feet Road, Koramangala\nBengaluru, Karnataka 560034",
"gstin": "29AAKFS1234K1Z2",
"state": "Karnataka",
"stateCode": "29"
},
"invoiceNumber": "NT/2026-27/0458",
"reverseCharge": "No",
"bank": {
"name": "HDFC Bank",
"accountNumber": "50200012345678",
"ifsc": "HDFC0001234",
"branch": "MG Road, Bengaluru"
},
"declaration": "We declare that this invoice shows the actual price of the goods and services described and that all particulars are true and correct.",
"invoiceDate": "2026-11-03",
"placeOfSupply": "Karnataka (29)",
"interState": false,
"currency": "INR",
"locale": "en-IN",
"items": [
{
"sl": 1,
"description": "Retail POS software, annual subscription",
"hsn": "997331",
"quantity": 1,
"rate": 120000,
"taxableValue": 120000,
"igstRate": 18,
"igst": 0,
"cgstRate": 9,
"cgst": 10800,
"sgstRate": 9,
"sgst": 10800,
"total": 141600
},
{
"sl": 2,
"description": "On-site setup and staff training (days)",
"hsn": "998313",
"quantity": 2,
"rate": 15000,
"taxableValue": 30000,
"igstRate": 18,
"igst": 0,
"cgstRate": 9,
"cgst": 2700,
"sgstRate": 9,
"sgst": 2700,
"total": 35400
}
],
"totals": {
"taxableValue": 150000,
"cgst": 13500,
"sgst": 13500,
"igst": 0,
"grandTotal": 177000
},
"amountInWords": "Indian Rupees One Lakh Seventy-Seven Thousand Only"
},
"format": "A4",
"engine": "handlebars",
"html": "<link href=\"https://fonts.googleapis.com/css2?family=Noto+Sans:wght@400;600;700;800&display=swap\" rel=\"stylesheet\">\n<div style=\"max-width:780px;margin:0 auto;padding:40px;font-family:'\''Noto Sans'\'',-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;color:#111827;font-size:12.5px;\">\n <div style=\"text-align:center;margin-bottom:16px;\">\n <h1 style=\"font-size:22px;font-weight:800;letter-spacing:3px;margin:0;\">TAX INVOICE</h1>\n <p style=\"margin:2px 0 0;font-size:11px;color:#6b7280;\">Original for recipient</p>\n </div>\n <table style=\"width:100%;border-collapse:collapse;font-size:inherit;line-height:inherit;\">\n <tr>\n <td style=\"width:58%;vertical-align:top;padding:12px;border:1px solid #d1d5db;\">\n {{#if logo}}<img src=\"{{logo}}\" alt=\"\" style=\"display:block;max-width:200px;max-height:56px;margin:0 0 10px;\">{{/if}}\n <p style=\"margin:0;font-size:16px;font-weight:800;\">{{supplier.name}}</p>\n <p style=\"margin:2px 0 0;color:#4b5563;white-space:pre-line;\">{{supplier.address}}</p>\n <p style=\"margin:6px 0 0;\">GSTIN: <strong>{{supplier.gstin}}</strong></p>\n <p style=\"margin:2px 0 0;\">State: {{supplier.state}} (Code {{supplier.stateCode}})</p>\n </td>\n <td style=\"vertical-align:top;padding:12px;border:1px solid #d1d5db;line-height:1.8;\">\n Invoice no. <strong>{{invoiceNumber}}</strong><br>\n Invoice date <strong>{{formatDate invoiceDate locale}}</strong><br>\n Place of supply <strong>{{placeOfSupply}}</strong><br>\n Reverse charge <strong>{{reverseCharge}}</strong>\n </td>\n </tr>\n <tr>\n <td colspan=\"2\" style=\"padding:12px;border:1px solid #d1d5db;\">\n <p style=\"margin:0 0 4px;font-size:11px;color:#6b7280;font-weight:700;text-transform:uppercase;letter-spacing:1px;\">Bill to</p>\n <p style=\"margin:0;font-weight:700;\">{{buyer.name}}</p>\n <p style=\"margin:2px 0 0;color:#4b5563;white-space:pre-line;\">{{buyer.address}}</p>\n <p style=\"margin:4px 0 0;\">{{#if buyer.gstin}}GSTIN: <strong>{{buyer.gstin}}</strong> &middot; {{/if}}State: {{buyer.state}} (Code {{buyer.stateCode}})</p>\n </td>\n </tr>\n </table>\n <table style=\"width:100%;border-collapse:collapse;margin-top:14px;font-size:11.5px;line-height:inherit;\">\n <thead>\n <tr style=\"background:#f3f4f6;\">\n <th style=\"padding:7px;border:1px solid #d1d5db;\">#</th>\n <th style=\"padding:7px;border:1px solid #d1d5db;text-align:left;\">Description</th>\n <th style=\"padding:7px;border:1px solid #d1d5db;\">HSN/SAC</th>\n <th style=\"padding:7px;border:1px solid #d1d5db;\">Qty</th>\n <th style=\"padding:7px;border:1px solid #d1d5db;text-align:right;\">Rate</th>\n <th style=\"padding:7px;border:1px solid #d1d5db;text-align:right;\">Taxable value</th>\n {{#if interState}}\n <th style=\"padding:7px;border:1px solid #d1d5db;text-align:right;\">IGST</th>\n {{else}}\n <th style=\"padding:7px;border:1px solid #d1d5db;text-align:right;\">CGST</th>\n <th style=\"padding:7px;border:1px solid #d1d5db;text-align:right;\">SGST</th>\n {{/if}}\n <th style=\"padding:7px;border:1px solid #d1d5db;text-align:right;\">Total</th>\n </tr>\n </thead>\n <tbody>\n {{#each items}}\n <tr>\n <td style=\"padding:7px;border:1px solid #d1d5db;text-align:center;\">{{sl}}</td>\n <td style=\"padding:7px;border:1px solid #d1d5db;\">{{description}}</td>\n <td style=\"padding:7px;border:1px solid #d1d5db;text-align:center;\">{{hsn}}</td>\n <td style=\"padding:7px;border:1px solid #d1d5db;text-align:center;\">{{quantity}}</td>\n <td style=\"padding:7px;border:1px solid #d1d5db;text-align:right;\">{{formatCurrency rate ../currency ../locale}}</td>\n <td style=\"padding:7px;border:1px solid #d1d5db;text-align:right;\">{{formatCurrency taxableValue ../currency ../locale}}</td>\n {{#if ../interState}}\n <td style=\"padding:7px;border:1px solid #d1d5db;text-align:right;\">{{igstRate}}%<br>{{formatCurrency igst ../currency ../locale}}</td>\n {{else}}\n <td style=\"padding:7px;border:1px solid #d1d5db;text-align:right;\">{{cgstRate}}%<br>{{formatCurrency cgst ../currency ../locale}}</td>\n <td style=\"padding:7px;border:1px solid #d1d5db;text-align:right;\">{{sgstRate}}%<br>{{formatCurrency sgst ../currency ../locale}}</td>\n {{/if}}\n <td style=\"padding:7px;border:1px solid #d1d5db;text-align:right;font-weight:700;\">{{formatCurrency total ../currency ../locale}}</td>\n </tr>\n {{/each}}\n </tbody>\n </table>\n <div style=\"display:flex;justify-content:space-between;gap:24px;margin-top:14px;\">\n <div style=\"flex:1;\">\n <p style=\"margin:0;font-size:11px;color:#6b7280;\">Amount chargeable (in words)</p>\n <p style=\"margin:2px 0 14px;font-weight:700;\">{{amountInWords}}</p>\n {{#if bank.name}}\n <p style=\"margin:0;font-size:11px;color:#6b7280;\">Bank details</p>\n <p style=\"margin:2px 0 0;line-height:1.6;\">{{bank.name}} &middot; A/c {{bank.accountNumber}}<br>IFSC {{bank.ifsc}} &middot; {{bank.branch}}</p>\n {{/if}}\n </div>\n <table style=\"min-width:250px;border-collapse:collapse;font-size:inherit;line-height:inherit;\">\n <tr><td style=\"padding:4px 0;color:#6b7280;\">Taxable value</td><td style=\"padding:4px 0;text-align:right;\">{{formatCurrency totals.taxableValue currency locale}}</td></tr>\n {{#if interState}}\n <tr><td style=\"padding:4px 0;color:#6b7280;\">IGST</td><td style=\"padding:4px 0;text-align:right;\">{{formatCurrency totals.igst currency locale}}</td></tr>\n {{else}}\n <tr><td style=\"padding:4px 0;color:#6b7280;\">CGST</td><td style=\"padding:4px 0;text-align:right;\">{{formatCurrency totals.cgst currency locale}}</td></tr>\n <tr><td style=\"padding:4px 0;color:#6b7280;\">SGST</td><td style=\"padding:4px 0;text-align:right;\">{{formatCurrency totals.sgst currency locale}}</td></tr>\n {{/if}}\n <tr style=\"border-top:2px solid #111827;\"><td style=\"padding:8px 0 0;font-weight:800;font-size:14px;\">Grand total</td><td style=\"padding:8px 0 0;text-align:right;font-weight:800;font-size:14px;\">{{formatCurrency totals.grandTotal currency locale}}</td></tr>\n </table>\n </div>\n <div style=\"display:flex;justify-content:space-between;align-items:flex-end;margin-top:32px;border-top:1px solid #e5e7eb;padding-top:12px;\">\n <p style=\"margin:0;max-width:400px;font-size:11px;color:#6b7280;\">{{declaration}}</p>\n <div style=\"text-align:right;font-size:12px;\">\n <p style=\"margin:0;\">For <strong>{{supplier.name}}</strong></p>\n <p style=\"margin:36px 0 0;color:#6b7280;\">Authorised signatory</p>\n </div>\n </div>\n</div>"
}' --output gst-invoice.pdf
200 OKapplication/pdf · gst-invoice.pdf

Questions, answered

The things people usually ask before they download.

When should I charge IGST instead of CGST and SGST?

Charge IGST when the supplier’s state and the place of supply are different. Charge CGST and SGST when they are the same. Pick the two states in the form and the invoice follows automatically.

Does this generator create an e-invoice with an IRN and QR code?

No. It creates a GST tax invoice as a PDF. If your business is covered by e-invoicing, you also need to register each invoice on the Invoice Registration Portal.

Can I invoice an unregistered customer?

Yes. Leave the customer GSTIN blank and the invoice shows only their state.

Are the GST rates filled in for me?

No. Enter the rate that applies to each item, because rates depend on the HSN or SAC code and change from time to time. Confirm yours with the official GST rate schedules or your accountant.

Is this GST invoice generator really free?

Yes. You can create up to 10 PDFs a day without an account or a credit card.

Will there be a watermark on my PDF?

No. Your document stays clean, with one small “Made with PDFgen” line at the foot of each page.

Do you store what I enter?

No. Your details are sent to our server to create the PDF and are not saved. The form lives in your browser, so copy anything you want to keep before leaving the page.

Can I create GST invoices automatically?

Yes. The API call further up this page produces the same GST invoice from your own data, so your app or order system can create them without anyone filling in a form.

Make this GST invoice your own

Match the template to your brand, then create one for every order or customer with a single API call.