Ghost Charges: a local Gemma 4 finds the subscriptions still haunting your bank statement
Description and use
Ghost Charges uses a local Gemma 4 model to read bank statement lines, then Python code groups and flags recurring subscription charges, producing a concise summary table.
Problem
Users cannot easily identify recurring subscription charges in their bank statements, leading to unnoticed fees.
Outcome
Ghost Charges identified 7 recurring charges totaling $1,510.52 per year in a synthetic statement, with detailed reasons for each flag.
Workflow
- Export bank statement as CSV
- Run the Ghost Charges command on the CSV
- Gemma 4 E2B reads each unique line and outputs merchant name, quote, and kind
- Python rules validate the reading and merge similar merchant names
- Python groups charges by merchant and frequency, calculates yearly cost, and flags anomalies
- Output a table of recurring charges and audit trail
Evidence
Ghost Charges finds them. Export a CSV from your bank, run one command, and get a table like this:
Gemma 4 E2B reads about one statement line every 2 seconds, so 28 unique lines took under a minute.
The model only reads, plain code does everything else.
I scored both versions against hand-made answer keys: ... Gemma + rules 8/8 exactly right.
- Record date: 2026-11-02T07:14:12.486Z