ITR Insights

Your AIS and Form 26AS,
read without ever uploading them.

Every year the income-tax portal hands you two dense, password-locked statements and leaves you to eyeball them. This turns them into dashboards you can filter and sort — and reconciles the TDS in your AIS against your 26AS, so a missing or mismatched entry is obvious before you file.

Open the tool pipx run itr-helper

Nothing is uploaded. The parsing runs inside your browser — this site has no server to send your files to. Here's how you can check that.

The overview tab: KPI tiles for gross amount paid, TDS per 26AS, TDS per AIS, TCS, taxes paid and refunds, above charts of TDS by deductor, TDS by quarter, and AIS reported amounts by category.

Where your data actually goes

Short version: nowhere. Your PDF, your PAN and your date of birth are read by Python compiled to WebAssembly, running in the same tab you're reading this in. They are held in memory, never written to disk, and gone the moment you close the tab.

The site sends code down

Opening the tool downloads a Python runtime (~23 MB, cached afterwards) and the parsers. That traffic goes one way.

Nothing goes back up

There is no upload endpoint, no API key, no analytics. A Content-Security-Policy of connect-src 'self' means the page is not permitted to talk to any other host, even by accident.

You can verify it yourself

Open DevTools → Network, then parse a file. You'll see no request leave. Or load the page, turn off your WiFi, and parse anyway — it still works.

So why is running it locally still safer?

Because of one thing, and it's worth being straight about it: using a hosted site means trusting it to serve honest code every single visit. Today's build parses your files locally. You are taking my word that tomorrow's does too. That's a supply-chain risk, and no privacy policy can talk you out of it.

Running it yourself removes that. The code is pinned on your machine, you can read it, and it works with the network cable pulled out. For a document that contains your PAN, your salary and every bank you hold an account with, that's a reasonable thing to want.

 Hosted hereRun locally
Are your tax files uploaded anywhere?NoNo
Where does parsing happen?Your browser (WASM)Your browser, or your own Python
Works with the internet off?After the first loadAlways
Do you have to trust the host?Yes — to serve honest code each visitNo — the code is pinned on your machine
Can you read the code that ran?View sourceIt's on your disk

Either way, this is a read-only tool. It cannot file anything, and it never asks for a portal password or an OTP.

Run it on your own machine

One command. No clone, no repo, nothing to configure — it starts on your own 127.0.0.1 and opens your browser.

With Python

pipx run itr-helper

Or pip install itr-helper and then just itr-helper. This is the real thing: the parsers run as native Python, so there's no WebAssembly runtime to download.

With Node

npx itr-helper

Same app, no Python needed — it serves the browser build from your own machine. Handy if you don't have Python around.

Either way it binds to 127.0.0.1, so nothing else on your network can reach it. Stop it with Ctrl+C and every trace of your documents goes with the process — nothing is written to disk.

From source

If you'd rather read the code first, or hack on the parsers:

git clone https://github.com/sivab193/itr-helper
cd itr-helper
python3 -m venv .venv && source .venv/bin/activate
pip install -e .
itr-helper               # → http://127.0.0.1:5001

How it works

  1. You enter your PAN and date of birth

    Not to identify you — the portal locks these files with a password derived from exactly those two things (AIS uses your PAN in lowercase followed by your DOB as ddmmyyyy; 26AS uses the DOB alone). The tool derives the password so you don't have to remember the rule. Both values stay in memory.

  2. The files are parsed where they sit

    The AIS PDF is decrypted and its tables extracted; the 26AS .txt is a caret-delimited TRACES export, read part by part. This is ordinary Python — pypdf, pdfplumber — compiled to WebAssembly so it can run in a browser tab.

  3. You get dashboards, filters, and a reconciliation

    TDS and TCS land in one sortable table you can slice by deductor, TAN, section, nature of payment, quarter or date range. Then the two documents are compared against each other.

The reconciliation is the point

AIS and 26AS are supposed to agree. When they don't, that's the thing you need to see before you file. Entries are grouped by TAN and section code and matched, so each row comes back as matched, amount mismatch, only in AIS or only in 26AS.

The reconciliation tab, showing TDS grouped by TAN and section: two matched rows, one row present only in 26AS, and one present only in AIS.

What to feed it

DocumentWhere to get itFormat
AIS Income-tax portal → AIS → Download → PDF .pdf
Form 26AS Portal → e-FileIncome Tax ReturnsView Form 26AS → TRACES → Export .txt preferred, .pdf works

Prefer the 26AS .txt: it's caret-delimited, so every row is unambiguous. PDF table extraction is a best-effort guess at where the columns were, and the tool says so when it falls back to it.

You don't have to hand it your real statements to try it. The repo generates realistic synthetic ones:

python samples/make_samples.py   # → a fake AIS PDF + 26AS txt, PAN ABCPM1234F, DOB 01-01-1990

Questions

Do you see my PAN, my salary, or my documents?

No. They never leave your browser. I have no server, no database and no logs — there is nowhere for them to arrive.

Why is the first load so heavy?

It ships a whole Python runtime (~23 MB) so the parsing can happen on your side instead of mine. It's cached after the first visit. Sending your PDF to a server would be a much lighter page and a much worse trade.

My AIS JSON won't open.

Use the PDF. The portal's JSON export is encrypted in a way that hasn't been reliable to decrypt, so support for it was removed rather than left half-working.

The numbers don't match my portal.

Check the Raw extracted tables panel on the AIS tab — it shows exactly what the parser saw. If a table came out wrong, that's a bug worth reporting. Please don't attach your real statement; a description of the table's shape is enough.

Is this tax advice?

No. It reads two documents and adds up the numbers in them. Verify anything you rely on against the portal, and talk to a professional about what it means.