Go library for reading GnuCash XML files
Find a file
2025-01-18 09:37:17 -04:00
build build: Add test.yaml and add status badges to README.md. 2024-12-26 09:01:37 -04:00
cmd/dump-transactions Add -list-accounts. 2025-01-18 09:37:17 -04:00
testdata Initial commit. 2024-12-25 15:19:49 -04:00
filter.go Add transaction date filtering and -min-date and -max-date flags. 2024-12-26 12:39:46 -04:00
filter_test.go Add -collapse and make filtering more efficient. 2024-12-26 08:39:27 -04:00
go.mod Add simple test for ScanXML. 2024-12-26 11:22:47 -04:00
go.sum Add simple test for ScanXML. 2024-12-26 11:22:47 -04:00
LICENSE Initial commit. 2024-12-25 15:19:49 -04:00
README.md Add -list-accounts. 2025-01-18 09:37:17 -04:00
scan.go Add -list-accounts. 2025-01-18 09:37:17 -04:00
scan_test.go Add -list-accounts. 2025-01-18 09:37:17 -04:00
types.go Support summing transactions via -aggregate-fields. 2024-12-27 12:41:01 -04:00
types_test.go Add support for partial dates. 2024-12-27 11:25:29 -04:00

gnucash

GoDoc Build Status

This repository contains a simple Go library for reading GnuCash XML files.

It also contains a dump-transactions command-line program that can be used to print transactions to stdout.

Installation

Install Go and run go install ./cmd/dump-transactions.

Usage

Usage: dump-transactions [flag]... <FILE>
Dumps transactions from a GnuCash XML file.

  -aggregate string
    	Comma-separated list of fields for aggregating values, e.g. "date_year,account"
  -collapse value
    	Account whose children should be collapsed into it, e.g. "Expenses"
  -exclude value
    	Account (plus children) to exclude, e.g. "Assets" or "Expenses:Auto"
  -fields string
    	Comma-separated list of fields to print (default "date,account,value,desc")
  -format value
    	Output format (csv, json, text, tsv) (default tsv)
  -list-accounts
    	Print account names
  -list-fields
    	Print available fields for -fields
  -max-date string
    	Maximum transaction date (YYYY-MM-DD, YYYY-MM, or YYYY)
  -min-date string
    	Minimum transaction date (YYYY-MM-DD, YYYY-MM, or YYYY)
  -only value
    	Account (plus children) to keep while excluding all others, e.g. "Expenses"
  -only-involving value
    	Account (plus children) that must participate in transactions, e.g. "Assets:Checking"

Dumping all splits from transactions in CSV format:

dump-transactions -format csv testdata/finances.gnucash
2019-01-01,Assets:Current Assets:Checking Account,2000.00,Starting balance
2019-01-01,Equity:Opening Balances,-2000.00,Starting balance
2019-06-23,Expenses:Books,200.00,Textbooks
2019-06-23,Assets:Current Assets:Checking Account,-200.00,Textbooks
...
2020-02-20,Expenses:Auto:Fuel,20.00,More gas
2020-02-20,Assets:Current Assets:Cash in Wallet,-20.00,More gas
2020-05-12,Expenses:Books,3.00,Used novel
2020-05-12,Assets:Current Assets:Cash in Wallet,-3.00,Used novel

Aggregating expenses by year and account while collapsing several accounts’ children:

dump-transactions \
  -aggregate date_year,account \
  -only Expenses \
  -exclude Expenses:Taxes \
  -collapse Expenses:Auto \
  -collapse Expenses:Utilities \
  -min-date 2010 \
  -max-date 2020 \
  -format text \
  testdata/finances.gnucash
2019  Expenses:Auto       100.00
2019  Expenses:Books      200.00
2020  Expenses:Auto       360.00
2020  Expenses:Books       18.00
2020  Expenses:Utilities  190.00

Listing expenses paid from a particular asset account:

dump-transactions \
  -only Expenses \
  -only-involving 'Assets:Current Assets:Cash in Wallet' \
  -format text \
  testdata/finances.gnucash
2020-02-01  Expenses:Auto:Fuel  40.00  Gasoline
2020-02-18  Expenses:Books      15.00  How-to book
2020-02-20  Expenses:Auto:Fuel  20.00  More gas
2020-05-12  Expenses:Books       3.00  Used novel