Three ways to get your portfolio in#
Pyx is empty until you give it data. There are three paths, you can mix them, and you can add more accounts later.
| Path | Best for | Effort |
|---|---|---|
| Link through SnapTrade | Brokerages with a supported connection | One-time login, then automatic |
| Import OFX, QFX, or CSV files | Offline setups, unsupported brokers | A file per statement period |
| Enter by hand | Small or unusual accounts | Manual |
Option 1: Link your brokerage through SnapTrade#
SnapTrade is a connection service that specializes in investment accounts. Pyx uses it to pull holdings and transaction history and keep them fresh.
How linking works#
- Open Settings from the sidebar and choose the Accounts panel.
- Click Add Account. Your browser opens the SnapTrade Connection Portal.
- Pick your brokerage and log in there. You are logging in to your broker through SnapTrade. Pyx never sees the login.
- Return to Pyx. It notices the new connection on its own. Nothing to paste back.
- A first sync loads accounts, holdings, and about two years of transaction history. A long history takes a moment.
Linked accounts appear in the Accounts panel with type, name, and last-synced time. You can rename any account and give it a color, and future syncs will not overwrite your choices.
What the link can and cannot do#
- The connection is read-only. Pyx can see positions and activity. It cannot trade or move money.
- Your broker credentials are handled by SnapTrade, never stored by Pyx. Pyx keeps only a read secret, stored in an encrypted secrets file whose key lives in the operating system keychain, never in plain text.
- Stocks, ETFs, mutual funds, bonds, options positions, and cash all come in.
- Accounts holding cash in several currencies keep each balance in its own currency, and the broker's currency-conversion rows are not counted as deposits or withdrawals.
- History backfill reaches back about two years. Older transactions arrive only through file import.
Supported brokerages#
SnapTrade publishes the list of institutions it connects to. As of September 2026 it covers the following, and the connection portal always shows the current list when you link.
| Region | Brokerages |
|---|---|
| United States | Alpaca, Chase, Citi, E*TRADE, Edward Jones, Empower, eToro, Fidelity, Interactive Brokers, Moomoo, PNC, Public, Robinhood, Schwab, tastytrade, TIAA, TradeStation, Tradier, Transamerica, U.S. Bank, Vanguard, Webull, Wells Fargo |
| Canada | BMO InvestorLine, CIBC Investor's Edge, Questrade, TD Direct Investing, Wealthsimple, Webull Canada |
| United Kingdom and Europe | AJ Bell, BUX, DEGIRO, Trading 212 |
| Australia | CommSec, Stake |
| India | Upstox, Zerodha |
| Crypto exchanges | Binance, Coinbase, Kraken. These connect, but Pyx has no crypto asset class and does not price exchange balances. |
Coverage is set by SnapTrade and changes over time. If your broker is missing, file import covers it.
When a connection breaks#
Brokers expire connections periodically. When that happens, the Accounts panel shows a banner with a Reconnect button that repairs the existing link in place, without creating a duplicate. After a reconnect, brokers rebuild transaction history over several hours, so recent transactions can lag behind holdings for a while. Pyx keeps re-syncing until the backlog lands.
If linking reports that it is not configured for your build, use file import or manual entry instead.
Option 2: Import statement files#
Every broker can export a file, and Pyx reads three kinds fully offline:
- CSV: plain spreadsheet exports. Import them inside the app.
- OFX and QFX: the standard "download to Quicken" files. They carry accounts, holdings, and transactions, and keep the currency the file declares. Import them with the
pyxcommand line tool.
Import a CSV in the app#
Open the command palette with CmdK and run Import CSV. A file picker opens, you choose the export, and the rows land in your ledger. The import is recorded in the activity log, and files are deduplicated by content, so importing the same statement twice does not double your history.
CSV layouts vary by broker. If your export does not map cleanly, a short TOML mapping file tells Pyx which column is the date, ticker, and amount. A Currency column is honored when present; rows without one take the account's currency. See configuration.
Import OFX or QFX with the CLI#
The desktop app does not read OFX files yet. The bundled pyx command line tool does:
pyx import ofx statement.ofx
pyx import ofx statement.ofx --commit
Without --commit the import is a dry run: it prints what would be created, accounts, holdings, and transaction counts, without touching the database. Add --commit and everything applies in one atomic step. If anything fails, nothing is half-imported. The same subcommand exists for CSV files.
Option 3: Enter accounts by hand#
For anything that cannot link or export, add the account manually. Manual accounts behave like every other account once they exist: same views, same math, same charts.
How Pyx keeps data fresh#
Two background behaviors keep the numbers current while the app is open:
- Background sync refreshes holdings and transactions on a schedule, every 5 minutes by default while the market is open. Change the interval under Settings > Network, or force a sync any time with CmdR.
- Live prices are polled for what you are currently viewing during market hours. Closed market or no network, and Pyx simply shows the last synced values.
Last-sync times live in the status bar and under Settings > Sync. Details on cadence and sources are in data and sync.
What never leaves your machine#
Your holdings and history live in an encrypted SQLite database on disk. Outbound traffic is limited to an allowlist: SnapTrade for account sync, Yahoo Finance for prices and FX rates, and SEC EDGAR for research data. Yahoo and EDGAR receive ticker symbols only, never who you are or what you hold. The full model is documented in privacy and security.
Next: get around the interface.