❝ Nico

Notes

How do I analyse a bank statement without uploading it?

Export CSV rather than PDF, keep it in a folder on your own machine, and point something local at it. The steps, and what each AI provider does with an upload.

Export the statement as CSV from your bank rather than working from the PDF, keep the file in a folder on your own Mac, and point something local at that folder — a spreadsheet, a script, or a model running on your machine. Nothing is uploaded, so nothing is retained, and nothing has to be redacted first.

The steps

  1. Download CSV, not PDF. This is the decision that settles everything afterwards. A PDF has to be read by optical character recognition, and OCR is the step that pushes people to a website. A CSV is already the numbers.
  2. Write down the question first. "What did I spend on contractors each month this year" produces a different file from "which subscriptions renewed twice". Deciding it first is the difference between one pass and five.
  3. Put every month in one folder. One file per statement, named so they sort: 2026-08.csv, 2026-09.csv. The folder, not the file, is the thing you will point tools at for the next two years.
  4. Run something local over the folder. In rising order of effort: a pivot table; a script that reads the folder and writes one summary CSV; a local model via Ollama that can also read the merchant names and guess categories.
  5. Check two totals before you believe any of it. Money out for the month, against the statement. Row count, against the statement. Categorisation is a guess by definition; the totals are not, and they catch a bad import immediately.

Is it safe to upload a statement to an AI assistant instead?

It depends on the tier and the provider, and the answer is checkable rather than a matter of opinion. Three things we read on the vendors' own pages:

  • Claude. On Free, Pro and Max, Anthropic says it "will train new models using data from Free, Pro, and Max accounts when this setting is on", and retention is five years for accounts that allow it and 30 days for accounts that do not. On Team, Enterprise and the API it does not train on your content unless you opt in. (code.claude.com/docs/en/data-usage)
  • Gemini. Google's own notice says "a subset of chats are reviewed by human reviewers", and asks you directly: "please don't enter confidential information that you wouldn't want a reviewer to see or Google to use to improve our services." (support.google.com/gemini/answer/13594961)
  • The OpenAI API. "Data sent to the OpenAI API is not used to train or improve OpenAI models (unless you explicitly opt in to share data with us)", with abuse monitoring logs kept up to 30 days. (developers.openai.com/api/docs/guides/your-data)

We have deliberately not written a line here about the ChatGPT consumer tier. Its policy belongs to OpenAI's own consumer pages, those pages would not open to us on the day this was written, and repeating another website's summary of a third party's terms is not a fact. Read it yourself before you upload a statement.

The trap in "it runs locally"

A coding CLI running in your terminal feels local, and it is — the process is. The model is not. When Claude Code or Codex reads your CSV, the contents of that file become part of the prompt, and Anthropic's documentation states that the data sent over the network "includes all user prompts and model outputs". A file read in your own working directory needs no approval to be read, either: file reads inside the working directory do not prompt.

So "I ran it in my terminal" and "it never left the machine" are two different claims. The second one is only true if the model is also on the machine — a local Ollama model, or no model at all and a plain script.

Why this turns into work

None of the above is hard once. It is hard in November, when the statement arrives again and the prompt, the column choices and the category rules are gone. The converters win the first pass and lose the twelfth, because they were never built to be the thing you still have.

Nico's showcased version of this job is the one that assumes a twelfth time: drop the export in, it categorises and charts, and it keeps every month you have ever dropped in — in a data folder that survives every run, on the Mac the statements are already on.

← All notes