A while ago I built a simple SMS bot for my partner and I to track finances like this, and it works fairly well. The workflow is whenever we spend money we text it with "spend <amount>" or "sp <amount>", and whenever we receive money we do "add <amount>", and "save <amount>" whenever we move money to savings.
I added some minimal polish like an undo command, a minimal GUI accessible via a short-lived link it sends us on request where we can add and edit recurring bills, subscriptions, and upcoming one-time or yearly major expenses. It has support for debts/loans (we can do "cc <debt> <amount>" for increasing debt, e.g. by paying with a credit card, and "pay <debt> <amount>" for payments). It sends us nightly and weekly reports letting us know progress towards savings goals and warning us if we're about to run into a tight spot based on what it knows about our spend rate, and upcoming bills and big expenses. It also bugs us if it notices we haven't transferred anything to savings recently.
The fact that it doesn't sync automatically with our bank accounts is actually a feature, because the ritual of having to text it whenever we spend money forces some mindfulness of our spending habits, and the regular reports (where it chides us if we're not saving much or exceeding our spending goals) add some gamification -- we joke about how we want to make it proud of us. :)
Shameless plug - I wrote a SaaS that's pretty much just a SMS <-> google spreadsheet mapper. https://byobudget.com
That said, yours looks a lot more full-fledged than mine. Mine can only record transactions and then send a response (which it reads calculated from the spreadsheet based on the last transaction, which I'm very proud of for the level of customization it provides), but I've been noodling over how to add custom commands.
FTR, I shameless stole my idea from an earlier HN comment sometime last year; if you're considering implementing a SMS/spreadsheet system yourself, I'd check it out https://news.ycombinator.com/item?id=17313321
Edit: I really am happy with my solution because it basically lets you take any google sheets based transaction you have and add SMS as an input method.
Edit 2: Sorry if you encounter any rough edges if you go to use BYOB - I haven't marketed it widely, but my wife and I do use it. Any feedback is very much welcome.
Edit 3: If you don't want the manual import of transactions (but do want the freedom of a spreadsheet) then I'd suggest TillerHQ instead https://tillerhq.com I haven't used em, but I came across them when doing research before launching BYOB.
haha, I actually saw that comment shortly after I wrote the first version of mine. Did some searching on HN to see if anyone else was doing something like this -- it made me feel a little less weird about my idea to know that someone else was, in fact. Cool to know that you are too!
I also like that yours is generic -- I'm curious what other use cases might exist for an SMS based query system for sheets.
Another minor feature I added was lists so that my partner and I could keep our shopping list synchronized -- I could imagine it working well for that too
Well, I like the idea of timer to watch stuff. I could see it being a 3-7 day timer to trigger a text if you haven't updated the spreadsheet in some way.
As for queries, I'd like to add queries to get the categories and query the amount left in a category. But that's more special casing - maybe it's a purist in me. I'm leaning towards letting people define a keywords area with three columns - the first is the word to trigger the command, the second is where anything after the keyword gets put (in some sanitized manner - like stripping whitespace) and the third would be the place to read the response.
I like the shopping list idea.
I haven't really taken the time to polish up some operational bits (we have really good logging/metrics where I work, and I miss it) or to market it though. So it's basically just my wife and I right now. I think the push to get something shipped (and my perfectionism) drained me, but reading this stories comments has been invigorating, and I an probably go about improving things in a more measured manner.
WoW, your app is exactly what I had been looking for, most budgeting apps have gorgeous Graphs and stats but keeping it updated is really annoying, using SMS as the medium is genius. In fact, when I got some free time I'm going to make my own version but with WhatsApp or telegram on top of the SMS.
Yeah, I'm thinking something along the lines of using Bot Framework maybe to maximize the number of possible message platforms. You could also easily see it as a "skill" for Alexa/Cortana/et al, too.
You can make a google form that accepts the same information and then stores it in a sheet. You put a link to the form on your phone. Easy, free, integrated solution.
Nice! I use YNAB and have an AWS environment set up that logs all my credit card transactions instantly. My bank sends me an email with the transaction info, which I receive with Simple Email Service. Then I use Lambda to parse the email and log it in YNAB using their API. Fun and useful project. https://github.com/buzzlawless/ynab-live-import
I totally get the benefits of ritually entering though. I’m definitely lazier about non-credit card transactions now... motivation to expand my program to other types of accounts and get fully automated!
Wow, that's amazing. I'm totally going to use this. YNAB unfortunately don't allow live feeds from Australian banks so using middle-ware is a great idea. I never even considered broking the service myself. Awesome!
I do something similar. Banks in Germany offer a so called HBCI/FinTS interface (I think it is mandatory for them). There are some open source libraries available to read transaction through this interface. I made a time triggered azure function to read all transactions from the bank for the day before and add them to YNAB via their REST API. Was a fun weekend projet...
We then add categories manually to all transaction on the YNAB app, so... we go through each transaction every couple of days.
My partner and I have been happy users of GoodBudget.com for a while for this purpose. (Not affiliated just a happy user.) It's an envelope-budget SaaS product and has many of these features minus the SMS and open-source things
I've setup something very similar at my hobby project spendlight.com. The public site is now largely neglected with too many placeholder images, but I landed at the same conclusion that no sync is a feature... because mindful spending.
Thanks! I haven't yet, mainly because I want to clean some things up first -- for instance, it's currently writing to a JSON file, with a job that archive a copy of it every few hours in case it gets corrupted.
Which is probably totally fine for most use cases, but I plan to port it to SQLite and open source it soonish.
I have been in search of what you’ve put together. My wife and I have tried unsuccessfully various strategies along these lines that were more lofi, but always come back to the spreadsheet. Another vote for open sourcing! I would be willing to contribute in my spare time to something like this. It’s a big gap for many, and all these beautiful iOS apps fall short in every way (but mainly I can’t bring myself to put my bank info on any of them!!).
I use GNUCash, and despite it's substantial shortcomings, the regular flow of competition never quite hits the mark. Here's a small sample of what features I'm looking for:
1. Transaction import. OFX at a minimum, but preferably an online pull that can be automated. Many banks do support online pulls -- for example GNUcash calls out to aqbanking, with an incredibly obtuse UI, and is an area for improvement.
2. multiple accounts and currencies. I need to be able to track investments and assets. That means multiple accounts, denominated in different and possibly custom units. GNUCash allows multiple accounts and multiple currencies, but you cannot put different currencies in your own account. The work around is subaccounts per stock ticker etc., but it seems like improvements could be made here.
3. Synchronization. In my view, 'offline' is synonymous with 'disposable.' I have many years of history, and it would be unfortunate to lose it in a drive failure. I have this backed by a personal SQL server, but many people use dropbox style sync. Multiuser would be an area of improvement here.
The one thing I'm not looking for is budgeting. A ledger is basically a budget with dates per item, so why not just go directly to the ledger form? Salary, mortgage payments, rent, insurance, and streaming subscriptions are all predictable expenses, just slap em into the ledger ahead of time. Even the variable stuff like dining is a bit more predictable with a credit card.
The above should not be a knock to the many other systems, so please don't bother to try selling me on ledger-cli =)
How do you find GNUcash? I looked at it awhile back and found the UI so antiquated compared to modern tools, but I'd prefer something different than the commercial provider I'm using now.
The UI may be antiquated but it does what it needs to without any lock-in, and you have control of your data. Plus you can do you accrual based accounting which just makes so much more sense (I may pay my car insurance premium once a year, but it is a monthly expense)
Buxfer (https://www.buxfer.com) has almost all of what you mention: import (can be automated via API), automatic pull from banks, multiple currencies, backup to cloud (although it's not a "backup and restore", it's backup so you can have your data with you in a standard format.)
Hey I used buxfer for years when I was trying to control my finances and learn my patterns during college and first jobs.
It was great, I liked it so much that even on a super shitty exchange rate for me I became a subscriber at the time, even though I didn’t need the subs features.
I don’t use it anymore, maily because I can do it in my head now + the little tools my bank provides, but thanks man. Your service made me a better human.
The reason I continue to use Quicken rather than writing my own tool that I'm sure doesn't sell my data is that it allows me to relatively painlessly sync transactions from my bank. This is largely my bank's fault for not exposing some kind of API I can hook into, but nonetheless any budgeting app that doesn't sync transactions from most financial institutions is not a "solution".
Just based on the single screenshot in the readme, it seems like the workflow needs work too. The information density in the screenshot looks painfully low to me.
There's a hack I worked out years ago where you set up a dummy email account and have your bank notify it by email every time there's a transaction over $0.01. Do a little HTML crawling and you've got a transactions database.
I'm currently working to get OFX supported, which is the "automatic API" that can scrape your transactions. Quicken uses this, falling back on screen scraping in case OFX isn't supported.
OFX is a painful spec; hard to know what is and is not used by various banks.
I spent a bit of time writing a simple streaming OFXv1 (SGML) parser in Rust, but I'm too ashamed to open-source it. The idea behind it was you read the OFX file byte by byte, using Nom to parse out tokens, and emit events when you hit SGML tags and element content (SAX-parser style). Then you have something over the top of that that accumulates state until it has a complete OFX data element, and then emits that.
Advantage: Very low memory usage. Disadvantage: Probably overkill, since OFX files probably wouldn't be megabytes or gigabytes.
It works for my bank feed, but who knows how many other banks!
If you have any ideas on how to support this well in a non-hacky way that doesn't involve relying on a scripting language (all other existing implementations seem to be some form of scripting language :().
> Probably overkill, since OFX files probably wouldn't be megabytes or gigabytes.
Maybe not gigabytes, but if you wanted to pull transaction-level data from a relatively active brokerage account, you could end up with an OFX file of a couple of megabytes. I'm sure someone might appreciate the efficiency.
The one specific thing that stands out to me besides sync support is user-interface optimization. In Quicken I can see and edit my entire monthly budget on a single page, including adding/removing categories, seeing current spending/income for all categories, and editing spending/income targets. The screenshot in the readme prioritizes things I rarely care about (editing categories, individual transactions) instead of the things that I do care about (big picture view of my current/planned budget).
Have you looked into the plaid[0] free(test) tier? They hook into a bunch of different banks and the free tier exposes balance and transaction history.
I really wish I could find a service that would do this for something other than Google Sheets (or like Tiller using a Google login even though they can write to Microsoft's OneDrive...for some reason). The last place I want to store a bunch of sensitive financial information is Mint. The second last is Google.
To that end, I looked into using Plaid's API to craft my own but it's a bit daunting, especially with a couple of my financial institutions continually failing and having to be reauthenticated, so I don't envy these developers their tasks.
Depending on your bank you might be able to import transactions with the tool I use for my finances (https://firefly-iii.org/): it can import using the Spectre/Salt Edge API or through CSV files.
Yes, that is one of the ways Quicken scrapes information.
The "bank API" is actually OFX, it's a protocol banks use to send each other data. I'm currently working on trying to get OFX support in My Budget. (I'm the author of the Github project).
It seems insane that people would be okay with their bank credentials being stored in plaintext.
I signed up for a budgeting service that claimed real time transaction sync and immediately unsubscribed when I realised it was planning to do so by scraping.
Quicken at least claims to store the credentials locally and encrypted. How well it does this I don't know of course, but I consider it infinitely better than any online service, which is why I still use it despite the fact that it manages the impressive feat of being so slow that a web-based service would probably be faster in terms of UI performance.
That’s still not a good reason to give your bank credentials and allow them to be stored in plain text. At that point if it’s your only option you just don’t do it.
How does this compare to things like beancount or ledger cli? Did you look at those and find them wanting?
Personally I've used ledger and loved it but found it a bit of a pain to get going due to its manual nature and it also created a bit of a firewall for my SO because she's not inclined to spin up a terminal to look at the finances. I liked beancount for its facilities to do automatic imports but I found its reporting lackluster.
I liked hledger most of all but to compile it was kind of a pain and it had many of the same complaints as ledger although its reporting and especially budgets were top notch.
I'd like to incorporate reports, that is something that is in my roadmap. Are there other features of beancount or ledger cli that you'd like to see in My Budget?
Not open source, but https://financier.io/ is browser-based YNAB clone. I'm still using YNAB4 for the time being, but will probably switch to Financier once YNAB4 stops working.
Financier looked absolutely great when I tested it a few months ago. But: lot of features missing (like recurring transactions) and the app seems to be abandoned. At least there was no activity for over a year now. What a pity.
There's a google sheet floating around reddit that's pretty much a YNAB clone. I just use an excel spreadsheet thats formatted to take a copy paste from my bank/cc .csv transaction list, then I go through and categorize the transactions for the past month. Takes 10 mins or so.
I used to use mint which was more automatic, but things rarely get categorized correctly, and by doing it by hand, I'm a lot more aware of my spending habits than if I just looked at some pie charts. I can still make pretty charts in excel if I ever wanted too.
Are you going to put it on github? I bought Flutter course as well (the one from appbrewery recommended on googleblog [0]) but haven't got time to get started with it yet.
Congratulations! Releasing a significant piece of work is always an amazing time. Would love to see some screenshots in the README showing what makes it unusual, or what the typical workflow is like.
All good suggestions, thank you. Workflows and guides are what My Budget is lacking, as more core features are being built out. They are on my to-do for the app.
The unique features are:
- It's offline (we aren't saving any information about your budget)
- Your data can be optionally encrypted at-rest
- Limited support to auto-sync your transactions from your bank
A typical workflow for version 3.0.0-beta+ is to add your sources of income. Then, add categories of transactions you have (by category and subcategory). Next, add transactions based upon your categories and subcategories.
Reports and other features like multi-currency/account/users are coming soon.
I'm not a trained designer, but just looking at the screenshot in the readme:
- The orange and the purple are both very bold, non-standard colors. Using one or the other makes sense as a way to draw attention to important things and give the tool personality, but having both together is a little grating. Perhaps the orange should be replaced by red? This would also be idiomatic in terms of what those buttons seem to be doing.
- I think there are too many different shades of grey; the title bar, the main background, the white sections, and the category headers are all different shades. Also, something feels off about the color on the category headers. I think part of it is you have white text on a medium-gray background, which isn't quite enough contrast, but part of it may also just be the fact that those headers are darker than the "main" background color. On the other hand, it could look good to just use the title bar color on the category headers. Hard to say without trying it out.
- The transactions table could use a proper border all the way around (it's visibly absent on the top and sides).
- A clearer division could be made (a border line or just a bigger gap) between the "categories" and "transaction" sections, because it's not immediately clear what "delete all" will be deleting.
- The "delete all" and "add new" buttons aren't aligned with the left and right bounds of their section; also, there's no reason for them to be spread out so far. They could gravitate to the right, for example.
- Bolding the field labels below the word "transactions" would make it slightly clearer what purpose they serve, and vertical-aligning them with their respective fields would be slightly more pleasing.
- Making the gap beneath each "sub-category +" larger than the gap above it would help connect it to the table it pertains to.
Unfortunately I think changing the category header text to black with the same background may have made that part worse; I'd probably make the text white again and the background the same color as the bar at the very top
Yea, no offense intended with this, my first thought looking at the project is that it's a scam or malware. I would have to personally read through the source code to feel comfortable using this. The main thing is none of the text is vertically centered and everything is lowercased. Maybe I'm just paranoid about financial software.
As one person very interested in using MyBudget, I want to add that I would definitely prefer not to use Electron; but I am admittedly interested enough to go ahead and do it anyway. Once it's up and running this does seem to be the best FLOSS GUI budgeting software I've yet used.
In the screenshot provided in the README, I see there is a 'sync' button next to the 'save' button. If this is essentially self-hosted, what is the application syncing to?
Edit: Whoops I missed this line under "Features":
> Limited* support to sync transactions with your bank. See here[1] for more details.
Sync is meant to sync transactions from your bank. Right now it has rudimentary screen scraping, and since I don't have infinite throughput, I wrote a way for others to create these methods for their own bank. Once it's working, I can add it into the app and others can use.
I'm trying to get OFX support, which is the much-requested "auto syncing" feature that everyone wants.
I like this idea. You shouldn't have to pay to access your own bank data. Looking forward to the near future when banks either have an API or die a slow death.
OFX is the API they use. You need specific credentials that can be found online. If a bank doesn't offer OFX support, you can use the tried-and-true method of web scraping the information out, which is what Quicken does as a last-resort.
A subject near and dear. I work on https://budgetmyway.com. Personally been using it for almost ten years to track my expenses. I haven’t been able to get much traction with other users. I would love to know if any of you personal finance folks find it useful. Onboarding and marketing are hard.
I am looking for a spreadsheet that does similar things but also does forecasting with charts too. I want it to be a spreadsheet though. If anyone knows of an open project for this please hook me up!
Hey - I am the author of BudgetSheet ( https://www.budgetsheet.net/ ). It is a Google Sheets add-on that links to your own Plaid account to auto-import transactions, and all the data is all stored in the spreadsheet itself so there is no other web service involved.
I don't have any charts or graphs yet, but it is relatively straightforward to make them in a spreadsheet with data that has dates and numbers like the transactions do. Check it out (free for one account), and maybe I can help you with some charts. Email me at vance [at] vancelucas [dot] com or ping me on Twitter at @vlucas if you want to chat about it. I'd love to hear your ideas.
I'm working on creating reports, which would act on historical data. Forecasting is something I haven't yet thought about, or how that might work. Care to give me your thoughts here?
I've been using Mishell Budget Calendar for the past 8 years. Nothing beats the calendar UI in my opinion. Makes sense when you think about most income and expenses are recurring events. The balance at the bottom of each day lets you check the future for days where you might be getting close to running out of funds. It might be a simple move the day you pay your utility bill each month, or try adjusting your grocery budget by a few dollars and it shows straight away how that impacts your future balance.
You might be interested in Proton Native (https://proton-native.js.org/#/) which should produce a much more lightweight output and has native controls. I have not used it though so I cannot vouch for whether it is sufficient for your needs.
I know this is kind of a tired comment but I wonder where desktop GUI toolkits went wrong to end up where "cross platform" has come to be a synonym for electron.
I know if I was building a desktop program I would pick electron but what can real desktop toolkits change to fix this problem?
Largely they can't, other than having a Highlander situation where they fight each other until only one platform remains.
Java went round this circle. First there was AWT: use the platform-native widgets. Of course, this results in your application looking different on every platform in hard-to-predict ways. So people wrote Swing: single non-native GUI that looks the same everywhere. Eventually people got fed up of the poor performance and non-nativeness of Swing, so they wrote SWT (used in Eclipse) which uses the native widgets again.
If your application is native, then it looks different on different platforms - and you have to test and debug on all of them. If it's non-native, it can look the same on all platforms.
Looking different to the native apps isn't even the worst part. Its that a simple notes app is 300mb and after opening a few basic programs you have 10gb of ram used.
It might not be so much a toolkit problem as a language or environment or even knowledge problem: someone might not be interested in working with C or C++ or even in anything else they do not already know and if all they know is web stuff then Electron is the path of least resistance. Even if someone is interested in learning something, that doesn't mean they'd be interested in learning and making a project at the same time.
I think a React-native type thing for Windows/Mac/Linux would be a big help. I am not sure there is any incentive for anyone to create such a tool though? The problem with Electron is that it is good enough.
I didn't know about Ledger [1], which this is said to be based on. It seems like a proper UNIX tool like Remind [2] but for finance. I would really like to use these types of applications all the time, but either usability suffers a lot or useful principles get lost when trying to integrate them with smartphones and tablets.
I added some minimal polish like an undo command, a minimal GUI accessible via a short-lived link it sends us on request where we can add and edit recurring bills, subscriptions, and upcoming one-time or yearly major expenses. It has support for debts/loans (we can do "cc <debt> <amount>" for increasing debt, e.g. by paying with a credit card, and "pay <debt> <amount>" for payments). It sends us nightly and weekly reports letting us know progress towards savings goals and warning us if we're about to run into a tight spot based on what it knows about our spend rate, and upcoming bills and big expenses. It also bugs us if it notices we haven't transferred anything to savings recently.
The fact that it doesn't sync automatically with our bank accounts is actually a feature, because the ritual of having to text it whenever we spend money forces some mindfulness of our spending habits, and the regular reports (where it chides us if we're not saving much or exceeding our spending goals) add some gamification -- we joke about how we want to make it proud of us. :)