7 ms·
Beancount: Double-entry accounting from text files
- user3939382 5y agoThis reminds me of ledger: https://www.ledger-cli.org/ https://www.ledger-cli.org/ * Turns out they address the comparison: https://beancount.github.io/docs/a_comparison_of_beancount_and_ledger_hledger.html https://beancount.github.io/docs/a_comparison_of_beancount_a...
- _benj 5y agoI initially thought that it had to be either/or and when I switched to beancount I was sorely missing then simple balance reports from ledger. What I’ve been doing lately is just generating ledger-formatted ledger on the fly for this that I used ledger before, while still benefiting from the strict beancount format, balance assertions and such that ledger doesn’t have
- Buttons840 5y agohttps://www.ledger-cli.org/3.0/doc/ledger3.html#Balance-assertions https://www.ledger-cli.org/3.0/doc/ledger3.html#Balance-asse... It appears ledger does have balance assertions.
- _benj 5y agooh nice, thanks for sharing, I wasn't aware of that :-) It seems though that the assertions are attached to transactions. The way I use balance assertions on beancount is that, say, payday after balancing everything I'd enter > 2022-01-30 balance Assets:Bank 500.00 USD and that will ensure that whatever happens, even if I need to go back in time to clear transactions, the amount needs to be that one, and that balance is usually straight from my current bank balance. So, it seems slightly different use case that ledger's balance assertion
- globular-toast 5y agoI've been using ledger for 10+ years. I guess I should try beancount, but ledger works for me. I've never had to calculate capital gains or any other taxes myself, though. Ledger's simple model makes a lot more sense to me (ie. everything is just a commodity), but it sounds like beancount is set up to deal with a lot of the extra bullshit that exists in the legal system.
- raspyberr 5y agoDoes anyone know if there's a good app I can use for plaintext accounting on my phone? I'd love to be able to use syncthing to sync the ledger on my PC and phone. It'd really help me stop collecting receipts so I can bulk put them in when I get home.
- rthomas6 5y agoI do this. I use Cone on Android. It works great but only as an entry method. You can't edit old entries, and it doesn't run anything over the files. It just adds entries and that's it. I couple it with Syncthing, and Fava running on a different computer served over the local network. I would like a phone app to run on the beancount file, but the only apps that purport to do this have <1k downloads and no ratings, so I'm not going to trust them with my financial data
- smichael 5y agohttps://hledger.org/mobile-apps.html https://hledger.org/mobile-apps.html gives some ideas.
- bingohbangoh 5y agoFWIW Emacs has a ledger mode that is fantastic. I suspect other editors do as well.
- howeyc 5y agoAny text editor will do. Or maybe this? https://cone.tangential.info/ https://cone.tangential.info/
- KennyBlanken 5y agoI am not editing a structured text file on my phone while out and about. Especially due to the error-prone-ness and slowness of using mobile screen keyboards, you need guided/assisted data entry; a number pad only when you need to enter numbers or dates. A "use today's date if blank" field, selectors for accounts and tags, etc.
- raspyberr 5y ago
- _benj 5y agoSwitched to beancount from ledger a few months ago and I’m really enjoying the strict syntax of beancount. The cool thing though is that I really didn’t lose any of my reporting flows that I had with (h)ledger… I just made scripts that convert the beancount journal on the fly, run whatever I was used to with hledger, and then delete the temporary file. I feel like I’m getting the best of both worlds :)
- rssoconnor 5y agoDid you covert your hledger journal to beancount, or just start anew?
- _benj 5y agoI started anew, just because after having using ledger I wanted to change some accounts, categories, and generally change the way I was doing things before. But I don't see why I'd be an issue to convert ledger to beancount.
- onislandtime 5y agoWith no background in accounting, I was impressed with the Beancount documentation. Very well written and a great way to learn accounting. I am looking for a solution to track my investments but I find it a bit overwhelming to get started with Beancount from scratch. Is there a tool to convert brokerage data into Beancount data from scratch?
- trs-80 5y ago> I was impressed with the Beancount documentation. Me too, one of main reasons for choosing it. > Is there a tool to convert brokerage data into Beancount data from scratch? Problem is they are all different. But other people share what they have come up with. Maybe check the mailing list, also search for Red's Importers. If those do not work for you 'out of the box', you might need to hack something together. But you can get help on the mailing list.
- rguiscard 5y agoYou can plot your monthly or yearly spending with Jupyter like this: https://github.com/isabekov/beancount-multiperiod-reports https://github.com/isabekov/beancount-multiperiod-reports
- kubauk 5y agoI've also created an extension for Fava that does something similar. It's still early days but already very useful. https://github.com/kubauk/fava-review https://github.com/kubauk/fava-review
- rthomas6 5y agoI use this. I set up Fava served over my home network so my wife can look at the budget. There is an android app called Cone that lets you add entries. I sync between phone and PC with Syncthing. It all works really well.
- trs-80 5y agoThere is also a Beancount specific one: https://github.com/xuhcc/beancount-mobile https://github.com/xuhcc/beancount-mobile It's available in F-Droid. I found it worked better for me. But I only use that for cash or other things where I don't get a receipt. For the 99% I do get a receipt, I take a photo of said receipt. Then I deal with it later at my desktop or laptop where I have a real keyboard. I actually wrote some helper script that works on top of Dired (in Emacs) to gather things like Payee and accounts using a completing-read (narrowing) style interface. This reduces friction A LOT, which I think is one of the keys to success in any chore.
- awinter-py 5y agoah yes the masculine urge to use C++ and bazel in a python text processing codebase
- blais 5y agoHow else is a nerd supposed to express his desire for competence these days? ;-)
- nuclearnice3 5y agoJan 12 thread "Plain Text Accounting" https://news.ycombinator.com/item?id=25745615 https://news.ycombinator.com/item?id=25745615
- howeyc 5y agoPart of Plain Text Accounting family: https://plaintextaccounting.org/ https://plaintextaccounting.org/ I really prefer having complete control of my financial data this way, and reports can be as custom as you'd like. Better than something like Mint in my opinion.
- nightski 5y agoI hate mint but use a different budgeting system. I'm not sure you can compare an accounting system with a budgeting system - they serve different purposes. I'd love to build a full budgeting system on top of one of these text accounting systems some day.
- djhworld 5y agoBeen a beancount user since 2018, great piece of software. Gets even better if combine it with auxilliary tools like Fava for visualisation and "beancount-mode" for emacs.
- clircle 5y agoAny married people have advice on how to track finances? I used bean count or ledger when i was single, but the manual system kind of breaks down when you have a family .
- Pasorrijer 5y agoI use homebank. Download all your various transactions, load and tag them and you're done. You can build rules too so the more you use it, the more automated it becomes.
- chana_masala 5y agoWow, I can't believe I haven't heard of Homebank [1] before. This looks very much like what I've been wanting. Thank you for the recommendation. [1] http://homebank.free.fr/en/index.php http://homebank.free.fr/en/index.php
- molsongolden 5y agolunchmoney.app is pretty cool and strikes a good balance of offering powerful features without forcing too much complexity on the average user.
- zie 5y agoPeople will disagree with me, but.. don't? I keep track of my expenses by CC and cash account, by the month. I don't care that I spent $5 on a coffee. I do care that for the month of January I stayed within my $X amount, and that for the year I'm on track for my savings goal(s), retirement, etc. So I keep 2 spreadsheets, 1 is monthly, to ensure the bills get paid and the 2nd is my NW that tracks my retirement and savings goals.
- XorNot 5y agoThis is what I do as well. Everytime I've looked into the whole personal finances thing, it just turns into a lot of setup work to not usefully change anything about my life, and a significant amount of ongoing work to... Also not change anything.
- bingohbangoh 5y agoOut of curiosity: has anybody used this to do business accounting? I am intrigued by these ultra simple setups. However, most accountants -- the people who will ultimately help you once your business is sufficiently complex -- will use Quickbooks or some other established software.
- uoaei 5y agoOn one hand you can tailor your bean-counting with fancy scripts that achieve exactly what you need. On the other hand you would need to spend probably lots of time writing and maintaining those scripts. Doesn't seem worth the hassle for the vast majority IMO.
- shubhamkrm 5y agoSoftware Freedom Conservancy uses it for their non-profit accounting. They have published their workflow here: https://github.com/conservancy/npo-ledger-cli/blob/master/npo-ledger-cli-tutorial.md https://github.com/conservancy/npo-ledger-cli/blob/master/np...
- ska 5y agoI've done this with gnucash, which isn't exactly the same but similarly unusual to them. What I found was that unless you are using the same back end, most of them were going to re-enter everything anyways as they want to double check. So it was more important to have the accounts & conventions they expected, rather than the actual software. In my case, the data entry cost was about < 10% of my bill, so moving to the same software as them wouldn't be a big saving. I've not used beancounter, so I'm not sure how much (if any) work would be needed to get the same support I had in gnucash. Mostly the complexities of invoicing and taxes in multiple countries and currencies, payroll, etc. One big issue potentially is you'll need to be able to produce proper financial statements for your jurisdiction (at least, countries I'm used to). Not sure if/how that is supported out of the box so might be some work.
- cranium 5y agoI started using Ledger for my small consulting business in Switzerland. Here, the internal accounting structure is quite flexible as long as you can output the balance sheets in the required format. My fiduciary asks for PDFs to verify the (legal) accounting norms anyway.
- balves 5y agoI switched to beancount after trying several other things (mint, spreadsheets, gnucash), and I like it quite a bit. It's choice to be very strict about things held at cost (like units of stock) is a great differentiation. It's VERY hard to accidentally miss capital gains, or get cost basis wrong on something, or have something not balance. Much harder than even ledger-cli, let alone the other alternatives. It feels at times like working with a static type system versus a dynamic type system. And the burden associated with this is not anything more than other tools. Importers have been great. I have 68 asset subaccounts between my spouse and I (if you do double-entry accounting you'll know this isn't actually that many), and I spend about 1-2 hours a month balancing the books, doing reporting, etc. Finally, it's quite easy to get your transactions into a pandas datatable or similar, allowing you to utilize your programming/datascience skills to do things that just aren't available in other tools. Mint offers nothing here, spreadsheets can do some of it (but the downsides of accuracy), and gnucash requires learning some niche scheme stuff; it feels very "tacked on".
- haberman 5y ago> Importers have been great. What importers do you mean? Are these importers you've written yourself, or existing importers you were able to reuse? What format are these importers pulling from (PDF statements, CSV, OFX, etc)?
- balves 5y agohttps://github.com/redstreet/beancount_reds_importers/tree/master/beancount_reds_importers https://github.com/redstreet/beancount_reds_importers/tree/m... https://github.com/jbms/beancount-import https://github.com/jbms/beancount-import https://beancount.github.io/docs/importing_external_data.html https://beancount.github.io/docs/importing_external_data.htm... Support for OFX is generally great, CSV is also great. There are some proof of concept things floating around too for PDF.
- haberman 5y agoDo you find that all of your financial institutions offer reliable OFX/CSV feeds? I'm asking because I've generally come to the conclusion that PDF is the only universal data format that every institution will offer.
- bobjordan 5y agoFava is a nice GUI that's built on top of beancount, see https://github.com/beancount/fava https://github.com/beancount/fava
- KennyBlanken 5y agoBefore anyone else does what I did and loses a bunch of time setting it up: fava is completely read-only.
- lelandfe 5y agohttps://fava.pythonanywhere.com/example-beancount-file/editor/ https://fava.pythonanywhere.com/example-beancount-file/edito... I do see the demo has an editor!
- fernovus 5y agoThis is not true, you can edit single entries from journals or even the whole file from the "Editor" section (it uses Codemirror). Then click "Save" and your changes will be updated on the file in real time.
- FR10 5y agoI use Fava+Beancount and this is not accurate, I use the Fava editor on my beancount files without any problem.
- deleted 5y ago[deleted]
- darcys22 5y agoShameless self plug: ive been building a similar open source command line accounting system https://github.com/darcys22/godbledger https://github.com/darcys22/godbledger Its heavily inspired by both ledger and beancount but my biggest issue with them is that text files arnt great for double entry bookkeeping. Having a relational database is the better option which is what GoDBLedger has. After a certain point a business cant keep track of its transactions in text files because there are simply too many of them, so these systems really only scale to personal finance levels (few hundred transactions maybe thousand transactions). In addition building plugins that can import your whole text file into a sql system so you can query them is redundant. Just have it in a relational database to start with.
- CGamesPlay 5y agoYou’re spot-on about this. Even for my personal finance, I have to apply classification rules at import time and I can’t bulk edit transactions to reclassify them after the fact. As a result I am looking for a replacement, although a requirement for me is some sort of fava equivalent.
- darcys22 5y agoThats pretty much what I've been working on. https://youtu.be/19moSl4YFeI https://youtu.be/19moSl4YFeI
- hiq 5y ago> I can’t bulk edit transactions to reclassify them after the fact. If you store your transactions in a plaintext format, why don't you use CLI tools? I just renamed a bunch of accounts using sed for instance, in a hledger journal.
- darcys22 5y agoUPDATE transactions SET account = "Income" WHERE account = "Expense";
- 5y ago
- raymondh 5y agoAccountant here: Recommend using Beancount with version control on your data so that you can take snapshots at various points in time. The notion behind "accountants don't user erasers" is that like a blockchain, you're creating a trail of evidence. If all of the data is mutable all of the time, its evidentiary value is low (for example, the IRS gives more weight to "contemporary" evidence than to records constructed or altered after-the-fact). Another reason to freeze, snapshot, or close your books is to not lose the support and detail behind any financial statements you've produced. Imagine getting a business loan based on your Balance Sheet and Income Statement but later being unable to reconstruct how those were produced. Generally, accounting systems use a system of cumulative, immutable journal entries. If a mistake is made, then a reversing or adjusting entry is made.¹ There is merit to text based bookkeeping, but don't create a world that is so free form and mutable that it loses it meaning and connection with the real world. ¹ https://en.wikipedia.org/wiki/Adjusting_entries https://en.wikipedia.org/wiki/Adjusting_entries
- fangpenlin 5y agoI really enjoy using Beancount + Git for managing the accounting book for my own startup company, but I found it a bit tedious to add entries periodically. I wonder why nobody build a service make it like GitHub but for Beancount and automate lots of stuff. I then decided to make a service for it a while back. Shameless self-promoting here, yesterday I just launched the service in very early stage of open beta: https://beanhub.io/ https://beanhub.io/ Basically the idea is, as a software engineer, I believe accounting book can be automated like how we build software. There are many interesting workflow we can bring into the system, such as - Pull request review - Commit sign off (pgp signature) - CI for generating reports and many other interesting aspects. Also just like software, I believe many of the orgs can benefit from open sourcing their financial data, like no-profits or government. So I am thinking making open source accounting book free repository for the product just like GitHub did previously. Anyway, I just found this thread happen to appear on hacker news so just want to share the stuff I am building. Feedbacks are welcome.
- addcninblue 5y agoI've considered building something like this as well! I think something cool would be to integrate "predictions" or modeling with this. For example, for people with consistent salaries, this can be used to model financial goals, etc. Thoughts are welcome!
- 2pEXgD0fZ5cF 5y agoBeancount and the concept of plaintext accounting look really interesting. Any recommendations for guides or short books to get into accounting for personal/individual finance as a total beginner?
- trs-80 5y agoIt has been linked already a few times, but https://plaintextaccounting.org https://plaintextaccounting.org really is an excellent resource.
- xupybd 5y agoIf you're new to plain text accounting there is an amazing guide by Simon Michael & contributors. (Simon Michael is the creator of HLedger) https://plaintextaccounting.org/ https://plaintextaccounting.org/ Previous discussions here: https://news.ycombinator.com/item?id=28420797 https://news.ycombinator.com/item?id=28420797
- scottwick 5y agoI just recently started using Beancount for tracking my personal finances and I really like it so far. I've written some custom importers to parse CSVs from various financial institutions and auto-categorize some of the expenses, income, etc. based on regex matching on the transaction description from the CSV. I'm able to auto-categorize many of the transactions this way but there will always be some to which I need to manually apply categories. For example, entering "Expenses:Restaurants" for a restaurant I've never been to and thus don't have a corresponding matching rule. I also occasionally add new matching rules and then re-run the importer to generate a new ledger with the new auto-categorizations. Once I edit the ledger file though I can't rerun the importer or else I'll lose my manually entered labels. Do I just add those one-off entries to the matching rules? Or is there a better way to handle this? Would be curious to hear how others are approaching auto-labeling expenses, etc.
- erichocean 5y ago@dang It would be nice if, like the "(2018)" or whatever put after older entries, we could put "(GPLv2)", "(MIT)", etc. after links to github.com (they have an API to get license information). Thanks.
- jonathanoliver 5y agoMy company and I have been using Beancount since 2017 for all financial records. My company has about 60 employees and there are three individuals working in/on the financials regularly. Beancount (plaintext accounting) was the only solution that worked for us. We have many hundreds of thousands of transactions. We do both cash basis accounting (personal) and accrual accounting (company). We use Sublime Text with the Beancount plugin along with Git for version control. In the beginning we--like virtually anyone else doing accounting--used QuickBooks. As we grew QuickBooks was less and less of a solution because of the issues we had with multi-user collaboration along with historical/rollback change tracking, e.g. knowing who made what change where and when. In other words, we started to outgrow QB. Further, there were lots of accounting needs we had where QB continued to fall short and get in the way. We started to look around at various proprietary and open-source systems which were either locally installed or cloud hosted. Local installations came with problems surrounding collaboration and OS compatibility (Mac/Linux/Windows users) while cloud-hosted ones had issues around durability or longevity of the underlying company and sub-par data entry latency. Further, we had additional needs including strong tracking of cost basis, alternate currencies, the concept of "lots" (FIFO/LIFO/cost averaging) of stock sales, short/long capital gain/loss, along with cost of goods sold, among other things. Finally, we wanted to get away from all paper records entirely meaning that any paper receipts would be scanned and tracked alongside the corresponding transaction which helped with collaboration because it made researching a transaction easier. (The receipt tracking we did via a customer document meta tag along with an associated ID attached to that tag residing in each transaction.) As a software development company, we aren't afraid of a little bit of code and so the idea of a simple, plaintext accounting system with version control really appealed to us. The strongest contender that fit the model of our specific requirements was Beancount among all of the ledger-based derivatives. We've been very pleased with our results. For our taxes, we do an HTML export of the financials using "bean-bake" and our CPA can navigate our financials without trouble. We use Fava (a Beancount web GUI) for various reports. One place where Beancount really shines is the ability to edit multiple transactions at a time. Because it's just simple text files, you can easily use the "multiple cursors" option to make bulk edits or you can do simple search/replace. Because of Git-based checkpoints, there's no worry that we're going to break someone else while experimenting with an idea of how to express a given concept or the meaning of a set of transactions in the financial records. That said, one place where Beancount still needs some polish is on the reporting side. Even with Fava, getting reports has never been as easy as QB. It often takes a little bit of Beancount SQL (SQL-like) querying to get the data you want. For getting loans and other things where paper-based reports are required this can require a bit of extra time. Another weak point (at first) was for transaction import. This was soon overcome as we wrote some code that uses OFXTools to bring in all the credit card and banking transactions and to write them to the appropriate text files and then we go back through and categorize. One last thing to mention is that, while the core business logic for Beancount is sound and far more capable than any other accounting program we have experienced, I can see how the choice of Python (or more specifically parsing of large text files with Python) can start to be problematic in terms of performance and delay. We're seeing the slowdown a little but it's not terribly inconvenient and doesn't interrupt the workflow. It's more akin to the compile time for a small application, e.g. 2+ seconds. I could see file-based checksum/caching into an internal binary/proprietary format helping quite a bit--kind of like those annoying little python .pyc files that show up when you execute Python.
- throwaway180118 5y agoIs there a good way to use Beancount to handle inventory stock levels in/out?