Skip to main content

Reconciler for YNAB - Reconcile YNAB transactions to reach a target balance

This project has been archived.

The maintainers of this project have marked this project as archived. No new releases are expected.

Project description

reconciler-for-ynab

pre-commit.ci status

Reconcile for YNAB - Reconcile YNAB transactions from the CLI

What This Does

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 budget data...
Budget Data: 100%|███████████████████████████████████████████████████████| 10/10 [00:00<00:00, 52.24it/s]
Done
Inserting budget 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

Installation

$ pip install reconciler-for-ynab

Usage

Token

Provision a YNAB Personal Access Token and save it as an environment variable.

$ export YNAB_PERSONAL_ACCESS_TOKEN="..."

Quickstart

Run the tool from the terminal to print out the transactions:

$ reconciler-for-ynab --account-name-regex 1234 --target 500.30

Run it again with --reconcile to reconcile the account.

$ reconciler-for-ynab --account-name-regex 1234 --target 500.30 --reconcile

You 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.

All Options

$ 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 budget data again. If unset,
                        this tool only does an incremental refresh
  --version             show program's version number and exit

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

reconciler_for_ynab-0.1.0.tar.gz (12.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

reconciler_for_ynab-0.1.0-py2.py3-none-any.whl (11.9 kB view details)

Uploaded Python 2Python 3

File details

Details for the file reconciler_for_ynab-0.1.0.tar.gz.

File metadata

  • Download URL: reconciler_for_ynab-0.1.0.tar.gz
  • Upload date:
  • Size: 12.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.12

File hashes

Hashes for reconciler_for_ynab-0.1.0.tar.gz
Algorithm Hash digest
SHA256 49fac0d576140717c0bff574a7b24de7a324a14d99f4a1a5a1e235e27aee39e2
MD5 bdaa394a412c2efc41f82cc4c7367be9
BLAKE2b-256 807b528bbf1ded708d1389e5ff7b5ce6e8d9c7d3eef7f7e42090e45643d49154

See more details on using hashes here.

File details

Details for the file reconciler_for_ynab-0.1.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for reconciler_for_ynab-0.1.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 8c6829ea2896577998d982f553aea70fb3fe9c02c3c0022b0c7b66ce0a4a82b6
MD5 649e462fe5724223aad285b7c89c1ee7
BLAKE2b-256 a43d8f7ad38720de31840abfb5492b9f400472ed614c41d4272f93c26d637395

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page