Honest & local-first.
No server ever reads your financial data β it stays on your device, and your browser turns your CSV files into spending data locally. The full source code is public on GitHub, so anyone can verify exactly what it does. I built it for people in the US, Canada, UK, Australia, New Zealand, Singapore, and beyond. Here's how it works.
Last updated August 19, 2026
sent automatically whenever your browser requests a page β true of any site, not just this one
sent to two outside services this app relies on
cdnjs (Chart.js + D3's core) and jsDelivr (the Supabase client + the Flow chart's plugin) β not this app's own servers
Blocking cdnjs breaks every chart. Blocking jsDelivr disables sign-in/sync and just the Flow chart β every other chart keeps working either way.
sent when your browser downloads community-rules.json
CSV import still works β auto-categorization just has fewer built-in matches, so more transactions land in "Other."
+ financial data after sign-in (encrypted)
only if you use the optional VIN lookup when adding a vehicle
NHTSA β used to auto-fill year, make, and model from your VIN
type it in yourself
no financial data
No effect on the app either way β only removes usage stats.
Your data flow
The app saves everything β accounts, balances, imported transactions, budgets, and snapshots β to your browser's local storage. It persists across refreshes and restarts, even without signing in. But this is also the only copy of your data unless you back it up: get a new phone or computer, clear your browser's data, or switch browsers, and it's gone for good β there's no way for me to recover it, since I never had it in the first place. Your browser processes CSV files locally and nothing leaves your device unless you choose to sync. You can export your transactions and budget history as a CSV anytime from the Spending and Budget tabs, or export a full JSON backup β every tab's data in one file: transactions, accounts, net worth snapshots, budgets, categories, and settings β from the β menu in the nav bar (Export data backup) β and import it back on any device to restore everything.
Sign in with Google or a passwordless email link and the app backs up your full data β accounts, transactions, budgets, categories, and snapshots β directly to your account via Supabase (open source). You'll also set a sync passphrase β separate from your Google or email sign-in β and the app uses it to encrypt your data on your device before it leaves. Supabase stores only encrypted data it cannot read β and neither can I. Row-level security policies add a second layer, restricting database access to your own signed-in account. Choose that passphrase carefully: there's no reset. Sign in on any device and enter it to restore everything. Sync doesn't merge changes from multiple devices β if you edit on two devices before either syncs, whichever device saves to the cloud first wins. The other device keeps its edits saved locally and shows a warning that they haven't synced, rather than silently overwriting the newer version β reload there to pick up the latest. If you'd rather your data never leave your device, skip sign-in β the app works fully without it.
Once per session when you open the import screen, the app downloads community-rules.json from Cloudflare. This file contains keywordβcategory mappings the app uses to auto-categorize your transactions. The app sends no transaction data, descriptions, or personal information β it only downloads the rules file. The file lives publicly on GitHub so anyone can audit it. Missing a merchant? Suggest a merchant category β β no account required. You can block this download using any privacy extension β the app will still work, but will skip applying community categorization rules to your transactions. Your own custom rules still apply.
Two separate types of data collection happen when you use this app β they're easy to confuse:
- Server logs β automatic, can't be turned off, standard for any website (see "Cloudflare hosting logs" below).
- Analytics β optional, privacy-respecting, blockable (see "Analytics β what's collected" below).
When you visit this app, Cloudflare records standard server request data: your internet address, browser type, pages requested, and timestamps (this is standard for any website you visit). Cloudflare manages this logging under their own privacy policy β I have no control over it and no direct access to individual request logs. It contains no financial data; Cloudflare applies the same logging to every website on their network. See cloudflare.com/privacypolicy for details.
This site uses Umami, a privacy-respecting analytics tool. It records page views, referrer, browser type, operating system, and country (it infers this from your IP address, which it never stores). Umami sets no cookies, collects no personal data, and never identifies or tracks individual visitors across sessions. You can block it with any privacy extension β the app works fine without it.
Frequently asked questions
These rights apply to users in the EU (GDPR β General Data Protection Regulation), UK (UK GDPR), and similar frameworks elsewhere. I honor them for everyone regardless of location. Because this app holds no financial data on its own servers, its design already satisfies most of these rights β but here's the full picture:
If you have questions about this privacy policy or how I handle your data, there are two ways to reach me:
I build and maintain this app by myself. I read everything. It's free, with no data selling β if it's useful to you, you can support its development.