Sync bank and brokerage data via Plaid, supplemented by Playwright + Chrome scrapers for equity plans and pharmacy prescriptions that Plaid does not cover
finance-dashboard-template — Flask Admin dashboard Template
By barnabys-drew
A Flask-based self-hosted personal finance dashboard template that aggregates bank, brokerage, and equity plan data via Plaid and custom scrapers, keeping all personal data local.
Explore the design
Compare the page layouts and mobile experience. Open any screenshot for a closer look.
Preview provided in the project README.
One original preview is available. Open the full image to inspect the design.
Screenshots show visual appearance; interactive behavior may differ.
What stands out
A quick read of the recorded project description.
All personal data, tokens, and configuration reside in the ~/.finance-viz/ directory; the repository code contains no balances, transactions, or keys
Provides a --demo mode that generates sample data and launches the full dashboard without any credentials
Includes analytical views such as spending drill-downs, category donut charts, net worth and asset class exposure, concentration alerts, equity vesting schedules, subscription detection, and anomaly scans
Categorization rules, merchant keywords, account labels, employer codes, and budgets are configured via config.json, separate from the code
Template Details
This is a self-hosted personal finance dashboard template built with Flask, designed to bring financial data scattered across banks, brokerages, and equity plans into a single local web interface. Data sources include the Plaid API, Playwright- and Chrome-based equity plan scrapers, a pharmacy prescription scraper, and manually entered items; refresh.py orchestrates these sources, while app.py serves pages and APIs in read-only mode.
The dashboard includes tabs such as Spending, Net Worth, and Cash Flow & Trends, offering monthly spending drill-downs, category donut charts, top merchants, daily charts, keyword insight cards, and optional budgets; account balances and asset class exposure, concentration alerts, vested and unvested employer equity with vesting schedules; and income vs. expense comparisons, period-over-period changes, subscription detection, and anomaly discovery. There are also recurring charge scans and Yahoo Finance news related to holdings.
The template emphasizes data isolation: all personal data, tokens, and configuration reside in the ~/.finance-viz/ directory, which is gitignored and set to chmod-600; the repository itself contains no balances, transactions, or keys. Categorization rules, merchant keywords, account labels, employer codes, and budgets all come from config.json. The repository provides a --demo mode that generates sample data and launches the full dashboard locally without a Plaid account or any credentials, making it suitable for previewing the interface and features before deciding whether to connect real accounts.
In terms of limitations, connecting real accounts requires completing Plaid onboarding and account linking per SETUP.md, and configuring scrapers yourself for institutions Plaid does not cover; scrapers rely on a Chrome remote debugging workflow, with operational details documented in RUN.md. This template is an MIT-licensed code release; third-party assets and external services require separate verification of licensing and fees.
Is it right for your project?
Use Cases
- View balances, spending, and cash flow trends across multiple bank and brokerage accounts locally in one place
- Track vested and unvested shares and vesting schedules for employer equity plans
- Identify recurring charges, subscription price changes, and anomalous transactions
- Preview the dashboard interface and features with --demo mode before connecting real accounts
- Write or integrate custom scrapers for institutions Plaid cannot cover
Suitable For
- Individual users who want their financial data to remain entirely on their machine and not be uploaded to third-party cloud services
- Developers with a Python environment and basic command-line skills who are willing to configure Plaid and scrapers per SETUP.md
- Users who need to view spending, net worth, cash flow, and equity vesting in a single interface
- Developers who want to build on the existing Flask code or extend data sources
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
After cloning the repository, create a Python virtual environment and install requirements.txt; run ./start.sh --demo to generate sample data without credentials and open http://localhost:5000
- 2
To connect real accounts, refer to SETUP.md to complete Plaid onboarding and account linking, and create config.json based on config.example.json
- 3
Personal data, tokens, and configuration reside in ~/.finance-viz/, which is gitignored and set to chmod-600
- 4
Secrets come from local files or the 1Password CLI, read at runtime, never hardcoded or written to logs
- 5
Scrapers rely on a Chrome remote debugging workflow; Tailwind build and WSL-related details are documented in RUN.md
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis entry covers the free version in the public repository under the MIT license; the free scope is the code of this version and does not imply that external services or third-party assets are free.
Must comply with when using
- You may use, modify, commercialize, and distribute the code of this version for free.
- When distributing copies or substantial portions of the code, retain the original author's copyright notice and the full MIT license notice.
- The code is provided as is; warranties and limitations of liability are governed by the original license and applicable law.
Additional costs & items to verify
- Demo images, fonts, icons, and other third-party assets must be checked against their respective licenses; the code's MIT license alone cannot be used to judge them.
- External services such as domains, hosting, databases, payments, or AI may incur separate fees.
- Connecting real bank and brokerage data depends on the third-party Plaid service; you must register a Plaid account and complete account linking yourself, which may incur external service fees.
- Secret retrieval depends on local files or the 1Password CLI; using the 1Password method requires a corresponding 1Password account and subscription.
- The holdings news feature depends on the external Yahoo Finance service, whose availability and terms are determined by the third party.
- The equity plan scraper relies on Playwright and a Chrome remote debugging workflow, requiring a locally installed and configured Chrome environment.
- Institutions not covered by Plaid require you to write or configure scrapers yourself; the template does not provide ready-made support.
View Original Text Basis
Permission is hereby granted, free of charge
Original License Text
live bank/brokerage data via **Plaid**
Original README
Secrets come from a local file or the 1Password CLI at runtime
Original README
Position news** — Yahoo Finance headlines for your current holdings
Original README
Equity plan scraper ────┤ ~/.finance-viz/*.json Flask (Playwright + Chrome)
Original README
https://github.com/barnabys-drew/finance-dashboard-template/blob/main/LICENSEhttps://github.com/barnabys-drew/finance-dashboard-template/blob/main/README.mdadding scrapers for institutions Plaid doesn't reach
Original README
Compiled by DeepSeek based on repository license and README ·2026-10-13. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.
Project checks & description sources
Template Information
- Source platforms
- GitHub
- Documentation and maintenance reference score
- Partly documented · 68 / 100
- Technologies
- Flask
- Website type
- Admin dashboard
How this score is calculated
Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.
What to verify for this project
- Repository update recorded
- 2026-10-13
- Screenshot last checked
- 2026-10-13
No demo link is recorded. Use the repository instructions to evaluate the project locally; the screenshot alone cannot establish interactive behavior.
The catalog identifies Flask as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.
Use a selection guide →How this description was prepared
AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.
Review declaration: [email protected] · 2026-10-13
Inspect the recorded source material
SHA-256: fc703f090b85035669d56d3bdfd245f613cd01cade7934074c369545e3cec7f8
2026-10-13T01:04:57.451Z
Source file / repository# Finance Dashboard A self-hosted personal finance dashboard: live bank/brokerage data via **Plaid**, equity-plan scraping for what Plaid can't reach, and a local **Flask** dashboard. All financial data stays on your machine — the repo never contains balances, transactions, or secrets. [](https://github.com/barnabys-drew/finance-dashboard-template/actions/workflows/ci.yml)   | Spending | Net Worth | |----------|-----------| |  |  | _All figures shown are generated sample data._ ## Try it in 60 seconds No Plaid account, credentials, or configuration needed: ```bash git clone https://github.com/barnabys-drew/finance-dashboard-template.git cd finance-dashboard-template python3 -m venv venv && source venv/bin/activate && pip install -r requirements.txt ./start.sh --demo ``` That generates realistic sample data and opens the full dashboard at `http://localhost:5000`. ## Features - **Spending** — monthly drill-down, category donut, top merchants, daily chart, and keyword-driven insight tiles (Household, Baby, Pet, AI, Utilities, …) with optional per-tile budgets - **Net Worth** — account balances, asset-class exposure, concentration alerts, vested vs. unvested employer equity with a per-tranche vesting schedule - **Cash Flow & Trends** — income vs. spend, month-over-month deltas, subscription detection (price changes, lapsed, emerging), anomaly findings - **Recurring-charge scan** — flags stable monthly/annual merchants, splits true subscriptions from bills - **Position news** — Yahoo Finance headlines for your current holdings ## How it works ``` Plaid API ──────────────┐ Equity plan scraper ────┤ ~/.finance-viz/*.json Flask (Playwright + Chrome) ├─ refresh.py ─────────────────────► app.py ───► localhost:5000 Pharmacy Rx scraper ────┤ (orchestrator) (read-only) Manual entries ─────────┘ ``` - **Everything personal lives in `~/.finance-viz/`** (data, tokens, config) — gitignored, chmod-600, never in the repo. - **Code contains no personal data.** Category rules, merchant keywords, account labels, employer tickers, and budgets all come from `config.json` (see [`config.example.json`](config.example.json)). - Secrets come from a local file or the 1Password CLI at runtime — never hardcoded, never logged. ## Setup with your real accounts Follow **[SETUP.md](SETUP.md)** — it covers Plaid onboarding, linking accounts, the full `config.json` reference, and adding scrapers for institutions Plaid doesn't reach. It's written step-by-step, so you can also hand it to an AI coding assistant and have it walk you through the process. ## Running it | Command | What it does | |---------|--------------| | `./start.sh` | Refresh all sources, then open the dashboard | | `./start.sh --fast` | Skip refresh — cached data, instant | | `./start.sh --demo` | Generated sample data — no credentials at all | | `./start.sh --no-shareworks` | Refresh Plaid only; don't touch Chrome | `RUN.md` documents the runtime details (Chrome remote-debugging flow for scrapers, Tailwind build, WSL specifics). ## Key files | File | Purpose | |------|---------| | `app.py` | Flask app + API routes | | `finance_config.py` | Paths, category rules, config loading, bucket classifier | | `refresh.py` | Orchestrates all data sources | | `plaid_setup.py` / `plaid_refresh.py` | One-time account linking / incremental sync | | `providers/` | Pluggable balance providers (Shareworks scraper, manual entries) | | `portfolio_analytics.py` | Asset-class exposure + concentration alerts | | `detect_subscriptions.py` / `detect_anomalies.py` | Recurring-charge + anomaly scans | | `scripts/gen_sample_data.py` | Demo data generator (powers `--demo` and CI) | | `static/app.js`, `templates/` | Dashboard front-end (Chart.js + Tailwind) | ## Tests ```bash pip install -r requirements-dev.txt python3 -m pytest -q ``` ## License MIT
Explore similar templates
Compare previews and descriptions within the same stack and category.

PyFly
PyFly is a Flask + MongoDB community forum project using the Layui Fly Template. The frontend covers registration, login, email activation, posting, replying, liking, accepting answers, deleting posts, and closing threads; the backend uses flask-admin for simple management.
Flask · Admin dashboard

Dashboard
A minimal Flask example that reads data from a SQL database, processes it with Pandas, and displays it in a pivot table using a Bootstrap template. It requires your own SQL database and configuration changes at the TODO-marked positions in main.py.
Flask · Admin dashboard

raspi-dash
RaspiDash is a real-time single-page monitoring dashboard for Raspberry Pi 5. It uses a Flask backend to collect data from native Pi interfaces such as /proc, vcgencmd, and pinctrl, and renders cards with Jinja2 templates without frontend dependencies.
Flask · Admin dashboard

BootstrapFlask
BootstrapFlask adapts Start Bootstrap's SB Admin 2 admin theme into a Flask project template, offering a dashboard-style data management interface with a sidebar and stat cards.
Flask · Admin dashboard

AdminLTE
AdminLTE is a free, open-source admin dashboard template built on Bootstrap 5 and vanilla JavaScript, with no jQuery dependency.
Astro · Admin dashboard
ant-design-pro
Ant Design Pro is an enterprise-grade React admin scaffold built on React 19, Umi Max 4, and antd 6 with TypeScript.
React · Admin dashboard
