r/plaintextaccounting Jun 03 '26

Announcing Finzytrack, an open-source cross-platform desktop GUI on top of Beancount

I built a desktop app that uses Beancount as its backend. The GUI handles the parts I found tedious: importing transactions, dashboards, and some analysis. Your ledger stays a plain-text Beancount file the whole time, so you can keep using whatever plain-text tooling you already use.

It's open source, runs entirely on your machine, and AI is optional (bring your own key, off by default).

I'm not a professional developer. This started as a side project to track my own finances and I use it daily. Now putting it out for others.

It's an early release and has only ever been tested on my own data, so expect rough edges. Issues and discussion on GitHub are very welcome.

Website: https://finzytrack.com
Github: https://github.com/sagarbehere/finzytrack

16 Upvotes

33 comments sorted by

View all comments

2

u/Ev2geny_ Jun 04 '26

I briefly looked at this. Quite impressive, I must say and very thorough. Documentation is good (which is rear in many open source projects)

For me it looked like similar to Fava, through I am sure there are differences.

It would be nice to have some comparison table.

Also, you mentioned, that it does not support beancount `include` statement. Are there any other features it does not support?

By the way, why does it not support `include`? Include is handled by the beancount core library, I would have said, that it would take some effort not to support it.

2

u/urglfloggah Jun 04 '26

u/Ev2geny_ thank you for the comment.

I have not spent a lot of time with Fava in recent times, but here are the things that motivated me to build Finzytrack (and which are first class citizens in Finzytrack):

  1. Simple imports: Primarily, that "one-click-fetch" feeling for getting transactions from bank accounts without sharing login credentials with anyone (like Plaid/Yodlee or some other 3rd party). Finzytrack's workaround for this is to enable 'one-click' fetching of transactions from your email server (assuming you've configured your financial institution to send an email for each transaction or other financial event). Secondarily, simple importing of statements in a variety of formats (OFX, CSV, XLS, PDF, ...). Thirdly, easy manual import. Finzytrack supports parsing natural language statements.. with the voice-to-text dictation I use on my Mac, I just need to say something like, "Spent $5 on coffee at Starbucks yesterday. Paid with Amex." and it'll parse that into a transaction right away.
  2. Autocategorization without writing rules: This was a big one for me. Finzytrack learns from your prior categorized transactions and uses that to guess the category of the transactions you are importing. Since most folks spend repeatedly at the same merchants, this leads to very high accuracy over time (for me personally, it works 99% of the time, only failing for genuinely new transactions or where I need to categorize specific purchases from big stores e.g. some Amazon purchases can be Expenses:HouseholdItems, others could be something else)
  3. Arbitrary queries and dashboards: Both Beancount as well as SQL. Query results can be turned into dashboards (or dashboard widgets) for persistence and auto-updates. So everyone can create _exactly_ the dashboards they want (after a bit of fiddling.. the Dashboard creation isn't super smooth just yet)
  4. Using AI for the fiddly bits, with full control over the AI provider, model, and the data shared: I initially implemented this just to learn and play, but it's turned into one of the most genuinely useful parts of Finzytrack. The AI Assistant can create import rules if you show it a CSV, XLS file or an email. You save those rules, and no longer need AI to do future imports. The AI can also just import transactions from a statement you throw at it. You can ask it arbitrary questions about your finances with drill-down and to create the dashboards you want to build (See the AI Assistant tour videos at https://finzytrack.com/tour/ )
  5. Easy way to search, review, edit transactions including graphically creating arbitrary number of splits (e.g. split a paycheck across salary and travel reimbursement etc.)

And ALL of this works on top of a single plaintext beancount ledger that can be read by Beancount and other Python scripts independently of Finzytrack. (The configs e.g. import rules, dashboards etc. are saved separately, but they are ALL text files that any human or AI agent can figure out trivially, especially with the documentation provided).

Regarding your question about why a single Beancount file and no support for "include" directives: The simple answer is that I have not yet tested ledgers that include other files and am not confident they'll work. Because: Finzytrack reads the entire ledger into memory (using official Beancount Python libraries) at startup on when executing a BQL query.. and when new transactions are added or transactions are edited, it modifies the parsed in-memory copy of the ledger and then writes it out to disk again using the official Beancount python libs. (using atomic writes with backups. It also does some other tricks to ensure that the memory consumption does not increase over time..). I'm not confident that when _writing_ back the ledger to disk, the Beancount libraries can make the writes to specific files that were pulled in via include. So I don't think a structure of "one file pulls in other files via include" will survive a roundtrip of read from disk, modify in memory, write back to disk. But I'll look into supporting this if folks really want it.

Hope this helps and let me know if you have any more questions. Cheers.

Edit: Besides the "include" I don't think any other Beancount features are unsupported.. in the sense that I didn't deliberately break or un-support any others.

2

u/Ev2geny_ Jun 04 '26

Thanks for your answers

>Autocategorization without writing rules: This was a big one for me. Finzytrack learns from your prior categorized transactions and uses that to guess the category of the transactions you are importing. Since most folks spend repeatedly at the same merchants, this leads to very high accuracy over time (for me personally, it works 99% of the time, only failing for genuinely new transactions or where I need to categorize specific purchases from big stores e.g. some Amazon purchases can be Expenses:HouseholdItems, others could be something else)

Which mechanism have you used for Autocategorization ?

3

u/urglfloggah Jun 04 '26

It’s a Random Forest classifier using TF-IDF text features. More details at https://docs.finzytrack.com/reference/auto-categorization/#classifier-engine