Recipes
These use jq to read fob-actual's JSON. Amounts in JSON are integer minor units, so the recipes divide by 100.
Export a year of transactions to CSV#
fob-actual transactions list --account Checking \
--from 2026-01-01 --to 2026-12-31 --format csv --output checking-2026.csv
Spending by payee for a month#
fob-actual query run --table transactions \
--filter '{"date":{"$gte":"2026-09-01"}}' --filter '{"date":{"$lte":"2026-09-30"}}' \
--filter '{"amount":{"$lt":0}}' --select payee.name,amount --json \
| jq -r '.data | group_by(.["payee.name"]) | map({payee: .[0]["payee.name"], total: (map(.amount) | add / -100)}) | sort_by(-.total) | .[] | "\(.total)\t\(.payee)"'
1800 Landlord
147.22 Corner Grocery
Balances of every account#
fob-actual accounts list --json | jq -r '.accounts[] | "\(.balance / 100)\t\(.name)"'
Import a bank CSV#
Convert the bank's CSV to Actual's JSON format (amounts in minor units), preview, then import:
# date,description,amount → [{ date, payee_name, amount }]
tail -n +2 bank.csv | jq -R -s '
split("\n") | map(select(length > 0) | split(",")) |
map({ date: .[0], payee_name: .[1], amount: ((.[2] | tonumber) * 100 | round) })' > import.json
fob-actual transactions import --account Checking --file import.json --dry-run
fob-actual transactions import --account Checking --file import.json
Real bank files often quote fields or use other date formats; adjust the conversion to match. Duplicate detection means running the import twice doesn't add the same transactions twice.
Find uncategorized transactions#
fob-actual query run --table transactions \
--select date,account.name,payee.name,amount --filter '{"category":null}'
Budget the same amount every month#
CATEGORY=$(fob-actual categories list --json | jq -r '.categories[] | select(.name=="Groceries") | .id')
for m in 2026-10 2026-11 2026-12; do
fob-actual budgets set-amount "$m" "$CATEGORY" --amount 450.00
done
Work with a second budget#
fob-actual accounts list --profile business
fob-actual transactions list --account Operating --profile business --format csv
See Profiles.