Last reviewed: 2026-07-31
Finance Guru is a private, single-user family-office system. This document describes how data is handled inside this repository and its companion apps.
- All financial data stays on the owner's machine
- No telemetry, no remote analytics, no third-party data sharing
- Nothing personally identifying is committed to the public engine repository; the separate instance repository is local-only and has no remote
- When data does leave the laptop (SnapTrade, SimpleFIN, Fidelity APIs, ITC Risk Models), it goes directly to the owner's own accounts — no intermediary
| Category | Source | Storage | Exposure |
|---|---|---|---|
| Portfolio positions | SnapTrade (CSV fallback) | family_office.db (committed to local-only instance repository) |
Local only; no remote |
| Account balances | SnapTrade (CSV fallback) | family_office.db (committed to local-only instance repository) |
Local only; no remote |
| Transaction history | SnapTrade | family_office.db (committed to local-only instance repository) |
Local only; no remote |
| Bank / card spending | SimpleFIN | family_office.db (committed to local-only instance repository) |
Local only; no remote |
| Dividend events | SnapTrade activities | family_office.db (committed to local-only instance repository) |
Local only; no remote |
| User profile (risk tolerance, goals) | Interactive onboarding | user-profile.yaml under the instance root (committed to local-only instance repository) |
Local only; no remote |
| Market data | yfinance / Finnhub / ITC | In-memory during analysis | Per-provider terms |
- Broker and bank reads — SnapTrade and SimpleFIN are queried outbound to pull your own accounts. Both are read-only; nothing is written back to a broker.
- Market-data queries — yfinance, Finnhub, and ITC Risk Models APIs see which tickers you query, but not your position sizes.
- Claude Code session — the LLM provider (Anthropic) sees conversation content including any data you paste into the session. Treat Claude Code like a privileged assistant — don't paste data you wouldn't email your accountant.
The Google Sheets DataHub was retired 2026-07-31. Portfolio data no longer leaves the machine for Google Drive, and no
gdriveMCP server is configured.
- Raw Fidelity CSVs (gitignored)
- SSNs, account numbers, and API keys (scrubbed by
src/utils/log.py:ScrubPIIProcessorbefore they reach any log) .envcontentsmerchant-rules.yaml, your household merchant names (the engine ships only national brands)finance-guru-desktop/runtime state (also gitignored)
# Verify private files are ignored
git status --ignored
# Verify no secrets in the working tree
git diff --cached
# Verify .env is gitignored
git check-ignore .env
# Audit dependencies for known CVEs
uv run pip-audit || trueThe structured logger (src/utils/log.py) runs every string through ScrubPIIProcessor before output. Redacted patterns:
- SSN (
NNN-NN-NNNN) →***-**-**** - Credit cards (13-19 digit sequences) →
**** - API tokens (prefixed
sk-,pk-,ghp_,ghs_) → first 4 chars +*** - Email local parts →
***@domain.tld
If you need to redact something else, extend ScrubPIIProcessor and add a unit test.
| Service | Required? | What it sees | Terms |
|---|---|---|---|
| Anthropic Claude | Yes | Conversation content | https://www.anthropic.com/legal/privacy |
| yfinance (Yahoo) | Default | Tickers you query | https://policies.yahoo.com/ |
| Finnhub | Optional | Tickers + API key | https://finnhub.io/privacy-policy |
| ITC Risk Models | Optional | Tickers + API key | Per ITC agreement |
| SnapTrade | Default | Brokerage positions, balances, activities (read-only) | https://snaptrade.com/privacy |
| SimpleFIN | Default | Bank and card balances and transactions (read-only) | https://beta-bridge.simplefin.org/ |
| GitHub | When pushing | Repository contents | https://docs.github.com/privacy |
Finance Guru is not a regulated service; it is a personal tool. No GDPR/CCPA obligations apply because there are no third-party data subjects. If you fork this project and expose it as a service to others, you become the data controller and those obligations apply to you.
Issues or concerns: open a GitHub issue using the Question template with the privacy label.