[HN Gopher] Plain Text Accounting
       ___________________________________________________________________
        
       Plain Text Accounting
        
       Author : sundarurfriend
       Score  : 358 points
       Date   : 2021-01-12 11:52 UTC (11 hours ago)
        
 (HTM) web link (plaintextaccounting.org)
 (TXT) w3m dump (plaintextaccounting.org)
        
       | djhworld wrote:
       | I've been using beancount [1] and fava [2] to organise my
       | personal finances for a while now, my beancount file has about 3
       | years of transactions/financial data in it.
       | 
       | I've automated a few things but it's still largely a manual
       | process to update the file, which I do maybe 2-3 times a month.
       | Requires some patience but I think it's worth it. Also the emacs
       | mode for beancount is superb.
       | 
       | The main advantage is it's very flexible, you can track
       | investments, bank accounts, credit cards, pensions and even
       | abstract things like digital currency wallets (e.g. Playstation
       | Network) or vacation time. I've even used it to track RSUs from
       | employment etc.
       | 
       | [1] https://beancount.github.io/
       | 
       | [2] https://beancount.github.io/fava/
        
         | sundarurfriend wrote:
         | I'd been looking into beancount and fava earlier, but somehow
         | it took your comment for me to realise why the latter tool is
         | called fava (=beans, referencing beancount). I'd previously
         | ignored it as just another pronounceable-nonsense-name on the
         | web.
        
         | philipswood wrote:
         | I love fava/beancount, but I wish the language had some method
         | of abstraction. I keep repeating myself, but don't see easy
         | facilities for DRY, etc.
         | 
         | e.g. When I do a debit card purchase I move currency from
         | Whatnot:Cheque:Pending to the expense account, then later from
         | Pending to Whatnot:Cheque:Current so for EVERY debit card
         | transaction I'm copy-pasting a template and editing by hand.
         | 
         | Fava/beancount is so good though, that it's a local maximum -
         | I'm a bit stuck.
        
           | k_marussy wrote:
           | You can easily create any kind of abstraction with
           | beancount's programming interface [1]. I find it very
           | comfortable, because I can manipulate the data structure
           | directly (and not just the plain text as in e.g. vim).
           | 
           | For example, here is a plugin that I wrote to "delay" a
           | posting of a transaction to another date via an intermediate
           | ("transfer") account [2] and its tests [3] that solves a
           | problem pretty similar to yours (I should someday package my
           | plugins properly and maybe put them on PyPI, but I haven't
           | had the time yet). The beancount documentations also has a
           | list of existing published plugins [4].
           | 
           | [1]: https://beancount.github.io/docs/beancount_scripting_plu
           | gins...
           | 
           | [2]: https://linx.marussy.com/selif/v31rtbi5.py
           | 
           | [3]: https://linx.marussy.com/selif/tpwlujdk.py
           | 
           | [4]:
           | https://beancount.github.io/docs/external_contributions.html
        
           | kenada wrote:
           | The place to do this would be in ingest, wouldn't it? The
           | ingest configuration is just Python, so one could conceivably
           | write a module to assign accounts based on the incoming data.
           | I know there was a module that would try to use ML to do that
           | based on your account history.
           | 
           | If you don't want to do that, another option is hledger. I
           | used that for a while before deciding to switch back to
           | beancount for its ingest process. However, considering I have
           | made no progress on that over the last year, I might just go
           | back to using hledger.
           | 
           | hledger's ingest process is not as sophisticated as
           | beancount's. You can't write arbitrary plugins like with
           | beancount, but you can pattern match on the incoming text and
           | assign accounts that way. You can also define automatic
           | transactions in your books, which I found incredibly helpful
           | for managing my budget.
        
           | cobby wrote:
           | Sounds like you need to develop a plugin or take a look at
           | existing ones (for example effective date [1] might be
           | helpful)
           | 
           | [1] https://github.com/redstreet/beancount_reds_plugins/tree/
           | mas...
        
       | visviva wrote:
       | This is a well-written FAQ. In particular, the "Objections and
       | Concerns" section seemed to predict my questions as I read
       | through each answer (I do not do this type of personal
       | accounting).
        
       | zelphirkalt wrote:
       | Emacs is already mentioned, but not Emacs Org-mode, so here comes
       | the obligatory Emacs Org-mode comment:
       | 
       | I've been doing my personal accounting in Emacs org-mode tables /
       | spreadsheets for 3 years now. I do not need super fancy things in
       | my accounting, but so far it worked great and I am quite sure one
       | can build more complex accountings than mine, as one has the full
       | power of elisp and calc at ones fingertips, when using Emacs org-
       | mode.
        
         | npsimons wrote:
         | Seconded, although I feel I'm pushing the limits of org-tables.
         | That being said, being able to pull values between tables with
         | "remote(table-name,@Row$Col)" has been a game changer.
         | 
         | I may have to look into ledger, but it wouldn't even be on my
         | radar if it wasn't backed by plain text.
        
         | cyrialize wrote:
         | Big fan of org-mode, although I recently stopped using it in
         | favor of Joplin. I may switch back sometime if I can find a way
         | to mimic Joplin's UI in org-mode (probably with an emacs tree
         | plugin).
         | 
         | I love comments like these. The moment I see the words "plain
         | text" in any HN post I always go to the comments and ctrl+f
         | emacs.
        
         | podiki wrote:
         | Why not both! Of course, since it is org-mode, you can just do
         | your ledger-ing in there (like any other source block), make
         | reports, comments, etc. Literal programming becomes literal
         | finances.
         | 
         | I haven't done this yet, but have played with ledger and org-
         | mode separately. I've seen several articles about this,
         | including on the official docs [1, 2]
         | 
         | [1] https://orgmode.org/worg/org-contrib/babel/languages/ob-
         | doc-...
         | 
         | [2] https://orgmode.org/worg/org-tutorials/weaving-a-
         | budget.html
        
       | dandare wrote:
       | Cudos to the website for clearly stating WHAT THE WEBSITE IS in
       | the very second sentence. This kind of clarity is unfortunately
       | quite rare.
       | 
       | > This site collects FAQs and a directory for the PTA
       | community...
        
       | sirodoht wrote:
       | I've been using ledger [0] in the past 2 years very successfully
       | in keeping track of my personal finances.
       | 
       | I've tried with many accounting apps, but the clarity of the
       | plain text, editing it with my preferred editor, and the
       | capabilities of ledger (reading only!) are what kept me (I
       | think). I also wrote an intro for ledger here [1].
       | 
       | [0] https://www.ledger-cli.org/
       | 
       | [1] https://sirodoht.com/blog/introduction-to-plain-text-
       | account...
        
         | gandalfgreybeer wrote:
         | Thank you for the guide. Found it very helpful.
        
         | sundarurfriend wrote:
         | Your section on single vs double-entry accounting,
         | specifically:
         | 
         | > We can neither create money out of thin air, nor make it
         | disappear. Money has to come from somewhere and go somewhere.
         | 
         | reminded me of the excellent "Accounting for Computer
         | Scientists" by Martin Kleppmann [1], with a very useful and
         | easy to remember mental model of this process.
         | 
         | [1] https://martin.kleppmann.com/2011/03/07/accounting-for-
         | compu...
        
         | sundarurfriend wrote:
         | Thanks for sharing the article. It's nice to get an intro from
         | someone else also new to Ledger, which guarantees it starts
         | from the very basics and makes for a good first step.
         | 
         | The other "getting started" guide I found [1], for a contrast,
         | starts with a whole ecosystem of scripts and a system in place
         | for effective ledger use - which will be useful later, when I
         | do want to get a full system going, but I've learnt it's better
         | to start simple and stumble around, until I can put together
         | the pieces of the system myself later (with theirs as a very
         | useful reference).
         | 
         | [1] https://rolfschr.github.io/gswl-book/latest.html#the-setup
        
       | seanwilson wrote:
       | For people that mention software like Ledger, Excel and Google
       | Sheets to do their accounting, what do you do to make sure you
       | don't accidentally delete/duplicate/edit a transaction and how do
       | you import the latest transactions in an automated way?
       | 
       | For example, I started using FreeAgent for taxes and the game
       | changing feature for me is the (Open Banking based) transaction
       | feeds where transactions are pulled daily from multiple bank
       | accounts, where you're prompted that you need to
       | explain/categorise each new transaction and the explanations +
       | transactions get locked-in once they become part of a submitted
       | tax return.
       | 
       | You can easily change the category of a transaction in the UI but
       | e.g. deleting or modifying a transaction amount will require
       | multiple steps and for you to ignore loud warnings. The automated
       | import takes care of avoiding duplicates and making sure nothing
       | is missed compared to doing it manually.
       | 
       | I've done accounting with just spreadsheets before and I hated
       | how easy it would have been to make an accidental edit and not
       | notice. Manually exporting and importing CSV files is fatiguing
       | and error prone as well.
       | 
       | I find this similar for invoicing software: you could keep a
       | spreadsheet of who you need to invoice, if you sent it, if it's
       | been paid, sending late reminders etc. but there's a lot of
       | freedom to make mistakes and mistakes here are high impact.
       | Invoicing software automates many of the steps, forces you to
       | follow a set process and gives loud warnings if you deviate or
       | make unusual edits.
        
         | nimih wrote:
         | >For people that mention software like Ledger, Excel and Google
         | Sheets to do their accounting, what do you do to make sure you
         | don't accidentally delete/duplicate/edit a transaction and how
         | do you import the latest transactions in an automated way?
         | 
         | My general workflow is:
         | 
         | 1. Pull tx data from bank websites, mostly via some hacky web
         | browser automation scripts which log in and download the
         | appropriate QFX/CSV.
         | 
         | 2. Run `bean-extract [args] && bean-file [args]`, which
         | processes the tx logs into a beancount file of newly seen
         | transactions, and then move+renames the original files into an
         | archive.
         | 
         | 3. Copy entries from the generated beancount file to my
         | permanent ledger via my favorite text editor. The processing
         | rules I have (which get run during bean-extract) are
         | comprehensive enough that this is mostly just copy-pasting
         | large swaths of text to the appropriate section (e.g. "Balance
         | Transfers", "Employment Salary & Benefits", "Everyday
         | Expenses"), but I'll usually have a couple odd expenses which
         | don't get automatically categorized.
         | 
         | 4. Add a `balance` assertion for any accounts which have new
         | transactions--this throws an error if my current calculated
         | balance for that account doesn't match the assertion.
         | 
         | 5. Run fava to check for errors and view any reports I'm
         | interested in.
         | 
         | 6. `git commit` the whole mess.
         | 
         | In general, (3) is only adding new text so it's hard to make
         | deletions/edits by accident, and (4)+(5) give a strong guard
         | against duplicated/missed/incorrect entries. (6) lets me glance
         | over the diff before committing, mainly to confirm it's an
         | append-only operation (unless I changed the name of an account
         | or something like that, which is both rare and can be done in a
         | separate commit to keep things tidy).
         | 
         | At the end of the day, the amount of supporting code I have for
         | all the automation is around 1k lines, and it's been built up
         | pretty slowly over the years--the initial automation got set up
         | incrementally in order of how tedious I found various bank
         | websites vs. the volume of transactions for the associated
         | accounts, but at this point I can mostly just copy-and-paste my
         | previous work on the rare occasion I need to set up a new
         | account.
        
         | barrucadu wrote:
         | > what do you do to make sure you don't accidentally
         | delete/duplicate/edit a transaction and how do you import the
         | latest transactions in an automated way?
         | 
         | I've never really had a problem with accidental deletions,
         | duplications, or edits - it's a text file, and a transaction is
         | at least 3 lines long (date and two postings), usually followed
         | by a blank line. It's not like a CSV where the entire thing
         | fits on a single line, and all the lines kind of blur together
         | because they're so similar.
         | 
         | I commit my ledger file to git weekly, but that's more of a
         | backup than anything else.
         | 
         | I manually enter all my transactions, so data import isn't
         | really a problem I worry about (though I know ledger / hledger
         | have ways of doing that).
        
         | Jtsummers wrote:
         | > For people that mention software like Ledger, Excel and
         | Google Sheets to do their accounting, what do you do to make
         | sure you don't accidentally delete/duplicate/edit a transaction
         | and how do you import the latest transactions in an automated
         | way?
         | 
         | I make sure by reconciling my accounts weekly (verifying them
         | against the actual bank/brokerage accounts). I don't import
         | automatically, I found that that led to laziness on my part.
         | The value proposition of this style, for me, was better
         | awareness of my money (not a vague, "I have enough" or I have
         | around $xxxx in my checking account and $xxxxx in my brokerage
         | account).
         | 
         | However, there are tools to bring in transactions automatically
         | and I did use them for a bit. There are tools that offer
         | support for OFX, CSV, QIF and others listed on the linked page.
         | I found OFX (not just with this, but in general) to be
         | inconsistent across banks, and, when I did things
         | "automatically", made it semi-automatic. I'd download the CSV
         | of transactions and import them.
        
         | lasftew wrote:
         | The advantage of text-based accounting is that files can be
         | version controlled, just like software. I am using git and
         | commit whenever I have a consistent state, as verified by (lots
         | of) balance assertions.
         | 
         | In some sense, git commits are "meta transactions" for my
         | personal journal, leading from one consistent state to another
         | consistent state.
        
         | AlanYx wrote:
         | One way you can make sure you don't inadvertently make changes
         | is to use assertions, similar to how you'd use assertions in a
         | programming language. For example, you can enter a balance
         | assertion that's identical to the month-end balance on a paper
         | statement you receive. If you somehow later mess up
         | transactions somewhere so that the assertion becomes invalid,
         | plain text systems will let you know.
         | 
         | BTW, I think one of the main differences between Ledger/hledger
         | and Beancount is whether assertions are interpreted per-file or
         | globally.
        
       | lars_francke wrote:
       | It's been a while since I looked at Plain Text Accounting but I
       | want to do one thing I couldn't figure out how to do. Maybe
       | someone here has ideas?
       | 
       | Cross Account Budgets[1]. I want to assign every cent coming in
       | to a budget but the budget shouldn't be tied to a specific
       | account as money can come in on multiple accounts but I want to
       | model the "real" situation at the same time and assign the money
       | to a bank account.
       | 
       | [1] Described in this old mailing list post:
       | https://groups.google.com/g/beancount/c/ddi5fOuAFoU/m/jp3d0M...
        
       | koeng wrote:
       | Anyone here tried both ledger and hledger? I read up on the docs,
       | and would like to try one, but wanted to hear any colloquial
       | experiences of usage before I dove in.
        
       | chadlavi wrote:
       | I scrolled around for 5 minutes looking for a link to a basic
       | example document and never found one.
        
         | Jtsummers wrote:
         | You have to click on some of the links. Check under docs,
         | you'll find details about several different systems that are
         | all under the umbrella of "plain text accounting". It's _not_
         | one app. They have links to information on ledger, hledger, and
         | BeanCount which all work similarly but are not (entirely)
         | compatible (in particular, I know there 's a common subset of
         | both ledger and hledger which covers most personal accounting
         | needs, but they each have some features the other lacks, never
         | used BeanCount).
         | 
         | https://plaintextaccounting.org/#docs
        
         | smichael wrote:
         | Good feedback. It's hard to know where to stop adding to this
         | wall of text, also each tool has its own format. But, point
         | noted, thanks.
        
           | chadlavi wrote:
           | Different people learn in different ways, but I tend to
           | always want to jump straight to an example I can pore over
           | before reading the docs.
        
         | OskarS wrote:
         | The file format for ledger is very simple, it's literally just
         | a list of transations formatted like this:
         | 2021/01/12 Grocery store             Assets:Checking
         | Expenses:Groceries   $50
         | 
         | This transaction means that you spent $50 at the grocery store.
         | It's double-entry bookkeeping, so the transfers always balance:
         | "Assets:Checking" account is reduced by $50 and
         | "Expenses:Groceries" is increased by $50. This entry is
         | equivalent to the previous one.                   2021/01/12
         | Grocery store             Assets:Checking     -$50
         | Expenses:Groceries   $50
         | 
         | But this entry is invalid, since it's not balanced (it's the
         | accounting equivalent of a compiler error, and ledger will
         | throw an error when parsing this):                   2021/01/12
         | Grocery store             Assets:Checking     -$75
         | Expenses:Groceries   $50
         | 
         | A ledger file is literally just a list of these transactions.
         | Accounts are created the first time you use them in a
         | transaction. Transactions can have more than two associated
         | accounts, but they still have to balance. There are many more
         | advanced features, but this (along with some basic
         | understanding of accounting) is all you really need.
        
       | DarmokJalad1701 wrote:
       | Do programs like these essentially re-compute balances from the
       | entire transaction history any time that it is asked for up-to-
       | date information? Does it cache anything?
        
         | lasftew wrote:
         | I am not aware of any that does. With modern hardware, and in a
         | personal finance context (a few transactions per day), it is
         | unlikely you will have too much data to handle. The algorithm
         | to compute a balance is O(n) with the number of transactions,
         | or O(nlogn) if the tool allows for unsorted input.
         | 
         | If required, you could always close a balance in one file and
         | start with new accounts in a new file, sharding your journal by
         | year, for example.
        
           | smichael wrote:
           | It would be good to measure that for the various tools.
           | Things like balance assertions, balance assignments,
           | valuation, may complicate the picture. hledger and beancount
           | users, at least, do often split files by year to keep things
           | in the "pleasantly fast" range.
        
           | npsimons wrote:
           | > If required, you could always close a balance in one file
           | and start with new accounts in a new file, sharding your
           | journal by year, for example.
           | 
           | When I was using double entry accounting down to individual
           | grocery items in GNUCash, I used to do this just for my own
           | sanity.
        
         | smichael wrote:
         | Essentially yes, with some exceptions:
         | 
         | Ledger used to save a parsed/processed file to speed up
         | subsequent reads. It was dropped as not being worthwhile.
         | 
         | Long-running UIs, like hledger-ui, hledger-web, and fava I
         | expect, do the parsing only once, though the report calculation
         | is typically repeated on each page load.
        
       | enriquto wrote:
       | Plain text is the universal computer interface. We will always be
       | "returning" to it. We never should have left it, really.
        
         | lazyjeff wrote:
         | Agreed. Applications spend so much time trying to replicate
         | user interface features that are inherent in plain text via any
         | text editor. For example, full text search is already built in
         | via Ctrl-F or part of the OS via grep or desktop search. Same
         | with customizing the font, infinite scroll,
         | adding/copying/deleting items, find-and-replace, convert to pdf
         | (just print it), etc.
        
         | qayxc wrote:
         | I strongly disagree.
         | 
         | Plain text is great for data that is just that - plain text.
         | 
         | As soon as data isn't text, the idea falls apart quickly. What
         | would be the advantage of storing audio data as text? It would
         | take up more space, be ambiguous, and would require more memory
         | and compute time to load and save.
         | 
         | Same applies to many other forms of data that aren't inherently
         | text or supposed to be manipulated manually.
         | 
         | Everything is not text and everything is not intended to be
         | manipulated and interpreted by humans directly. This applies to
         | audio and video data, but also to a lot of specialised data
         | formats that are optimised for the algorithms that use them.
         | 
         | So no, we won't always be returning to text and "leaving" text
         | formats is a natural and important step for data that's not
         | generated manually for and by humans (i.e. by means of manual
         | data entry).
        
           | massysett wrote:
           | I used to worship at the altar of plain text, and indeed text
           | is ideal in some situations. However I have found that text
           | falls apart when I need to programmatically manipulate data
           | and write it to a file. It's hard to formulate structured
           | "plain text" formats that are human readable, human
           | writeable, machine readable, and machine writable. Yes it's
           | easy enough with simple data (and Ledger is relatively
           | simple.) with richer and more complex data this gets very
           | hard.
           | 
           | After years of using Ledger and trying to adapt it and my own
           | systems to store richer financial data and manipulate it
           | programmatically, I have migrated to my own solution based in
           | SQLite rather than plain text. I realized that what I have is
           | a data storage and manipulation problem, which is exactly the
           | problem SQL databases solve very well.
           | 
           | Text works well for some things but it doesn't deserve all
           | the worship it gets in geek circles. Part of this was my own
           | fault because I tried to make text work in situations where
           | it wasn't suited, but hopefully others will read my comment
           | and not make the same mistake solely because they read some
           | blog posts and other things from old-school UNIX heads saying
           | "text is great!" Don't try to make text do everything.
        
             | mattarm wrote:
             | I'd be interested to understand the rough details of your
             | system. I have played around with ledger and beancount, but
             | like you I find myself wanting a more programmatic access
             | to the data. Maybe what we need is a sqliteaccounting.org
             | site to explain the pros/cons!
        
               | massysett wrote:
               | There are two main tables: one that can hold any
               | transaction, and another that's specifically for
               | transactions I download from bank and credit card
               | statements. It holds different data such as the unique
               | identifier that banks assign in the OFX data (this helps
               | avoid duplicate transactions.) Difficulty in dealing with
               | data like that is a big reason I started to move away
               | from plain text.
               | 
               | There are other tables to hold what I call "categories"
               | (accountants would call these "accounts") and "accounts"
               | (these correspond to the more colloquial usage) and
               | commodities and other items like the balances from bank
               | statements.
               | 
               | I considered both SQLite and Postgres. Postgres has nice
               | things like true ALTER TABLE support but SQLite's ease of
               | administration and simple API swamps any advantage that
               | Postgres would offer for this.
               | 
               | My user interface is in Haskell, but one could use any
               | language for that - I just like Haskell. It's all CLI
               | based. I import the overwhelming volume of transactions
               | from bank downloads, but when I need to enter something
               | manually I currently just write a little Haskell script
               | to do it (eventually I might add a CLI program to do
               | this.)
        
             | blackbear_ wrote:
             | > It's hard to formulate structured "plain text" formats
             | that are human readable, human writeable, machine readable,
             | and machine writable.
             | 
             | XML? Or is that too far from _plain_ text?
        
               | andrepd wrote:
               | XML is not human readable or writeable.
        
               | massysett wrote:
               | It's hard to do this in XML because parsers nearly always
               | strip out comments and often whitespace too. Thus writing
               | days to the file strips out important data that I expect
               | to be able to add if the file were truly human writable.
        
             | k4c9x wrote:
             | Structured plain text sounds kind of self-contradictory.
             | Obviously I don't know what you worked on but could the
             | issues you ran into maybe have been easier to work with if
             | the data were stored in multiple files and folders instead
             | of trying to add structure to plain text?
        
               | massysett wrote:
               | Sure that's possible but not any easier. Anything can be
               | stored in "plain text" just as it's possible to drive
               | nails with a screwdriver. That doesn't make it the right
               | tool.
        
           | zikzak wrote:
           | You are not wrong, but the argument is a text file could hold
           | the link to the audio file and any metadata. I am a right
           | tool for the job person so I use plain text for personal
           | stuff but when it comes to work, there are so many more
           | requirements at play that plain text is rarely the best
           | answer other for, say, exchanging regular tabular data with
           | third parties.
        
             | kortex wrote:
             | Without the right framework to manage sidecar files, this
             | system rots quickly. Tools like DVC are good but there are
             | still rough edges.
             | 
             | The issue partly stems from the lack of coupling between
             | data and metadata on file systems. I think the next
             | evolution of file systems involves the ability to link
             | files together in an organic way. But that is tricky since
             | it breaks the abstraction of files as stream of bytes.
             | Might need to go up a level of abstraction and create new
             | primitives for cp, mv, etc.
        
         | LargoLasskhyfv wrote:
         | Oh really? In which encoding? ASCII? EBCDIC? UTF1/6/8/16/32,
         | TRON, and gazillionz of other historical artifacts?
        
           | zaltekk wrote:
           | Because a proprietary or binary format would be easier to
           | recover over time?
           | 
           | It's usually pretty easy to figure out the right encoding for
           | text files, especially when you know their origin (which I
           | expect you would for accounting documents).
           | 
           | Additionally, UTF-8 is quite universally accepted these days.
        
           | comeonseriously wrote:
           | Why the aggression?
        
             | LargoLasskhyfv wrote:
             | Because dogmatic regression.
        
           | kawsper wrote:
           | Yes.
        
           | EuAndreh wrote:
           | UTF-8
        
         | npsimons wrote:
         | As an org-mode user for nearing a decade, including on multiple
         | phones, I agree.
        
       | tantalor wrote:
       | I use Google Sheets for bookkeeping because I found integrating
       | with "plain text" tools on the web was really weak when I started
       | my business in 2016.
       | 
       | I wrote this doc describing my method,
       | 
       | https://docs.google.com/document/d/e/2PACX-1vS7EzDgEt9_cQ5lc...
       | 
       | The idea is to record every transaction as between exactly two
       | accounts. This is a little tricky with real-world transactions
       | but it can be done, e.g., a real-estate purchase involving 8
       | accounts.
        
       | OskarS wrote:
       | I can really recommend doing this for your personal finances!
       | Tools like ledger are really powerful, and properly accounting is
       | a great way to save on money. I can very easily go into my
       | personal ledger and (say) get a report on "How much money did i
       | spend daily on groceries last month" or "List all subscription
       | services i pay for and how much they cost each month" or
       | whatever. It gives you a great view into where your money is
       | going and helps you plan for the future. It's very satisfying to
       | run the command "ledger reg -Mn Assets Liabilities", which is
       | "show me my net wealth (i.e. the sum of Assets and Liabilities)
       | for every month in the ledger", and see your personal wealth grow
       | over time.
       | 
       | But almost more importantly: if you're a programmer, it's really
       | very fun! Like, i have my own system where I download my bank
       | statement as a CSV and process it in AWK together with an org-
       | mode table of payees that map each line on the bank statement to
       | an account, which then generates a ledger file. Since it's just
       | you using it, you can make it so it works however you like, and
       | it quite satisfying to see it all come together.
       | 
       | It's also a great way to learn about accounting. Turns out, I
       | really kinda like accounting! It has many of the same pleasures
       | of programming or math, and seeing everything balance is very
       | satisfying. In short: if you're a programmer who feels like they
       | haven't quite got a handle on their finances, I can't recommend
       | plain text accounting highly enough.
        
         | tarsinge wrote:
         | I agree with the fun part. I found this to be a nice intro to
         | the concepts of double entry accounting:
         | https://martin.kleppmann.com/2011/03/07/accounting-for-compu...
         | 
         | Previous HN submission :
         | https://news.ycombinator.com/item?id=2298471
        
         | mikepurvis wrote:
         | > How much money did i spend daily on groceries last month
         | 
         | Can you expand on this slightly? One of my frustrations with
         | personal finance tools that I have tried in the past is that
         | they're really bad at modelling occasional expenses-- for
         | example as a low-car family, we only fuel our vehicle once
         | every 4-5 weeks, so some months the "gas budget" goes unused,
         | whereas other months if we take a trip, we'll completely blow
         | the gas budget because we fuel up twice or three times.
         | 
         | I wish it were possible to "smooth" those kinds of expenses
         | into an average daily amount, but also have a way of indicating
         | that a particular chunk of them should actually be extracted
         | from the smoothing and assigned to a different category
         | altogether (eg, the gas used on the trip should go to
         | "vacations", not "vehicle"). A similar thing applies with other
         | bursty things like home repair expenses, where I'd like my Home
         | Depot receipts amortized over a time period that I specify
         | rather than counted right at the moment of purchase.
        
           | gen220 wrote:
           | > modelling occasional expenses
           | 
           | I would say it's very hard to budget for bursty things on a
           | monthly cadence. You can have a "virtual account" for this
           | stuff, that fills on months with little activity and drains
           | on months with more activity. But this is kind of complicated
           | and might not be worth it.
           | 
           | I'd try answering the question: what is your goal in
           | budgeting for gas, for example? Is it to keep gas spending
           | under control? Or to understand how much you spend on gas?
           | And if you want to understand, why? Budgeting is a solution
           | to some answers to these questions, but not all of them.
           | 
           | Personally, I find it more useful to _track_ these things,
           | than to budget them, if that makes sense.
           | 
           | For example, I want to know how much I spent on rental cars
           | in 2020, because that impacts our decision to lease a car in
           | 2021.
           | 
           | > a way of indicating that a particular chunk of them should
           | actually be extracted from the smoothing and assigned to a
           | different category altogether
           | 
           | In GNU Ledger, you can apply arbitrary categories to each
           | expense, and you can also "tag" line-items. For example, if
           | you think 80% of your last refill was from a trip, you can do
           | as follows:                 20201/01/12 * Chevron
           | Expenses:Travel:Car:Gas             $16.00 ; :vacation:
           | Expenses:Travel:Car:Gas              $4.00 ; :commuting:
           | Liabilities:CreditCards:AppleCard  $-20.00
           | 
           | You can then do queries to see which of your gas came from
           | commuting, and which came from vacation.
           | 
           | You can remove vacation from your reports altogether, and you
           | can also focus exclusively on each vacation. You can even tag
           | vacations, if you so choose.                 ;
           | :vacation:lasvegas2021:
           | 
           | > amortized over a time period that I specify rather than
           | counted right at the moment of purchase
           | 
           | You can achieve this behavior by specifying "effective dates"
           | for certain purchases.
           | 
           | For example, when I buy plane tickets, I like to amortize the
           | cost of that ticket over each day I'm at my destination
           | (similar to your home depot example).
           | 2020/01/11 * American Airlines         ; three-day trip to
           | Colorado         Expenses:Travel:Plane          $80.00  ;
           | [=2020/02/01]         Expenses:Travel:Plane          $80.00
           | ; [=2020/02/02]         Expenses:Travel:Plane          $80.00
           | ; [=2020/02/03]         Liabilities:CreditCards:Apple $240.00
           | 
           | The dates in the comment are called "Effective dates". You
           | can ask for reports to be presented with either effective
           | dates or transaction dates, at query-time. Note that the
           | credit card payment's effective date is identical to the
           | transaction date.
           | 
           | Let me know if you have any further questions! It's a fun
           | topic.
        
             | smichael wrote:
             | Remove the `=` and you don't have to choose!
        
           | pc86 wrote:
           | Well, whether you assign the expenditure to vacations or
           | vehicle is a choice (and I could see arguments for both). So
           | software isn't going to help you with that.
           | 
           | I use YNAB for budgeting and they basically advise what
           | you're requesting - figure out what the "average" is over a
           | given period of time and just budget that amount. Say you
           | contribute $200/mo to an all-encompassing gifts budget, you
           | may only pull from it a few times a year but the money is
           | already earmarked.
           | 
           | Amortizing things doesn't make sense for a home budget - the
           | whole point is to know whether or not you have enough money
           | for x.
        
           | samatman wrote:
           | With ledger, this is very easy.
           | 
           | I also run a janky Python script which imports my various
           | .csv files, detects which is which, and turns them into
           | ledger entries.
           | 
           | So a vacation stop at a gas station would look like this:
           | 2021-01-01 Chevron         Assets:Checking   $-100.00
           | Expenses:Auto:Gas
           | 
           | So lets say I know I spent $40 of that on food, and want to
           | put another $40 into the vacation budget, I modify like so:
           | 2021-01-01 Chevron         Assets:Checking   $-100.00
           | Expenses:Food     $40         Expenses:Vacation    $40
           | Expenses:Auto:Gas
           | 
           | And it puts the rest in the gas budget.
           | 
           | There are ways to report average expenditures and smooth them
           | out, ways to report how many days between each purchase in a
           | particular category or from a particular merchant, and so on.
           | Want to amortize a particular purchase? No problem, it's a
           | periodic transaction.
           | 
           | ledger-cli can do accounting, really if there's a question
           | about your money or a way you want to keep track of it, it's
           | covered. Several graph libraries can ingest ledger files.
        
           | yidaman wrote:
           | What I do is I create a budget for an entire year. That
           | smooths out expenses that don't happen on a monthly cycle.
        
           | davchana wrote:
           | I use a spreadsheet, two adjacent columns, one for incoming,
           | one for spending. The column pair is titled as Gas,
           | Registration, Repair. I look back at 1 year history, average
           | those per paycheck, put money in each column from each
           | paycheck. I minus them when I spend. Each row starts with the
           | dare of transaction.
        
           | smichael wrote:
           | I had the same wish, you might be interested in https://githu
           | b.com/simonmichael/hledger/blob/master/bin/hled...
           | 
           | However, reporting average expenses is easy, and sometimes
           | enough..
        
         | gen220 wrote:
         | I think myself and many others could have written the same
         | comment.
         | 
         | I'll add that it's also delightfully easy to get started.
         | 
         | As an application, Accounting is kind of like Vim or Excel or
         | other tools with steep learning curves and nirvana at the end
         | of them.
         | 
         | You can start by just tracking one bank account by hand which
         | is easy enough and fun, because you're still learning how this
         | accounting thing works.
         | 
         | Pretty soon you'll be tracking your investments, ISOs, taxes,
         | credit card points, and so on as absurdum. You'll be the person
         | who finds the bug in your employer's W-2 generator...
         | 
         | It's a steep time investment, but once you've written the
         | automations, it'll take you maybe 30 minutes each month. And
         | you'll never experience the feeling of "not being in control"
         | of your finances again.
        
           | wasdfff wrote:
           | Do banks have anything you can use to automate getting data
           | off their websites? My annoyances lie in generating the csv
           | files. My checking account outputs an arbitrary range of
           | dates, however many transactions fit on pg 1, while my credit
           | card from the same bank outputs csvs by billing cycle. It
           | makes it a little annoying going into the bank website and
           | generating these files across relevant date ranges.
        
             | adamnew123456 wrote:
             | Maybe your bank is better about this and offers OFX, but
             | ultimately I gave up on this approach due to my bank adding
             | more aggressive anti-scraping measures over time. The
             | credit card sites were even worse about this.
             | 
             | Now I have a Postfix server setup which accepts the daily
             | transaction summaries they send and makes CSVs out of
             | those. There's still some HTML munging involved but I've
             | found it much easier to let the data come to me than to go
             | out and try to fetch it myself. In my experience financial
             | institutions simply don't have a lot of reliable automation
             | options accessible to the normal consumer.
        
             | gen220 wrote:
             | In my experience (USA), most banks will give you the option
             | of downloading a CSV for the last two years of
             | transactions. Beyond that, it's a challenge.
             | 
             | Some investment brokers will only give you PDFs with tables
             | in them. But there are some pretty amazing libraries for
             | converting these into CSVs, that have worked well for me.
             | 
             | Some people use plaid, but I didn't like the idea of
             | introducing a middleman-dependency.
             | 
             | What I've been doing over time is downloading all of the
             | raw transaction history I can get, and storing it in a git
             | repo. Each month when I "top it off", I just use git add -p
             | to add only the latest bits. The most annoying part is when
             | they change their CSV format on you (Chase did this
             | recently) and you need to reformat all of your historical
             | data to match.
        
             | sundarurfriend wrote:
             | > Do banks have anything you can use to automate getting
             | data off their websites?
             | 
             | There's an Open Financial Exchange (OFX) standard that's
             | supposed to be for this, I think. I came across it when
             | someone mentioned the ledger-autosync [1] tool that tries
             | to use it to get your data from your bank automatically. If
             | I understand correctly (no guarantee on that), this
             | automation would work for institutions listed here [2].
             | 
             | [1] https://github.com/egh/ledger-autosync [2] http://www.o
             | fxhome.com/index.php/home/directory/successfulRe...
        
         | corytheboyd wrote:
         | I've been waiting for the perfect reason to start running my
         | finances like I run the other things I enjoy, and this might be
         | it. If I can make it fun, I think I could stick to it. I've
         | tried some of the apps and... I just don't get enough out of
         | them to warrant throwing that much of my sensitive data at them
         | for free... in fact summarizing it here makes it sound insane.
         | Thank you kind hacker news commenter for sharing your wisdom :)
        
           | OskarS wrote:
           | This is another excellent reason for using ledger: you are in
           | total control of your financial data. It's just text-files,
           | you don't have to share them with any service, they are not
           | in some weird binary format, and you can use standard tools
           | like git to work with them if you want. You can also collect
           | all the information from every financial service you interact
           | with (banks, credit unions, credit card companies,
           | brokerages, whatever) in one place and get reports on all of
           | them at the same time. It's the bee's knees!
        
         | chrislloyd wrote:
         | I've found being "fun for programmers" to be undervalued. Using
         | Ledger is fun, which has caused me to spend more time thinking
         | and understanding my personal finances which have in turn
         | improve my personal finances. I haven't cared as much using
         | less hackable tools.
        
         | EvanAnderson wrote:
         | Besides having a solid payoff for your personal finances, a
         | 100-level knowledge of bookkeeping and accounting, I'd argue,
         | confer near "super powers" when it comes to dealing with
         | finance and accounting people. Bookkeeping is one of the oldest
         | and longest-practiced IT disciplines. Your work probably
         | touches revenue / expenses for your employer and someday you'll
         | need to interface with accounting or finance people. Being able
         | to speak the language, even poorly, has helped me gain trust
         | and credibility that I don't believe speaking only in IT terms
         | would have.
        
           | bradleybuda wrote:
           | I took this course about three years ago (which,
           | coincidentally, starts today!) and I completely agree - a
           | basic knowledge of bookkeeping is an incredibly handy skill
           | in all sorts of real-world situations:
           | 
           | https://www.coursera.org/learn/wharton-accounting
        
             | zenlot wrote:
             | Most of the Coursera courses "starts today". Check
             | tomorrow, you'll still see the same message.
        
           | gen220 wrote:
           | Big plus one. Especially if your software work is even
           | remotely finance-adjacent.
           | 
           | The moment I start talking in terms of liabilities, virtual
           | accounts, etc. their eyes light up!
           | 
           | Incidentally, Accounting and Software have a lot in common.
           | They both build and apply abstractions to the "real world"
           | (flipping-bits), in order to give the abstraction-wielder
           | more power and insight.
        
           | datavirtue wrote:
           | I second this. Accounting training enabled me to break my
           | siloed attachment to IT and become a valuable asset to
           | finance and accounting groups as well. Since they controlled
           | all of the money they would come me to me discretely to get
           | information and feasibility assessments on hardware purchases
           | and development projects. At a small company this effectively
           | made me the CIO's #1.
        
         | npsimons wrote:
         | I used to used GNUCash heavily with double-entry bookkeeping;
         | nowadays I use org-tables' spreadsheets functionality. I've
         | also done a bit of tax calculation using CL, and always meant
         | to look into ledger, and it sounds like it might fit the
         | flexibility requirements I have come to (ab)use in org-mode.
        
       | djtriptych wrote:
       | Anyone have a good recommendation for text-based time accounting?
        
         | AdamGibbins wrote:
         | Ledger has some built in: https://www.ledger-
         | cli.org/3.0/doc/ledger3.html#Time-Keeping
         | 
         | There's also Timewarrior from the Taskwarrior people:
         | https://timewarrior.net/
        
         | dragonwriter wrote:
         | Would using ledger & friends, with "hours" (and, with preset
         | exchange rates, minutes and seconds) as commodities work for
         | your use case?
        
         | chromatin wrote:
         | hledger has provisions and advice on the docs (iirc) for time
         | accounting
        
         | smichael wrote:
         | https://plaintextaccounting.org/#time-tracking
        
       | lcall wrote:
       | Currently for finances, I tend to prioritize and "reduce and
       | simplify" and habitually look at all costs as "do I really need
       | this?" as they relate to my long-term goals. But in the future I
       | hope to need more accounting knowledge (doesn't everyone on HN
       | want to start a business? :) ... so I'm glad to hear about all
       | this.
       | 
       | One of the "plain text accounting" apps listed at
       | plaintextacconting.org (under "perl", from a prominent OpenBSD
       | person) that uses similar vocabulary to describe it, and mentions
       | looking at ledger somewhat and why he decided to write his own.
       | (I mention it partly as a future reference for myself in case I
       | want to compare them more later, or if someone already has.)
       | 
       | Also, a prior HN discussion (which, now I see, they have a link
       | to a list of them at the original post's site; oh well):
       | https://news.ycombinator.com/item?id=12119050
        
       | ZoomZoomZoom wrote:
       | I don't know, I've been intrigued by plain text double-entry
       | bookkeeping for a while, it looks like fun, but on the second
       | thought I just don't see any real benefit for a regular person
       | (probably, most IT specialists don't qualify). You get your
       | salary, you set aside 20-75% to pay the bills, some amount you
       | know from experience you need for groceries and other recurring
       | expenses (like public transport and household goods) and if you
       | happen to have anything left it goes to savings. If you're
       | privileged, you'll also have some petty cash left for occasional
       | lunch/night out. When you need to spend some significant
       | unplanned sum you take it out of savings, if you have any. If
       | not, you eat less or go into debt.
       | 
       | What's there to track, how much you've spent on potatoes and
       | underwear this month versus the previous?
       | 
       | That was the scenario for a disciplined citizen. Most just pay
       | the bills (not necessary _all_ of them) and then just spend what
       | 's left on their debit card until there's nothing left. It
       | usually happens before the next salary, of course. No accounting
       | software would help there.
       | 
       | UPD: I'm not sure it was the right place to spill my negativity,
       | I fully understand the benefits of being organized with your
       | finances.
        
         | pabl8k wrote:
         | Once I had a well-paying job, inverting this was the best thing
         | I did for myself financially: setting up a 50% direct deposit
         | to a high yield savings account (and eventually investing) and
         | only considering the remainder spendable for my day-to-day
         | expenses.
        
         | hiq wrote:
         | Like everything you will eventually end up with diminishing
         | returns. E.g. I doubt many people track potatoes vs carrots, or
         | underwear vs socks.*
         | 
         | But:
         | 
         | 1) Once you've automated most the of the steps, it takes, say,
         | 1h per month to have everything up to date, so basically
         | nothing.
         | 
         | 2) Compared to no tracking, you can often end up finding money
         | another party owes you. At that point, the 1h per month is
         | financially worth it.
         | 
         | 3) How little can you spend if times are tough? Any theoretical
         | budget will pale in comparison with actual tracking of past
         | expenses. Once you know this, you know how many months of
         | spending you have in cash, meaning you can invest the rest in
         | the long-term.
         | 
         | 4) How much will you spend in 5 / 10 / 20 years? Why? You can
         | better estimate this with accounting.
         | 
         | 5) Let's say you spend $x on hobby A and $y on activity B. Does
         | that reflect how much you like A and B? If not, maybe change
         | it?
         | 
         | *: still... how diminished is your salary if you start a job
         | that requires that you wear a suit everyday? Is it still better
         | than the other offer you rejected? Maybe you made a mistake?
         | This is way
        
         | BeetleB wrote:
         | > When you need to spend some significant unplanned sum you
         | take it out of savings, if you have any. If not, you eat less
         | or go into debt.
         | 
         | Doing detailed accounting helps prevent you from that "go into
         | debt" scenario.
         | 
         | Typical long term things people forget to save for:
         | 
         | - Their next car
         | 
         | - Car Repairs
         | 
         | - House repairs
         | 
         | - New roof for house
         | 
         | Etc.
         | 
         | With detailed accounting, you can set money aside for these
         | things, and then when you suddenly decide to go on a vacation,
         | you know how much money you need to leave aside in your savings
         | to cover the above.
        
         | gen220 wrote:
         | The benefit is mostly for scenarios with a couple more degrees
         | of freedom than what you describe. If you share your finances
         | with N people (family) or N companies (free-lancer/consultant,
         | etc), the path of least resistance to financial sanity is a
         | well-maintained ledger. If you see this stuff coming in your
         | future, your future self will thank your present self for
         | getting started when things were easier to track.
         | 
         | It's also a single source of truth for your entire financial
         | existence. You can use it to track your asset allocation. Which
         | some people in the bracket you describe care a lot about.
         | 
         | Of course, you can pay people to do all of this stuff for you.
         | (Accountant, Investment Broker, etc). But there are well-
         | documented costs to these solutions. Basically, you have to
         | trust them a lot, and if you don't speak their language you
         | can't verify their choices.
         | 
         | Edit: to be clear, I'm not saying that maintaining a ledger is
         | the right choice for everyone. It's a trade-off, like anything
         | else, I just wanted to explicitly observe the variables that
         | were at play in my decision. YMMV
        
         | tim333 wrote:
         | Double-entry bookkeeping is mostly for keeping business
         | accounts. If you want some maybe try running a small business
         | on the side?
        
         | hollerith wrote:
         | I've heard of some individuals giving a plain-text ledger to
         | their tax preparer. (Keeping a ledger does not necessarily mean
         | tracking every personal expense.)
        
           | ZoomZoomZoom wrote:
           | I'm currently in a part of the world where the government
           | nurtures fiscal immaturity and just takes its share directly
           | from employers salary fund. Some specific taxes come as bills
           | too. Not much to prepare, unless you're an self-
           | employed/entrepreneur, so it definitely skews my perception
           | in this regard.
        
         | jldugger wrote:
         | I've been using GNUCash since 2007, while in grad school
         | earning... grad school wages. It worked out well for me earning
         | IT specialist wages now, and I don't think the regular joe will
         | need/use plaintext accounting specifically. But the idea of
         | double-entry bookkeeping can be useful still.
         | 
         | 1. Accurate visualization. As you suggest, a great number of
         | people pay most attention to their checking account balance.
         | Making student loan payments on time can feel like just paying
         | 'bills'. But it's actually a split between interest and
         | principal, and in a sense, you are accumulating wealth by
         | paying down principal in a way that just looking at the debit
         | card balance will not. Similarly, racking up CC debt can feel
         | cheap when making minimum payments.
         | 
         | 2. Improved forecasting. Before GNUCash I largely worked the
         | same way as you describe. Keeping a mental tally of bills
         | outstanding and checking my balance via the automated phone
         | system to judge what I can spend. Now I have scheduled
         | transactions for those bills recorded 90d in advance, and can
         | see at a glance my Minimum Future Balance. It's nearly the same
         | thing, but with way less acid reflux from stress. And I can
         | schedule in all the random annual expenses -- vehicle
         | registration, vacations (when permitted), annual subscriptions
         | -- just once and the system remembers for me. Plus I have a
         | more granular archive of expenses to estimate and budget
         | around.
         | 
         | 3. Expense Analysis. Most people track one asset: checking
         | acct, and maybe liabilities. Double entry accounting makes it
         | feasible to transition from that to treating expenses and
         | income as equally important. Probably the canonical example is
         | car insurance; most insurers offer a six month premium, or a
         | monthly payment with a surcharge. If you focus on checking acct
         | balance, you go for the monthly payment with smaller upfront.
         | If you want to reduce your annual expense you pick the six
         | month option, dipping into savings briefly if required. On the
         | income side, you'd be surprised how many people don't even
         | bother to get the employer 401k match, even though you can
         | often carry a CC balance (a very worst case scenario) and come
         | out ahead.
         | 
         | 4. (advanced) Portfolio balancing. If you're fortunate enough
         | to fund a retirement plan, tracking your portfolio and asset
         | allocation can be tricky across Roth IRA, 401k, etc. An annual
         | rebalancing, formalizing the 'sell high, buy low' formula, is
         | equally tricky when none of your accounts synchronize. A double
         | entry system makes this and other retirement planning steps
         | feasible.
        
         | jdlshore wrote:
         | I agree with your premise, but please "pay yourself first." [0]
         | Instead of putting "whatever's left" in savings, decide how
         | much you need to save to meet your goals, put that amount aside
         | _first_ , then use the remainder to pay bills. An envelope
         | system [1] works well.
         | 
         | If you don't have enough, reduce your expenses, not your
         | savings.
         | 
         | [0] https://www.investopedia.com/terms/p/payyourselffirst.asp
         | 
         | [1] https://www.daveramsey.com/blog/envelope-system-explained
        
           | esoterica wrote:
           | I very strongly disagree with that method. There is a lot of
           | natural variance in how much people spend in a month. Some
           | months you spend $1k, some months you spend $10k. It doesn't
           | make sense to use a fixed monthly budget at all. It also just
           | encourages arbitrary gerrymandering of your expenses. If you
           | want a PS5 but have no more room in your budget this month,
           | you might decide to buy it next month instead. But then
           | you'll just end up spending the exact same amount next month,
           | so you've deprived yourself for one month for zero financial
           | gain just because you're gaming the arbitrary constraints you
           | impose on yourself.
        
             | BeetleB wrote:
             | Your scenario is not at odds with the parent's one. He's
             | saying "Figure out how much I want to save for long term
             | goals, and set that aside _first_ " It doesn't preclude
             | saving for long term expenses.
        
             | tachyonbeam wrote:
             | Depends. If you work as a software developer, odds are you
             | make more than you need to live comfortably. In that
             | scenario, it makes a lot of sense to be disciplined and put
             | some amount of money aside first. I picked an amount to put
             | into savings that still leaves me enough to not have to
             | stress about groceries or going out once or twice. I
             | basically always manage to hit my monthly budget, and save
             | what I planned. If I wasn't putting money in savings first,
             | I think I might end up spending a lot more than I should on
             | tech gadgets and other things that I don't really need.
             | 
             | My approach:
             | 
             | 1. Put a reasonable amount in savings first, but make sure
             | to leave yourself enough to enjoy life, because you can't
             | be completely sure you'll be alive in 1, 5, 10 or 20 years.
             | 
             | 2. Spent on monthly expenses without stressing about
             | savings, because some fun money is also part of your
             | budget.
             | 
             | 3. If there's any money left over when you get your next
             | paycheck, send that into savings as well.
        
         | csomar wrote:
         | There are two possibilities:
         | 
         | 1. There are people who like to create complex
         | analysis/structure around their lives. I don't say they are
         | unnecessarily complicating their lives, because that's part of
         | their personality. So, yes, you are correct. An double-entry
         | ledger doesn't add much insights.
         | 
         | 2. After $200k/year income and $1m+ wealth, and if your wealth
         | is very diversified (inherently complex), then I can see the
         | value in it. ie: An engineer with $200k has less complexity
         | than a freelance with $200k/year. At a certain point the
         | freelance will benefit from an accountant, but maybe he's
         | running some stuff in the dark economy or something.
        
       | lasftew wrote:
       | All PTA tools have in common that they model accounting as a
       | programming language, as opposed to data. This provides for a
       | high degree of epressiveness and flexibility which is hard to
       | achieve with database accounting tools that are typically data-
       | oriented.
       | 
       | The basic instructions are open account, close account, and
       | update account (transaction). In addition, a lot of PTA tools
       | support some form of higher-order directives: directives that
       | generate other directives.
       | 
       | For example, the availability of prices might trigger the
       | insertion of valuation transactions based on the change of value
       | for a balance position, when processing the balance.
       | 
       | Or declarative accrual transactions for a given date might insert
       | "virtual" transactions at specific other dates.
       | 
       | The PTA / language-centric view allows to reason about those very
       | easily, as abstractions which result in AST rewrites.
        
       | jez wrote:
       | What banks / credit cards do people use that have great APIs or
       | tools for exporting transaction level data?
       | 
       | The biggest thing holding me back from something like this has
       | been the overwhelmingly boring amount of data entry required.
        
       | e40 wrote:
       | _What are the alternatives?_
       | 
       | Two of the commercial products listed (Quicken, Quickbooks) are
       | from Intuit. One of the worst software companies out there. Aside
       | from their "Free" Turbo Tax fiasco (easy to find via web search),
       | Quicken was the most infuriating program I ever used.
       | 
       | I now use MoneyDance (no affiliation, customer for 5+ years).
       | 
       | It's a Java program. It just works. It looks the same after every
       | update. Updates are free for a couple of years. Then I pay for
       | the update, because I like them and want them to succeed.
       | 
       | They have a user forum where problems are solved.
       | 
       | I no longer swear about my finances, unless it's about my
       | finances. The software I use is now invisible.
        
       | jek0 wrote:
       | I use ledger-cli + ledger-guesser [1], which uses use machine
       | learning (brain.js) to classify entries automatically.
       | 
       | I've been relying on this for the last 3 years, it works very
       | well.
       | 
       | [1] https://github.com/j3k0/ledger-guesser
        
         | sundarurfriend wrote:
         | That's a nice tool, this is a feature I enjoyed in Mint-like
         | proprietary tools I used to use previously.
         | 
         | What's your workflow with it? Do you run `ledger-guesser
         | <transaction details> >> journal_file.txt`? I'd somewhat prefer
         | typing out the details in an editor, but I suppose I could type
         | a bunch of transactions one per line in a file and xargs that
         | into ledger-guesser.
         | 
         | What does it do when your transaction is of a new type that it
         | wasn't trained on? Does it have a confidence threshold below
         | which to tell you "I cannot guess this one"?
        
           | jek0 wrote:
           | I never run it manually.
           | 
           | I plug this tool in my scripts that import transactions from
           | banks (and stripe).
           | 
           | The scripts extract transaction details (amount, payee,
           | currency), then they use `ledger-guesser` to create ledger
           | entries and add them to the journal.
           | 
           | The generated entries are "uncleared". Then I manually
           | "clear" the entries. Review. Commit. (You can also use a tag
           | for reviewed transactions if you already use ledger's
           | "cleared" indicator for something else).
           | 
           | For the best results, I have 1 journal per bank account. So I
           | have different training data for each bank account.
           | 
           | There's no confidence threshold. When there is a new type of
           | transaction is encountered, the guesser will chose the
           | account with the highest probability.
           | 
           | The guesses are made based on the words found in the payee
           | (and date). Unknown transaction have generally a few known
           | tokens. Example: "INCOMING TRANSFER FROM NEW_CLIENT"... The
           | classifier will probably classify that entry as
           | "Incomes:OurLargestClient". In that case I have just to fix
           | that entry to change the client, all the rest is good, it
           | still saves a good amount of typing.
        
       | joe8756438 wrote:
       | I built a service that incorporates plain text accounting [0]
       | into a larger note taking system [1]. The service has mechanisms
       | for repeating transactions and API access which I use for
       | integrating that data into other systems or sending to my
       | accountant.
       | 
       | One of the revelations was that the accounting system could be
       | used for a few different types of commodities: time, effort,
       | inventory, etc.
       | 
       | [0] https://tatatap.com [1] https://tatatap.com/beans
        
       | koolk3ychain wrote:
       | I generally only care how much my net worth has increased. I've
       | found that I taking the time to enter every single receipt and
       | expense outside of my personal business accounting is largely a
       | waste of time.
       | 
       | For me, the most meaningful info is a markdown doc where I
       | quarterly asses all of my investment accounts / assets and come
       | to a "current net worth total".
       | 
       | I've found a personal correlation between trying to minimize and
       | track minuscule expenses and a decline in my mental health or
       | happiness at work. I'm frugal by nature and trust myself enough
       | to not worry too much about day to day spending.
        
         | jabroni_salad wrote:
         | Im in a similar low-stress situation and I am grateful for it.
         | I have an e-fund that can handle anything, and was from a lower
         | income family for long enough that my natural inclination
         | towards any impulse purchase or lifestyle creep is 'probably
         | not'.
         | 
         | Aside from some fairly basic goal tracking, boring boglehead
         | investing, and making sure nothing stupid is being transacted,
         | I really don't do a lot and everything seems to be working.
         | Dont @ me about my warhammer addiction though...
        
         | esoterica wrote:
         | I just put all my expenses (except rent) on a single credit
         | card. Chase generates a spending report that categorizes
         | transactions for you, so you can see how much you spent on
         | food/groceries/travel etc. each year with zero legwork put in.
        
         | joshuakelly wrote:
         | A simple solution to this is to apply these principles only to
         | accounts of a meaningful size and to exclude "petty cash".
         | Tracking capital assets with double entry accounting systems
         | has a ton of benefits for someone in your position:
         | 
         | * Tracking the cost basis of your capital assets
         | 
         | * Tracking fees related to transactions involving capital
         | assets
         | 
         | * Calculating taxes
         | 
         | * Analyzing allocation of capital assets into categories
         | 
         | * Tracking drift from a target
        
           | esoterica wrote:
           | I mean, your brokerage will do most of those things
           | automatically for you.
        
             | BeetleB wrote:
             | My brokerage always gets the cost basis wrong for SPP.
             | Always. The company sends out annual notices to the
             | employees informing them that the brokerage's statement is
             | wrong.
        
           | koolk3ychain wrote:
           | I literally don't care. I'm going to _Acknowledge My
           | Privilege TM_ (Hacker News Edition) and again state that
           | these types of expenses aren 't worth my time to worry about.
           | I pay an accountant to worry about book-keeping and taxes,
           | well worth the $400 a year to cover both my business and
           | personal taxes.
           | 
           | I'm not going to adjust tens of thousands of dollars of
           | capital assets because the management fee moved 0.05%... Who
           | do you think I am, Elon Musk? I'm glad you enjoy using your
           | time to do track these kind of things, but I gladly choose
           | not to learn my accountant's job.
        
             | tunesmith wrote:
             | How on earth do you find an accountant to manage _both_
             | your books and your taxes for only $400  / year? Even LTPs
             | are more expensive than that.
        
             | BeetleB wrote:
             | It sounds like you're paying the accountant only to do your
             | taxes? If so, your finances are probably not complicated,
             | and you could probably do your own taxes in 1-4 hours. Of
             | course, how much that is worth to you is up to you.
             | 
             | If you're paying an accountant only for taxes, and not
             | general finances, chances are your financial life and
             | investments are very simple. Either that or you're not
             | managing them well :-)
             | 
             | Some people have multiple investments - some liquid
             | (stocks), some illiquid (properties). They have side
             | businesses (e.g. rental income). They have to allocate
             | money for repairs on their rental properties. They have to
             | set money aside for vacancies and property taxes, etc.
             | You're likely not going to find an accountant who'll do
             | this for a mere $400/yr.
             | 
             | If you have rental income and are _not_ managing this,
             | sooner or later you 'll lose a lot of money. I guarantee
             | it. Also, most people who have properties do not make that
             | much net profit (typical is $100-200/month per unit), so
             | paying, say, $2000 to an accountant could wipe away the net
             | profit from one unit for a whole year.
             | 
             | No one is trying to tell you that you _should_ use these
             | tools. Many high income folks do fine without them. But if
             | you have side businesses, you either need to spend a lot
             | more on an accountant or get more disciplined. Most people
             | will choose the former if they can afford it (which is
             | probably a good idea).
        
               | koolk3ychain wrote:
               | Okay, I can clarify here. I meant to say, my accountant
               | fees range from about $1200 - 2800 a year. $400 was an
               | off the cuff estimate and admittedly way off. You got me
               | ;) I would still happily pay $3500 to not spend hours a
               | year entering innocuous expenses into a fucking text
               | editor.
        
         | andruby wrote:
         | Same. I keep a spreadsheet that I update once a month with
         | assets, liabilities and net worth. Takes me about 5mins and is
         | a good check to detect unexpected spending or trends.
        
         | icedchai wrote:
         | I do similar, except on a monthly basis. I use a google sheet,
         | and record the balance of all bank and investment accounts at
         | end of month. I also track my crypto holdings there as well.
        
         | reidjs wrote:
         | Same here. I got started with ledger but found it too tedious
         | to log every expense and didn't really see any benefit. I
         | already know I spend too much on eating out but it doesn't
         | affect my net worth in any significant way so I continue doing
         | it. Schwab is able to tie in your other accounts and give you a
         | big picture of your net worth.
        
       | VikingCoder wrote:
       | One day I realized I had less than $100 left in my bank account.
       | I'm a software engineer. I know how to write software. So I did
       | the responsible thing - I did not write software.
       | 
       | I literally opened Notepad.exe, and started making double-entry
       | accounts of all of my expenses.
       | 
       | I broke them down into recurring expenses, surprise expenses, and
       | then discretionary spending.
       | 
       | For each recurring expense, I made its own ledger of dates and
       | the expense. I could then predict my future expenses. Given the
       | current date, and knowing when the money would next be due, I
       | could calculate how much I needed to set aside PER DAY, in order
       | to be ready to meet that expense. Once that critical next date
       | passed, I could achieve a steady state, of how much I needed to
       | set aside PER DAY, for that expense.
       | 
       | I then started doing double-entry accounting on my main,
       | available cash account, on a daily basis, subtracting the
       | recurring expense daily amount each day. So, I had an actual
       | balance, but then I also knew how much was left for my surprise
       | expenses and discretionary spending.
       | 
       | I then went after my surprise expenses, and tried to come up with
       | a rough flow rate for them, as well.
       | 
       | And then I gave myself an allowance for discretionary spending.
       | 
       | Mathematically, everything I just described was incredibly simple
       | to do. No software required.
       | 
       | Having that discipline saved me from going in to debt.
       | 
       | I maintained that discipline until my cash crunch wasn't so
       | tight.
       | 
       | And now I kind of wish I had the time to write the software. :-/
       | 
       | I also wish I could get my stupid bank to give me "Read-Only
       | Credentials," so I could write software to poll my bank, and not
       | feel so recklessly irresponsible about it. (Having ONE account,
       | with the ability to disperse funds, it feels wildly irresponsible
       | to leave software running with those credentials.) I know there's
       | also the problem where someone receives 17 cents, and then
       | reports "I got 17 cents" in order to establish the ability to
       | make withdrawals from accounts. So then my idea of having the
       | software running with read access could be used as an exploit to
       | steal my money. _sigh_ That 's a big pile of BS.
       | 
       | Anyone have any recommendations for banks that would HELP ME
       | securely do any of this, or do it for me?
       | 
       | I'd really love it if my phone went DING every time I spent
       | money, and it asked me to classify the expense, right then, right
       | there. Way easier than doing it after-the-fact.
        
       | mrkn1 wrote:
       | There seems to be a general return to plaintext tools like HN:
       | danluu.com, plumebio.com and lite.cnn.com
        
         | 4TunateSon wrote:
         | I had no idea that CNN had a "lite" version. Do you know any
         | other major sites that have lite versions?
        
           | [deleted]
        
           | lsaferite wrote:
           | Same here. This makes me very happy.
        
           | visviva wrote:
           | There is https://text.npr.org/
        
         | dewey wrote:
         | I think it has always been popular in the bubble that frequents
         | HN, I wouldn't go that far to say there's a general return to
         | plain text.
         | 
         | The rest of the world would still think it looks like the
         | website is broken if it looks like lite.cnn.com
        
           | enriquto wrote:
           | > The rest of the world would still think it looks like the
           | website is broken if it looks like lite.cnn.com
           | 
           | For me it's the opposite. In "regular" cnn.com I obtain an
           | empty page (probably due to my overzealous adblocker), yet in
           | lite.cnn.com I can read the news.
        
             | dewey wrote:
             | Yes, but you are "in the bubble that frequents HN" ;)
        
               | [deleted]
        
       | mongol wrote:
       | Accounting rules in Sweden does not allow erasure of history.
       | That is too easy to do with plain text. This can work for
       | personal accounting but not for cases where it is legally
       | required.
        
         | azornathogron wrote:
         | I suspect most people who use this type of tool keep their
         | accounts files in a version control system. (That's what I do)
        
         | londons_explore wrote:
         | Making it _technically impossible_ to erase history isn 't
         | something any accounting software today does. You could get
         | close to it by publishing data in a blockchain, but nobody
         | does...
         | 
         | So, given that, the requirement must simply be to make erasing
         | history too hard to do accidentally. A simple git commit
         | history would suffice for that. Or just a check when you save
         | the file to see if any lines have been removed.
         | 
         | It doesn't seem necessary anyway though - If everyone keeps a
         | record of every incoming and outgoing transaction, then if I
         | alter a transaction retrospectively, it will no longer match
         | the counterparties records, and my modification will be
         | detected.
        
           | sithlord wrote:
           | A lot of software do make it very difficult, if not
           | impossible for a regular accountant to erase history. To the
           | point, when I was an accountant, if I made a simple error in
           | keying in something, you would have to reverse it out, and
           | then fix it, all of which would show up on the general
           | ledger.
           | 
           | For example, say we received cash 5,500 for our software
           | services that we have yet to complete, we would need to debit
           | cash and credit some Accounts Receivable.
           | 
           | lets say I make a mistake:
           | 
           | Cash.....5,050
           | 
           | Accounts Receivable..........5,050
           | 
           | I would either need to do another journal entry for 450
           | dollars to both accounts, or reverse out them and do it
           | again, of which it would still be visible
        
           | mongol wrote:
           | It cannot be made technically impossible of course. But it
           | can be made impossible using the regular user interface.
        
             | welterde wrote:
             | So it really depends on what one consider as the regular
             | user interface.
             | 
             | One could easily write a small (web or desktop) application
             | that takes some plain text, appends it to a ledger file and
             | creates a git commit. As well as only providing a read-only
             | view to the ledger.
        
         | tomjen3 wrote:
         | But it being plaintext you can host it as git project on gitlab
         | with a protected main branch that requires merge request
         | approval, meaning you have a two man rule (and four eyes) for
         | every change.
         | 
         | You can't do that with quicken.
        
         | diegocg wrote:
         | Simply managing the text files with git would solve that
         | retirement
        
           | zie wrote:
           | Not really. Git's history is 100% fungible, you can mix and
           | match git's history like a swiss army knife. There are VCS's
           | out there that have unfungible history. Fossil SCM is one
           | such VCS.
           | 
           | Git is an amazing VCS swiss army knife. That doesn't make it
           | the best tool for a given job.
        
           | mongol wrote:
           | No it wouldn't. It would provide history, but it would not
           | prevent you from changing a transaction that was booked the
           | previous month.
        
             | veeti wrote:
             | So don't change it? The audit trail is there.
        
               | mongol wrote:
               | Depends on if authorities agree with that point of view.
               | Accounting here needs to follow what can be translated as
               | "Generally accepted accounting principles". If you do
               | bookkeeping with pen and paper, you cannot erase a past
               | mistake. You need to correct it with a new transaction.
               | Basically, an append-only system is needed.
        
               | tacostakohashi wrote:
               | If you do bookkeeping with pen and paper, you can throw
               | away the page and replace it with a new piece of paper.
               | 
               | The security mechanism is out of band - you keep the
               | pages secure, and you also reconcile / audit your
               | accounts with those of your bank, suppliers, customers,
               | etc - it's never 100% within the medium of the accounts
               | themselves.
        
               | veeti wrote:
               | I don't really see how this is practically different from
               | any other "accountant approved" software. Even if the
               | user interface is "append only" you can modify the saved
               | data whether it's saved in plain text, binary blob or a
               | SQL server.
               | 
               | On pen and paper you can copy a new falsified ledger and
               | throw away the original. I think that's fraud, so good
               | luck with it.
        
       | blackbear_ wrote:
       | For those who prefer a GUI, I moved from spreadsheets to GnuCash
       | [1] a few months ago and it's been great so far!
       | 
       | [1] https://www.gnucash.org/
        
         | caterama wrote:
         | Yes, echoing the enthusiasm for gnucash! I'm just passing 3
         | years tracking every credit card purchase over to investment
         | allocations in gnucash.
         | 
         | At the end of the day, double entry accounting is double entry
         | accounting and you should be able to move transaction journals
         | between the tools. I haven't tested any of these, but it looks
         | like there are various techniques / tools that make gnucash <->
         | ledger possible.
         | 
         | - https://wiki.gnucash.org/wiki/Ledger-CLI
         | 
         | - https://github.com/icyflame/gnucash-xml-to-ledger-dat
         | 
         | - ...
        
       | quirkot wrote:
       | Want to throw out one of my favorite stats: while conceptually
       | the same, European double entry accounting predates Newton's 3rd
       | law of motion by over 200 years.
        
       | sundarurfriend wrote:
       | Previous discussion (2016):
       | https://news.ycombinator.com/item?id=11164330
        
         | smichael wrote:
         | Welcome again, HN friends! More past discussion:
         | https://hn.algolia.com/?query=plain%20text%20accounting&sort...
        
       | chromatin wrote:
       | I have been doing this for years, but for me the biggest downside
       | is the lack of API at my financial institutions to pull data ,
       | which leads to a big time suck weekly/monthly logging into sites
       | , navigating their poor UI to download CSVs.
       | 
       | Otherwise there is a great ecosystem of tools (and I have
       | automated a lot of my own with Python) for parsing,
       | classification, and import of data into the plain text ledgers.
        
         | nimih wrote:
         | I've ended up automating most of the data pulling with
         | Puppeteer and a pile of poorly-written JavaScript; every once
         | in a while one of the scripts breaks, but it's pretty rare and
         | easy enough to repair.
        
         | akerl_ wrote:
         | I've ended up using Plaid to solve this. I've got some scripts
         | that talk to Plaid to pull transaction data and emit it in
         | ledger format.
        
         | Jtsummers wrote:
         | I found that ledger worked best if you made it a daily habit to
         | go in and record transactions. Also, since I recorded mine in
         | org-mode files I could use something like Beorg to edit it
         | while away from the computer.
        
         | sundarurfriend wrote:
         | ledger-autosync [1] tries to solve this problem, by pulling the
         | data for you from supporting banks. If I understand things
         | correctly, this [2] is the list of banks it can successfully
         | pull data from.
         | 
         | [1] https://github.com/egh/ledger-autosync [2]
         | http://www.ofxhome.com/index.php/home/directory/successfulRe...
        
           | nanna wrote:
           | Looks US-only?
        
       | yidaman wrote:
       | As someone who is building an ERP solution right now, this could
       | serve as the backbone for the accounting subsystem, which is the
       | core of all ERP solutions. It makes creating an accounting
       | solution less scary.
        
       | bergie wrote:
       | In a previous startup we used Ledger in git as our accounting
       | system. Was pretty cool to submit expense reports as PRs.
       | 
       | Also, we had some CI automations to report company runway to
       | Slack etc
        
       ___________________________________________________________________
       (page generated 2021-01-12 23:01 UTC)