Verify GST numbers without leaving your spreadsheet

Most GST verification starts in a spreadsheet and then gets copied into a browser tab one number at a time. This add-on collapses that: select the column, and every GSTIN is checked in place. The format and check-digit pass is free and runs offline. The register lookup fills in who the number actually belongs to.

The Marketplace listing is in review with Google. Create your API key now and this page will carry the install link the moment it is approved — the key and credits are the same ones the REST API uses.

Two passes, and only one of them costs anything

A GST number carries a lot of information in the number itself. Reading it needs no lookup, so the add-on does that part for free, forever, with no account — and it uses the result to make sure the paid pass never spends a credit on a number that could not possibly resolve.

Validate — free and offline

Checks the 15-character format, recomputes the modulus-36 check digit, and decodes the state, the embedded PAN and the entity type. Nothing leaves your spreadsheet, there is no usage limit, and no account is involved. Available both as sidebar buttons and as spreadsheet formulas.

Verify — one credit per registration found

Looks each surviving number up in the government register and writes back the legal name, trade name, status, constitution, taxpayer type, registration date and principal address. Rows that failed the offline pass are skipped without a request, so typos cost nothing.

Spreadsheet formulas that need no API key

Installing the add-on adds these functions to every sheet in the file. Each one accepts a single cell or a whole range, so =GSTIN_VALID(A2:A500) fills 499 rows from one formula. They run in Google's restricted function context, which has no network access at all — that is why they are free, and why they can never send your data anywhere.

Formula What it returns Example result
=GSTIN_VALID(A2) TRUE when the number passes the format rules and the modulus-36 check digit. TRUE
=GSTIN_CHECK(A2) Says "Valid", or explains exactly what is wrong — wrong length, stray character, mistyped check digit. Check digit mismatch — expected 7, found 0
=GSTIN_CLEAN(" 27-aaacr 5055 k1z7 ") Strips spaces, dashes and casing so two copies of the same registration finally match in a VLOOKUP. 27AAACR5055K1Z7
=GSTIN_STATE(A2) The state the registration was issued in, read from the first two digits. Maharashtra
=GSTIN_STATE_CODE(A2) The two-digit state code as text, so a leading zero survives. 06
=GSTIN_PAN(A2) The PAN embedded in characters 3 to 12 — the way to group one company's registrations across states. AAACR5055K
=GSTIN_ENTITY_TYPE(A2) Company, Individual / Proprietor, Firm / LLP, Trust, HUF and the rest, decoded from the PAN. Company
=GSTIN_CHECK_DIGIT(A2) The 15th character the first 14 imply — what a mistyped number should have ended with. 7

The same rules power the browser-based GSTIN validator on this site, so a number checked in a spreadsheet and the same number checked on the web give the same verdict.

Getting started

  1. 1

    Install the add-on

    Open a Google Sheet, choose Extensions then Add-ons then Get add-ons, search for GSTIN Verifier and install it. Google shows you exactly which permissions it asks for before anything is granted.

  2. 2

    Put your GSTINs in one column

    Any column will do. Spaces, dashes and lower case are fine — the add-on normalises them before it checks anything.

  3. 3

    Validate for free

    Select the column, open Extensions then GSTIN Verifier then Open sidebar, and click Validate. Format, check digit, state and entity type are filled in without a single network call.

  4. 4

    Add an API key to go further

    Paste the API key from your gstinapi.com dashboard into the sidebar, then click Verify to pull the registered name, status, constitution, registration date and principal address from the government register.

What the Verify pass writes

Results go into the columns immediately to the right of your selection — where someone reading their own spreadsheet expects the answer to appear. The add-on refuses to run if those cells already hold data, unless you explicitly tick overwrite.

  • Format valid
  • Format check
  • Legal name
  • Trade name
  • GST status
  • Registered on
  • Constitution
  • Taxpayer type
  • State
  • Principal address
  • Lookup result

The permissions it asks for, and why

Every scope below is one Google classes as non-sensitive. That was a design constraint, not an accident: an add-on that asked for your whole Drive would be easier to build and far harder to trust.

The spreadsheet you have open

To read the column of GST numbers you select and write the results next to it. This scope grants access to the open spreadsheet only — not to your Drive, not to your other files, not to anything you have not opened the add-on in.

https://www.googleapis.com/auth/spreadsheets.currentonly

Show the sidebar and menu

To add the "GSTIN Verifier" item to your Extensions menu and draw the sidebar you run the verification from.

https://www.googleapis.com/auth/script.container.ui

Call gstinapi.com

To look up GST numbers against the government register. The add-on manifest restricts outbound requests to https://gstinapi.com/api/ — it cannot call anywhere else.

https://www.googleapis.com/auth/script.external_request

Full detail is in the add-on privacy policy, including the Limited Use commitments that govern how Google user data is handled, and the add-on terms of use.

Questions about the add-on

Not for the formulas. GSTIN_VALID, GSTIN_CHECK, GSTIN_CLEAN, GSTIN_STATE, GSTIN_PAN and the rest run entirely inside your spreadsheet with no network call, no API key and no usage limit — they work the moment the add-on is installed. You only need a free gstinapi.com account for the sidebar Verify pass, which looks numbers up in the government register and needs credits because each lookup is a real request.
No, and this is the most important thing to understand about any GSTIN validator. The check-digit algorithm is published, so anyone can construct a 15-character string that passes it — a fraudster inventing a GSTIN for a fake invoice will usually produce one that validates. The offline pass proves a number is not a typo. Only a lookup against the register tells you the registration exists, who holds it and whether it is still active.
One credit per number that actually resolves to a registration. Rows that fail the offline checks are never sent, so a mistyped number costs nothing, and a number that is well-formed but has no registration behind it is not billed either — that is a real answer, not a successful lookup. The sidebar has a Check cost first button that tells you how many rows would be billable before you commit.
No. It requests the spreadsheets.currentonly scope, which grants access to the single spreadsheet you have open and nothing else — not your Drive, not your other files, not even other sheets you have opened in another tab. The manifest also restricts outbound requests to the gstinapi.com API, so the add-on cannot send your data anywhere else.
Up to 500 rows per run. Google stops any add-on server call at six minutes, so the limit exists to give you a clear message and a partial result rather than a timeout that loses work. For a longer list, verify it in blocks — the add-on writes results as it goes, so nothing already fetched is lost.
The run stops immediately rather than retrying the same failure down the rest of the column. Every row verified before that point is written to your sheet and is correct; the remaining rows are marked as not looked up, so you can see exactly where to resume after topping up.
Yes. The add-on, the free GST number search tool and the paid API all read the same government-sourced records through the same service, so a GSTIN checked in a spreadsheet and the same GSTIN checked on the website give the same answer. The offline validation rules are shared too — both are held to one test fixture, so the two can never quietly disagree.

Working outside a spreadsheet?

The add-on is one client for the same service. If you need verification inside your own product instead, the REST API is a single endpoint and a single header, and it shares your credit balance with the add-on.