{"id":27106266,"url":"https://github.com/ejach/notion-budgeter","last_synced_at":"2025-04-06T19:39:06.091Z","repository":{"id":180534424,"uuid":"665294432","full_name":"ejach/notion-budgeter","owner":"ejach","description":"Keeps a given Notion database up to date with expenses using Teller.","archived":false,"fork":false,"pushed_at":"2024-12-16T22:04:37.000Z","size":64,"stargazers_count":4,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-12-16T23:20:35.106Z","etag":null,"topics":["budget","budgeting","docker","notion","notion-api","notion-client","python","teller","teller-api"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ejach.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-07-11T22:17:41.000Z","updated_at":"2024-12-16T22:04:40.000Z","dependencies_parsed_at":"2024-01-27T19:40:35.313Z","dependency_job_id":"d0201f93-d5d9-4762-8885-99fc59caf4c7","html_url":"https://github.com/ejach/notion-budgeter","commit_stats":null,"previous_names":["ejach/notion-budgeter"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ejach%2Fnotion-budgeter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ejach%2Fnotion-budgeter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ejach%2Fnotion-budgeter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ejach%2Fnotion-budgeter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ejach","download_url":"https://codeload.github.com/ejach/notion-budgeter/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247542897,"owners_count":20955858,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["budget","budgeting","docker","notion","notion-api","notion-client","python","teller","teller-api"],"created_at":"2025-04-06T19:39:05.536Z","updated_at":"2025-04-06T19:39:06.085Z","avatar_url":"https://github.com/ejach.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"### notion-budgeter\n[![PyPI](https://img.shields.io/pypi/v/notion-client?logo=python\u0026label=notion-client\u0026style=flat-square\u0026color=FFD43B)](https://pypi.org/project/notion-client/)\n[![PyPI](https://img.shields.io/pypi/v/schedule?logo=python\u0026label=schedule\u0026style=flat-square\u0026color=FFD43B)](https://pypi.org/project/schedule/)\n[![PyPI](https://img.shields.io/pypi/v/SQLAlchemy?logo=python\u0026label=SQLAlchemy\u0026style=flat-square\u0026color=FFD43B)](https://pypi.org/project/SQLAlchemy/)\n[![PyPI](https://img.shields.io/pypi/v/Requests?logo=python\u0026label=Requests\u0026style=flat-square\u0026color=FFD43B)](https://pypi.org/project/Requests/)\n\nKeeps a given Notion database up to date with transactions using Teller.\n\n#### docker-compose.yml\n```yml\nversion: '3.7'\nservices:\n  notion_budgeter:\n    image: ghcr.io/ejach/notion-budgeter\n    container_name: notion_budgeter\n    environment:\n      - data_dir=\u003cdata_dir\u003e\n      - notion_secret=\u003cnotion_secret\u003e\n      - notion_db=\u003cnotion_db\u003e\n      - notion_custom_property=\u003ccustom_property\u003e # optional\n      - notion_icon=\u003cnotion_icon\u003e # optional, default 🧾\n      - teller_account_id=\u003cteller_account_id\u003e\n      - teller_access_token=\u003cteller_access_token\u003e\n      - teller_cert_path=\u003cteller_cert_path\u003e\n      - teller_key_path=\u003cteller_key_path\u003e\n      - excluded=\u003cexpense_name\u003e # optional\n    volumes:\n      - /path/to/data:/path/to/data\n    restart: unless-stopped\n```\n| Variable                 | Description                                                                            | Required |\n|--------------------------|----------------------------------------------------------------------------------------|--------|\n| `data_dir`               | Path to where the database file should be stored                                       | ✅     |\n| `notion_secret`          | The secret token associated with your Notion integration                               | ✅     |\n| `notion_db`              | The database name that you want the data to be stored in (case-sensitive)              | ✅     |\n| `teller_account_id`      | ID associated with your Teller account                                                 | ✅      |\n| `teller_access_token`    | Token associated with your Teller account                                              | ✅      |\n| `teller_cert_path`       | Path to the Teller certificate `.pem` file                                             | ✅      |\n| `teller_key_path`        | Path to the Teller key `.pem` file                                                     | ✅      |\n| `notion_custom_property` | Custom property in the format that Notion expects (see below)                          | ❌     |\n| `notion_icon`            | What icon should the expense have in Notion (Example: 💳)                              | ❌     |\n| `excluded`               | Expense name(s) that will not be written to Notion (Example: Walmart or Walmart,Amazon)| ❌     |\n\n\n\n\n### Environment Documentation\n\nPre-requisites:\n- [Notion](https://notion.so) account\n- A Notion Integration added to a desired database (see the [Notion guide](https://www.notion.so/help/create-integrations-with-the-notion-api))\n- A [Teller](https://teller.io) account with a connected financial account (see the [Documentation](https://teller.io/docs))\n\n____\n#### Expected Notion Columns\n\n```bash\n'Expense' -\u003e type: text\n'Amount' -\u003e type: number\n'Date' -\u003e type: date\n```\nYou must format your Notion database to have these columns.\n\n\n\n#### How to format Custom Properties\n\nThe program expects a Python-like dictionary:\n\n\n```python\n{'Category': {'type': 'multi_select', 'multi_select': [{'name': '\\u2754Uncategorized'}]}}\n```\n\n\nOr a list of Python-like dictionaries:\n\n\n```python\n{'Category': {'type': 'multi_select', 'multi_select': [{'name': '\\u2754Uncategorized'}]}, \n'Comment': {'type': 'rich_text', 'rich_text': [{'type': 'text', 'text': { 'content': 'Hello World' }}]}}\n```\n\n\nWhen adding these to your environment, they need to be encapsulated in quotes `\"\"`\n\n\nMore information on this format can be found [here](https://developers.notion.com/reference/database#database-property).\n\n\u003e NOTE: Use a Python code beautifier like [Code Beautify](https://codebeautify.org/python-formatter-beautifier) if you get stuck.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fejach%2Fnotion-budgeter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fejach%2Fnotion-budgeter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fejach%2Fnotion-budgeter/lists"}