Portfolio

Positions are stored in this browser's local storage only. · Main Overview · Heatmaps · Data & API

Import from CSV

Reads a brokerage "Order Status" export directly in the browser -- nothing is uploaded anywhere. Only settled Buy rows become positions -- Status must be Filled or Completed; a canceled order, a sell, or anything still pending (accepted but not yet executed, so there is no real fill price or trade date yet) is reported and skipped rather than added. The account name is taken from the file name itself (everything before _Order_Status_…), so name the file after the account before importing if your broker's default name is not what you want to see in the table. Re-importing a file that repeats an order already in your saved positions (same ticker, account, date and size) leaves that row unchecked by default -- a genuinely different order for the same ticker is left checked as a new lot.

Add Position Manually

Total: -
Account names may only contain letters, digits, hyphens and underscores -- spaces, commas, semicolons and pipes are replaced with underscores automatically. That restriction comes from the dashboards' own ?portfolio= URL format (see About below), which these positions are stored compatibly with.

Positions

No positions yet.
Ticker Account Date Shares Price/Share Total Cost

About This Page

Where this data lives: positions are held only in this browser's localStorage, under the key v3_portfolio -- not a cookie, and not on the server. Nothing typed or imported here is ever uploaded anywhere. localStorage is scoped to this site as a whole (not to one page's folder the way a cookie can be), so every dashboard on this site -- Main Overview, Heatmaps, Data & API, and this page -- reads the same saved positions. It is still per-BROWSER, per-DEVICE storage: positions saved here will not appear if you open these dashboards in a different browser or on a different computer, and clearing this browser's site data removes them.

Main Overview and Heatmaps both read these saved positions automatically -- gold highlighting, the "Portfolio only" filter, and Main's Position column family (cost, market value, gain/loss) all pick them up with no URL parameter needed. An explicit ?portfolio= in the URL still wins when present (it is a one-time override, e.g. for a link you hand someone else), and falls back to these saved positions when it is not there. The two are encoded identically on purpose:

TICKER|ACCOUNT|YYYYMMDD|SHARES|COST,TICKER|ACCOUNT|YYYYMMDD|SHARES|COST,...

Unlike a cookie (roughly 4KB), localStorage has no meaningfully tight size limit for this purpose -- browsers typically allow several megabytes per site, thousands of times what even a very large multi-account import would encode to. The Positions section still shows the current encoded size for reference.