CSV import is the most underrated feature in personal finance because it gives you everything bank-sync gives you — your real transaction history — without handing your banking credentials to a third party. It is also where people create the biggest mess: duplicated transactions, scrambled dates, sign errors, and an "uncategorized" pile they never recover from. Done methodically, it takes fifteen minutes and is clean for good.
Here is the method that avoids the mess.
Your history, no bank link required
Finman makes CSV import a first-class path — manual and verifiable, not a fallback.
Import My CSV FreeStep 1 — Export the right file from your bank
Almost every bank can export transactions, but the option is often buried under "Statements", "Download activity", or "Export". Choose CSV (not PDF — a PDF statement is an image of data, not data), and select the widest date range available; many banks default to 90 days but allow 12–24 months if you ask for a custom range.
Pull the longest history you can in the first import. Re-creating budgets and finding patterns needs at least three months and ideally a year — importing only the last month means redoing this later. Export each account separately and label the files clearly (checking, savings, each card) so you do not merge two accounts by accident.
Step 2 — Understand the four columns that break every import
Bank CSV formats are not standardized, so almost all import problems trace to four columns. Open the file once and check each before importing anything.
- Date: the universal trap. Is it DD/MM/YYYY or MM/DD/YYYY? On dates after the 12th it is unambiguous; on the 5th of March it silently becomes 3 May. Confirm the format explicitly.
- Amount sign: some banks use one signed column (−45.00 for spend); others use separate Debit and Credit columns. Mishandling this flips every expense into income.
- Description: often a cryptic merchant code (SQ *COFFEE 0123) rather than a clean name — this is what categorization has to work from.
- Balance: a running-balance column is informational only. Never import it as a transaction or every row doubles.
Five minutes reading the header row prevents an hour of cleanup. The date and sign columns cause the overwhelming majority of broken imports.
Step 3 — Map columns deliberately, then dry-run
A good importer asks you to map your file's columns to date, description, amount, and (if present) the debit/credit split — confirm this mapping rather than trusting an auto-guess, especially the date format and sign. Then import a small slice first: a single recent month, verify a handful of transactions match your real statement (right date, right sign, right amount), and only then import the full history.
The dry-run is the difference between catching a date or sign error on 30 rows versus discovering it on 2,000. Finman supports CSV import as a first-class path with no mandatory bank link, so this manual, verifiable flow is the intended way in — not a degraded fallback.
Step 4 — Prevent duplicates before they happen
Duplicates are the most common post-import mess and they come from predictable causes. Avoid all of them up front:
- Overlapping date ranges: if last import ended 30 April, the next starts 1 May — never re-import a covered period.
- Re-importing the same file "to be safe": do not. Confirm the first import worked instead of stacking a second.
- Pending vs posted: a transaction can appear pending in one export and posted (slightly different amount/date) in the next — import on posted transactions only.
- Same transaction in two account files: a transfer between your own accounts appears in both — decide once how transfers are handled and stay consistent.
Keep a simple note of the date range each import covered. That single habit eliminates the largest category of CSV mess permanently.
Step 5 — Clean categories once, then let it learn
After import you will have a block of transactions to categorize, dominated by cryptic merchant strings. Resist doing this perfectly in one marathon — categorize the highest-value and highest-frequency merchants first; the long tail of one-off small charges matters far less to any decision you will make.
Finman proposes categories and learns from your corrections: fix a merchant once and future transactions from it land correctly automatically, including in your next import. That makes the first import the expensive one and every subsequent import progressively cleaner — the opposite of the usual CSV trajectory where the mess compounds.
Frequently Asked Questions
How do I import a bank statement CSV?
Export transactions as CSV (not PDF) for the widest date range, one file per account. Check the four columns that break imports — date format, amount sign, description, and a balance column you must not import as a transaction — then map columns deliberately, dry-run a single month and verify it against your real statement, and only then import the full history. Track which date range each import covered to prevent duplicates.
Why are my imported transactions duplicated or wrong?
Duplicates come from overlapping date ranges, re-importing the same file, mixing pending and posted transactions, or the same transfer appearing in two account files. Wrong amounts or dates usually come from a misread date format (DD/MM vs MM/DD) or a mishandled debit/credit sign. Checking those columns and never overlapping ranges prevents both.
Can I use a budgeting app without linking my bank?
Yes. Finman treats CSV import and manual entry as first-class paths with no mandatory bank link, so you get your full real history without giving banking credentials to a third party — useful where bank-sync coverage is thin or you simply prefer not to link accounts.
Do I have to categorize every imported transaction by hand?
No. Categorize the highest-value and highest-frequency merchants first and skip the small one-off tail. Finman proposes categories and learns from your corrections, so fixing a merchant once makes that merchant land correctly in every future import automatically.
Make every import cleaner than the last
Finman learns your categories from corrections so the first import is the only expensive one.
Try Finman FreeRelated reading: How to Track Expenses · Best Mint Alternatives · How to Make a Budget