Own your whole financial picture
wealthdb collects every bank, brokerage, pension and private-market account into one private database on your own machine. You and your AI agent ask it questions. No advisor, no sales desk, no cloud in the loop.
Paste this into your coding agent
> Help me set up wealthdb for my accounts. Read https://github.com/smartpointer-com/wealthdb/blob/main/README.md and follow it. Never ask me for a password; I will type credentials and MFA codes myself.
The AI agent builds and configures. You sign in to each source and answer its MFA prompt yourself. No AI agent ever logs into your bank.
Run this in a terminal on macOS or Linux. Needs git, make, Docker and Python 3.10+.
❯ git clone https://github.com/smartpointer-com/wealthdb.git && cd wealthdb && make all && make install
Then wealthdb-collect <source> login, download, load, and wealthdb load -a. No Go toolchain: the engine builds inside its container.
No bank needed. An invented household with every report and dashboard.
❯ make demo && make demo-web
Dashboards on http://127.0.0.1:3100/. Add make demo-mcp to point an AI agent at it. Every screenshot on this page comes from that demo.
Ten dashboards, served locally over a read-only snapshot, in light or dark. Each has a privacy twin that shows shares instead of amounts. The data shown is the invented demo household.
Take back the whole picture
Your money is spread across banks, brokers, pension plans and platforms that each show you only their slice. The people who see it all are the ones selling to you. wealthdb puts the full picture on your own disk, so the insight is yours.
Complete
Every account you hold, in every currency, as of any day. Checking and cards, brokerage and retirement plans, pensions, crypto, private funds, property. One number for net worth, and the whole story behind it.
Private
Your data lands in local databases and nowhere else. The collectors only read. No tech company keeps a copy, and no AI agent ever touches a credential.
Yours to question
Returns the way a fund reports them, exposure with every fund looked through, yield and rate risk, income, spending and cash flow. From the command line, the dashboards, or an AI agent of your choice that reads the same reports.
Collectors download. The engine consolidates. The reports read.
Three layers. Each source keeps its raw downloads and its own parsed database. The engine merges them into one canonical store. Three surfaces read it.
One program per source
A static, auditable script signs in with your credentials and your MFA answer, then downloads everything the provider has: not just today's balances, but the full history, every transaction, every PDF statement and tax form. No AI agent ever logs into your bank.
- login
- download
- load
- prune
One SQLite per source
The raw downloads parsed into a relational database: every detail the provider returned, from a JSON export or a PDF statement, in a compact, queryable form.
- holdings
- transactions
- documents
One DuckDB store
Every source merged into one canonical model: accounts, positions, lots and flows across all your banks and brokers. FX, transfer pairing between your own accounts, categories, look-through, returns and yield are computed once, over the whole.
One engine, three surfaces
All the reports, however you ask.
The questions a household asks of its money
Every report runs for any date and any period, in the currency you pick.
Net worth and allocation
What is held, where, and what it is worth, in one currency at that day's rates. By asset class, vehicle, tax wrapper and account.
❯ wealthdb holdings global -d 2024-12-31 -x CHF
Performance
Time-weighted and money-weighted returns per account, portfolio, provider and the whole. Transfers between your own accounts are matched and never counted as gain.
❯ wealthdb returns portfolios 2025
Gains and cost basis
Realized and unrealized gains from the lots the providers state. Where a provider states none, a lot engine rebuilds them from the trades and says so.
❯ wealthdb gains realized 2025
Exposure
What is really owned once every fund is looked through: asset class, sector, country, currency, credit, maturity, issuer, and where each holding legally sits.
❯ wealthdb exposure countries
Yield and rate risk
What the holdings earn, their duration, and how their value moves with interest rates. Cash is set against its currency's benchmark rate.
❯ wealthdb yield global -x CHF
Income, spending, cash flow
What arrived and what left, categorised across every card and account, and a cash flow statement with the household's internal transfers taken out.
❯ wealthdb cashflow sankey 2025
❯ wealthdb exposure countries country | country_name | region | value_USD | share_pct | direct_pct | via_funds_pct | quality ---------+----------------+---------------+------------+-----------+------------+---------------+----------------------------------- US | United States | north_america | 1584598.93 | 66.66 | 34.09 | 32.58 | proxy=2%,declared=54%,unmapped=<1% unknown | | | 108023.21 | 4.54 | 2.49 | 2.05 | proxy=3%,partial=2%,unmatched=55% CH | Switzerland | europe | 106259.89 | 4.47 | 3.35 | 1.12 | proxy=2%,undeclared=28% JP | Japan | asia_pacific | 66105.19 | 2.78 | 0.00 | 2.78 | proxy=6% DE | Germany | europe | 65427.86 | 2.75 | 1.75 | 1.01 | proxy=2% GB | United Kingdom | europe | 52633.76 | 2.21 | 1.23 | 0.99 | proxy=2% FR | France | europe | 34384.22 | 1.45 | 0.56 | 0.89 | proxy=4% … ❯ wealthdb spending categories 2025 --period annual period | category | txn_count | spend_USD | refunds_USD | net_spend_USD | share_pct --------+---------------------------+-----------+-----------+-------------+---------------+---------- 2025 | Food and drink | 583 | 25368.21 | 0.00 | 25368.21 | 21.70 2025 | General services | 40 | 24300.57 | 0.00 | 24300.57 | 20.79 2025 | Government and non profit | 33 | 15056.53 | 0.00 | 15056.53 | 12.88 2025 | Travel | 8 | 10989.87 | 0.00 | 10989.87 | 9.40 2025 | General merchandise | 80 | 9230.18 | 0.00 | 9230.18 | 7.90 2025 | Home improvement | 39 | 7596.31 | 100.15 | 7496.16 | 6.41 … ❯ wealthdb yield global -x EUR currency | value_EUR | income_yield_pct | implied_yield_pct | duration | dv01_EUR | quality ----------+------------+------------------+-------------------+----------+----------+------------------------------------------ USD | 2134498.42 | 1.05 | 4.03 | 2.45 | -31.15 | implied=6% stated=5% indicated=24% … EUR | 56496.17 | 3.22 | 2.20 | 4.37 | 13.71 | implied=39% indicated=22% declared=37% … CHF | 43710.52 | 1.54 | | 0.00 | 0.00 | indicated=98% unknown=2% GBP | 25427.54 | 3.51 | | 0.00 | 0.00 | indicated=92% unknown=8% total | 2260132.65 | 1.13 | 3.92 | 2.55 | -17.44 | mixed …
Every relationship, one collector each
Banks and brokers, pensions and platforms. Each collector is a small, auditable program that reads one provider and nothing else.
Banks and cards
Accounts, cards, mortgages and the rates they state. Full history, statements included.
- UBS
- Swissquote
- Raiffeisen
- Chase
- First Citizens
- American Express
Brokerages
Positions, trades, lots, dividends and tax forms.
- Schwab
- Fidelity
Pensions
Pillar 3a and pillar 2 vested benefits, with their fund mixes.
- VIAC
- Relevate
Private markets
Fund stakes, direct holdings, capital calls, distributions and quarterly reports.
- AngelList
- Carta
- EquityZen
Crypto
Exchange and wallet history, custodial and self-custody, with the trades that rebuild a cost basis.
- CoinTracking
Reference and manual
Public data about what each fund holds and pays, FX and yield curves, and a CSV for holdings with no portal such as property or private loans.
- refdata
- FRED
- curves
- manual
- statement archives
Thousands more through Plaid
Plaid links the banks, brokers and card issuers it covers, one login at a time. Where wealthdb has no collector of its own, Plaid is the door: the same reports, the same local database. Its tokens read data and cannot move money.
- Checking and savings
- Cards
- Mortgages and loans
- Brokerage
- Retirement plans
Missing yours? Add it, and share it.
A new source is one small program dropped in beside the others. A playbook walks a coding agent through writing it while you handle the logins. Most collectors here were built that way in a day or two. Pull requests are welcome.
An agent that knows your finances, and cannot touch them
Bring your own agent. wealthdb ships no model and no chat window. It serves its reports over MCP to whatever you already use: OpenClaw, Claude, a coding agent, or a model that runs entirely on your own hardware, so the numbers never leave the machine. Whichever you pick, the agent reads the reports, and only the reports.
Mostly the other way round. A fall in rates would help your balance sheet a little and cost you some cash income.
- Rate sensitivity is small and net positive. Across everything, one basis point down is worth about +17 EUR. The home loan is the biggest single lever (duration 2.6, so it reprices soon), and your bond funds gain as rates fall.
- Income would slip. The holdings pay about 1.1% a year in cash. Half of that is interest from the savings account and the term deposit, which float with rates. Dividends and fund distributions, the other half, do not.
- Next twelve months, as projected today: roughly 1,000 EUR a month in quiet months, with spikes in December and March when the funds distribute.
The 12-month term deposit. It holds about 42k EUR at 3.04% and matures within the year, so it is the first thing that reprices lower. The joint savings account is the other floating leg, at 3.48% stated.
If you want to lock income in, that is the money to decide about before it rolls. I can list the bond funds you already hold with their durations, so you can compare.
--read-only.
Your data stays on your machine*
Plain database files in a folder you choose. Nothing phones home and nothing syncs. There is no account anywhere for your data to be in.
Open files, your tools
- Each source is a SQLite file, the consolidated store a DuckDB file. Open them with any client, notebook or spreadsheet.
- Every report exports CSV or JSON. Back up with a copy, delete with a delete.
- Dashboards and the MCP server bind to loopback only and read a snapshot. They never reach the live store.
Privacy mode for shared screens
- The CLI redacts every amount with
-p; the shape of the answer stays. - Each dashboard has a twin that shows shares instead of amounts.
- The MCP server has a redacted endpoint, so a transcript can hold the picture without the numbers.
* Three things do leave the machine, each one opt-in. A login linked through Plaid: Plaid reads that institution and keeps a copy of its data. The language model that categorises merchants and resolves tickers, if it runs on a remote endpoint: it sees merchant, payer and instrument names, never an amount, and it can run locally instead. The public reference sources the refdata collector asks about each fund and security: they see which identifiers are asked about, never an amount, an account or a bank.
Read before you configure a credential. The collectors sign in with the same fully privileged login a human uses to move money. Most providers do not offer a read-only sub-scope. Only the code's own discipline restricts them to reading. You are responsible for auditing this code, its dependencies and its images before trusting it with credentials, and your use may breach a provider's terms. Provided as is, without warranty, under the MIT license. The full disclaimer.
Start with the demo. Then add your first account.
Open source under the MIT license. Runs on macOS and Linux with Docker. The demo household shows every report and dashboard before you hand over a single credential.