Wealthfolio FAQ
Answers to the questions we see most often about imports, transfers, FX, performance metrics, self-hosting, and more.
Last updated
This FAQ is the front door. For deeper explanations, follow the links inside each answer to the concept docs and user guide.
Getting started
TRANSFER_IN activity with the External flag checked — it seeds the lot at your current quantity and cost basis without recording a fictional buy. Add a single DEPOSIT for your cash balance. You can switch to full BUY/SELL tracking going forward. See Activity Types for both styles.Data, privacy, and backup
- Windows:
%APPDATA%\Wealthfolio - macOS:
~/Library/Application Support/com.teymz.wealthfolio/ - Linux:
~/.local/share/com.teymz.wealthfolio/ - Mobile (iOS): App sandbox storage, backed up to iCloud if enabled.
- Self-hosted: Data volume mounted at
/app/datainside the container.
With Connect, data is encrypted on-device before syncing — we never see your portfolio data.
CSV import
- Missing symbol: every row needs a symbol. For pure cash flows (deposits, withdrawals, interest), use
$CASH-<CCY>— e.g.$CASH-USD. - $ in price fields: strip currency symbols before import.
$57.50should be57.50. Same for thousands separators (1,234.56→1234.56).
Full troubleshooting list: CSV Import → Troubleshooting.
$CASH-<CCY> symbol (e.g. $CASH-EUR) on DEPOSIT, WITHDRAWAL, INTEREST, FEE, and TAX rows. The importer treats those as pure cash activities — no security lookup is needed.Activities, transfers, dividends, splits
TRANSFER_OUT on the source account and a matching TRANSFER_IN on the destination account. For securities transfers, Wealthfolio preserves the original cost basis. See Activity Types — Transfers.Same-day gotcha: if both activities are dated the same day, give the OUT an earlier timestamp than the IN. Otherwise the IN may be processed before the lot exists on the source side.
TRANSFER_OUT on the source account with the External flag checked — Wealthfolio closes the lots via FIFO without realising a gain, since the asset moved to an untracked destination. If the destination is another Wealthfolio account, leave the External flag unchecked and pick the destination account — Wealthfolio will create the matching TRANSFER_IN and preserve the original cost basis.DIVIDEND activity with the DRIP subtype. Wealthfolio records both the dividend income and the resulting share purchase in one step. The CSV importer auto-detects DRIP rows in most broker formats. See Dividend subtypes.SPLIT activity on the split date with the ratio (e.g. 4-for-1). Wealthfolio adjusts both quantity and per-share cost.Don't double-apply. If your broker CSV already reflects post-split quantities and your price feed (e.g. Yahoo) shows adjusted prices, you may not need a SPLIT activity at all. Add one only if your historical quantities are pre-split.
- Options: in the Add Activity form, pick
BuyorSell, then switch the asset toggle from Stock to Option to get the Call/Put, strike, and expiration fields plus a Position (Open / Close) toggle. Writing a call or put isSell+ asset Option + Open (the button reads "Sell to Open"). AnOption Expiryadjustment subtype cleans up expired contracts, and the standard 100x multiplier is applied automatically. See Options (calls & puts). - Short stock and ETF positions: use Sell Short to open a signed short lot and Buy to Cover to close it. Plain sells never accidentally open a short.
- Covered calls and complex options strategies: not first-class strategy objects yet, though the underlying option trades can be recorded.
- Bonds: tracked as securities. Record coupon payments as
INTERESTagainst the bond symbol; Wealthfolio attributes the income to that bond and includes it in the bond's income and total return. Dedicated coupon-specific UI and reporting are not yet available. - RSUs / free shares: use
TRANSFER_INwith the External flag checked and the cost basis you want to record (typically the vest-date price for tax purposes).
The easy-to-miss step is the asset toggle: pick the trade type first, then switch it from Stock to Option to reveal the option contract fields. To sell/write a call or put:
- Activities → + Add Manually → Add Transaction, then pick the
Selltype. - Under Asset & Account, switch the asset toggle from Stock to Option. Choose Call or Put, then set the symbol, strike, and expiration.
- In the Trade section set Position to Open, then enter the number of Contracts and the Premium/Share (Wealthfolio applies the 100x multiplier for you — enter
1.25, not125). The button reads Sell to Open.
Close it later with Buy + asset Option + Close (Buy to Close), or use the Option Expiry adjustment subtype if it expires worthless. Buying an option to open is the mirror: Buy + asset Option + Open. Full walkthrough: Options (calls & puts).
INTEREST with the Staking Reward subtype. Wealthfolio records both the income and the resulting token acquisition in one step.- Gross + tax: record the
DIVIDENDat the gross amount and a separateTAXactivity for the withholding. - Net: record the
DIVIDENDat the net amount your broker actually deposited. You lose the gross/withholding breakdown but cash reconciles cleanly.
fee field on the BUY/SELL, or create a separate FEE activity — not both. See How fees work.Symbols & market data
RY, AAPL) plus an optional exchange MIC code (e.g. XTSE for Toronto). Wealthfolio's resolver translates that into whatever format each market-data provider expects — Yahoo wants RY.TO, Börse Frankfurt wants XETR:RY, OpenFIGI wants an ISIN, and so on.When you add an asset, you can type either the bare ticker or the exchange-qualified form your provider uses (e.g. RY.TO) — Wealthfolio parses the suffix into a ticker + MIC pair. The Yahoo suffix table is the most common case and is documented in Market Data & FX.
IWDA.AS for Euronext Amsterdam) or a MIC code in the dedicated exchange field. Once the asset is created, edit its Exchange setting any time to switch.If a specific provider needs a different format for that asset (e.g. one of your custom scrapers wants IWDA-AMS), add a per-provider override in the asset's Market Data tab.
- Yahoo Finance — equities, ETFs, crypto, FX, commodities. Default for most users.
- Alpha Vantage, Finnhub, MarketData.app — additional equity coverage (BYO API key).
- OpenFIGI — bond / ISIN lookup.
- Börse Frankfurt — German exchange listings.
- Metal Price API — precious metals spot prices.
- US Treasury Calc — Treasury / CUSIP data.
- Custom providers — point at any JSON, HTML, table, or CSV source. See Custom Market Data Providers.
Per asset you can set a preferred provider and, when a provider needs a non-standard symbol, a per-provider override. The resolver falls through providers based on capability, health, and rate-limit headroom.
- Try the other built-in providers (Alpha Vantage, Finnhub, OpenFIGI for bonds, Börse Frankfurt for DE-listed). Set the asset's preferred provider under Market Data.
- Build a custom market data provider pointed at any public JSON API, HTML page, HTML table, or CSV. No coding required.
SHOP but your custom provider fetches it as SHOP-CA — record the override and Wealthfolio uses it whenever it queries that provider, leaving the canonical symbol untouched.- The provider returned bad or stale data. Check the Health Center — it flags suspect quotes.
- The symbol delisted. Switch to manual quotes in the asset's settings.
- The provider is rate-limited or its circuit breaker tripped after repeated failures. Wait a few minutes; Wealthfolio falls back to the next capable provider when one is unhealthy.
- The provider expects a different symbol than the canonical one — add a per-provider override (see above).
Multi-currency & FX
TRANSFER_IN to move the holdings over (cost basis is preserved).Performance metrics
- Per-account %: money-weighted return (MWR) — captures the impact of your timing decisions.
- Total portfolio %: time-weighted return (TWR) — strips out contributions/withdrawals so it's comparable to a benchmark.
The two can disagree, and that's not a bug. See Performance Metrics for the full breakdown.
- Tiny starting denominator. If your portfolio started at $100 and grew to $50,000, the % return is enormous. Common on long timeframes for recently-funded accounts.
- Manually-quoted asset with a step change. Going from no price to a price creates a one-day jump.
- Bad provider data. Yahoo occasionally returns spurious spikes; the Health Center flags these.
The cost-basis accounting is FIFO. The average cost you see on a holding is just a display figure — the total cost basis of your open lots divided by the shares remaining. It is not a moving-average accounting method, and Wealthfolio doesn't keep a running moving-average price.
This matters when you sell: realized gains close the oldest lot first (FIFO), not at a moving-average price. So in jurisdictions that tax on a moving average — such as Austria's gleitender Durchschnittspreis — Wealthfolio's realized-gain figures will diverge from your tax calculation, and you'll need to reconcile manually.
Moving-average / weighted-average cost (WAC) is planned — additional cost-basis methods will be added in future versions. See Cost Basis & Lots.
Accounts & contribution limits
DEPOSIT activities for the period and compares against the contribution limit you set. Full walkthrough: Contribution Limits.DEPOSIT instead.- Build it as a custom security (a fund-of-funds symbol you update manually).
- Use Account Groups in Settings to roll up performance and net worth across multiple real accounts without double-counting.
Self-hosting & Connect
Fix: stop the container, then:
sudo chown -R 1000:1000 /path/to/your/wealthfolio/dataStart it again. See the self-hosting troubleshooting section.
wealthfolio/wealthfolio on Docker Hub. Pin to a specific tag for production (wealthfolio/wealthfolio:3.4.0) — latest will follow new major versions.WF_OIDC_* variables and set an email/subject allowlist. See the OIDC configuration reference.Addons & AI
.zip file, then Settings → Add-ons → + and select the zip. Wealthfolio will prompt for the permissions the addon requests before enabling it.Troubleshooting
- SmartScreen: click More info → Run anyway.
- Kaspersky / similar: add an exception for the installer.
- Verify the download: compare the SHA-256 hash from releases on GitHub.
- Ubuntu / Debian:
sudo apt install libwebkit2gtk-4.1-0 libsoup-3.0-0 - Fedora:
sudo dnf install webkit2gtk4.1 libsoup3
If issues persist, run the AppImage from a terminal to see the error output and file an issue.
wealthfolio.app (the release feed). If you're behind a corporate proxy, set HTTPS_PROXY in your environment. Worst case, download the new version manually from GitHub releases.- Windows:
%LOCALAPPDATA%\com.teymz.wealthfolio\logs - macOS:
~/Library/Logs/com.teymz.wealthfolio - Linux:
~/.local/share/com.teymz.wealthfolio/logs
Attach the relevant log when filing an issue.
- Update to the latest version.
- Restart the app.
- Check your internet connection.
- Trigger a manual refresh — hover over the total value on the home page and click Update Portfolio.
- Open the Health Center — it'll flag stale quotes or data inconsistencies.
- First row of the CSV is headers, not data.
- UTF-8 encoded, comma-separated, no smart quotes.
- Strip
$, currency symbols, and thousands separators from numeric fields. - Dates in ISO-8601 (
2025-03-15) or a format the mapping step recognizes. - Activity types and symbols mapped correctly in the preview step.
- For cash activities, the
amountcolumn is filled in.
Full reference: CSV Import.