Ledger, a powerful CLI accounting tool
ledger-cli.org
ledger-cli.org
We've used Ledger-CLI since around mid-2008. We currently have 137,677 lines of ASCII Ledger-CLI data. We're thus likely the largest Ledger data set in real-world operations on the planet.
We switched to Ledger-CLI simply because it was the only Free Software accounting tool that had the flexibility to handle the complex area of non-profit accounting called "fiscal sponsorship", which is the primary purpose of our organization.
However, the fact is, I keep the books myself because Ledger-CLI gives you an excellent set of books that only a hacker could love. That said, our accountants after a few annual audits that were painful, this year absolutely love our reporting and find our audit a breeze (see the contrib/ area of Ledger-CLI's repository for the scripts we use for reporting).
Our biggest challenge now is that we are growing and need a programmer who can use Emacs, the command line, and revision control systems to keep our books isn't scalable. We need a better UI for both data entry and reporting to make this work.
As such, Conservancy last year started raising funds to build a better accounting system for non-profit organizations on top of ledger: https://sfconservancy.org/campaign/
It's slow going, but I recently announced that I'll be spending 50% of my time on the project, and we hope we'll get more donations as time goes on. We're focused on what non-profit orgs need first, but long term, we'd like to build an accounting application that will "last". We did a survey of all the known Open Source and Free Software accounting applications, and frankly we found them all lacking for various reasons: either they try to do too much and fail to get the accounting done right, or they are just poorly designed: http://npoacct.sfconservancy.org/ExistingProjects/
I currently use TurboCash, which is a Windows-based accounting solution that works well for me, but I am keen to move away from Windows entirely and on that front Ledger is currently top on my list.
I'd like to note that ledger's manual is second to none. More documentation like this, please.
That said, hledger does have features Ledger doesn't (aside from being a haskell project, which I see as a significant long-term feature). Some of hledger's experiments have found their way back into Ledger, also.
Also by design, hledger is very compatible with a subset of Ledger, so that you can keep journal files that work with both.
- I never quite understood how to 'start' the ledger balance. Should I start on the first of the year when my account was at $56 or today when it's at $76 ... where does this $ come from?
but probably more this:
- I found it super laborious to enter transactions. I guess I grew up post-checkbook but when I'm not near my computer for a few days and have a pocketful (or not) of transactions to enter, I would get behind and then just give up. Even with logging into my bank account to cheat.
- Investments man. How does one track dividends, buy/selling in a text file. I probably need to take a finance class... :)
That's not ledger-related, that's double-bookkeeping related. What you want to do is something like:
2014-07-05 Opening balance
Assets:Checking $ 56.00
Equity:OpeningBalance $-56.00
Actually, there is, in the wonderful ledger manual, something about that. Of course, Equity:Opening balance will remain forever at -56.00, but that's not a problem.Wrt to investments, I haven't really explored that part yet, but there is a description of how you're supposed to track your portfolio.
Whenever, it doesn't matter. Its just an opening balance. [1]
> I found it super laborious to enter transactions. I guess I grew up post-checkbook but when I'm not near my computer for a few days and have a pocketful (or not) of transactions to enter, I would get behind and then just give up. Even with logging into my bank account to cheat.
Yeah, the hard part of tracking finances, regardless of system, is the discipline of actually keeping up with it.
> Investments man. How does one track dividends, buy/selling in a text file. I probably need to take a finance class... :)
The ledger manual actually covers tracking investments in some detail.
I had the exact same gripes with ledger. Although there are means to pull csv-data from most banks, one still would have to categorize the entries on each import into ledger.
There is https://github.com/cantino/reckon which claims to solve this by automatically sorting entries into the correct accounts by means of Bayesian learning. Sadly the machine learning worked unreliably with my data - I would still have to manually sort many of the recurring and previously "tagged" entries into the proper account each time they came up in the csv-file.
CSV:
You download CSV data from your bank (manually, probably). Then you convert it to ledger journal format using one of a number of tools: CSV2Ledger, reckon, Ledger, hledger (both have CSV support built in by now), or something you write yourself. This data is "single-entry" and doesn't know about your chart of accounts, so you augment and translate it into more useful general journal entries. There are several approaches being explored:
- rule-based - you set up rules, matching patterns in the description, which assign accounts and balancing postings. Eg: CSV2Ledger, hledger (currently; eg http://hledger.org/manual#csv-files).
- history-based - the CSV description is matched against transactions already in the journal, and the most similar one is used as a template to flesh out the new transaction. Eg: Ledger (http://ledger-cli.org/3.0/doc/ledger3.html#The-_003csamp_003...).
- artificial intelligence - I seem to remember reckon does something else more clever ?
OFX:
- manual download - as above, but you download an OFX file. OFX records provide more structure than CSV but still need to be fleshed out. ledger-autosync does this, using history matching. It also skips transactions you've already saved to the journal, avoiding duplicates.
- automatic download - ledger-autosync can also handle the download, if your bank provides OFX Direct Connect. This is the most automated option at the moment, recommended. I pull transactions daily from Wells Fargo this way (though I'm going to quit one of these days since they charge too much for it).
GNUCash:
- In the distant past, ledger could read GNUCash files directly, so you could enter with GNUCash and report with ledger. This feature is long gone, but you might be able to get it working with an old Ledger version, and `print` into a journal file you can then use with modern *ledger.
Converting from other finance apps, eg mobile ones:
- As above, you might find adhoc ways to import from apps with nicer data entry. Eg use the iXpensit Pro app on iphone, export the CSV, convert that, add crazy automation duct tape until it's "smooth".
hledger web:
- hledger-web has an add form. It's not very good, but it's in your browser, and if you're really keen you could set it up to be accessible from your smartphone.
hledger add:
- hledger's built-in add command does assisted (history-based, tab completion etc.) interactive data entry on the console. Some folks may find that preferable to editing a text file.
Editor modes:
- for people used to text editors: ledger-mode provides some data entry conveniences for Emacs users, and there's vim-ledger, a ledger bundle for TextMate, etc.
HOWEVER...
If like me you're working on building discipline and insight into your finances, you may find nothing beats manual data entry for a while. You don't get the same awareness when everything is automated.
Allow me to remind you of the following paragraph from the official HN commenting guidelines:
When disagreeing, please reply to the argument instead of calling names. E.g. "That is an idiotic thing to say; 1 + 1 is 2, not 3" can be shortened to "1 + 1 is 2, not 3."
As it happens, I agree with you about the likely intellectual deficiencies of at least some of the people you're responding to in this way. But pointing them out in this way is unnecessary and counterproductive, and makes HN incrementally a less pleasant place to be for all of us. Please stop.
On the other hand epo could just downvote the comment without furnishing a reply or explanation, which is practised by other HN readers. This is a cowardly tactic and is very 'anti-hacker'.
Edit: I did my accounts on an HP48GX until about 2003, bought sage line 100 and hated it, moved to excel 2000 and now libreoffice calc.
Then again for somebody who doesn't see the value of double entry bookkeeping, it's unnecessary anyway, and Excel will do fine.
So yes you can do it and no it's not frustrating if you do a little automation...
Compare this to Sage which requires piles of money, time, expertise, maintenance, installation, backup and restore.
I might have a hard time imagining because I need to translate the terminology from Dutch - am I understanding correctly that 'account' = something like 'Expenses - utilities' or 'Taxes to claim'? How do you make a profit and loss statement, and a balance sheet? Do you use some sort of annotation for your accounts?
Description - text description of transaction.
Date - transaction date.
Ref - invoice ID/cheque number etc.
Amount - transaction amount.
Then there are columns, one for each account which are locked I.e. you can't type in them.
To make a transaction, you enter the transaction details in a new row and add the amount and set the source and destination account on the row (Ctrl+click) each in the correct order. Then run the macro which replaces the source with a formula (-amount) and the destination with (amount) from the row. Note that it uses the formula rather than the value to maintain integrity and allow the value to be retrospectively corrected. You could in theory do VAT accounting with it but I haven't bothered to do that yet.
There are columns for bank, petty cash, expenses, corp tax, PAYE, dividends, invoices etc.
The profit/loss statement is the sum of various columns for the year with some maths. This is updated on the fly by sheet references.
There are row summaries at the top and the first two rows are frozen so you can see the total for each account at any time.
All data is available up front so its pretty easy to do analytics on.
I might write it up properly at some point but that should give you a reasonable overview.
I wouldn't use this on mega high amounts of transactions. I top about 200 a year if I'm busy.
The system is portable between excel, libre office, numbers and Google sheets in theory although I haven't tried the latter yet.
One of my first ruby projects was creating a scraper for the Chase mobile website that outputed ledger-compatible text: https://github.com/rkowalick/autobank
While I loved the main idea in ledger, of having a text-based database of transactions, I was not satisfied with the particulars of the implementation; hence the fork.
You can find a list of all ledger-inspired apps here: https://github.com/ledger/ledger/wiki/Ports
I'm asking honestly, not trying to make fun of it somehow.
Take Mint, for example. It is impossible to have an overall budget. You can only set budgets per category. There does not appear to be a modern tool that will show me a progress bar of where I am on spending per month. Every option I've ever seen requires budgets to be set per category.
There are lots of different ways people want to see data, and many of these flashy/polished tools (like Mint, Simple, whatever) give a giant "fuck you" to anyone who doesn't think in exactly the way the program was designed.
Not sure where you got that. It's a single file with many transactions laid out in a straightforward double-entry accounting format.
I'm a developer, so the draw for me is that that I can write a few scripts to translate my various online accounts' downloadable formats into the simple text format while automatically adding in expense categories based on regex. I can't do that with any other apps I've seen.
It isn't SAGE.
It's funny, I found ledger to be WAY easier to learn and use than QuickBooks, which just completely baffled me. Yet QuickBooks is the leading system for small business.
Of course, the stellar documentation helps too.
I think more people "don't realize it" because "ease of use" is subjective rather than objective, and for many people, a custom text file format, even combined with well-thought out concepts and powerful commands, doesn't blow widget-heavy UIs out of the water.