Home
Softono
b

benjamin-awd

Professional software vendor delivering innovative solutions on the Softono platform. Specialized in both open-source and proprietary software development.

Total Products
2

Software by benjamin-awd

StatementSensei
Open Source

StatementSensei

<img src="./docs/logo.svg" width="396" height="91"> Statement Sensei converts bank statement PDFs to CSVs using the [monopoly](https://github.com/benjamin-awd/monopoly) CLI library. The offline version of the app is available on the [releases](https://github.com/benjamin-awd/statementsensei/releases) page. <h3 align="center"> πŸŽ‰ Statement Sensei is now live! πŸŽ‰ <br><br> Try it out: <br> <a href="https://statementsensei.streamlit.app/">https://statementsensei.streamlit.app/</a> </h3> <p align="center"> <img src="./docs/statement_sensei_demo.gif" width=800> </p> # Usage Statement Sensei can be run as an offline application on Windows, MacOS or Linux. > ⚠️ Note: Windows does not work currently due to upstream build issues with `pdftotext`. The offline application runs Streamlit locally, and uses a [WebView](https://tauri.app/v1/references/webview-versions/) window to view the browser frontend at http://localhost:8501. Supported banks: | Bank | Credit Statement | Debit Statement | |----------------------------------------|--------------------|-----------------------| | Bank of America | βœ… | βœ… | | Bank of Montreal (BMO) | βœ… | βœ… | | Canadian Imperial Bank of Commerce (CIBC) | βœ… | βœ… | | Canadian Tire Bank | βœ… | ❌ | | Capital One Canada | βœ… | ❌ | | Chase | βœ… | ❌ | | Citibank | βœ… | ❌ | | DBS/POSB | βœ… | βœ… | | HSBC | βœ… | ❌ | | Maybank | βœ… | βœ… | | OCBC | βœ… | βœ… | | Royal Bank of Canada (RBC) | βœ… | βœ… | | Schwab Bank | N/A | βœ… | | Scotiabank | βœ… | βœ… | | Standard Chartered | βœ… | ❌ | | TD Canada Trust | βœ… | βœ… | | Trust | βœ… | ❌ | | UOB | βœ… | βœ… | | US Bank | βœ… | ❌ | | ZΓΌrcher Kantonalbank | ❌ | βœ… | # Installation > [!WARNING] > The offline app may raise security warnings during installation. Specifically on MacOS, the application will show an "app is damaged and can't be opened" error. These security warnings happen because the release binaries are unsigned, and are incorrectly flagged as malware. To get around this, follow these steps for [MacOS](https://support.apple.com/en-sg/guide/mac-help/mh40616/mac) / [Windows](https://stackoverflow.com/questions/54733909/windows-defender-alert-users-from-my-pyinstaller-exe). The Windows Defender alert can be bypassed by clicking "More info" -> "Run anyway". # Development Install system dependencies using brew or apt-get (necessary since `pdftotext` needs them) ```sh apt-get install build-essential libpoppler-cpp-dev pkg-config ocrmypdf ``` or ```sh brew install gcc@11 pkg-config poppler ocrmypdf ``` Install app dependencies with uv: ```shell uv venv source .venv/bin/activate uv pip install -e . ``` To run the consumer-facing application: ```shell python entrypoint.py ``` To run the application in developer mode: ```shell streamlit run webapp/app.py ``` ## Docker Otherwise, to run the application as a container: ```sh docker compose up ``` or: ```sh docker pull benjaminawd/statementsensei:latest docker run -p 8501:8501 benjaminawd/statementsensei:latest ``` If running locally with docker: you can either store passwords in an environment variable as a string ```sh export PDF_PASSWORDS='["pass123", "otherpw123"]' ``` or store them in an .env file in the project root: ```sh echo 'PDF_PASSWORDS=["foo"]' > .env ``` # Features - Supports uploading multiple bank statements - Allows unlocking of PDFs using user-provided credentials via the frontend

Personal Finance Data Pipelines & ETL
186 Github Stars
monopoly
Open Source

monopoly

<img src="https://raw.githubusercontent.com/benjamin-awd/monopoly/main/docs/logo.svg" width="396" height="91"> ----------------- [![Streamlit](https://static.streamlit.io/badges/streamlit_badge_black_white.svg)](https://monopoly.streamlit.app) [![Tests](https://github.com/benjamin-awd/monopoly/actions/workflows/tests.yaml/badge.svg?branch=main&event=push)](https://github.com/benjamin-awd/monopoly/actions/workflows/tests.yaml) [![CI](https://github.com/benjamin-awd/monopoly/actions/workflows/ci.yaml/badge.svg?branch=main&event=push)](https://github.com/benjamin-awd/monopoly/actions/workflows/ci.yaml) [![License: AGPL 3.0](https://img.shields.io/badge/License-AGPL%203.0-blue)](https://opensource.org/license/agpl-v3) Monopoly is a Python library & CLI that converts bank statement PDFs to CSV. ![](https://raw.githubusercontent.com/benjamin-awd/monopoly/main/docs/monopoly.gif) Supported banks: | Bank | Credit Statement | Debit Statement | |----------------------------------------|--------------------|-----------------------| | Bank of America | βœ… | βœ… | | Bank of Montreal (BMO) | βœ… | βœ… | | Canadian Imperial Bank of Commerce (CIBC) | βœ… | βœ… | | Canadian Tire Bank | βœ… | ❌ | | Capital One Canada | βœ… | ❌ | | Chase | βœ… | ❌ | | Citibank | βœ… | ❌ | | DBS/POSB | βœ… | βœ… | | HSBC | βœ… | ❌ | | Maybank | βœ… | βœ… | | OCBC | βœ… | βœ… | | Royal Bank of Canada (RBC) | βœ… | βœ… | | Schwab Bank | N/A | βœ… | | Scotiabank | βœ… | βœ… | | Standard Chartered | βœ… | ❌ | | TD Canada Trust | βœ… | βœ… | | Trust | βœ… | ❌ | | UOB | βœ… | βœ… | | US Bank | βœ… | ❌ | | ZΓΌrcher Kantonalbank | ❌ | βœ… | ## Install Monopoly is a pip-installable Python package on [PyPI](https://pypi.org/project/monopoly-core) under the name `monopoly-core`. Since Monopoly uses `pdftotext`, you'll need to install additional dependencies: ```sh apt-get install build-essential libpoppler-cpp-dev pkg-config ocrmypdf ``` or ```sh brew install gcc@11 pkg-config poppler ocrmypdf ``` Then install with pipx: ```sh pipx install monopoly-core ``` For additional OCR support: ```sh pipx install 'monopoly-core[ocr]' ``` ## Usage Monopoly runs in your terminal, allowing you to extract, transform and write bank statements to a CSV file. To list commands and options: ```sh monopoly --help ``` You can run it on a single statement ```sh monopoly src/monopoly/examples/example_statement.pdf ``` or multiple statements ```sh monopoly ./statements ``` To keep the output filename the same as the input (with a `.csv` extension), pass: ```sh monopoly path/to/file.pdf --output ./out --preserve-filename ``` If you need to run monopoly on a password protected file, ensure that passwords are set in the .env file: ```sh cp .env.template .env PDF_PASSWORDS=["password1","password2"] ``` Monopoly can also be run as a Python [library](src/monopoly/examples/single_statement.py): ```bash python3 src/monopoly/examples/single_statement.py ``` ## Features - Parses PDFs using predefined configuration classes per bank. - Handles locked PDFs with credentials passed via environment variables. - Supports adding OCR for image-based bank statements. - Provides a generic parser that can be used without any predefined configuration (caveat emptor). - Includes a safety check (enabled by default) that validates totals for debit or credit statements. ## Development Clone the repo ```bash git clone https://github.com/benjamin-awd/monopoly.git ``` Install dependencies using [Homebrew](https://brew.sh/) ```bash brew install make make setup brew bundle ```

Personal Finance Data Pipelines & ETL
176 Github Stars