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.
?portfolio= URL format (see
About below), which these positions are stored compatibly with.| Ticker | Account | Date | Shares | Price/Share | Total Cost |
|---|
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.