Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: ExpenseOwl – Simple, self-hosted expense tracker (github.com/tanq16)
225 points by import-base64 6 days ago | hide | past | favorite | 89 comments





I built my own similar tool for my wife and I, with the same goal of making entering transactions as fast as possible, and one thing I found useful was predictive form filling.

Some categories have the same thing logged over and over (like for the "Gas" category I always made the title "Gas") so when you select the "Gas" category it prefills the title field with the most common transaction title for that category. Also works in reverse, if you enter the transaction title first it will guess the category.

I also optimized the date picker. We budget month to month, so when you're in this month's budget, all you have to select is the day. No need to select month and year, as so many default date pickers do.

Just some tidbits in case they interest you as well!


Wouldn’t importing a credit card statement eliminate the need for manual entries?

I don’t use an expense tracking tool - apologies if my question may is missing context.


Most banks don't have an API, and statements are (often) lagged, sometimes even by a week or a month depending on how archaic the systems are.

The Canadian government has apparently introduced a framework for sharing your banking data securely with third parties (budgeting apps, financial products) in an effort to eliminate this shady screen scraping and credential sharing that a lot of these kind of apps do. Hoping they actually follow through...

https://www.canada.ca/en/financial-consumer-agency/services/...


Lots of providers exist for bank information, Plaid is one of them. That's what many of these auto import personal finance softwares use.

Having used Plaid, it is essentially web scraping as a service. It's an API built on top of very questionable access. It itself is not a formal API provided to you by the bank.

Yes it is (I never said it wasn't), but it works. They are working with banks to modernize their APIs as well.

Easier said then done. Most softwares Ive used that attempted this did so poorly. However it is getting better.

Whatever happened to the Quick Interchange Format(.qif)? It used to be common for all banks to support that. A modern variant today could just be a XML or JSON export, and I hardly see that either.

I did that for a while, but I always spent a lot of time retracing my steps to properly label most transactions. I think I'll try the tool listed here, if it is simple enough to manually enter transactions I can do that every evening and get better data in the end than a monthly review.

i agree, intention behind this project is - select a category add cost and done! no tags, no wallets, no budgets

Actual Finance (similar open source software) does this via SimpleFIN Bridge. It even supported connecting a credit card option that rocket money doesn't.

How does one import credit card statements reliably in the USA?

I can't find the library right this second but there's a JavaScript library that takes human date descriptions, like "last Friday" and creates a date object. Depending on users' typing speed that might be another convenience factor thing.

These sound great in theory but as an app user I have found their implementation can range from deeply irritating to downright broken. Anti-use cases off the top of my head might be (this was from a calendar/reminder app):

- I write myself an appointment on Monday to remind myself to plan a meal for next Friday, so the app silently moves the Monday app to Friday without telling me just because the words "next Friday" appeared in the event title

- I want to quickly note an appointment for a specific time including an address in the title, when the street number is something like 10A - the app aggressively decides (again without warning me) that I want the appointment to be at 10 a.m. instead of the time I originally suggested when creating the event

In the case of that particular app, I just turned off the "natural language" feature globally - shame because it could have been useful if it was less aggressive in its interpretations and silent modifications of my previous choices, but the app developers told me other users are happy with it so there is no reason to fix it.


I think org mode has a great implementation of it. It works when setting a date parameter to, say, "Friday" and the scheduler will pick the closest Friday and turn it into a proper date, so there is no ambiguity later.

To be fair, even a massive LLM is not able to handle this properly

https://chatgpt.com/share/67a8ef08-de44-800a-a0e2-b2523035ee...


Ooh those are good test cases for the calendar event creator with natural language parsing app I'm building :)

Another approach might be to build an app that parses the SMS trails that card transactions generate to reduce the need for manually entering transactions.

This is exactly what I did for my DIY solution, it's quite amazing how far you can get with some SMS parsing.

Initially I was still missing quite a lot of transactions, as there isn't a SMS for non-CC payments, but then I realized I could just grab the information from the 2FA confirmation, as it had all the important details.

I'm not so good on the frontend, so I'm still using redash to build charts, dashboards and alerts, but it's fine for keeping an overview.

Long-term I would still like to switch to parsing the statement PDF from the bank, especially since there's an option to receive them automatically at the end of the month, but I'm dragging my feet on that one, as parsing tables from PDF is surprisingly difficult. Even though the actual text is embedded in the PDF, getting it in the correct layout has proven impossible so far. Or maybe I'm just missing some piece of the puzzle?


You can also use an Android + Tasker and forward the notifications to this service. I get one for each order independent of the price.

.. What are these sms trails? Ive never heard of this.

Some banks allow setting up alerts for transactions of more than a threshold. It's possible to set this threshold to a very low value thus getting all transactions logged as texts.

I am not sure how this system handles US tips though; the notification may come in before the tips are added and the CC transaction is finalized.


Notification for transactions being parsed or scrapped for data

thank you! those are good thoughts!

Built my own expense tracker on top of Teable.

I’m partly lucky because I live in Taiwan and almost any receipt here comes with itemised breakdown as a QR code, so I can scan that from my phone and pipe it off to a queue for ingestion

Didn’t want to use LLMs, but wanted automated categorisation of transactions, did that with some vector embeddings and Semantic Router (https://github.com/aurelio-labs/semantic-router).

… oh and it’s run off a RPi, yes the embeddings as well


Just curious, you didn’t use the e-invoice solution (載具)?

Wanted to build my own dashboards for spend, instead of using an app, that’s basically it.

I might apply for the 載具 API at some point, but for now it works great


Interesting.

Any code you want to share?


Will wrap it up in a blog post, stay tuned. I think the interesting part is the categorisation

Very nice!

I wrote an app like this a while ago in Node.js, the problem was that I found it annoying having to remember evrrything until I get back home and boot up my laptop to add new entries, so I decided to rewrite the backend in Golang so that it can run as an executable file, embedded the frontend React.js files into the Golang executable file, changed the DB from MongoDB to SQLite, and ran it on my Android phone using Termux.

I could have run it without rewriting the backend and changing the database, but I don't want to run Node.js and MongoDB on my phone...


Thanks for building and sharing this!

A few years ago I did a deep dive on expense-tracking apps/services - ostensibly to write a big comparison blog post about them all - but that never happened - but really because I wanted something just like this but without all the bells and whistles that most apps have.

The two biggest gripes I remember having when I did that deep dive:

1) It sounds so simple, but most apps/services which promised "import your statements and we'll take care of the rest" simplicity fell down over the simplest issue: If I have my monthly rent auto-drafted, and some months it shows up on the 31st and other months on the 1st, for example, the apps absolutely could not handle that (and I'd have a month with double-rent showing in my breakdown).

2) I just had no interest in budgeting functionality built in. Lots of people do. I didn't - I just wanted to see a simple breakdown of expenses just like ExpenseOwl (hence my extra thank-yous). SO many apps assumed that budgeting functionality was a must-have that they over-complexified things and forced the user to enter budgets, etc.


appreciate it! thank you for showing support!

Generally looks like a promising idea even in a deeply-competitive space, however the "selling point" of having pie charts to summarize your monthly spending does absolutely nothing for me - I know, banks etc use them in their marketing of "modern" online tools too, so they look kind of cool, but in practice for decision making about personal finance I find them absolutely useless. What I need to know on a regular basis, during a given month and at the end of the month, is: how much have I spent in general, compared with how much I planned to spend? Am I overspending in a particular category that I need to correct to keep my monthly budget on track, e.g. a fixed allowance for eating out per month, have I spent it all by week three or can I afford to have one more fancy dinner with my wife or with friends and still stay within my budget? Ninjinka's tips sound pretty positive about making the UI friction-free for keeping transactions up to date, because it's my responsibility to put good data in; however if the reporting/charts doesn't tell me anything actionable in an easy to read format then there's no point.

> What I need to know on a regular basis, during a given month and at the end of the month, is: how much have I spent in general, compared with how much I planned to spend? Am I overspending in a particular category that I need to correct to keep my monthly budget on track, e.g. a fixed allowance for eating out per month, have I spent it all by week three or can I afford to have one more fancy dinner with my wife or with friends and still stay within my budget?

Don't most personal finance apps have this? You can set a budget for a category per day/week/month and see how much you spent and how much you have left to spend.


thank you, i'll take this as food for thought and see if i can improve the datavis!

I agree, if you need insights related to budgeting, then I recommend Actual or Firefly, as noted in readme. This app is strictly intended to be simpler. no budgeting, just tracking.


almost none such tools touch the problem of future planning or projection. it's kind of strange but perhaps it reflects culture. nothing beats making your own spreadsheets.

What kind of future projection are you looking for? My main issue is not all months are the same, sometimes I might spend way more in a given month for a given category (perhaps a one-off purchase like new furniture) that I don't aim to replicate for the next month, so how would the projection work in that case?

You create buffer categories that you slowly fill up over time and use for these one-offs. YNAB calls it "rolling with the punches". Most categories are predictable month to month, and the ones that aren't or are one offs you budget separately for.

Yeah that's essentially what I do, or have a yearly budget for things like furniture rather than a monthly one. I just wish it was more standardized in many apps.

Tangential, is there a service manager which can run 10 X 100 MB services in a 800MB homelab computer by hibernating services which didnt receive requests?

That's cool and thanks for sharing! If you are looking for future direction generating reports by category and overall and ability to add attachment of PDF/photo receipts to individual items is really helpful. I use these type of tools to keep track of business expenses for my corp (employee n=me) for my accountant come tax time and have never found the right tool for it. Tried even abusing invoiceninja, craterapp, a few others outside their use case. Eventually I settled on paperless-ngx (pulls from scanner, email address off phone) manual entry into excel now seatable for this on this but still not ideal. Firefly III seemed useful but daunting. I don't need double ended accounting or care about budgeting where I spend money... just receipt, table, report, print all and end of year.

thank you! that's a good suggestion! i kept the pie charts monthly for simplicity. I think adding an annual or all time report doesn't take away from simplicity. I'll look into prepping an insights pdf and having a button for that. cheers:)

This reminds me of Kanboard in how focused and simple it is: https://kanboard.org

That's a really good thing, you don't always need heavyweight solutions with bunches of features that love to eat a lot of RAM (and CPU), sometimes a simpler option is fully sufficient.

Especially because this one doesn't try to tackle complex problems like auth, if it's for personal use, you can just put basicauth (over TLS), mTLS, OIDC (Relying Party) or whatever your heart desires in front of it.


thank you! glad you like it!

Haha, I guess people making their own expense tracker a thing.

Because I built mine but it's a bit more rudimentary


I wish I could figure out how to take pictures of receipts and OCR them into something like this.

pytesseract

At one point I started to design a motorized receipt reader but also another way that could work, a sandwiching mechanism like a scanner, lay em all down like a masonry grid, flatten and scan

Probably phone app is easiest


No need to OCR, just use Gemini Flash 2.0. It's great at this.

How is it not OCR?

Yes I’m curious too.

Checked out the readme and the screenshots and this looks quite polished.

I didn't see anyway to connect with my bank accounts and pull this information. Would you be open to adding an integration like this? Maybe through Stripe financial connections, or the Plaid APIs?


Once third party integrations like those come into play, I feel that this may become less “simple” and more of a full time job for the maintainer.

(Tools with integrations like these are generally incredibly useful though, they tend to be paid and would need to run as a service)


thank you! glad you like it! currently the intent is to be a simple and fast expense tracker, so there are no plans to integrate banks and auto-combing transactions.

How about a CSV import? My banks all have an option to export transactions to a CSV file. You would need an import tool to create the mapping though.

I suppose you could parse csv file yourself and the api with curl? No need to add this feature in the app.

yes, this is the intended way for now

I have been using Spliit (https://github.com/spliit-app/spliit). We've added over 5k transactions on it and don't have any complaints so far.

nice that's a pretty cool project!

different intent from my project, but glad you introduced it to me! thanks


Very simple expense tracker. I like it.

This is the same idea I had building Simple Wallet (https://simplewallet.app). I didn’t want a budgeting app telling how and where to spend. I simply wanted an app to track and organize my money.

I’ve been thinking about how to visualize money. I don’t think pie charts are the way to go. I’m thinking something like RuleMark on SwiftUI.


Not sure if this beats an excel file shared on Google drive?

Yes, for sure. The entries in this app is not scanned by Google.

Entering data into a Google Sheet on mobile is not fun in my opinion.

The approach I took to make entering data in to sheets a little less awful:

1. Setup the google sheet

2. Create a simple AppScript script that accepts Name/Amount/?Date

3. Attach AppScript to the google sheet

4. Set up shortcut through the Apple Shortcuts app to ask for the inputs and create a simple POST to the script URL

So adding an expense is simply clicking the Shortcut icon and entering in the data. No need to open sheets itself


haha! i hope it can! lemme know!

Looks like a solid project, will be interested in giving it a shot

Aside: I built my own expense tracker [1] as well to categorise expenses using LLMs as I needed a quick way to log the entries. I’ve been meaning to export these to Actual budget for a detailed analysis but haven’t done that yet.

[1]: https://github.com/mr-karan/gullak


thanks! yours looks great too, love the report aspect

I’ve been wanting something like this for a while. Was even thinking of building one myself. You beat me to it.

I like the simplicity. It’s just a quick add and then it’s in the pie chart. Think this could ever be integrated with bank spending automatically? I think that running locally would make you feel safe doing do.


thank you! for now the intent is to self host and keep it simple and private; so there's no plan to integrate banks.

I've been building something similar for calorie tracking as well. A lot of the apps I've tried don't let me add meals quickly enough (repeat meals from the past, or new ones) or let me enter calorie formulae, and there's a bunch of unnecessary features like goal-setting.

I'm glad that something like this exists!


thank you! look forward to your calorie tracker app!!

I'll give this a go So far Actual Budget is pretty good, although I wish the dashboard was a bit more extensive.

Im curious what you dont like about the dashboard? Ive been using Actual since the day it went open sourced, and the Custom Reports really make the 'dashboard' whatever I want it to be.

Theres a couple tiny things I wish would be implemented that Ive suggested on Github, but the core is solid.


Actual is cool but its lack of solid integration with the open banking standard (as is used in Australia and other countries) made it a bit annoying as its partnered integrations are pretty rough.

The open banking standard isn't actually all that open.

As a customer you cannot gain access, at least easily. You need to apply for accreditation as a third party financial services provider.


I use a simple spreadsheet and I like inputting my transactions manually instead of automating imports. Makes me think twice about my spending. Spreadsheets are flexible enough so I can extend functionality if and when I want.

100% agree, that's the precise use case for this app!

Did something similar based on Metabase for the UI. Transaction stored in a basic Postgres table and regex on my bank transaction export for categorisation.


This looks super simple to pull into Sandstorm to provide authentication around it... so we're going to give it a try!

thanks! also my first time learning about Sandstorm, will read more about it!

The UI looks nice, but feature wise, I think I would rather go with Firefly III. It is a lot more complete.

for sure, i agree with you! i mention firefly and actual both in my readme as much more fleshed out options. intent behind this app was strictly to be simple.

This is super cool!

I was looking for something like this just a few days ago. Ended up going with Flow[1], an open source Android app, because I wanted something that I could enter data on from my phone and run completely locally there. I don't yet have Tailscale running, or some other solution to access my homelab on the go. But it's great to see more and more software designed to run on people's local networks. And from the screenshots ExpenseOwl is the next tool I'd try if Flow doesn't work out... Getting Tailscale or a similar solution up and running is also on the to-do list.

I know other people want direct integration with banking APIs, but for me it's actually a feature to have to enter everything manually. I'm deliberately working on better spending habits, and having a local set of data with me which is actually sometimes ahead of my bank in terms of cleared transactions is good. It means I build the habit of entering and categorizing each time I spend money, and it means I have to regularly reconcile accounts. It's only a hypothesis, but I suspect in the era of checkbooks the practical fact of having to keep up the books manually enforced better spending habits.

[1a]: https://play.google.com/store/apps/details?id=mn.flow.flow

[1b]: Also, github: https://github.com/flow-mn/flow

N.B. There's another expense tracker on the Play store, also called "Flow", which AFAICT isn't open source.


Flutter, nice. How well does the syncing work? I was playing around with making my own personal finance tracker and syncing via CRDTs.

Edit: ah, it's not available on web or desktop which is a shame (looks like you can build and run it but it's more so DIY and no UI optimizations for larger screens, they say on the README), I would do more serious personal finance work on a bigger screen rather than a phone. They could easily add these platforms as it's on Flutter, not sure why they haven't already.


thank you! totally with you on building the habit of manually tracking and being aware of where my money goes! hopefully you like it more when you give it a try, open source, simplicity, and self-hosting are at the core for this.

also, on a side note, for non streaming workloads, i prefer cloudflare tunnels over a vpn solution like tailscale, feel free to check that out too :)

cheers!


Thanks for the suggestion!

How's the simplicy of setting up and accessing cloudflare tunnels over a VPN for the near-totally computer illiterate, in comparison to Tailscale?

Part of setting up a homelab and self-hosting more and more of my digital life has been working toward being able to offer family and very-close friends an off-ramp from the world of cloud-controlled data and computing. Especially among family, there are some folks who will not be able to easily grok things even you, I, and casual power uses would consider "basic."


yea, most certainly! from a setup perspective tunnels are much easier to configure, just need a domain and an agent container that routes to your services. To have family and friends access web services is easy too - there is support for email totp, certificates, passwords, etc. so you'll definitely find what suits you. Vpn is still required the monent you're looking into higher bandwidth requirements, but for services like expenseowl (one-off and quick operations), tunnels are free and easy

I have just written a comment about a related point, but I wrote my own expenses tracking web app and using it on the go wasn't possible because I didn't host it somewhere, so I ended up running it on my Android phone using Termux (I rewrote it from Node.js to Golang first though).



Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: