← Insights
Guides

How to import HDFC, ICICI, and SBI bank statements into PlainFinance (no bank login needed)

By PlainFinance·June 2, 2026·10 min read
Three bank statements fanned out on a wooden desk — HDFC blue, ICICI orange, SBI navy — with an upload tray and a PlainFinance dashboard tile beside them. A coffee mug and notepad sit in the foreground. Headline reads "Import your bank stat

Your bank already gives you what you need

Open your bank's website. Log in. Find the section that lists your transactions, pick a date range, and click export. HDFC will hand you a CSV or Excel file. ICICI will hand you an Excel file. SBI will hand you a CSV. No integration, no third-party aggregator, no permission grant that sits in some service forever — just a file your bank has been willing to give you for the better part of two decades.

PlainFinance was built around that fact.

By the end of this guide you'll have HDFC, ICICI, and SBI statements flowing in, and you'll know exactly which transaction types to double-check after every import.

Why CSV instead of bank linking?

Bank linking sounds convenient until it isn't. Third-party integrations change ownership, lose support, or disappear entirely. CSV exports tend to survive all of it.

There's also the privacy beat. Linking your bank means handing read access — and sometimes more — to a chain of services you didn't pick and can't audit. A personal finance app without bank linking sidesteps that whole arrangement. You choose what data to export and when to import it. Nothing is brokered, sold, or quietly trained on.

CSV is boring. It doesn't break, doesn't expire, doesn't need permission. Boring is the point. Boring is what survives.

We wrote a longer version of this argument when we launched — why we built PlainFinance.

What PlainFinance does not do

  • Does not connect to your bank.
  • Does not store your banking credentials.
  • Does not need ongoing access to your accounts.
  • Does not rely on third-party aggregators sitting in the middle.

The file comes from your bank. It goes from your computer into PlainFinance. Nothing sits between the two. The source data stays yours, and so does the decision about when, how, and whether to share it.

What you'll need

Nothing fancy. Before you start, make sure you've got:

  • Net banking login for each bank you want to import — use desktop net banking, not the mobile app. Desktop exports are cleaner.
  • About 5 minutes per bank the first time. Under 2 once you know the path.
  • A PlainFinance account (/signup).
  • A date range in mind. Pull a few months for your first import — enough to see patterns, small enough to catch mistakes.

Exporting from HDFC

HDFC's net banking is the easiest of the three. Once you know where to look, the export takes about thirty seconds.

Sign in and head to the account statement or account enquiry area — the part of the interface where you'd normally check what's gone in and out. That's where the download lives.

Illustrative HDFC NetBanking screen — Accounts → Enquire → Download Historical Statement, with an account selector, date range, and period radios

When you get the choice of format, pick Excel (.xls). Not PDF. PDF looks fine on screen and falls apart the moment you try to do anything with it. HDFC's Excel export is the cleanest of the three banks we'll cover — column headers are sensible, dates are parseable, and there's almost no cleanup needed.

A note on the date range: HDFC caps each export at a few months at a time. So if you're pulling a year of history, you'll do it in a handful of passes. Mildly annoying. Not a real obstacle.

Illustrative HDFC export dialog — format dropdown open showing PDF, Excel, Text, MS Money, and Delimited options, with Excel highlighted as the recommended choice

One quirk worth flagging. HDFC puts debit and credit in two separate columns instead of one signed amount column. If you've used tools built around US or UK banks, the file will look unfamiliar at first. PlainFinance handles this automatically — you don't need to reshape anything — but it's the kind of thing that throws off a generic importer.

Save it as hdfc-YYYY-MM.xls. Your future self will thank you.

Exporting from ICICI

ICICI's net banking lays things out differently from HDFC, but the export lives in roughly the same neighbourhood. Look for the statement or transaction-history area inside the accounts section.

Illustrative ICICI Bank Internet Banking screen — My Accounts → Bank Account → View Bank Statement, with the account selector, a Quick Range pill row (Custom range selected), and From/To date fields

Pick Excel as the format.

Now the part that matters. ICICI gives you two options: Quick Statement and Detailed Statement. Quick is faster. Quick is also wrong, at least for our purposes. It strips out the narration text — the messy free-form description field that tells you whether a debit was a UPI payment to your landlord or a card swipe at a pharmacy. That field is how PlainFinance figures out what each transaction actually is.

Always pick Detailed. Always. This one choice saves you about an hour of manual cleanup down the line.

Illustrative ICICI Quick vs Detailed Statement selector — Detailed is highlighted as recommended, showing the additional Transaction Remarks, Reference Number, and Value Date columns that Quick omits

The date range has a cap, similar to HDFC. If you're pulling several months, you may need to do it in chunks. Annoying, not fatal.

One thing worth flagging: ICICI uses a single amount column with signed values — debits are negative, credits are positive. HDFC splits them across two columns. You don't need to do anything about this. PlainFinance auto-detects the layout when it reads the file.

Save it as icici-YYYY-MM.xls and move on.

Exporting from SBI

SBI's net banking is the slowest of the three. Pages reload more than they should, sessions time out faster than feels reasonable, and the layout has the texture of software that was last redesigned a long time ago. Log in, accept that this part will take a few minutes longer than the others, and find your way to the account statement area.

Illustrative OnlineSBI Account Statement screen — format dropdown open showing PDF, CSV, Excel, and Text options with CSV highlighted as recommended for PlainFinance import

Quirk #1 — the PDF-only trap. SBI's default export, especially inside YONO and on some account types, is PDF. PDF is the worst possible format for a budgeting tool — it's built for printing, not parsing, and the rows tend to fall apart the moment anything tries to read them. Switch the format selector to CSV (or .txt, or whichever delimited option is offered). If your screen only shows PDF, you're on the wrong export. Look for "Transaction statement" rather than "Account statement" — that's the one that gives you a real data file.

Quirk #2 — UPI-merged descriptions. SBI mashes the UPI counterparty, reference number and remarks into a single Description field, with inconsistent separators. PlainFinance parses the common patterns automatically, but SBI is the bank where some rows will need a second look later. We'll come back to that.

PlainFinance transactions list showing UPI rows from an HDFC import — the Description column carries the bank's full UPI/MERCHANT/REF/REMARKS pattern unchanged

Save the file as sbi-YYYY-MM.csv and move on.

The three banks at a glance

Three banks, three slightly different statement habits — and one place they all end up.

BankBest formatAuto-detected by PlainFinanceCommon quirk
HDFCExcelYesSeparate debit/credit columns
ICICIExcelYesQuick Statement lacks detail — pick Detailed
SBICSVYesUPI descriptions can be messy

All three land in PlainFinance the same way. Here's what that looks like.

Importing into PlainFinance

You've exported your CSVs. Here's what actually happens when you bring them in — the workflow that makes a personal finance app without bank linking practical day to day.

Upload

Drag one file, or drop several at once, into the Import screen. PlainFinance reads the shape of each file and figures out which bank it came from. There's no dropdown asking you to pick HDFC versus ICICI versus SBI — that's the kind of decision software should make on your behalf.

Upload screen with the drop zone in the centre, the AUTO-MAPPED BANKS sidebar listing HDFC Bank, ICICI Bank, and SBI alongside the Australian banks, and a Recent uploads strip at the bottom

Pick the account

Tell PlainFinance which account this statement belongs to. If the account doesn't exist yet, you'll create it here.

When you do, use the closing balance from the period just before this statement as the opening balance. PlainFinance reconstructs your running balance forward from that number, so getting it right once means every later import lines up cleanly.

Column mapping

For supported banks, mapping happens automatically. You won't see this step.

For anything unrecognised — most credit-card statements land here, along with smaller banks — you get a column-mapping screen. Point at the date column, the amount column, the description. Every bank's format gets normalised into one consistent transaction model, so once you've mapped a source, you stop thinking about its shape.

Column-mapping wizard for an unrecognised bank — first 5 rows of the CSV are previewed at the top, then dropdowns for Date Column, Date Format, Description Column, and amount convention below

Duplicate detection

PlainFinance compares transactions using their date, amount, and description to spot overlaps before they're imported. Re-import a file that covers a period you've already brought in, and the overlapping rows are skipped before anything is written.

After the import finishes, the done screen shows a count of rows imported and rows skipped as duplicates. No silent doubling, no review prompt to manage.

Post-import done screen reading "Imported. Loading your transactions..." with "7 new · 3 duplicates skipped" below it

Transfer matching

When a debit from one account matches a credit into another within a couple of days, PlainFinance automatically pairs the two legs as a transfer. Both rows get categorised as "Transfer" and excluded from your income and expense totals — neither side counts as money in or money out.

This sounds small. It isn't. Treating transfers as income is the single most common reason other tools quietly inflate what you earn — and once that number is wrong, every chart downstream of it is wrong too.

Sometimes the auto-pair gets it wrong, or misses a leg that landed outside the window. Open the transaction from the detail panel and re-categorise it, or manually link the matching pair — both options live in the row's detail view.

The edge cases — split transfers, foreign-currency moves, credit-card payments — we'll cover in a future guide.

Out-of-order months

Life is messy. Statements arrive late.

If month 2 lands before month 1, PlainFinance accepts it. When month 1 finally arrives, the chain backfills automatically and every running balance and downstream chart recomputes. You don't redo anything.


Categorisation is manual today. We'll cover the workflow in a future guide.

The four rows that trip everyone up

Most rows in an export are uneventful. A handful of categories almost always need a second look, and they're the same ones every month. Learning to spot them in advance is what turns categorising from a chore into a five-minute pass.

UPI bundles

Pay the same chai stall three times in a morning and your head remembers one tea break. The export remembers three rows, sometimes with slightly different timestamps and reference IDs. If you want to track the morning as one thing, merge them in your notes column. If you want the granular truth, leave them split. Just don't be surprised when "Rs 180 at the cafe" shows up as six rows across the week.

Inter-account transfers

Money moving between accounts you own is not spending — that's the easy case. The edge cases are where it gets messy. A partial transfer, where you moved Rs 40,000 but only Rs 38,000 cleared because of a daily limit. A transfer initiated on the 31st that settles on the 1st, splitting across two months. Two legs that land four days apart, outside whatever auto-match window you've set. Each of these needs a manual tag, because no rule will catch all three cleanly.

Credit-card payments

The classic double-count. Your savings account shows a Rs 24,000 debit to the card issuer. Your card statement shows the forty purchases that made up that Rs 24,000. Untagged, the same money looks like an expense in one place and gets re-counted as forty more expenses in another.

The fix: tag the savings-account debit as a transfer to the credit-card account. The card purchases stay as your real expenses. The payment itself stops counting.

Refunds and reversals

A refund from last month's return lands as a credit this month. Untagged, it reads as income. Tag it against the original expense category — the net spend for that category drops, which is what actually happened.

Transactions list showing an auto-paired transfer at the bottom — "PAYMENT RECEIVED FROM HDFC SAVINGS XX4521" on the ICICI Credit Card account and "CC PAYMENT ICICI 4521 IMPS" on HDFC Savings, both categorised as Transfer

We'll go deeper on transfer logic in a later post.

Make it a monthly habit

Pick a day. First Sunday of the month works for most people, but any anchor you'll actually keep is fine.

Fifteen minutes is enough. Export from each bank, drop the files in, scan the import summary, confirm the transfer pairs PlainFinance flagged, and glance at the rows that always need attention.

That's the whole loop.

The point isn't budgeting discipline. The point is that a month of transactions is small enough to recognise — you remember the trip, the dentist, the refund. Six months in, you don't. A year in, it's archaeology.

Monthly is the cadence where your money still feels like yours. Quarterly is already a project. Annually is a cleanup job you'll keep postponing. Importing twelve months at once turns a ten-minute review into a weekend project.

Do it once a month and you never have to do it the hard way.

(We'll cover the full fifteen-minute review in its own post soon.)

Troubleshooting

  • "My HDFC export is a PDF." You're on the wrong screen. The default download on most HDFC statement pages is PDF — look for the format dropdown and switch it to Excel or CSV, then re-download. The PDF won't import.

  • "ICICI export has no descriptions." You picked the Quick statement. Go back and re-export using the Detailed option — that's the one that includes the narration column the importer needs.

  • "SBI shows PDF only." You're probably on the Account statement summary, which is PDF-locked. Switch to the Transaction statement screen instead; that one offers CSV.

  • "Duplicate count looks too high." Your export range overlaps with a previous import. The duplicates were detected and skipped, not added twice. Nothing to clean up.

  • "Transfer wasn't auto-matched." Auto-matching needs the two legs to fall inside a short window and to match on amount exactly. If either is off, the match won't happen — open the row's detail panel and link the matching transaction by hand, or re-categorise it as Transfer if the counterpart is in another account.

  • "Balance is off after importing out-of-order months." Running balance is computed in order. Open the account and recompute the balance from the account tools menu — it'll re-walk the transactions from the start and resettle.

Outside India

The walkthroughs above are India-first because HDFC, ICICI, and SBI cover most of the people using PlainFinance today. If you bank elsewhere, the import flow is the same. Only the export screenshots change. Pull the statement, drop it in, get on with your day.

PlainFinance is a personal finance app without bank linking. Stop maintaining bank connections; start maintaining a monthly habit. Start here.