How-to · Tally & GSTR-1 JSON export

Exporting GSTR-1 as JSON from TallyPrime — the upload errors nobody warns you about

The short answer

A GSTR-1 JSON upload from TallyPrime typically fails for one of a handful of traceable reasons — a stale GST Offline Tool, an invalid HSN/SAC or UQC code, or a buyer GSTIN that's since been cancelled — plus a step people skip entirely: TallyPrime exports the HSN/SAC summary as a separate file that still has to reach the Offline Tool. A related but different limit: past 500 invoices in one table isn't a failure, it's a portal view/edit cap — download and review those via the GST Offline Tool instead. Fix the flagged voucher in Tally and re-export; re-uploading the same bad JSON repeatedly won't.

TallyPrime will happily generate a GSTR-1 JSON file that looks complete and then gets rejected — or worse, accepted with silent errors — at the GST portal. Most of the guidance in circulation treats this as a file-format quirk. It usually isn't. Here's the actual export-to-upload sequence, and the specific errors that stop it.

Two files, not one — what "export as JSON" actually means in TallyPrime

The most common reason a GSTR-1 upload fails isn't a bad export at all. It's that TallyPrime's GSTR-1 JSON and the rate-wise HSN/SAC summary are two separate exports, generated from two different places in the software, and it's easy to send the portal only one of them.

The main return — B2B, B2C, credit/debit notes, exports, nil-rated and the rest — is generated from TallyPrime's GST Returns export. The HSN/SAC summary is a different report (GST Annual Computation > Summary of Outward Supplies), and per TallyPrime's own export guidance it has to be pulled out as Excel or CSV, reshaped to match the GST Offline Tool's HSN template, and imported into the Offline Tool separately before a combined JSON is generated for upload. Treat the JSON export and the HSN/SAC summary as one job with two deliverables — not one file you tick off and move on from. (Tally mechanics in this article verified against Tally's own documentation as of 10 August 2026.)

Exporting the JSON: the steps in TallyPrime

StepMenu path / shortcutWhat it does
1. Open the GST Returns exportAlt+E (Export) > GST Returns > select GSTR-1Opens the export screen scoped to the return, not a generic voucher export
2. Set the period and registrationChoose the filing period and, if you have more than one GSTIN in the company, the correct registrationWrong period or wrong GSTIN here produces a technically valid JSON for the wrong return
3. Choose the file formatSet file format to JSON (Data Interchange)The format the GST portal's offline upload actually accepts
4. Configure sections and folderReview the section-wise export settings, and in F12 (Configure) set Show HSN/SAC Summary to No — the setting that actually produces the two-file split below, not something TallyPrime does on its own — then set the save locationKeeps the HSN/SAC summary out of the file you're about to generate
5. Generate the filePress E (Send) to exportWrites the JSON file to the folder you selected — this is the file you'll upload, not the HSN/SAC summary
6. Export the HSN/SAC summary separatelyGST Annual Computation > Summary of Outward Supplies > export as Excel/CSVA second, separate file — reshape to the Offline Tool's HSN template and import it there before generating the combined JSON

If you'd rather review the numbers before anything reaches the portal, TallyPrime also supports exporting to Excel or CSV first and generating the JSON afterwards through the GST Offline Tool — useful when you want a human to eyeball the return before it becomes a file.

Uploading to the GST portal: the sequence that avoids errors

The upload itself is short, but two ordering details in it are exactly where TallyPrime's own error-resolution guidance says avoidable failures happen:

  1. Log in to the GST portal and go to Services > Returns > Returns Dashboard.
  2. Select the filing period and click Search.
  3. Click Prepare Offline, then Upload, and select the JSON file you generated from TallyPrime.
  4. Wait for the portal to finish processing before navigating away — an interrupted upload can leave a corrupted or partial submission.
  5. Once processed, open the return, verify the auto-populated details against your Tally figures, and e-sign to complete filing.
If you've generated more than one JSON file for the period — for example because you corrected vouchers and re-exported, or you're deleting transactions previously uploaded in error — upload the JSON containing the deletions first, then the JSON with the regular transactions, in that order.

The upload errors nobody warns you about

Most of what stops a GSTR-1 JSON at the portal traces to a small, repeatable set of causes. This is what TallyPrime's own error-resolution guidance flags, described here rather than quoted verbatim:

What you seeUsual causeFix in TallyPrime
"File could not be Uploaded" / a prompt to get the latest Offline ToolThe GST Offline Tool or the portal's own validation library has moved on since you last generated a JSON with an older releaseUpdate to the current TallyPrime release and the latest GST Offline Tool, then re-generate and re-upload rather than retrying the same file
Invalid UQCA stock item's Unit Quantity Code is blank or isn't one of GSTN's recognised codesMap every unit in the Unit master to a code from the GSTN UQC list before exporting
Invoice rejected on an inactive/cancelled GSTINThe buyer's registration has since been cancelled — check the cancellation date against the invoice date before treating this as a data errorTally's guidance is to convert the voucher(s) to B2C ("Sales to Consumer – Taxable"), but do this only where the recipient was in fact unregistered on the date of supply — reclassifying a genuine B2B invoice to B2C permanently denies that buyer's credit. Confirm the GSTIN and cancellation date first if the registration was live on the invoice date
Invalid HSN/SACA service is carrying an HSN-style goods code, or vice versa — SAC codes for services start with "99"Check each code against the GST portal's HSN/SAC search before export; correct the stock item or ledger, not the JSON
State code doesn't match, or a duplicate state appearsA state was typed manually or a new state master was created instead of selecting the standard oneAlways pick the state from TallyPrime's built-in list so the state code is derived correctly, rather than free-typing it
Missing invoice numberA voucher type has no numbering series configured, or the number exceeds the 16-character limitSet a numbering series on every relevant voucher type before the export
IGST charged where CGST/SGST expected, or the reverseThe tax type on the voucher doesn't follow from the supplier's location versus the place of supplyCheck the place of supply determined under Sections 10/12 of the IGST Act against your own registered location — it is not always the buyer's registered state — before re-exporting
"Processed with Error" after the upload appears to succeedOne or more lines failed portal-side validation that the local export didn't catchDownload the portal's error report and match the flagged line items back to the corresponding vouchers in Tally

Note what all of these have in common: not one of them is actually a JSON formatting problem. Every row in that table is TallyPrime correctly reporting a value that was already wrong, incomplete or outdated on the voucher.

The pattern behind the errors is the register, not the file

That's worth sitting with, because it changes what "fixing the error" should mean. A JSON export is a faithful transcription of whatever is already in your sales register at the moment you export it. TallyPrime doesn't invent an invalid GSTIN, misclassify an HSN code, or leave a UQC blank — it reports one that was entered that way, possibly months earlier, possibly by someone who has since left the team. The upload failure is the first time anyone notices; it is rarely the first time the error existed.

Which means re-exporting the same period over and over, hoping a different JSON generation clears the same portal validation, is the wrong instinct. The fix that actually holds is catching the bad GSTIN, the missing HSN code or the wrong place of supply at the point the voucher is entered — not at the point you're trying to file. Doing that consistently, invoice by invoice, across a sales register with any real volume, is exactly the kind of checking that is painful to do manually every single filing cycle.

Why the JSON you upload matters beyond your own filing

GSTR-1 isn't only a filing you do for yourself. Every invoice in it becomes the source document for your buyer's credit: under Section 16(2)(aa) of the CGST Act, read with Rule 36(4)(b) and Rule 60(7) of the CGST Rules, a recipient can claim input tax credit only on an invoice you've furnished in GSTR-1 and that is then communicated to them in GSTR-2B. An invoice that uploads with the wrong buyer GSTIN, or fails to upload at all and quietly gets left out of a re-export, doesn't only cost you a rejected file — it's a gap your customer finds later, in their own reconciliation, with no easy way of knowing it traces back to a formatting error on your side.

Whether e-invoicing applies to you turns on turnover, not on Tally. Under Rule 48(4) of the CGST Rules — which fixes no threshold itself and delegates it entirely to notification — a registered person, other than a government department, a local authority, a Special Economic Zone unit, an insurer, a banking company or financial institution (including an NBFC), a goods transport agency, a passenger transport service, or a multiplex-cinema admission supplier, must generate e-invoices for its B2B supplies and exports (B2C invoices are outside Rule 48(4)) once its aggregate turnover has exceeded ₹5 crore in any preceding financial year from 2017-18 onwards (Notification 13/2020-Central Tax dated 21 March 2020, as amended by Notification 10/2023-Central Tax w.e.f. 1 August 2023; as of August 2026). It is a preceding-year test, not a current-year one, and coverage is permanent once crossed — turnover falling back below ₹5 crore later doesn't take you out of the regime. If it applies to you, every covered invoice needs a valid Invoice Reference Number before it reaches this export at all, and TallyPrime's own error guidance is specific about both the format and the scope for that case: open the GSTR-1 report in CSV format, and upload the files created for sections other than B2B and exports through the ordinary route. B2B and export sections are handled through the e-invoicing flow instead — IRP-reported documents already auto-populate into the corresponding GSTR-1 tables two days after generation (GSTN advisory on auto-population of e-invoice details into GSTR-1, 30 November 2020), so re-uploading them through the ordinary JSON would duplicate what the portal already holds.

On HSN digit requirements — a different ₹5 crore test from the one above. How many HSN/SAC digits you need turns on aggregate turnover in the preceding financial year alone — not the "any preceding year from 2017-18, permanent once crossed" test that governs e-invoicing in the paragraph above. Up to ₹5 crore in the preceding FY, 4-digit HSN is required (optional on B2C invoices); above ₹5 crore, 6-digit HSN is required (Notification 78/2020-Central Tax dated 15 October 2020, amending Notification 12/2017-Central Tax dated 28 June 2017, w.e.f. 1 April 2021 — unamended as of August 2026). Two ₹5-crore thresholds, two different tests: don't carry the e-invoicing "any preceding year" rule over to HSN digits, or the reverse.

If the error only shows up after you've already filed

Not every mistake gets caught at upload. A wrong inter-state classification or an incorrect taxable value can clear the portal's validation and only surface later — for instance when your own GSTR-3B Table 3.2 — the inter-state B2C/composition/UIN breakup auto-populated from your GSTR-1, GSTR-1A or IFF — carries a place-of-supply split that doesn't match reality (non-editable from the November 2025 tax period per GSTN advisory of 5 December 2025 — portal configuration, not a statutory rule; position as of August 2026). Once a GSTR-1 is filed, there's no going back into TallyPrime and re-exporting a corrected JSON for the same period. The fix lives one form upstream — via a GSTR-1A for that same period — but only while the window is open: GSTR-1A closes the moment you file GSTR-3B for that period (Rule 59(4A), CGST Rules; Notification 12/2024-Central Tax dated 10 July 2024). In the exact scenario above — the error surfacing only after the 3B is already filed — that same-period window is already gone. The correction then has to travel through the amendment tables of a later month's GSTR-1 instead, subject to the outer limit in the proviso to Section 37(3) of the CGST Act: 30 November following the end of that financial year, or the date you furnish the annual return, whichever is earlier (and, for a credit note, the same limit under Section 34(2)). Not in Tally either way — GSTR-1A and the later-month amendment tables are both GST portal filings, not something you generate from TallyPrime's export.

How Recoup fits in

Recoup doesn't replace TallyPrime's export — it works from the same registers you're exporting from, continuously reconciling your ITC against GSTR-2B and flagging register-level gaps on both sides of your reconciliation before either side ever reaches a filing screen. Every row in the errors table above is the same underlying problem: a value that was already wrong in the register, long before anyone tried to export it. Catching that upstream, invoice by invoice, is what turns "the upload failed again" into a filing that clears the first time.

Stop finding register errors at the filing screen

Recoup reconciles your ITC against GSTR-2B continuously and names the vendor and invoice behind every gap — before you file, not after.

Book a demo →

Related guides