Skip to main content

dinero

Tools and scripts to manage my personal finances. Your own Mint/YNAB, self hosted.

  • Plaid for collecting transactions from financial institutions
  • SQL Database for storing transactions
    • I personally use Postgres but any SQLAlchemy compatible DB should work
    • This README uses SQLite
    • I use NocoDB as a viewer/explorer with filters and groups by Account, Category and so on
    • I use Metabase to create dashboards
    • Your imagination is the limit here!
    • You can read more about how I use this + some screenshots in my wiki.
  • Inspired by yyx990803/build-your-own-mint.

Requirements

Plaid

  • Create a Plaid account
  • You need development access to handle multiple accounts
    • You can use it on development mode for free up to 100 accounts
  • I asked for production access and it was simple, just fill the form and say you are not a company and that you will use it for personal use
  • Get your client_id and secret from the Plaid dashboard

Logging in to Banks

Use the plaid/quickstart to login to your institution.

Once you've linked the bank save the ACCESS_TOKEN. in the config file. See settings below.

Database

Simply write the SQLAlchemy connection string in the config file.

Config

The project reads it's config from ~/.config/dinero/config.toml. You can see a sample in config.sample.toml.

For Plaid you need to set the token for each institution:

[plaid.tokens]
bank_1 = "access-development-XXXXXXXXXXXXXXXX"
bank_2 = "access-development-YYYYYYYYYYYYYYYY"

And a mapping to make the Account ID human readable:

[plaid.account_id_to_name]
THIS_IS_A_LONG_ID_1_XXXXXXXXXXXXXXXXXXXXXX = "Bank 1 Checking"
THIS_IS_A_LONG_ID_2_YYYYYYYYYYYYYYYYYYYYYY = "Bank 2 Credit Card"

Usage

After you have the requirements and config file.

Install by cloning the repo and installing the dependencies using your favorite Python environment manager.

Create DB and tables:

dinero init-db

Get new transactions and add them to the database:

dinero transactions

Example output:

2023-09-21 11:06.45 [info     ] Transactions downloaded        name=XXX records=49
2023-09-21 11:06.45 [info     ] Transactions pending           name=XXX records=1
2023-09-21 11:06.45 [info     ] Transactions not pending       name=XXX records=48
2023-09-21 11:06.58 [info     ] Loaded table                   recods=662 year=2023
--------------------------------------------------------------------------------
My Bank - Checking
--------------------------------------------------------------------------------
2023-09-21 11:06.58 [info     ] Queried transactions           n=17
2023-09-21 11:06.58 [info     ] Pending transactions           n=0
2023-09-21 11:06.58 [info     ] New transactions to be added   n=2
2023-09-21 11:06.58 [info     ] Transaction                    transaction={'Account': 'BoA Checking', 'Amount': XXX, 'Category': '', 'Date': '2023-09-20', 'Description': 'XXXX', 'Subcategory': ''}
2023-09-21 11:06.58 [info     ] Transaction                    transaction={'Account': 'BoA Checking', 'Amount': XXX, 'Category': '', 'Date': '2023-09-20', 'Description': 'XXXX', 'Subcategory': ''}
2023-09-21 11:06.58 [info     ] Existing transactions          n=15
2023-09-21 11:06.58 [info     ] Error transactions             n=0

================================================================================
All accounts summary from 2023-08-22 to 2023-09-21:
================================================================================
Using Table for year: 2023
Records in table: 662
Transactions queried: 49
Pending transactions: 1
Transactions analysed (pending False): 48
New records to be inserted: 5
Existing transactions: 43
Errors transactions (not valid dates for table): 0

Insert transactions to the Table? [Y/n]

Generate a set of simple rules that will be used to categorize transactions:

just rules

Generate a dataset with all transactions in CSV and SQLite:

just dataset

Other

There is a handy function to generate a Pandas DataFrame with all transactions: I use this to do some analysis in a Jupyter Notebook.

from dinero import analysis
df = analysis.get_dataframe()

Contributions

While I am happy to accept any contributions this is 100% tailored to how I use it so I might reject stuff I won't use.

If you want to do other things such as connecting to Airtable (initially I used Airtable but the new pricing made it not worth it) you should fork this repo and make your own changes.

Metadata

Release files for dinero-tools 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dinero-tools 1.0.0
File Size Uploaded Provenance Actions
dinero_tools-1.0.0.tar.gz 86.1 kB With provenance Details for dinero_tools-1.0.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for dinero-tools 1.0.0
File Interpreter ABI Platform Actions
dinero_tools-1.0.0-py3-none-any.whl Python 3 none any Details for dinero_tools-1.0.0-py3-none-any.whl

Total release size: 111.3 kB

Release files / dinero_tools-1.0.0.tar.gz

Download URL dinero_tools-1.0.0.tar.gz
Size 86.1 kB
Tags Source
SHA-256 checksum
How to use checksums
78b9b9745e31026895aea595238ccdac16af300e48d102c22a11eeeb0096badb
BLAKE2b-256 checksum
How to use checksums
fab540cc75df4f3ffd61fa7007f8aceca5750302f600b694a2b0bbd8a65d000d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 4, 2026.

Transparency log

Release files / dinero_tools-1.0.0-py3-none-any.whl

Download URL dinero_tools-1.0.0-py3-none-any.whl
Size 25.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4a46bc6ca2e3b65e083ba01dda46515cea5bf21571604157e2631d45c6fea76d
BLAKE2b-256 checksum
How to use checksums
771fc22ae0e8b4785e8019fc04c0f85e6a679e353294887b1fdd58e87ff30794
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 4, 2026.

Transparency log

Security for dinero-tools 1.0.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for dinero_tools-1.0.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 4, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page