GST India

GST Invoice Format 2026: Free Excel, Word, PDF & ERPNext Templates (All Mandatory Fields)

Every mandatory field on a GST tax invoice under Rule 46, with free Excel, Word and PDF templates you can use today — plus a copy-paste ERPNext print…

MManojAugust 6, 202611 min read
GST & Compliance#gst-india#compliance#templates#erpnext
Share

A GST invoice goes invalid for reasons that have nothing to do with tax maths. A serial number over 16 characters. A missing place of supply. A 4-digit HSN where 6 digits are required. The GST invoice format is defined field-by-field in Rule 46 of the CGST Rules, and most templates floating around cover half of it. This post ships the whole thing: free Excel, Word and PDF templates with every mandatory field placed, plus a copy-paste ERPNext print format with the signed e-invoice QR wired in. The serial-number and HSN rules that decide whether your buyer's ITC survives scrutiny are here too.

The most common invoice defect we see in ERPNext audits is not wrong tax — it is a missing Rule 46 field nobody knew was mandatory. I am Manoj, ERPNext and Frappe implementation lead at MithTech in Bengaluru. The templates below are the layout we deploy for clients, minus the branding.

Where do you get the templates?

Three files, every Rule 46 field placed, no email wall. The Excel version computes taxable value, CGST/SGST/IGST splits and the grand total for you.

DownloadTemplate Downloadslink

Free GST invoice templates for 2026 — Excel with live formulas, an editable Word layout, and a print-ready PDF, each with all mandatory fields and an IRN/QR placeholder.

Every mandatory field, itemised

The GST invoice format is not a design question — it is a checklist in Rule 46 of the CGST Rules. The table is the whole rule in one scan:

17 rows · click a column to sort

FieldClause
Supplier name, address, GSTIN46(a)Every invoice
Serial number — consecutive, unique per FY, ≤16 chars, alphanumeric + "-" "/"46(b)Every invoice
Date of issue46(c)Every invoice
Recipient name, address, GSTIN46(d)Registered (B2B) buyers
Recipient name, address, state46(e)Unregistered buyers, value ≥ ₹50,000
HSN / SAC code46(g)4 digits ≤ ₹5cr AATO (B2B); 6 digits above
Description of goods / services46(h)Every invoice
Quantity + unit (UQC)46(i)Goods
Total value46(j)Every invoice
Taxable value after discount46(k)Every invoice
Tax rate and amount — CGST, SGST/UTGST, IGST, cess shown separately46(l), 46(m)Every taxable invoice
Place of supply + state name46(n)Inter-state supplies
Delivery address, if different46(o)Where it differs
Reverse-charge statement46(p)RCM supplies
Signature / digital signature46(q)Waived for e-invoices with IRN + QR
Export / SEZ endorsement wording46, provisoExports and SEZ supplies
IRN + signed QR code48(4)e-invoice-mandated businesses

Pick your invoice type below and the checker collapses that table to exactly what your document needs:

InteractiveMandatory Field Checkerlink

Choose B2B, B2C, export, SEZ or reverse-charge — see the exact Rule 46 fields your invoice must carry, with clause references.

Supplier name, address, GSTIN
Rule 46(a)
Serial number — unique per FY, ≤16 chars, alphanumeric + - /
Rule 46(b)
Date of issue
Rule 46(c)
Recipient name, address, GSTIN
Rule 46(d)
HSN / SAC code (digits per turnover — see picker below)
Rule 46(g)
Description of goods / services
Rule 46(h)
Quantity + UQC (goods)
Rule 46(i)
Total value
Rule 46(j)
Taxable value after discount
Rule 46(k)
CGST + SGST rates & amounts, shown separately
Rule 46(l,m)
Delivery address, if differentOnly when it differs from the place of supply
Rule 46(o)
Signature / digital signatureNot required on an e-invoice issued with IRN + signed QR
Rule 46(q)
IRN + signed QR (if e-invoicing applies to you)AATO > ₹5 crore — see our e-invoice limit guide
Rule 48(4)

13 fields for this context. Rule references are CGST Rules, 2017 — paraphrased; read the rule text with your CA for boundary cases.

What are the serial number? rules?

Rule 46(b) is the clause businesses break most often without noticing. The serial number must be consecutive, unique for the financial year, 16 characters or fewer, and contain only letters, numerals, and the characters "-" and "/". Count yours: INV/2026-27/KA/00001 is 20 characters — non-compliant on length alone, before anyone checks uniqueness. The fix costs nothing at FY start: a compact series like SINV-2627-00001 (15 chars) covers ten thousand invoices with room to spare. The fresh-series-per-FY requirement, and how ERPNext's counter actually resets, are covered in our April 2026 GST changes post. The short version: Frappe keys the counter on the series prefix, so a new FY prefix restarts numbering automatically.

How is HSN digits done by turnover?

The HSN column is mandatory everywhere; how many digits depends on your aggregate annual turnover under Notification 78/2020 – Central Tax:

CalculatorHSN Digit Pickerlink

Enter your AATO and invoice type — get the 4-digit or 6-digit HSN verdict under Notification 78/2020.

6-digit HSN (mandatory)

Above ₹5 crore AATO, Notification 78/2020 – Central Tax requires 6-digit HSN/SAC on every invoice, B2B and B2C alike. Certain notified goods (including chemicals) need 8 digits regardless of turnover, and exports conventionally carry 8 digits for customs alignment.

In ERPNext the HSN travels with the item, not the invoice. india_compliance adds gst_hsn_code to Item and fetches it onto every invoice line (custom_fields.py:686, fetched from item_code.gst_hsn_code). Fix the master once and every future document inherits it. An item master with blank or 2-digit HSNs is the single most common reason GSTR-1 HSN summaries fail validation.

Exports, SEZ, reverse charge and bills of supply

Four variants change the format, and the checker above handles each. The details worth stating in prose:

  • Exports and SEZ supplies carry an endorsement in fixed wording. With IGST: "SUPPLY MEANT FOR EXPORT ON PAYMENT OF INTEGRATED TAX". Under LUT: "…UNDER BOND OR LETTER OF UNDERTAKING WITHOUT PAYMENT OF INTEGRATED TAX". The LUT itself renews every April — that trap is in the FY cutover post.
  • Reverse charge invoices must say so on their face (Rule 46(p)). In ERPNext this is the is_reverse_charge flag, and the print format below prints the statement from it.
  • Bills of supply replace tax invoices for exempt supplies and composition dealers. Same skeleton, no tax columns. Composition dealers add "composition taxable person, not eligible to collect tax on supplies".
  • e-Invoices additionally carry the IRN and the IRP's signed QR. Whether that applies to you is a turnover question — the ₹5 crore rule and its exemptions have their own post.

The ERPNext print format

If you run ERPNext, the Excel and Word files above are the wrong tool — the invoice should render from live data. Two honest facts first. The india_compliance app already ships stock formats — GST Tax Invoice, e-Invoice, GST POS Invoice (india_compliance/gst_india/print_format/, checked at v16.6.0) — and they are Rule 46-complete. Use them if you want zero maintenance. The custom format below exists for the other case: you want your branding, your layout, and control over what prints — without losing a single mandatory field.

Code recipeERPNext Print Formatlink

A complete, Rule 46-compliant Jinja print format for Sales Invoice — plus the signed e-invoice QR block, a five-step install, and optional print CSS.

Full print format — paste into a Custom Format

{#- GST Tax Invoice - custom Print Format for Sales Invoice.
    Needs the india_compliance app (company_gstin, billing_address_gstin,
    place_of_supply, taxable_value, gst_hsn_code, irn fields).
    Create: Print Format > New > Custom Format = ON > paste into HTML. -#}

<div style="font-size:12px">
  <div style="display:flex;justify-content:space-between">
    <div>
      <h2 style="margin:0">{{ doc.company }}</h2>
      <div>{{ doc.company_address_display or "" }}</div>
      <b>GSTIN:</b> {{ doc.company_gstin or "" }}
    </div>
    <div style="text-align:right">
      <h3 style="margin:0">TAX INVOICE</h3>
      <div>(Original for Recipient)</div>
    </div>
  </div>

  <table class="table table-bordered" style="margin-top:8px">
    <tr>
      <td><b>Invoice No.</b> {{ doc.name }}</td>
      <td><b>Date</b> {{ doc.get_formatted("posting_date") }}</td>
      <td><b>Place of Supply</b> {{ doc.place_of_supply or "" }}</td>
      <td><b>Reverse Charge</b> {{ "Yes" if doc.is_reverse_charge else "No" }}</td>
    </tr>
    {%- if doc.irn %}
    <tr><td colspan="4"><b>IRN:</b> {{ doc.irn }}</td></tr>
    {%- endif %}
  </table>

  <table class="table table-bordered">
    <tr><th style="width:50%">BILL TO</th><th>SHIP TO</th></tr>
    <tr>
      <td>
        <b>{{ doc.customer_name }}</b><br>
        {{ doc.address_display or "" }}
        <b>GSTIN:</b> {{ doc.billing_address_gstin or "Unregistered" }}
      </td>
      <td>{{ doc.shipping_address or doc.address_display or "" }}</td>
    </tr>
  </table>

  <table class="table table-bordered">
    <tr>
      <th>#</th><th>Item</th><th>HSN/SAC</th><th>Qty</th><th>UOM</th>
      <th class="text-right">Rate</th><th class="text-right">Taxable Value</th>
    </tr>
    {%- for item in doc.items %}
    <tr>
      <td>{{ loop.index }}</td>
      <td>{{ item.item_name }}</td>
      <td>{{ item.gst_hsn_code or "" }}</td>
      <td>{{ item.qty }}</td>
      <td>{{ item.uom }}</td>
      <td class="text-right">{{ item.get_formatted("rate") }}</td>
      <td class="text-right">{{ item.get_formatted("taxable_value") }}</td>
    </tr>
    {%- endfor %}
  </table>

  <table class="table table-bordered">
    {%- for row in doc.taxes %}
    <tr>
      <td>{{ row.description }}</td>
      <td class="text-right" style="width:20%">{{ row.get_formatted("tax_amount") }}</td>
    </tr>
    {%- endfor %}
    {%- if doc.rounding_adjustment %}
    <tr><td>Round off</td>
        <td class="text-right">{{ doc.get_formatted("rounding_adjustment") }}</td></tr>
    {%- endif %}
    <tr>
      <td><b>GRAND TOTAL</b></td>
      <td class="text-right"><b>{{ doc.get_formatted("rounded_total") or doc.get_formatted("grand_total") }}</b></td>
    </tr>
    <tr><td colspan="2"><b>In words:</b> {{ doc.in_words }}</td></tr>
  </table>

  {%- if doc.gst_category in ("Overseas", "SEZ") %}
  <p><b>
    {%- if doc.is_export_with_gst -%}
      SUPPLY MEANT FOR EXPORT / SEZ ON PAYMENT OF INTEGRATED TAX
    {%- else -%}
      SUPPLY MEANT FOR EXPORT / SEZ UNDER BOND OR LETTER OF UNDERTAKING
      WITHOUT PAYMENT OF INTEGRATED TAX
    {%- endif -%}
  </b></p>
  {%- endif %}

  <div style="display:flex;justify-content:space-between;margin-top:16px">
    <div style="max-width:60%">
      <i>Declaration: We declare that this invoice shows the actual price of
      the goods/services described and that all particulars are true and
      correct.</i>
    </div>
    <div style="text-align:center">
      <b>For {{ doc.company }}</b>
      <div style="height:56px"></div>
      Authorised Signatory
    </div>
  </div>
</div>

Field names verified against india_compliance v16.6.0 on ERPNext v16.28.0. The QR block needs an IRN-generating instance — it renders nothing on invoices without one, by design.

Every field it reads is real and verified. company_gstin, billing_address_gstin, place_of_supply and is_reverse_charge come from india_compliance's custom fields. Per-item taxable_value (custom_fields.py:710) and gst_hsn_code (:686) carry the line-level compliance data, and irn (:1433) feeds the e-invoice row. The QR block uses the exact idiom of the stock e-Invoice format (e_invoice.html, lines 7–93). It fetches the signed payload from the e-Invoice Log and renders it through get_qr_code(), which india_compliance whitelists for print Jinja.

Pre-flight: the format is only as compliant as your masters

A perfect template prints blank boxes if the data behind it is missing. Before rolling this out, verify three masters. First: company and customer addresses carry GSTINs. company_gstin and billing_address_gstin are fetched from linked Address records — a missing GSTIN prints "Unregistered" on a B2B invoice, a Rule 46(d) defect. Second: item masters carry HSN codes at the digit-length your turnover requires. Third: GST Settings reflects your e-invoice status. The IRN row and QR only render when india_compliance generates them, and it only does that when e-invoicing is enabled from the correct applicable-from date.

Design once, lock it

Invoice formats drift. Someone adds a marketing tagline. Someone else deletes the "reverse charge" line because it "never applies to us". Eight months later an auditor finds a quarter of non-compliant prints. The governance that prevents it:

  • Accounts owns the format, not sales and not the designer. Layout requests route through whoever answers to the auditor.
  • The format lives in git. Print Formats are database records — export them as fixtures from a small custom app (bench export-fixtures). Changes become commits with authors and dates instead of anonymous edits.
  • One format per document variant, not one per person's taste. Tax invoice, bill of supply, export invoice — three formats, three names, defaults set per use, no "final-v2-new".

Adopt a format — stock or the one above

Zero-maintenance: india_compliance's stock GST Tax Invoice. Branded: the custom Jinja format from the recipe, installed as a new Print Format with Custom Format on.

Verify masters before the first print

Address GSTINs, item HSN digit-length, GST Settings applicability. The pre-flight callout above is the three-line audit.

Print every variant you actually issue

Intra-state, inter-state, export under LUT, reverse charge. Check each against the field checker — variants fail individually, not together.

Set defaults and remove the alternatives

Default the format on Print Settings (or per customer where needed), and disable retired formats so nobody prints the 2023 layout by accident.

Export as fixtures

bench --site yoursite export-fixtures with Print Format in a custom app's fixtures list. The format now migrates, moves and rolls back with git.

What should your format policy cover?

Invoice Format Policy (draft — for CA / auditor review): The company maintains exactly three sales print formats — Tax Invoice, Bill of Supply, Export Invoice — owned by the finance controller. Format changes are made only via fixture-tracked commits, reviewed by accounts before deployment. Serial series are ≤15 characters, FY-prefixed, and created each 31 March per the FY-cutover runbook. Item masters are audited quarterly for HSN digit-length against current AATO; address masters are audited for GSTINs on every new B2B customer. Any invoice printed on a non-standard format is treated as a compliance incident, not a formatting preference. Ratify with your CA — businesses issuing self-billed or ISD documents need two more formats and matching rules.

Should you fix the format now, or at the next audit?

Fix this weekGenuinely fine as-is
Serial numbers over 16 characters, or repeating across FYsSeries like SINV-2627-00001 — compliant with headroom
B2B prints showing 'Unregistered' because address GSTINs are blankGSTINs maintained on every registered customer's address
4-digit HSNs after crossing ₹5 crore AATO6-digit HSNs on item masters, verified this FY
e-invoice business printing invoices without IRN + signed QRQR rendered from the e-Invoice Log on every applicable print

FAQ: what do people ask most?

+What details are mandatory on a GST invoice?

Rule 46 requires roughly sixteen fields. The core set: supplier name, address and GSTIN, a compliant serial number and date, recipient details (with GSTIN for B2B), HSN/SAC codes, description, quantity and unit. Then the money fields: total and taxable values, with tax shown separately by type and rate. Finally the conditionals — place of supply for inter-state sales, reverse-charge status, and a signature unless the document is an e-invoice with IRN and QR. The table and checker in this post map each to its clause.

+Is there a government-prescribed GST invoice design?

No. GST law prescribes content, not layout — any design works if every Rule 46 field is present and legible. That is why the templates here focus on field completeness first and styling second.

+Can I issue a handwritten GST invoice?

Yes — the rules do not require software, only the mandatory fields, serial discipline and copies (triplicate for goods, duplicate for services). In practice, businesses above ₹5 crore AATO cannot stay handwritten because the e-invoice mandate requires IRP-reported, QR-bearing documents.

+How long can a GST invoice number be?

Sixteen characters maximum, using letters, numerals, hyphen and slash only. It must be consecutive and unique within the financial year. Longer series — common in multi-branch formats — are non-compliant even when everything else is perfect.

+When do I need 6-digit HSN codes?

When aggregate annual turnover in the preceding financial year exceeded ₹5 crore — 6 digits on every invoice, B2B and B2C. At or below ₹5 crore, 4 digits are mandatory on B2B documents and optional on B2C. Certain notified goods require 8 digits regardless.

+What happens if my invoice format is missing a mandatory field?

The document risks not being a valid tax invoice. That threatens your buyer's input tax credit, and Section 122 exposes you to per-document penalties — up to ₹25,000 for incorrect particulars. Defective formats multiply: one wrong template becomes hundreds of defective invoices per month until someone notices.

Does ERPNext come with a GST invoice format built in?. Yes — the india_compliance app ships stock GST Tax Invoice, e-Invoice and GST POS Invoice print formats, and they cover Rule 46. The custom format in this post is for businesses that want their own branding and layout control while keeping every mandatory field.

Which ERPNext version does this post apply to?. Field names and the QR mechanism are verified against ERPNext v16.28.0 with india_compliance v16.6.0. The same fields exist in v15. Rule 46 itself is software-independent — the checklist applies to whatever you print from.

What is the bottom line?

A compliant GST invoice format is a solved problem — Rule 46 is a fixed checklist, and every field on it is in the templates and print format above. What keeps it solved is ownership: one format, one owner, version-controlled, with masters audited so the fields never print blank. Download the file that fits, or let your ERPNext instance render it from live data — either way, stop designing invoices and start printing compliant ones.

Want your invoice format audited and branded?

We audit your current invoice prints against Rule 46, brand the print format to your identity, wire in the e-invoice QR, and leave the whole thing fixture-tracked — one fixed-scope engagement.

Now work out what this costs for your business

Answer six questions about headcount, modules and locations, and get a three-year cost breakdown — implementation, hosting and support, with no licence fees in the total.

M

Written by

Manoj

Founder of Mith Tech, an open-source ERP & automation studio. Hands-on ERPNext/Frappe implementation across multi-branch, multi-warehouse Indian operations — GST/TDS/PT compliance, branch-level permissions, and custom Frappe apps that give management real-time visibility.

Free · By email

Get practical ERPNext & automation guides

New implementation guides, cost breakdowns and open-source tips for Indian businesses — occasionally, straight to your inbox. No spam.

Already a Mith Tech client?

Help the next operator choose.

Most teams evaluating ERPNext have no way to tell who actually delivers. If we’ve run an implementation for you, two lines on Google count for more than anything we can write about ourselves.

Leave a Google review

Only if we’ve actually worked together — Google filters reviews from non-customers, so an honest one is worth more than ten polite ones.

Keep reading

See what this looks like for your business

A 30-minute working session with a principal consultant. We pressure-test the architecture and outline the engagement model that fits your governance and procurement posture. You leave with a written brief.

0
Published on 6 August 2026

Manoj

Comments & ratings

No comments yet. Start a new discussion.