Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I tried this out and switched to ledger-cli instead. All of the features listed above are possible and the the flexibility is incredible. The hardest part is data entry. For accounts that provide API access I wrote curl/jq/awk parsers and for accounts that you can only get via download, I wrote short csv parsers in awk. I have ~ 15 accounts to keep track of and various loans/securities and I use ledger-cli to keep track of cost basis, interest vs principal on loans and my mortgage, all expenses, etc.

Took some time to write the transaction parsers, but updating everything takes about 5 min/month now and I have a complete financial picture without sending any data to something like mint.



I envy you, this has been my dream for years. But obscure payment gateways make this a task for the chosen few in this country. If somebody could point me to a workable solution (on Linux / cross platform) for Germany it would be highly appreciated.

“Every financial system is broken in its own way” (ex-coworker who had worked in financial services)


I use `aqbanking-cli` for grabbing transactions from my banks' FinTS/HBCI API and generate a CSV out of that. That CSV then goes through a bit of Python that splits up the entries into transactions. Those get rendered out as `beancount` transactions (but `ledger` works as well, I used that before I switched to beancount) and appended to my actual ledger.

I then use `fava` (a beancount web UI) to fix mistakes, and have another piece of code (this time written in Go, but could be Python/whatever as well) that takes transactions that are generated from my brokerage account and enriches them with data parsed from my brokers' PDF reports (since the FinTS/HBCI info doesn't contain stuff like ISINs or taxes/fees separately).

This is for my personal finances, but I used the same system (minus the brokerage stuff) when I managed the finances of a hackerspace in the middle of Germany for a few years.


~Look for aqbanking and hbci/fints. Most of the major banks hace an endpoint, though you might have to google for the exact data~

Edit: Missed that his is about ledger-cli, not gnucash. Sorry.


Actually https://github.com/dpaetzel/buchhaltung could fit your needs. Just found it because I thought that someone must have built this already.


Ok. But written in Haskell? Why would you write this kind of stuff in anything but python - it’s trivial after all, and it should stay trivial through all layers…


There are companies that offer APIs to access bank accounts as a service. Plaid.com is one of them, although you might need to search around for another one that supports your bank.

At one point, there was a decent standard called "OFX" which financial institutions were supposed to support. It let you use an app like GNU Cash or QuickBooks which could automatically connect to your bank account. That died apparently and was replaced by some API/standard called "Open Banking". It's shittier in every way since it seems to require a middleman now (like Plaid) whereas with OFX you could just query an endpoint easily.


Neat thing about gnucash in germany at least is that most traditional banks(but not the fintechs) support hbci/fints and there is a plugin(?) for this. Paired with the auto-assign its very easy to import transactions


Any change you open sourced those parsers? I also switched from GnuCash to ledger-cli a long time ago, so I'm interested to see your solution.


I did not, mostly because the parsers are custom to how I want things displayed. Here is a simplified example for Chase, though:

  BEGIN{
      FS = ",";
  }
  {
      if(FNR > 1){
          date = gensub(/([0-9]{2})\/([0-9]{2})\/([0-9]{4})/, "\\3-\\1-\\2", 1, $1);
          print date, $3
          print "    liabilities:chase"
          if($5 != "Payment"){
              print "    expenses:" $4, "  $", $6 \* -1.0
          }else{
              ## This exists because I have an offset in the account
              ## I use to pay the card with. If the amount in my residual
              ## account != 0, I know there is something wrong
              print "    liabilities:chase:residual  $", -$6
          }
      }
  }
Suppose this script is called 'parse.awk', you would then run: awk -f parse.awk myfile.csv

I've been doing this for a couple years now and so far I haven't had file formats change on me. Most of the complexity I have experienced so far is when the regex to parse line-items into the appropriate ledger account is non-trivial. It started off as a way for me to learn awk and double entry bookkeeping and somehow turned into something useful.


> It started off as a way for me to learn ... and somehow turned into something useful

This is the way.


My wife has used GnuCash for years. Then she's the average person, not a programmer or techie. She loves GnuCash.


I use ledger, but only for accounts where I'm a trustee on a trust

For my own accounts, I don't have time to deal with reconciliation, so I just do csv -> paste into spreadsheet -> have sql queries that sum things up




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

Search: