All projects
Local-first

Quicken Analysis

Thirty-two years of a Quicken register, turned into one self-contained dashboard that never touches the network.

Platform
Command line
Written in
Python
Requires
Python 3.10+ · uv
License
MIT

Quicken has thirty-two years of my financial history in it and almost no useful way to look at that history as a whole. This reads the register export and builds the view I actually wanted: what we really spend in a normal year, what that trend has done over three decades, and what it implies about when work becomes optional.

The output is one HTML file. Not a site, not a server — a file. It opens from file://, with Chart.js vendored and the entire dataset inlined.

Nothing leaves the machine

This is the whole reason it is built the way it is. There are no network calls, no CDN links, and no analytics in the generated dashboard. Chart.js is vendored into assets/ rather than pulled from a CDN, so the file works on a laptop with the Wi-Fi off and keeps working in ten years when that CDN URL has rotted.

data/raw/ is gitignored. Real financial data never enters version control.

Running it

uv venv .venv && uv pip install --python .venv pandas pyarrow pytest
.venv/bin/python src/build_dashboard.py
open output/dashboard.html

Re-export from Quicken whenever you want fresh numbers, drop the CSV into data/raw/, and re-run. The newest CSV in that folder is picked up automatically.

Exporting from Quicken Mac

The parser expects Quicken's exact layout — a seven-row preamble, a blank leading column, and a three-row footer — so the export settings matter:

  1. Open the register and select the All Transactions view.
  2. Set the date filter to All Dates and the account filter to All Accounts.
  3. File → Export → Report to CSV.
  4. Save it into data/raw/, and do not edit the file.

What it computes

A true spending baseline. Raw yearly totals are useless because they are dominated by one-off events — a roof, a car, a wedding. The build separates recurring spending from one-time spending so the baseline reflects what a normal year actually costs.

Net worth over time, assembled from account balances across the full history rather than from a single point-in-time snapshot.

Savings rate, as income minus true spending, tracked per year so the trend is visible rather than just the current number.

A FIRE-style projection that takes the spending baseline, applies a withdrawal rate, and shows what the number would have to be — and given current savings rate, roughly when.

A caveat worth stating

The projection is arithmetic, not advice. It assumes a constant real return and a constant withdrawal rate, and it does not know about taxes, sequence-of-returns risk, healthcare before Medicare, or anything else that makes real retirement planning hard. It is a good way to see the shape of the problem and a bad way to make an irreversible decision.

Next

Chladni