Reconcile for YNAB - Reconcile YNAB transactions from the CLI
When YNAB imports your transactions and balances in sync, reconciliation is a simple one-click process. But sometimes there’s a mismatch, and hunting it down is tedious. I was frustrated with going line-by-line through records to find which transactions should be cleared and reconciled, so I wrote this tool. It streamlines the process by finding which transactions should be reconciled to match a target balance. It will either output the transactions to reconcile, or reconcile them automatically through the YNAB API.
Suppose I want to automatically reconcile my credit card ending in 1234 to $1,471.32. I can do that as follows:
$ reconciler-for-ynab --reconcile --account-name-regex 'credit.+1234' --target 1471.32
** Refreshing SQLite DB **
Fetching plan data...
Plans: 100%|█████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 52.24it/s]
Done
Inserting plan data...
Payees: 100%|████████████████████████████████████████████████████████████| 7/7 [00:00<00:00, 2252.93it/s]
Transactions: 100%|███████████████████████████████████████████████████| 14/14 [00:00<00:00, 10605.07it/s]
Done
** Done **
[Credit Card]: Testing combinations: 100%|██████████████████████████| 32/32 [00:00<00:00, 1065220.06it/s]
[Credit Card] Match found:
[Credit Card] * $3.04 - Starbucks
[Credit Card] * $45.14 - Caffe Panna
[Credit Card] Reconciling: 100%|███████████████████████████████████████████| 2/2 [00:00<00:00, 11.76it/s]
[Credit Card] Done$ pip install reconciler-for-ynabProvision a YNAB Personal Access Token and save it as an environment variable.
$ export YNAB_PERSONAL_ACCESS_TOKEN="..."Run the tool from the terminal to print out the transactions:
$ reconciler-for-ynab --account-name-regex 1234 --target 500.30Run it again with --reconcile to reconcile the account.
$ reconciler-for-ynab --account-name-regex 1234 --target 500.30 --reconcileYou can set --mode to batch to process multiple accounts at once:
$ reconciler-for-ynab --reconcile --mode batch --account-target-pairs 'Checking=500' 'Credit=290'
[Checking]: Testing combinations: 100%|████████████████████████| 32/32 [00:00<00:00, 800000.00it/s]
[Checking] Match found:
[Checking] * $10.00 - Payee
[Checking] * $20.00 - Payee
[Checking] Reconciling: 100%|████████████████████████████████████████| 2/2 [00:00<00:00, 20.00it/s]
[Checking] Done
[Credit Card]: Testing combinations: 100%|█████████████████████| 32/32 [00:00<00:00, 800000.00it/s]
[Credit Card] Match found:
[Credit Card] * $10.00 - Payee
[Credit Card] * $20.00 - Payee
[Credit Card] Reconciling: 100%|█████████████████████████████████████| 2/2 [00:00<00:00, 20.00it/s]
[Credit Card] Done
Batch reconciling done.$ reconcile-for-ynab --help
usage: reconciler-for-ynab [-h] [--mode {single,batch}] [--account-name-regex ACCOUNT_NAME_REGEX]
[--target TARGET]
[--account-target-pairs ACCOUNT_TARGET_PAIRS [ACCOUNT_TARGET_PAIRS ...]]
[--reconcile] [--sqlite-export-for-ynab-db SQLITE_EXPORT_FOR_YNAB_DB]
[--sqlite-export-for-ynab-full-refresh] [--version]
options:
-h, --help show this help message and exit
--mode {single,batch}
Reconciliation mode. `single` uses --account-name-regex/--target. `batch`
uses --account-target-pairs.
--account-name-regex ACCOUNT_NAME_REGEX
Regex to match account name (must match exactly one account)
--target TARGET Target balance to match towards for reconciliation
--account-target-pairs ACCOUNT_TARGET_PAIRS [ACCOUNT_TARGET_PAIRS ...]
Batch mode only. Account regex/target pairs in `ACCOUNT_NAME_REGEX=TARGET`
format (example: `Checking=500.30`).
--reconcile Whether to actually perform the reconciliation - if unset, this tool only
prints the transactions that would be reconciled
--sqlite-export-for-ynab-db SQLITE_EXPORT_FOR_YNAB_DB
Path to sqlite-export-for-ynab SQLite DB file (respects sqlite-export-for-
ynab configuration)
--sqlite-export-for-ynab-full-refresh
Whether to **DROP ALL TABLES** and fetch all plan data again. If unset,
this tool only does an incremental refresh
--version show program's version number and exit