Sift is a simple way to generate a spending report.
I wanted an easy, private, offline way to review monthly transactions and spending. Sift builds rules by prompting the user to categorize transactions. Those rules are stored in a file and used to categorize future transactions.
If go
is already installed, just run make
from the top of the repo.
That will build an executable at bin/sift
.
Tests can be run with make test
.
Process records for January 2023:
./sift -y 2023 -m 1
Process records for January through March 2023:
./sift -y 2023 -m 1-3
Process records for 2022 and 2023:
./sift -y 2022-2023
Process records for each month in 2022 and 2023:
./sift -y 2022-2023 -m 1-12
View all transactions in the subscriptions category for Jan 2023:
./sift -y 2023 -m 1 -c subscriptions
By default, transactions not matching any existing rules will prompt the user.
Rules can match either on just the transaction ID or both ID and amount.
Using --no-prompt
or -n
puts non-matching transactions in the skipped
category.
See all flags:
./sift --help
Sift is requires a config.yaml
file like this:
rulesfile: rules.yaml
recordsdir: records
dateformat: 01/02/06
header:
id: Transaction ID
name: Description
date: Date
amount: Amount
categories:
- salary
- rent
- food
- insurance
- subscriptions
New rules will be saved to the value of rulefiles
.
CSV files will be read from the value of recordsdir
.
Data in the date column of CSV files must match the value of dateformat
.
- Format must reference
Jan 02 2006
. - Refer to golang time pkg if needed.
The values in header
specify which columns to use.
Each value in categories
is a budget category option to select.
Check out the sample dir for more info.