The model#
Everything Pyx knows about your portfolio lives in a single database file in a private folder on your computer. Accounts, holdings, transactions, price history, settings. None of it is uploaded anywhere. There is no Pyx cloud, no account, and no password. A license key unlocks brokerage sync; the rest of the app needs no key.
There are no ads, no analytics, and no telemetry. Crash information stays on your disk, and you decide whether to share it. The only personal data tied to your subscription is your email, and that is held by Polar, the payment provider, not by Pyx.
Encryption at rest#
The database is encrypted by default. Nothing to turn on. When you quit Pyx, it encrypts the database and leaves only the scrambled file on disk. When you launch again, it decrypts and opens. Someone who copies the file off your disk cannot read it.
The key is created automatically and lives in your operating system's keychain, the same vault your computer uses for saved passwords. There is no passphrase to set. Force quits and crashes are safe: the working copy survives, and the next normal quit encrypts it again.
If you would rather store the database unencrypted, turn Database Encryption off under Settings > Privacy. The Privacy panel always shows the real state for your current session, including the rare case where an unavailable keychain forces plaintext.
Secrets live behind the keychain#
Brokerage secrets never touch a plain file. When you link an account through SnapTrade, Pyx holds only a read secret. That secret, your license key, and your entitlement token live in a small encrypted secrets file next to the database, sealed with the same key the keychain holds. Writes go to a temporary file and rename into place, so a plaintext copy never exists on disk. Sensitive values are wiped from memory after use.
The network allowlist#
Pyx enforces a strict allowlist in its networking layer. The app can connect to nine hosts, covering six services. A request to any other address is refused by the software itself and logged.
| Host | Service | Purpose |
|---|---|---|
query1.finance.yahoo.com | Yahoo Finance | Prices, history, and daily FX rates |
query2.finance.yahoo.com | Yahoo Finance | Quotes and fundamentals |
fc.yahoo.com | Yahoo Finance | Auth cookie for sector profiles |
api.snaptrade.com | SnapTrade | Read-only brokerage sync |
license.pyx.finance | License service | Subscription check |
pyx-license.fly.dev | License service | Fallback host |
www.pyx.finance | Update check | About once a day with no identifier. Starting an update posts your license key to mint a download link |
release-assets.githubusercontent.com | Update download | Only when you start an update |
data.sec.gov | SEC EDGAR | Filings index and ten years of fundamentals for the research page |
Market data requests carry only the ticker symbols and currency pairs you look at, never your holdings or identity. EDGAR requests carry the company identifier for the ticker you open plus the app version and a support address in the User-Agent, which the SEC requires of every client. Filing documents themselves open in your browser, never inside the app. The license service is stateless and stores no personal data. The daily update check carries no identifiers and has no off switch; Settings > About shows the result and offers a manual check. Starting an update sends your license key so the site can hand back a short-lived download link. Payment happens separately in your browser through Polar, so card details never touch the app.
The allowlist is enforced in code, not by a setting. There is no telemetry host on the list, so even a bug could not phone home.
AI agent access is local and off by default#
Pyx can expose your portfolio to AI agents over MCP, and the design deserves a privacy summary of its own:
- The switch lives in Settings > AI Agents and defaults to off. Five capability toggles scope what a connected agent can reach; they start enabled the first time you turn agent access on, and you switch off what you do not want.
- Agents connect through a same-user local socket. Nothing listens on the network, and enabling agents adds no hosts to the allowlist above.
- Portfolio data is read-only to agents, enforced down to the database connection itself. Agents can write only notes and tags.
- Account numbers are masked before they cross the boundary, and no secrets, keys, or credentials are reachable by any tool.
- Every tool call shows in the activity feed in Settings > AI Agents. Every session and every change an agent makes is written to the audit log.
What the agent does with data it reads is governed by the AI tool you connect, so point Pyx only at clients you trust.
Brokerage access is read-only#
You log in to your broker inside SnapTrade's own secure page in your browser. Pyx never sees your brokerage username or password. The link Pyx receives can read positions and activity. It cannot trade, and it cannot move money.
The activity log#
Every meaningful change to your data is recorded: syncs, imports, exports, deletions. Expand the log from the arrow at the right of the status bar. It is your paper trail of what the app did and when.
Export and backup#
You own the data. The whole portfolio is one database file you can copy to back up or move machines. Views like Transactions export their current contents to CSV. Export before any destructive step.
Reset all data#
Settings > Privacy has a Reset All Data button. It deletes accounts, holdings, transactions, price history, and linked credentials, and keeps your theme and keyboard settings. It cannot be undone, so Pyx makes you type a confirmation word first.
What Pyx does not do#
- It does not send analytics or usage data anywhere.
- It does not report crashes to a server.
- It does not sync to any cloud.
- It does not place trades or move money. It can only read.
The legal documents#
This page is the plain-terms version. The formal commitments live in the Privacy Policy and Terms of Service. The privacy policy lists the same nine hosts described above.