Skip to content
investiDocs

Settings

The Settings screen: importing history, uploads, the playbook, memory, sample data, Schwab, Claude, extension and API tokens, strategy rules, preferences and data source status.

On this page

Reporting period and missing basis#

In Preferences, set Reporting start date. It defaults to January 1, 2026. Realized P/L, cash income, tax summaries, performance comparisons and missing-basis checks use this period. Earlier imports remain available for matching purchase lots; changing the date does not delete history. Lifetime columns remain lifetime figures.

Missing cost basis lists affected transactions since that date. Enter the total acquisition basis in dollars for all shares in the row, including opening fees, and select Save basis. For a sale, enter the basis of the shares sold, not the remaining position. You may provide the acquisition date; leave it blank if unknown. A known gain without a known acquisition date appears under Acquisition date unknown in tax reporting, rather than being assigned a short- or long-term rate. Corrections and removals are audited; the imported execution is preserved. Reports recalculate after saving.

Account valuation defaults to Schwab snapshot: equity comes from the latest broker balance, and position value and unrealized P/L use the synced position marks. Current quotes revalues positions using the quote feed and may differ from Schwab. Fresh quotes do not refresh old share counts or cash.

Settings is where data comes in and where you control how Investi computes. It holds imports, connections to Schwab, Claude and the browser extension, your versioned strategy rules, display and accounting preferences, and a live status table for every data source.

Open it from the account menu (top right), the mobile "More" menu, or the command palette. The page is grouped into five short sections, Data in, Strategy, Connections, Display and Data sources, and the rail on the left (a strip on phones) follows them. Explanations sit behind the (i) beside each heading or field, and the longer ones (supported files, MCP setup, the digest payload, what Schwab access covers) open in a drawer. Every list on the page is a table you can sort and filter by any column. Each section has an anchor you can link to directly.

Anchor Section
/settings#data Import Schwab history, and sample data
/settings#verdicts Import verdict history
/settings#uploads Uploads
/settings#policy Strategy rules
/settings#playbook Playbook
/settings#memory Memory
/settings#connections Schwab (#schwab), Claude (#mcp), browser extension and API tokens (#tokens)
/settings#digest Weekly digest webhooks
/settings#appearance Theme and Large text
/settings#preferences Preferences
/settings#status Data sources and status

Import Schwab history#

Choose the export type first:

  • Transactions history (Schwab: Accounts > History > Export) builds the full ledger: buys, sells, dividends, fees, margin interest and deposits.
  • Positions snapshot (Schwab: Accounts > Positions > Export) supplies broker-reported cost basis, cash and margin. Investi reconciles it against your fills and flags gaps.
  • Orders (Schwab: Trade > Order Status > Export) brings in working, filled, canceled, expired and rejected orders. Use it when Schwab's API returns no orders, which happens for accounts not enabled for thinkorswim. An Order Status file is recognized from its header even if another type is selected. /settings?import=orders#data opens the panel on this type.

Pick an Account, or + New account to create one with a name and optional last four digits. Then drop a file on the box or press Choose file. Upload goes to POST /api/v1/imports.

The result shows records imported, duplicates skipped, rows read, the detected format and the coverage dates (for orders: new, updated and unchanged orders). Unrecognized symbols are listed and not imported. Row-level notes from the importer are under an expandable list, with errors in red.

Supported files: Schwab History CSV and JSON (current and legacy layouts), Schwab Positions CSV, Schwab Order Status CSV, or any CSV with date, side, symbol, quantity and price columns. XLSX and PDF statements are not parsed. Re-importing overlapping files is safe because each row has a fingerprint. Full walkthrough: /docs/getting-started/import-history.

Sample data#

Load sample account adds an account named "Sample account (not real)" with fills on real historical prices. When it is loaded the button becomes Remove sample account (DELETE /api/v1/sample). See /docs/getting-started/sample-data.

Import verdict history#

Bring in the verdicts you already keep in a spreadsheet tracker. Drop the file (.xlsx or .csv) on Import verdict history (/settings#verdicts) or press Choose file. Columns: Ticker and Verdict, with optional Date and Notes. Each row becomes your dated review of that name, so Discover shows it as Unchanged or Changed, and the result lists how many were imported and every row that was not, with the reason. Upload goes to POST /api/v1/imports/verdicts. Accepted headers, verdict words and dates: Import history, verdict history.

Uploads#

Drop any file up to 20 MB on the box, or choose files. Investi checks each one and says what it did: a Schwab export is imported, a screener export is saved as candidates, a strategy document goes to the playbook, and anything else is summarized and kept for the chat. The list shows every upload with its kind, size, date, status (Done, Stored, Could not read or Failed) and the one-line result, with the summary folded under it. Use as playbook reads a stored document as a strategy. Delete removes the file and what Investi remembers from it; records it imported stay until you delete their batch under Import history. See Uploads, playbook and memory.

Playbook#

Your rules, numbered, each tagged Guides analysis or Proposed setting. A proposed setting shows its strategy-rules field with the current and proposed values and an Apply button, or In effect once the policy has that value. Edit and Delete change one rule, Add rule writes a new one, History views an earlier version with Restore this version, and Clear playbook empties it. Every change is a new version. See Your playbook.

Memory#

What Investi remembers about you, newest first, each line with its source (Upload, Chat, Playbook or You) and date. Add a line in the box at the top; Edit or Remove any line; Recently removed has an Undo for each; Clear memory asks once and offers Undo right after. The panel title says whether memory is stored in Investi or synced with Supermemory. See Memory.

Connections#

Schwab#

If the server is missing Schwab configuration, the panel lists the missing variables and links to Schwab's Trader API (Individual) page; CSV imports work in the meantime. Once configured, Connect Schwab starts Schwab's OAuth flow at /api/schwab/connect. When connected you get Sync now (reports positions, orders and new trades synced), Disconnect, and the last sync time. Schwab requires re-authorization every seven days. Returning from Schwab shows "Schwab connected and synced." or the error.

Access is read-only: accounts, positions, balances, orders and transactions; the panel's Details drawer lists exactly what is requested. Tokens are encrypted at rest. Synced accounts and the last 12 sync runs (Started, Trigger, Took, Status, Error; open a run for each request) are sortable, filterable tables. See /docs/getting-started/connect-schwab.

Claude (MCP)#

Shows your server URL ({origin}/api/mcp) with a Copy button. In Claude, open Settings > Connectors > Add custom connector and paste it; Claude then opens an Investi consent screen where you choose scopes. On a localhost address a warning notes that Claude's cloud connectors need a public HTTPS deployment, while Claude Code and Claude Desktop can use localhost.

Connected applications and personal tokens share one table (Name, Kind, Scopes, Created, Last used, Status with Revoke). A link opens the OpenAPI document at /api/v1/openapi.json. See /docs/integrations/mcp.

Browser extension and API tokens#

The page checks for the Investi Chrome extension:

  • Not installed: links to /downloads#extension, with Check again.
  • Different address: the extension points at another Investi URL; change it in the extension's options.
  • Installed or Connected: Connect extension (or Reconnect) creates a token with market:read, portfolio:read and research:read and hands it to the extension in one step. If the extension refuses, the token is deleted.
  • In browsers that cannot talk to Chrome extensions, create a token and paste it into the extension's options.

Create token makes a personal access token with the same three scopes. It is shown once; Investi stores only a hash. Existing tokens are in the same table, each with Revoke. See /docs/integrations/chrome-extension and /docs/integrations/rest-api.

Digest#

Register up to three HTTPS URLs to receive the weekly digest (the weekly review, the P/L breakdown and the order risk sweep as one JSON document) every Sunday at 22:00 UTC. Paste the URL and choose Add webhook: the signing secret is shown once, so copy it into your receiver. Webhooks are a table (URL, Status, Last delivery, HTTP, Error); Test delivers this week's digest now, and Remove deletes it. Addresses must be public https URLs. See Digest and webhooks for the payload and how to verify the signature.

Strategy rules#

The panel title shows the current version, for example "Strategy rules · v3". Beside it are the policy name and when it was saved ("defaults" if you never saved). Every framework threshold has a numeric field with its unit and an (i) holding its explanation, grouped into eight sets: Quality bar, Size and liquidity, Entry gate, Low stability, Exit, Market regime, Earnings and 7-day estimate and Portfolio risk. A field you changed from the framework default shows a Reset to link with the default value, and a line next to the save button counts how many thresholds differ from the defaults. The thresholds and their defaults are described in /docs/strategy/rules.

Hard rules are shown as Blocked in Discover. Add one by picking a type (Exclude sector, Exclude industry containing, Exclude ticker, Min market cap ($), Min share price ($)), entering a value and pressing Add rule. Remove one with its ×.

Save new rules version sends PUT /api/v1/policy. Every save creates a new immutable version. Prior verdicts keep the version they were computed under, and names re-evaluate as Changed. See /docs/concepts/verdicts-and-policy.

Appearance#

Theme: System (follows your device and switches with it), Light or Dark. Text size: Normal or Large, which shows every page at 125%: text, numbers, tables and buttons. Both are saved in this browser and apply to every open tab.

Preferences#

Field Effect
Table density Comfortable (34px rows) or Dense (28px rows).
Reporting lot method FIFO (default), LIFO or HIFO. Executions are never changed; only lot matching for reporting.
Benchmark Ticker for the dollar-matched comparison (SPY by default).
Maintenance requirement (%) 0 to 100. Enter only a value verified with Schwab. Blank keeps margin-call and forced-sale estimates hidden.
Use Schwab's requirement when synced Uses the rate implied by Schwab's reported maintenance requirement (dollars over gross positions on your latest synced balance). Your entry above is kept and used whenever Schwab's figure is missing.
Margin interest rate (%/yr) Drives the daily interest estimate.
Short-term tax rate (%) Estimated rate on gains held a year or less, 37% by default. Drives the estimated tax impact on History.
Long-term tax rate (%) Estimated rate on gains held more than a year, 20% by default.
Screener: min market cap ($) Universe floor for Discover scans.
Screener: max names per scan 400 by default; each name needs one price-history request.
Candidates: near low within (%) Names this close to their 52-week low become Near low candidates. 10 by default.
Candidates: big drop of at least (%) One-day decline that makes a Big drop candidate, together with the floor and the quality gate. 10 by default.
Candidates: big drop min market cap ($) Floor for Big drop candidates. $2,000,000,000 by default.
Candidates: new for (days) A name first seen within this many days counts as new. 7 by default. See Candidate sources.

Save preferences sends PUT /api/v1/settings.

Data sources and status#

A sortable, filterable table probes each source when the page loads and marks it Available or Unavailable (open a row for its full note): Nasdaq (quotes, history, calendars, analyst consensus; delayed about 15 minutes, with response time), SEC EDGAR (filings and financials), the Schwab Trader API, AI explanations (Claude, when configured), and the database (Postgres or embedded PGlite, with the cached response count). Real-time quotes, Level II, licensed news, individual analyst firm targets and options, futures or FX data are never shown or approximated. See /docs/concepts/data-sources.