Keeps a given Notion database up to date with transactions using Plaid.
version: '3.7'
services:
notion_budgeter:
image: ghcr.io/ejach/notion-budgeter
container_name: notion_budgeter
environment:
- access_token=<access_token>
- client_id=<client_id>
- secret=<secret>
- environment=<development OR sandbox> # optional, defaults to development
- data_dir=<data_dir>
- notion_secret=<notion_secret>
- notion_db=<notion_db>
- custom_property=<custom_property> # optional
- excluded=<excluded> # optional
- icon=<icon> # optional, default 🧾
volumes:
- /path/to/data:/path/to/data
restart: unless-stopped
Variable | Description | Required |
---|---|---|
access_token |
Token associated with financial account (see below) | ✅ |
client_id |
ID associated with a Plaid account | ✅ |
secret |
Key associated with environment | ✅ |
data_dir |
Path to where the database file should be stored | ✅ |
environment |
What Plaid environment should the program run in (development or sandbox ) |
❌ |
notion_secret |
The secret token associated with your Notion integration | ✅ |
notion_db |
What Notion database name to write to (case-sensitive) | ✅ |
custom_property |
Custom property in the format that Notion expects (see below) | ❌ |
excluded |
Expense name(s) that will not be written to Notion (Example: Walmart or Walmart,Amazon ) |
❌ |
icon |
What icon should the expense have in Notion (Example: 💳 ) |
❌ |
Pre-requisites:
- Notion account
- A Notion Integration added to a desired database (see the Notion guide)
- Plaid account with a Development API
Secret
an accountclient_id
, and anaccess_token
from a connected financial account (see the Quickstart repository)
NOTE: If you get a "Connectivity not supported" error when using the Quickstart repository to get an
access_token
, follow this guide.
'Expense' -> type: text
'Amount' -> type: number
'Date' -> type: date
You must format your Notion database to have these properties.
The program expects a Python-like dictionary:
{'Category': {'type': 'multi_select', 'multi_select': [{'name': '\u2754Uncategorized'}]}}
Or a list of Python-like dictionaries:
{'Category': {'type': 'multi_select', 'multi_select': [{'name': '\u2754Uncategorized'}]},
'Comment': {'type': 'rich_text', 'rich_text': [{'type': 'text', 'text': { 'content': 'Hello World' }}]}}
When adding these to your environment, they need to be encapsulated in quotes ""
More information on this format can be found here.
NOTE: Use a Python code beautifier like Code Beautify if you get stuck.