From bank statement to ITR-ready summary: a CA's workflow
Published 5 July 2026 · Greenote
For most individual and small-business clients, the bank statement is the closest thing to ground truth you will get. Books arrive incomplete, vouchers arrive late, but the statement records every rupee that actually moved. The problem is the format: a few thousand rows of cryptic narrations is not a filing position. This is the workflow for getting from one to the other — and for making sure the result survives an AIS mismatch check.
Step 1: Get the statement as Excel or CSV, not PDF
Everything downstream depends on having real data, not a picture of data. PDF statements force OCR, and OCR introduces exactly the kind of silent digit errors you cannot afford in a tax working. Every major bank's netbanking offers an Excel or CSV download next to the PDF — the export path differs by bank, so see the per-bank notes on our supported banks pages. Two habits save time later: pull the full financial year (in chunks if the portal caps the range), and never re-save or "fix" the file first — SBI's .xls files, for instance, are often not real Excel underneath, and re-saving can mangle them.
Step 2: Normalise the raw table
Before any analysis, the export has to become a clean table: strip the account-holder headers and closing summary blocks, fix date formats, and resolve the debit/credit convention. That last one varies more than people expect — some banks give separate debit and credit columns, others a single amount with a Dr/Cr flag, and Union Bank sometimes fuses the amount and direction into one cell. Get a sign wrong here and every total downstream is wrong.
Step 3: Categorise every transaction
Each row needs an accounting head: salary credits, rent, interest, bank charges, EMIs, cash movements, supplier payments. Two rules keep this defensible. First, be consistent — the same narration pattern must land in the same head every month. Second, never guess: a row you cannot classify goes to Suspense for voucher-level resolution, not into whichever head makes the totals look right. The full head list and the rules of thumb are in our categorisation guide.
Step 4: Build the party ledger
Rolling transactions up by counterparty — who paid whom, how often, how much — is what turns a chronological statement into an auditable document. It surfaces undisclosed loans, related-party flows and round-tripping in a way no category summary can. It is also the hardest step to do by hand, because the party name is buried in bank-specific narration formats. We wrote a separate piece on what a party ledger is and why auditors open it first.
Step 5: Roll up into ITR heads
With categories and parties in place, the ITR summary is mostly aggregation: savings interest for the 80TTA/80TTB working, dividend credits, rent received, salary credits, professional receipts, and the transfers to broker and mutual fund accounts that flag a capital-gains schedule. The discipline is traceability — every figure in the summary should be one click away from the statement rows that produced it, because that is the first thing you will need when a query lands.
Step 6: Cross-check against AIS and SFT
The Annual Information Statement already tells the department a version of this story: interest, dividends, securities trades, and the high-value transactions banks report through SFT — large cash deposits, big credit card payments, property deals. Filing a return that contradicts AIS is how e-verification notices happen. So before filing, reconcile: does the interest you derived from the statement match what AIS shows? Do the cash deposits in your summary explain the SFT entry? A mismatch is not always an error — AIS has its own mistakes — but every mismatch should be one you found first and can explain.
Doing all of this in under a minute
Steps 2 through 5 are exactly what Greenote Lite automates. Upload the Excel or CSV statement and download a four-sheet workbook: the party ledger, every transaction categorised and named, a category summary, and an ITR summary with AIS/SFT flags on the rows that matter. Anything the engine is not sure about is marked Suspense — you review, it never guesses. The first statement is free, with no signup wall.