finds.dev← search

// the find

wesm/moneyflow

★ 274 · Python · MIT · updated Sep 2026

Moneyflow: Personal Finance Data Interface for Power Users (supporting backends like Monarch Money, YNAB)

A Textual-based terminal UI for editing and analyzing personal finance transactions across Monarch Money, YNAB, SimpleFIN, Amazon order history, and raw bank CSV exports. It's aimed at people who already track their finances in one of those tools but want fast keyboard-driven bulk recategorization and multi-dimension analysis instead of clicking through a web dashboard.

The multi-select bulk edit workflow (select, change category/merchant, review diff, then commit) is a real feature, not just a gimmick — it's the one thing spreadsheet-style budget apps are consistently bad at. The codebase takes engineering seriously for a personal tool: pyright type checking, ruff format/lint, a real pytest suite plus separate integration tests, and CI workflows, rather than the usual single-file finance script. It also ships an MCP server, so an LLM agent can drive the same transaction data instead of only a human at a keyboard.

The Monarch Money backend depends on a reverse-engineered, unofficial GraphQL client (derived from hammem/monarchmoney) with its own gql_version.py — that's a single point of breakage anytime Monarch changes its schema, and there's no official API to fall back to. Credential encryption is AES-128 with PBKDF2 at 100,000 iterations, which was reasonable a few years ago but is below current OWASP guidance (600k+ iterations) for a tool storing bank credentials. CSV import only ships a mapping for Chase out of the box, so anyone on a different bank has to write their own mapping module before the CSV path is useful. And being terminal-only is a genuine adoption barrier for anyone who isn't already comfortable living in a TUI.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →