Hacking Your Finances
for Fun and Profit
Matthew Turland
What is Ledger?
- Command-line double-entry accouting system written in C
- Open source under the New BSD license
- Works on several Linux flavors, Windows, and MacOS X
- Hosted on GitHub
- http://ledger-cli.org
Why Ledger?
- Read-only: reports on your data, never modifies it
- Currency-agnostic: supports arbitrary currencies and currency conversions
- International: UTF-8, US and European decimal formats, ISO dates
- Supports budgeting, forecasting, capital gains tracking, and more
- Vim support: filetype, syntax, and useful commands
Ledger Terminology
- Journal
- A file that contains Ledger data — mostly transactions, but also control directives, comments, and other stuff.
- Account
- A category, usually arranged within a hierarchy, that accumulates quantities. Common top-level categories include Equity, Assets, Liabilities, Expenses, and Income.
- Posting
- Accumulation of a quantity by a single account.
- Transaction
- A financial event entered into a journal, such as depositing a paycheck. Comprised of two or more postings that balance out to zero.
Transaction Examples
2006/10/15 McDonald's
Expenses:Dining $5.36
Assets:Checking
2006/10/15 Exxon
Expenses:Auto:Gas $15.00
Expenses:Cigarettes $4.80
Liabilities:MasterCard
; repeat ad nauseam
The Register
$ ledger reg checking -f stan.txt
08-Jan-01 Opening Balances Assets:Checking $1550.00 $1550.00
08-Jan-01 New Seasons Assets:Checking $-60.91 $1489.09
08-Jan-01 Panda Express Assets:Checking $-7.24 $1481.85
08-Jan-02 Sizzle Pie Assets:Checking $-7.38 $1474.47
08-Jan-03 Kettleman Bagels Assets:Checking $-7.60 $1466.87
08-Jan-03 Mio Sushi Assets:Checking $-5.76 $1461.11
08-Jan-03 Eddie's Flat Iron P.. Assets:Checking $-22.26 $1438.85
08-Jan-04 Food Carts Assets:Checking $-7.24 $1431.61
08-Jan-05 Burnside Brewery Assets:Checking $-11.76 $1419.85
08-Jan-05 Tastebud Assets:Checking $-42.13 $1377.72
08-Jan-07 Salary Assets:Checking $1084.00 $2461.72
08-Jan-08 Safeway Assets:Checking $-64.76 $2396.96
08-Jan-08 Netflix Assets:Checking $-9.99 $2386.97
08-Jan-08 Car Payment Assets:Checking $-464.70 $1922.27
08-Jan-08 Student Loan Payment Assets:Checking $-199.06 $1723.21
08-Jan-09 Taco Del Mar Assets:Checking $-10.25 $1712.96
08-Jan-09 Burnside Brewery Assets:Checking $-6.19 $1706.77
08-Jan-10 Kettleman Bagels Assets:Checking $-7.67 $1699.10
08-Jan-11 Panda Express Assets:Checking $-9.64 $1689.46
08-Jan-11 Papa Hayden Assets:Checking $-21.39 $1668.07
...
Balance
$ ledger bal expenses -f stan.txt
$157874.79 Expenses
$5212.85 Entertainment
$21526.95 Food
$1377.36 Breakfast
$3174.59 Dinner
$11171.71 Groceries
$5803.29 Lunch
$8568.00 Insurance
$3948.00 Car
$4620.00 Medical
$5136.40 Interest
$4618.79 Car
$517.61 Student
$33600.00 Rent
...
--------------------
0
XML
$ ledger xml -f stan.txt
...
<transaction state="cleared">
<date>2008/01/01</date>
<payee>Opening Balances</payee>
<posting state="cleared">
<account ref="0000000000f3d600">
<name>Liabilities:Loans:Student</name>
</account>
<post-amount>
<amount>
<commodity flags="P">
<symbol>$</symbol>
</commodity>
<quantity>-25300</quantity>
</amount>
</post-amount>
<total>
<amount>
<commodity flags="P">
<symbol>$</symbol>
</commodity>
<quantity>-25300</quantity>
</amount>
</total>
</posting>
<!-- ... -->
</transaction>
Useful Options
--begin
, --end
: limit date range
-w
: wide view, good for seeing long transaction descriptions and account names
-W
, -M
: weekly and monthly summaries
- This is just the tip of the iceberg; see the manual for more
Custom Reports
- XML -> PHP script -> CSV file with monthly expenses to date by account
- Useful, but not very visual
January ... December Total
Account1 JanuaryAmount ... DecemberAmount Account1Total
...
AccountN
Total JanuaryTotal ... DecemberTotal GrandTotal
Ledger Stats
- Requires PHP 5.3.0+ and ledger 3.0.0
- Enables you to search transactions by account, date, and amount
- Implements a plugin system to allow action to be taken on the results
- Stock plugins display charts to visualize the results
- Rough prototype, but fairly functional
- Hosted on GitHub
- Demo time!
Discussion
- Questions?
- Comments?
- Concerns?
- Thank you!