GST India

E-Invoice Limit in India (2026): The ₹5 Crore Rule, 30-Day Window & Who's Exempt

The GST e-invoice limit has been ₹5 crore AATO since August 2023 — and it binds from the first FY you ever crossed it. Find your exact liability date…

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

The e-invoice limit in India is ₹5 crore of aggregate annual turnover. The part that catches businesses out: crossing it in any financial year since 2017-18 binds you permanently, even if turnover later falls. Every April the rule sweeps in another batch — cross ₹5 crore in FY 2025-26 and your B2B invoices need IRNs from 1 April 2026. This post pins the exact date your mandate began (or will begin). It also gives you the real exemption list, a calculator for what non-compliance is compounding to, and a copy-paste threshold watcher for ERPNext. This guide on e invoice limit is written for Indian SMEs, with code samples, ERPNext / Medusa recipes, and step-by-step fixes you can copy into a real project.

Half the calls we take about the e-invoice limit start with a buyer's accounts desk rejecting an invoice. I am Manoj, ERPNext and Frappe implementation lead at MithTech in Bengaluru — the liability-date conversation below is one we have with mid-market clients almost weekly.

How do you check your liability date?

Two inputs, one date. The finder walks the notification history and tells you when Rule 48(4) started applying to you — or how much runway you have left.

CalculatorLiability Start Finderlink

Enter your peak aggregate annual turnover and the FY you first crossed ₹5 crore — get the exact date the e-invoicing mandate attached to your PAN.

Liable since 1 Apr 2024 — ~28 months of non-compliance

Every B2B invoice issued without an IRN since 1 Apr 2024 is not a valid tax invoice under Rule 48(5), your buyers' input tax credit on those invoices is contestable, and Section 122 penalties apply per document. Use the exposure calculator below, then talk to your CA this week — not this quarter.

Governing notification: 10/2023 – Central Tax. Assumes turnover stayed above the tier once crossed — trajectory edge cases exist; confirm your exact start date with your CA.

The mechanics behind the result: the CBIC notifies threshold tiers under Rule 48(4) CGST. Each tier covers every registered person whose AATO exceeded it in any financial year from 2017-18 onward. Liability begins at the tier's effective date — or, if you crossed later, from the start of the next financial year. That is why a business that touched ₹6 crore once in FY 2019-20 and shrank back has been liable since 1 August 2023, whether it knew or not.

The limit's fall from ₹500 crore to ₹5 crore

E-invoicing arrived in October 2020 as a big-company obligation. It stopped being one in under three years.

InteractiveThreshold Timelinelink

The six notification tiers that took the e-invoice limit from ₹500 crore to ₹5 crore, with notification numbers.

From 1 Aug 2023: mandatory above ₹5 crore AATO

Notification 10/2023 – Central Tax. Businesses whose aggregate annual turnover exceeded ₹5 crore in any financial year from 2017-18 onward were pulled into Rule 48(4) from this date. This is the tier in force today — and each 1 April it sweeps in everyone who crossed ₹5 crore in the financial year just ended (crossed in FY 2025-26 → liable from 1 April 2026).

Six cuts in under three years, ₹500 crore → ₹5 crore. Verified 2026-08-06 — confirm the current tier at cbic-gst.gov.in before relying on it.

The same history as data, for the record:

1 Oct 2020₹500 crore61/2020 & 70/2020
1 Jan 2021₹100 crore88/2020
1 Apr 2021₹50 crore05/2021
1 Apr 2022₹20 crore01/2022
1 Oct 2022₹10 crore17/2022
1 Aug 2023₹5 crore10/2023

Two things follow from that table. First, the ₹5 crore tier is not a resting point. GST Council discussions have repeatedly floated going lower, and every systems decision should assume the floor drops again. Second, the annual sweep is mechanical. Per the April 2026 GST changes, a business that crossed ₹5 crore during FY 2025-26 is covered from 1 April 2026 — alongside a fresh document-series requirement for the new financial year.

What exactly counts as aggregate annual turnover?

Most self-misdiagnoses trace to computing the wrong number. AATO under Section 2(6) of the CGST Act is:

  • PAN-level — all GSTINs against the PAN, all states, aggregated. A Karnataka unit doing ₹3 crore and a Maharashtra unit doing ₹2.5 crore are one ₹5.5 crore business for this test.
  • Broader than taxable sales — it includes exempt supplies, exports, and inter-state transfers between your own registrations. It excludes inward supplies under reverse charge and the taxes themselves.
  • Tested against every FY from 2017-18 — the e-invoicing rules attach on a once-crossed-always-covered basis.

The GST portal publishes its own computed AATO for your PAN, with a facility to dispute it. Reconcile against that figure rather than your management accounts — the portal's number is the one the department acts on. Your CA owns the statutory computation. The threshold watcher below is a tripwire, not a substitute.

What is on the exemption list?

Exemptions are entity-category exclusions under Notification 13/2020 – Central Tax, as amended. Size does not enter into it — a ₹900 crore NBFC is out; a ₹6 crore auto-parts trader is in.

InteractiveExemption Explorerlink

Pick your entity category and see whether the Rule 48(4) exclusion covers you — including the SEZ unit vs developer trap.

Not excluded — threshold applies

No category exclusion applies — the ₹5 crore AATO threshold decides. Use the liability finder above; if you're over the line, every B2B invoice, credit note and debit note needs an IRN.

Exclusions per Notification 13/2020 – Central Tax as amended (23/2021 for government departments). Category descriptions are paraphrased — read the notification text with your CA for boundary cases.

Two boundary cases generate most of the confusion. An SEZ unit is excluded as a supplier — but a mainland business invoicing to an SEZ still needs an IRN on that zero-rated B2B supply. And government departments were excluded by Notification 23/2021 — but PSUs and government companies are ordinary registered persons who follow the threshold like everyone else.

What does ignoring it cost?

An invoice that Rule 48(4) covers and Rule 48(5) invalidates is not a tax invoice at all. The consequences stack.

CalculatorPenalty Exposure Calculatorlink

Invoices per month × average tax × months non-compliant — the statutory Section 122 exposure and the buyer ITC you're putting at risk.

Max statutory penalty · Sec 122(1)

64,80,000

18,000 per document (higher of ₹10,000 or 100% of tax) × 60/month × 6 months.

Buyer ITC you put at risk

64,80,000

Without an IRN your invoice is not a valid tax document — your customers' input credit on it is contestable. This number is why buyers stop buying before the department even calls.

Maximum exposure as the sections read — actual levies vary by officer, facts and voluntary-disclosure posture. A further ₹25,000 per incorrect invoice can apply. Get a CA on this before it compounds another quarter.

The statutory line is Section 122(1): an invoice issued without a valid document attracts the higher of ₹10,000 or 100% of the tax involved, per instance. Incorrect particulars add a further ₹25,000 exposure per invoice. But the number that moves boardrooms is the second card. Your customers' input tax credit sits on invoices that are legally not invoices. Procurement teams at larger buyers now run IRN verification on vendor bills — most laggards discover their liability date when a customer's accounts-payable desk rejects an invoice. Once that starts, the commercial damage outruns any penalty the department levies.

How ERPNext decides applicability

ERPNext's India localisation lives in the india_compliance app. Its applicability logic is worth reading because it encodes the law's structure directly. From india_compliance/gst_india/utils/e_invoice.py at line 529 (checked against india_compliance v16.6.0 / ERPNext v16.28.0):

def validate_e_invoice_applicability(doc, gst_settings=None, throw=True):
    ...
    if doc.company_gstin == doc.billing_address_gstin:
        return _throw(_("e-Invoice is not applicable for invoices with "
                        "same company and billing GSTIN"))            # :541

    if not (doc.place_of_supply == "96-Other Countries"
            or doc.billing_address_gstin):
        return _throw(_("e-Invoice is not applicable for B2C invoices"))  # :544
    ...
    applicability_date = get_e_invoice_applicability_date(doc.company,
                                                          gst_settings, throw)  # :563

Read bottom-up, that is the statute in code. B2C documents are refused at line 544 — unless they are exports, since 96-Other Countries supplies need IRNs despite having no buyer GSTIN. Self-billing between your own GSTINs is refused at line 541. Everything else gates on a per-company applicability date. That date comes from gst_settings.py:489get_e_invoice_applicability_date returns the global e_invoice_applicable_from, or a per-company override when Apply e-Invoice Only for Selected Companies is on. The 30-day reporting window is likewise a setting (e_invoice_reporting_time_limit_days), and the 24-hour IRN cancellation limit is enforced at e_invoice.py:592.

Pre-flight: three GST Settings fields decide everything

The app does exactly what its settings say — no more. Before your liability date, open GST Settings and verify three fields. Enable e-Invoice must be ticked. e-Invoice Applicable From must equal your statutory liability date — not the day someone got around to configuring it. And on a multi-company instance where only some companies are covered, Apply e-Invoice Only for Selected Companies must list each with its own date. A blank or late applicable-from date silently produces exactly the invalid invoices this post is about. ERPNext will not warn you about a mandate it was never told exists.

How do you switch it on in ERPNext?

Pin the liability date, then have your CA confirm it

The finder above gives you the notification-history answer. Your CA confirms the AATO computation — PAN-level, exempt supplies included — and reconciles it against the GST portal's own figure. Do not skip the reconciliation; the portal's number is the one the department acts on.

Configure GST Settings

Tick Enable e-Invoice, set e-Invoice Applicable From, and handle multi-company instances via the per-company table. This is the get_e_invoice_applicability_date machinery cited above — configuration, not code.

Register on the IRP, then sandbox-test the round trip

Create your API user on the Invoice Registration Portal, wire credentials into india_compliance, and run invoice → IRN → signed QR → cancellation in sandbox mode. The full mechanics — schema, QR verification, failure modes — are in our IRP round-trip guide.

Go live with IRN generation inside the submit flow

From the applicable date, an un-IRN'd B2B invoice should not be able to leave the building. india_compliance can generate the IRN at submit — keep it there rather than batching at day-end. A rejected batch at 6pm is a compliance incident, not a queue.

Watch the 30-day window if you're ₹10 crore plus

Above ₹10 crore AATO, IRNs must be reported within 30 days of document date — in force since 1 April 2025. Past the window, the IRP refuses the document entirely. The ageing report that keeps invoices off that cliff is in our deadlines post.

Sales bills, accounts owns the mandate

The failure mode in mid-size firms is organisational, not technical. Sales raises invoices all day, and nobody in that chair reads CBIC notifications. Accounts finds out at GSTR-1 filing time that a month of invoices went out un-IRN'd. The split that works:

  • Billing owns generation: IRN at submit, no exceptions, no "we'll regularise it Friday".
  • Accounts owns the mandate. They hold the liability date, review the threshold watcher's monthly output, and are the only role allowed to change GST Settings. Treat e_invoice_applicable_from like a posting-period control, not a preference.
  • A saved "Missing IRN" report — Sales Invoice, docstatus=1, billing_address_gstin set, irn empty, current month — is the daily reconciliation surface between the two roles. Zero rows is the only acceptable steady state.

How does the threshold watch work?

Everything above assumes you know where you stand relative to the line. Below ₹5 crore, that knowledge has a shelf life — one good quarter changes it. Four watchers, same guarantee: the mandate never arrives unannounced.

Code recipeThreshold Watch Recipeslink

Client script, server script, hooks.py and n8n variants of an AATO tripwire that alerts accounts before the ₹5 crore line is crossed — all running on your own infrastructure.

Sales Invoice · warn at submit

// Client Script · DocType: Sales Invoice · Apply To: Form
// Warns the biller when the company is near/over the e-invoice line but
// e-invoicing is still switched off in GST Settings. The AATO number is
// maintained by the server-side watcher (next tab) on a Company custom
// field: custom_aato_cr (Float).

frappe.ui.form.on("Sales Invoice", {
    validate(frm) {
        if (!frm.doc.billing_address_gstin) return; // B2C - out of scope

        frappe.db.get_single_value("GST Settings", "enable_e_invoice")
            .then((enabled) => {
                if (enabled) return;
                frappe.db.get_value("Company", frm.doc.company, "custom_aato_cr")
                    .then((r) => {
                        const aato = (r.message && r.message.custom_aato_cr) || 0;
                        if (aato >= 5) {
                            frappe.throw(
                                "AATO is " + aato + " cr but e-invoicing is DISABLED. " +
                                "This B2B invoice would be invalid under Rule 48(5). " +
                                "Enable e-invoicing in GST Settings before billing."
                            );
                        } else if (aato >= 4) {
                            frappe.msgprint(
                                "Heads-up: AATO is " + aato + " cr - within striking " +
                                "distance of the 5 cr e-invoice threshold. Plan the " +
                                "india_compliance sandbox test now."
                            );
                        }
                    });
            });
    },
});

All four run on your own infrastructure — Frappe scheduler, a VPS cron, or a self-hosted n8n. The FY-to-date sum is a tripwire, not the statutory PAN-level AATO computation; your CA owns that number.

Deploy the server-side watcher first — it maintains the custom_aato_cr field the client script reads. Run it as alert-only for a month. And resist the urge to hard-block invoicing below the actual threshold; the tripwire's job is lead time, not enforcement.

A watch policy you can lift into your SOP

e-Invoice Threshold Policy (draft — for CA / auditor review): Accounts recomputes FY-to-date turnover per company on the 1st of each month (scheduler job) and reconciles the PAN-level figure against the GST portal's AATO quarterly. At ₹4.0 crore FY-to-date, india_compliance sandbox testing is scheduled and IRP credentials are created. At ₹4.5 crore, e-invoicing is enabled in a UAT bench and billing staff complete a dry run. On the earlier of (a) statutory liability or (b) crossing ₹5 crore in-year, e_invoice_applicable_from is set and IRN-at-submit goes live. The applicable-from date is changed only by the finance controller, with the change logged. Ratify the trigger levels with your CA before adoption — a business with seasonal Q4 revenue should pull every trigger earlier.

Should you choose Act now or backlog it?

Enable this quarterGenuinely fine to wait
AATO already over ₹5 crore in any FY since 2017-18 — you are late, not earlyPeak AATO under ₹3.5 crore and flat growth
FY 2025-26 closed above ₹5 crore — 1 April 2026 already swept you inPure-B2C business with no B2B, export or SEZ documents at all
Within 20% of the line with a strong pipelineEntity squarely in an exclusion category (bank, insurer, GTA)
Large buyers already verifying vendor IRNs— but even then, put the watcher on: exclusions and thresholds both change

FAQ

+What is the e-invoice limit in India right now?

₹5 crore aggregate annual turnover, in force since 1 August 2023 under Notification 10/2023 – Central Tax. Crossing it in any financial year from 2017-18 onward makes e-invoicing mandatory for your B2B invoices, credit notes, debit notes and exports.

+How do I check if e-invoicing applies to my company?

Three checks. Did any FY since 2017-18 have PAN-level AATO above ₹5 crore (the GST portal shows its computed figure)? Are you in an exclusion category — bank, insurer, NBFC, GTA, passenger transport, multiplex admission, SEZ unit, government department? And do you raise B2B, export or SEZ documents at all? The finder at the top of this post turns the first check into a date.

+Is the e-invoice limit per GSTIN or per PAN?

Per PAN. Aggregate annual turnover under Section 2(6) CGST sums every registration against the PAN across states, including exempt supplies, exports and inter-branch transfers. Two ₹3 crore GSTINs are a ₹6 crore business for this test.

+Our turnover fell back below ₹5 crore — does the mandate lapse?

No. The test is whether AATO exceeded the threshold in any financial year from 2017-18 onward. Once crossed, the obligation attaches permanently — a later lean year does not release you.

+Is e-invoicing required for B2C invoices?

No — the mandate covers B2B documents, exports and supplies to SEZs. india_compliance enforces this directly; its validator refuses B2C documents at source. Large B2C businesses have a separate dynamic-QR requirement, which is a different rule with a different threshold.

+We crossed ₹5 crore during FY 2025-26 — when do we start?

From 1 April 2026. The sweep is mechanical: cross the line in a financial year, and e-invoicing binds from the start of the next one. Configure and sandbox-test india_compliance well before March closes.

What happens if we keep issuing B2B invoices without IRNs?. Each such invoice is not a valid tax invoice under Rule 48(5). Section 122 exposes you to the higher of ₹10,000 or 100% of the tax per document. Your buyers' input tax credit on those invoices becomes contestable, and buyer AP desks increasingly reject un-IRN'd bills outright. The exposure calculator above puts a number on your current run rate.

Which ERPNext and india_compliance versions does this post apply to?. Code citations are from india_compliance v16.6.0 on ERPNext v16.28.0. The applicability validator and GST Settings fields have the same structure in v15. The statutory thresholds are version-independent — they bind whatever software you run.

What is the bottom line?

The e-invoice limit stopped being a big-company concern the day it hit ₹5 crore. The once-crossed-always-covered rule means thousands of businesses are already liable without knowing their date, and the threshold has only ever moved in one direction. Find your date, set the applicable-from field to match it, and put the watcher on. The ERPNext implementation work is a fortnight — discovering the mandate through a customer's rejected invoice is a quarter of firefighting.

Crossed the line already — or about to?

We take ERPNext companies live on e-invoicing in under two weeks — liability-date review with your CA, india_compliance configuration, IRP sandbox testing, and the threshold watcher deployed so the next tier cut never surprises you.

Now work out what this would cost you

Tell us what you're running now and we'll come back with a fixed scope, a timeline and a price. You own every line of what we build.

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.