A script to import from Wise (formerly Transferwise) CSVs to beancount format. Named after Seneca the Younger, a stoic philosopher who became wealthy by pioneering commodities trading and finance. I.e. a Wise Beancounter.
The script can successfully log multi-legged outbound transactions including currency transfers. I use it for my own small business accounting needs.
Imports from Wise Transfers CSV format. Note that this is a relatively new format and doesn't include card transactions before 2023-10-27. For that you'll need to use the older and less rich Wise Statement format, which this tool doesn't support as of 2024-02-28.
If you'd like me to support additional formats, add more options, or notice any errors, please file an issue and consider buying me a coffee.
The project is open for pull requests.
Git clone this repo and navigate to the folder.
python3 -m venv venv
. ./venv/bin/activate
pip install -r requirements.txt
python seneca.py --input wise_transactions.csv --map categories.json
Note that the script prints to stdout
. This is by design so that you can use >
and >>
to pipe into different files.
--input
The Wise transactions CSV file to import from. E.g. input/business-wise.csv
--map
A JSON file. This lets you automatically set the category of both inbound and outbound transactions to this account, which is very helpful when processing a large number of transactions. It uses the target_name
and source_name
columns from the Wise CSV as the key and your desired category as the key. For example:
{
"Spotify": "Expenses:Subscriptions",
"Acme Corp": "Income:Salary"
}
If there's no category found then the script will allocate Income:Unassigned
or Expenses:Unassigned
to your transactions.
--sort
A switch to decide the order in which transactions are sorted, by date. If the value is desc
, outputs in descending order (most recent date first). For all other values, and by default, outputs in ascending order by date.
python seneca.py -i input/transactions.csv --sort desc