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.
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.
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.
The six notification tiers that took the e-invoice limit from ₹500 crore to ₹5 crore, with notification numbers.
The same history as data, for the record:
| 1 Oct 2020 | ₹500 crore | 61/2020 & 70/2020 |
| 1 Jan 2021 | ₹100 crore | 88/2020 |
| 1 Apr 2021 | ₹50 crore | 05/2021 |
| 1 Apr 2022 | ₹20 crore | 01/2022 |
| 1 Oct 2022 | ₹10 crore | 17/2022 |
| 1 Aug 2023 | ₹5 crore | 10/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.
Pick your entity category and see whether the Rule 48(4) exclusion covers you — including the SEZ unit vs developer trap.
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.
Invoices per month × average tax × months non-compliant — the statutory Section 122 exposure and the buyer ITC you're putting at risk.
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:489 — get_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_fromlike a posting-period control, not a preference. - A saved "Missing IRN" report — Sales Invoice,
docstatus=1,billing_address_gstinset,irnempty, 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.
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.
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_fromis 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 quarter | Genuinely fine to wait |
|---|---|
| AATO already over ₹5 crore in any FY since 2017-18 — you are late, not early | Peak AATO under ₹3.5 crore and flat growth |
| FY 2025-26 closed above ₹5 crore — 1 April 2026 already swept you in | Pure-B2C business with no B2B, export or SEZ documents at all |
| Within 20% of the line with a strong pipeline | Entity 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 related issues might you also hit?
- ERPNext GST e-invoicing: the IRP round-trip — schema, signed QR, and every failure mode between Submit and IRN.
- The 30-day and 24-hour e-invoice windows — the operational deadlines that start mattering the day this post's mandate attaches.
- GST return filing from ERPNext — where un-IRN'd invoices surface as GSTR-1 mismatches.
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.