30 ms·
Beancount: Double-entry accounting from text files
- 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 .
- katzgrau 5y agoMe and my wife have been using EveryDollar. It's simple and pulls in transactions, which is good because I despise finance (despite being reasonably thrifty) and I'm also lazy.
- 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.
- atgreen 5y agoFor my family I use ledger and a bunch of little programs I've written over the years to import data and generate reports. I've tried every other tool and system over the decades, and nothing beats PTA (and ledger, in my case).
- cogburnd02 5y ago> PTA Parent-Teacher Association??
- zrail 5y agoPlain text accounting
- deleted 5y ago[deleted]
- derefnull 5y agoHow does the system 'kind of break down' when you have a family?
- retrac 5y agoOnce you add parallelism to your transaction processing, all manner of untoward things can happen. For example, two parent processes may attempt to execute the same transaction to acquire the same resources at the same time, having failed to exchange messages to ensure their internal household state is fully synchronized. And sometimes child processes will fail to acquire permissions but silently commit transactions anyway!
- PebblesRox 5y agoThis week my toddler spent $60 on a 11x14 inch canvas print of himself getting a bottle of ketchup out of the fridge. $20 was for priority shipping to ship it to our former address in a different city. I thought the photos app was a fairly innocuous form of screen time, not realizing that it was so easy to make a purchase! No password confirmation or anything. Fortunately support made a one-time exception and refunded the payment even though it was well past the cancellation window. I still removed all the payment methods and addresses from our Google Pay account because I couldn't figure out any other way to guarantee that this doesn't happen again. Frictionless payment flows do not mix well with toddlers.
- rswail 5y agoOh come on, that would have been awesome as a pic :)
- derefnull 5y agoI understand that concurrent edits to the ledger will become problematic. If this really is a requirement, a distributed ledger solution (cloud based tool) may be needed Though is the root issue just communication? At some point transactions need: 1. Recorded 2. Categorized (optional, but desirable) 3. Reconciled (This can only happen as often as bank statements are issued) With multiple spenders, communication (to answer the question "what is this transaction for?!?!") is paramount and fits naturally at the reconciliation step or more frequently if desired. The workflow described is synchronous, centralized and simple
- mcgin 5y agoI use hledger-flow [1]. It's an opinionated way of importing csvs into the hledger format. Works really well for me, just export the csvs, write a mapping and you are good to go. It supports preprocessing the csvs if you need to clean the data or compute some new fields which is really powerful. Once you are up and running it only needs some minor updates each month to map unidentifiable transactions I can do this in under an hour these days. [1] https://github.com/apauley/hledger-flow https://github.com/apauley/hledger-flow
- 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
- _benj 5y agoI enabled notifications on all our cards and bank accounts so whenever a transaction happens I get an email. From there I just use gmail filters to put all of those in a folder and then wrote a script to download, parse and enter those transactions on my ledger with “Expenses:FIXME” Once a week or so (when I have around 10-20 transactions) I import them and go through them, asking my SO if there’s any transactions I don’t know of. Alternatively I also just make one transactions to put in an account that is fully my SO’s and one that is mine (mostly for both of our hobbies) and those I don’t track, except for the monthly deposit to those
- qudat 5y agoThis is where I’d like to go. Manually logging into each bank and downloading CSVs every month is just too much of a burden. I have email notifications for all transactions and a maildir on my dev machine. I just need to write some code to make it all happen.
- Tuckerism 5y agoYNAB (https://www.youneedabudget.com/ https://www.youneedabudget.com/) was the trick for us-- while I am totally comfortable with these kind of tools or even just a spreadsheet, the app and functionality from YNAB made it accessible to my significant other. We also like the "envelope" method for budgeting, so this made it a natural fit. I recommend everyone at least try it if they're not budgeting already. (If this is what you meant by family finances-- as others have pointed out, there's a difference between budgeting and accounting. YNAB has met all of my family's needs in the financial realm.)
- xupybd 5y agoI went through the same thing. I used to use hledger. Now I use lunchmoney so my wife can use the tool. TBH I'm thinking about going back to hledger. Don't get me wrong lunchmoney is amazing but it's not as well suited to me. My wife has little interest in looking at the budget so there is not much point.
- 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.
- zie 5y agoI think there IS a useful reason to count the pennies, if you are one that needs help staying within self-imposed spending limits. But even tracking it doesn't solve the actual problem, which is behavioural, it might help enough to be useful.
- globular-toast 5y agoIt really depends what your arrangement is. Is everything shared between you? Then you need to track all accounts. You should look into automating ingest of your accounts data. Most banks/credit cards etc. should allow some kind of statement export. If not, consider switching provider. I would advise not to worry about petty cash. Don't get pedantic. Worry about the big things. Just make a cash account for petty cash. If you don't share accounts then just track your stuff and set up reimbursement account(s) for your family. You'll only know the net amount you need to transfer between yourselves to square up at the end of the month or whatever you agree to do.
- blais 5y agohttps://docs.google.com/document/d/1MjSpGoJVdgyg8rhKD9otSKo4iSD2VkSYELMWDBbsBiU/ https://docs.google.com/document/d/1MjSpGoJVdgyg8rhKD9otSKo4...
- rthomas6 5y agoI'm married and do envelope budgeting with Beancount. We share a bank account, and it's my job to update the budget every day. I manually enter all transactions, except for monthly expenses that are scripted to come out automatically. My wife just wants to look at the reports. I keep it up to date. It's not perfect but it's the best system I've tried, including YNAB, because I get paid biweekly and YNAB forces you to budget monthly.
- 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.
- 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.
- 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.
- 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.
- 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 agoYeah any text editor would be fine which is what's great about PTA but editing text on a phone isn't great. That app looks like it might be what I'm looking for so I'll have a look at that thanks
- Karrot_Kream 5y agoPersonally, I have a Matrix bot written which takes a simple format like "$5 Honey Groceries" and batches them up into inputs for my ledger. That way I can tap in a new transaction on the go but still have it all recorded at home
- 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.
- 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.
- nickray 5y agoHow do you map KMU Konten to ledger accounts (can you rollup?), and do you automate VAT accounting?
- 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".
- NoboruWataya 5y ago> gnucash requires learning some niche scheme stuff; it feels very "tacked on". There is also piecash, which gives a nice Pythonic interface to the SQL files generated by GnuCash: https://pypi.org/project/piecash/ https://pypi.org/project/piecash/
- rmbyrro 5y agoBear in mind that using SQL in GnuCash may result in data loss: > Note this feature is considered experimental. It works for most of the common use cases but some corner cases have been reported to result in data loss. [1] [1] https://gnucash.org/features.phtml https://gnucash.org/features.phtml
- 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)?
- _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.
- 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.
- GongoBalongo 5y agoProblem: all kind of tools support different kind of databases. For a ledger I would, of course, use PostgreSQL - understandung your README.md right this is not supported, instead just MySQL and Sqlite. C´mon, you do not like textfiles but you do NOT support PostgreSQL?
- 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.
- 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";
- 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.
- 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
- balaji1 5y agoThoughts on hledger?
- 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.
- 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.
- 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.
- 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?