How to Analyze Your Bank Statements With AI (No Upload)

You can analyze your bank statements with AI without uploading them anywhere. The method: export your transactions as CSV or Excel files, open Claude Code in the folder that holds them, and paste one prompt. Claude writes a small Python pipeline on your machine, runs it against your files, and hands back a single offline HTML dashboard you open by double-clicking. No bank login, no account linking, no file leaves your computer. I built this tool, and the whole point was to read my own statements without trusting a stranger's server.

This guide walks through what your bank app hides, why the upload-based alternatives are a privacy problem, the four steps to do it yourself, and what the finished dashboard shows. The tool is free and open-source.

What your statements know that your bank app won't tell you

Your banking app shows you a balance and a list. It rarely shows you the shape of your money. The raw export, though, contains everything: every merchant, every date, every recurring charge you forgot about. The problem is that a CSV with 7,000 rows across seven accounts is unreadable by hand.

Here is what falls out once the data is actually analyzed:

  • Forgotten subscriptions with a real run-rate. Not just "you pay Spotify," but the true dollars-per-month each recurring charge costs you, including the annual ones that hit once and hide. When I ran it on my own accounts, it surfaced roughly $178 a month in active digital subscriptions and about $574 a month once every recurring bill was counted. I cover this view in depth in how to find forgotten subscriptions.
  • Spending by category, over years. Where the money goes, how that mix shifts season to season, which categories crept up while you weren't looking.
  • Money flow between your own accounts. The cash you shuffle from chequing to savings to a credit-card payment is not spending. Most tools count it anyway. A proper analysis separates it.
  • Counterparty history. Everything you ever sent to or received from a specific person or company, on one timeline.

None of this needs a bank to be involved a second time. The data is already in the file you exported. It just needs something to read it properly.

Why uploading to a finance app is a privacy problem

Almost every "AI bank statement analyzer" you'll find works the same way. You hand them your file or, worse, your bank login, and their servers do the work. DocuClipper, bankstatement.app, and similar services all ask you to upload first. Many personal-finance apps go further and use an aggregator to connect directly to your bank.

Two things happen when you do that.

First, your full transaction history sits on someone else's machine. The privacy policy might promise to encrypt and delete it. You're trusting that promise, plus the security of every employee and subcontractor who can reach that server. Financial data is the single most sensitive category most people own, and the breach history of the sector is not reassuring.

Second, account-linking apps see everything, continuously. Bank-aggregation middlemen sit between thousands of apps and your bank. The U.S. Consumer Financial Protection Bureau has spent years fighting over who gets to hold and resell that data. When the product is free and the company is large, your spending behavior is frequently the asset being monetized.

The local approach removes the server from the equation. The script runs on your laptop. It reads files that are already there. It writes a dashboard to your disk. The prompt itself contains a written instruction telling the model never to transmit your data, and because you can read the prompt before running it, you can confirm that for yourself. There's no login to phish, no aggregator to resell you, no retention policy to take on faith. If the tradeoff for that is exporting a few CSV files by hand, I'll take it every time.

Local AI vs. upload-based apps vs. spreadsheets

ApproachWhere your data goesSetup effortDepth of analysisCost
Local AI (this tool)Stays on your machine; nothing uploadedExport files, paste one promptSubscriptions, flow-typing, Sankey, heatmaps, audit readFree, open-source
Upload-based analyzer / finance SaaSYour file or bank login on their serversSign up, upload or link bankVaries; often surface-level categorizationFree tier limits, then paid
Manual spreadsheetStays on your machineHours of formulas and cleanupOnly what you build by handFree, your time

The spreadsheet keeps your data private but costs you an afternoon and breaks the moment a new export has different columns. The SaaS is fast but moves your history off your machine. The local AI route keeps the privacy of the spreadsheet and the speed of the SaaS.

How to analyze your bank statements with AI, step by step

You need Claude Code installed. That's the one real prerequisite. After that, the process is four steps and takes a few minutes of your attention while the pipeline runs.

  1. Export CSV or Excel files from each bank and card. Log into every account you want to include, find the transaction export, and download CSV, XLS, or XLSX. Drop them all into one folder. Don't reformat them, don't clean them, don't merge them. Different column layouts in the same folder are fine. The parser adapts to whatever each institution gives you.
  2. Open Claude Code in that folder. Point Claude Code at the directory holding your exports. This is the folder it will read from and write the dashboard into.
  3. Paste the prompt. Copy the exact prompt and paste it in. Claude reads your files, writes the four-stage Python pipeline, and runs it. You'll watch it parse, classify, and build. If a statement format is unusual, it adapts. You don't write code.
  4. Open the offline dashboard. The pipeline writes one self-contained HTML file. Double-click it. It opens in your browser and runs with your internet off, because the charts are inlined into the file. That's your finished analysis. Want to see the result before you run anything? The live demo uses fictional data: seven accounts, 7,110 transactions, 85 months.

The honest limits: you need Claude Code, and you export the files yourself. There's no magic button that reaches into your bank. That manual export is the price of nothing being uploaded, and it's the whole reason the tool can promise what it promises.

What the pipeline does under the hood

When you paste the prompt, Claude builds a four-stage pipeline. Each stage does one job, in plain terms:

1. Parse

It reads every statement, no matter the column layout, and normalizes them into one clean table. It reconciles each account to its stated totals so the numbers tie out, and it de-duplicates rows when you've exported overlapping date ranges. On my own AMEX, the parser reconciled to the statement totals to the cent.

2. Classify and flow-type

This is the stage that separates a real analysis from a glorified spreadsheet. Every transaction gets a flow type: spend, income, internal transfer, card payment, person-to-person transfer, investment, interest, fee, cash, refund, or foreign exchange. The consequence matters. An internal transfer between your own accounts and a credit-card bill payment never count as spending. Most tools quietly double-count both, which is how people end up thinking they spent twice what they did. On top of flow-typing, it categorizes each merchant and detects recurring charges and subscriptions.

3. Aggregate

It rolls the classified transactions up into the totals the dashboard needs: monthly run-rates, category sums over time, counterparty ledgers, daily spend for the calendar.

4. Render

It writes one HTML file with the Apache ECharts library inlined, so the result is fully offline. No server, no build step, no dependencies to install. You double-click and it works.

What the finished dashboard shows

Open the file and you get a dense, interactive view of your money. The main sections:

  • Subscription finder. Every recurring charge with a true monthly run-rate, so the once-a-year renewals show up as their real per-month cost.
  • Spending by category over time. Stacked bars across months and years, with a drill-down treemap to go from a category into the merchants inside it.
  • Daily-spend calendar heatmap. A GitHub-contributions-style grid where each day is shaded by how much you spent. Patterns jump out fast.
  • Money-flow Sankey. A diagram of how cash moves between income, your accounts, and where it ends up, with transfers correctly separated from spending.
  • Per-counterparty timelines. Click a person or company and see every transaction with them on one chart.
  • Tax-audit risk read. A plain-language assessment of audit-risk signals computed from your own numbers.

It runs dark or light, the charts zoom, and the whole thing is one file you can archive or delete. To see all of it populated with safe, fake data, open the demo.

FAQ

Is it safe to analyze bank statements with AI?

It depends entirely on where the analysis runs. Most online bank statement analyzers upload your file to their servers, so safety comes down to trusting their deletion policy. The local approach is different: the Python pipeline runs on your own machine, reads files already sitting in a folder, and produces an offline HTML file. Nothing is transmitted. The prompt explicitly instructs the model never to send your data anywhere, so the analysis happens where your statements already live.

Do I need to know how to code?

No. You export CSV or Excel files from your bank, open Claude Code in that folder, and paste one prompt. Claude writes and runs all the Python for you. You never edit a script or touch a terminal command beyond opening Claude Code. If you can download a file and copy-paste text, you can run this.

Which banks and cards does it work with?

Any bank or card that lets you export CSV, XLS, or XLSX. The parser reads whatever column layout your institution uses and adapts to it, instead of expecting one fixed format. The demo combines seven different accounts from different providers, so mixing a chequing account, two credit cards, and a savings account in the same folder works fine.

Does it upload my data to Claude or anywhere else?

No. The pipeline reads your files locally and writes a self-contained HTML file to your disk. The charting library is inlined into that file, so even the finished dashboard works with your internet disconnected. The prompt tells the model in writing never to transmit statement data. You can verify this by reading the prompt before you run it.

What does the finished dashboard actually show?

A subscription finder with a true monthly run-rate for each recurring charge, spending by category over time as stacked bars with a drill-down treemap, a GitHub-style daily-spend calendar heatmap, a money-flow Sankey diagram, per-counterparty timelines, and a tax-audit risk read. Internal transfers and credit-card bill payments are flagged separately, so they never inflate your spending totals.

Try it

If you want to read your own money the way you'd read a report, this is the fastest private way I know. Grab the exact prompt, point Claude Code at a folder of your exports, and open the dashboard it builds. Or look at the demo first to see what you'll get. The tool was built by Space & Story, an AEO-first web studio, and the code is open on GitHub if you'd rather read it before you run it.

Try it on your own statements

Free and open-source. Nothing leaves your machine.

Keep reading