StonkSmith: My answer to the gap that modern finance apps create.
7 min read
Here is a question that should be easy: How much money do I have?
Not just in one account. In every account I own. The number I would write down if somebody asked me what I am worth on paper.
Answering it takes me about twenty minutes and five applications, and at the end I have a number I do not fully trust because I assembled it by hand from five screens that disagree about what a balance even is.
- One is as of last night.
- One is as of the last time it successfully logged in, which it will not tell me.
- One has been showing me the same figure for a month.
It is not that any of them are bad
This is the part that took me a while to admit, because “the apps are bad” is a much more satisfying story.
Quicken (Classic|Simplify)
I actually really enjoy using this one. There’s something about the old-school feel to it that makes me believe I’m doing all the fiscally responsible things I should be doing at this point in my life. I especially like the bill pay feature. My annoyances come in play when my account synching is only good for one day at a time for some accounts. After a week of seeing messages pop up on my phone for OTP’s to certain investment accounts I got frustrated enough to nuke the entire account and begin the search for something better. That, along with the lack of advanced investment features, long-term projections, payoff planning, account reconciliation, and detailed reporting made me mad enough to quit it.
Monarch Money
Here’s another one I thoroughly enjoed at first. This one really helped me nail down my budget and kick started several really quick debt payoffs. Again, though… the same thing came into play. Some of these accounts I chose to use for my bank/investment accounts really came back to bite me because they just couldn’t stop requiring a refresh every… single… day. I hated it. Enough to make me hate being responsible.
Both of those are reasonable products built by people who thought about the problem. The trouble is not that either one fails. It is that neither one is sufficient, so I run both, and running both does not add up to one answer. It adds up to two partial answers I now have to reconcile myself. Every app I add to fix a gap introduces a new seam.
At some point I was maintaining a mental model of which app to trust for which account, and that model lived nowhere except my head. That is not a system. That is a habit with a single point of failure, and the point of failure is me remembering.
Some accounts just fall through
The gaps are not random. They cluster around exactly the accounts that are least exciting and most boring-important.
A federal Thrift Savings Plan account is the clearest case. Aggregators do badly with it, and the reason is structural rather than lazy: they try to hold a login session, the session goes stale, and the tool gives up and shows nothing. A zero, or a blank, or last month’s number sitting there looking current. That is worse than an error because a blank does not prompt you to go check.
A 529 is the same story. It is a real account with real money in it and it is nobody’s priority to support, because there is no growth market in college savings plans.
So the accounts most likely to be silently wrong are the retirement plan and the kid’s education fund. Cool!
The spreadsheet phase
The obvious answer is a spreadsheet, and I did that for a while.
A hand-maintained spreadsheet is correct exactly once. At the moment you finish typing it. After that it is a photograph, and it ages like one. Worse, it looks identical whether it is current or four months stale. There is no visual difference between a spreadsheet you updated this morning and one you abandoned in March, which means the artifact actively lies to you and does it in a completely deadpan way.
I kept it up for a few months. Then I did not. Then I found myself opening five apps again to sanity-check my own spreadsheet, which is the point at which the spreadsheet has become a sixth app.
So I wrote something I needed
StonkSmith is one command that goes and gets all of it.
Each institution is a plugin. A folder with a login class in it. Some post a form and read the response. Some need a real browser because the page does not exist until JavaScript has run. Some are just an API. They all land in the same place: a local SQLite database with accounts, snapshots, holdings and transactions, and every balance stored as a number with the source’s own raw text kept beside it. So, when a site changes its formatting I lose a parse and not the record.
Then it writes a Google Sheet. The sheet is a view. It gets cleared and rewritten from the database every run. The database is the thing that is true. That distinction matters more than it sounds like it should, because it means the pretty dashboard can never drift away from the record, and it means I can delete one bad data point without the rest of history rearranging itself around the hole.
The nice irony is TSP, the account every aggregator gave up on. It turns out to need no login at all. A TSP balance is units held times that fund’s share price, and the share prices are published as a public file. The units only change when you actually contribute. So the daily path has no credential in it, nothing to expire, and nothing to re-authorise. A run literally cannot fail because a session went stale. The account everyone treats as too hard is the one with no authentication problem to solve.
What it did not fix
I would rather say this here than let you find out.
One brokerage fronts its login with commercial bot detection, and I did not beat it. I decided not to try. So I sign in myself, in a real browser window, and the tool takes over after I am authenticated. Another one turned out not to keep a session between runs at all, which I only learned by running it nine times and watching it fail, so that one needs me every time too. Fully unattended is not where this is.
And most of it has not been proven against a live account yet. There is a file in the repo that tracks which claims have actually been observed and which are only unit-tested, and most rows still say no. It is not a finished product. It is a thing that answers my question, on my machine, for my accounts.
The point
I am not telling anyone to go install this. It has one user and he has strong opinions about its roadmap.
What I would say is that the question was reasonable. “How much do I have” is not an exotic request. The reason no product answers it is not that it is hard. It is that answering it completely is nobody’s business model. Every app is incentivised to be excellent at the slice it owns and indifferent to the seams, and the seams are where I live, because my money is spread across the boring institutional corners that do not show up in anyone’s growth chart.
Building it myself took a couple of months of evenings. Assembling the number by hand took twenty minutes, several times a month, forever, and produced a figure I did not believe.
I have the number now. I checked it this morning in about four seconds.