Help & documentation Calculator guide

How to read the stock & ETF portfolio tracker

Record stocks, ETFs, transaction cash flows, and dated acquisitions; replay a ledger against raw historical closes; and inspect current value, allocation, daily movement, and unrealized gain or loss without connecting a brokerage account.

What it calculates

For each holding, the tracker multiplies shares by the latest saved close to calculate current value. When an average cost is available, it also multiplies shares by that amount for known cost basis and subtracts that basis from current value for unrealized gain or loss. When a previous close is available, the difference between the two closes is multiplied by shares for the holding’s daily move.

Allocation divides each holding’s current value by the complete active portfolio value. The concentration summaries keep the largest holding, top three, and top five measured against the whole portfolio, while a Top N control limits the equities shown in the sortable table.

Questions it answers

What is the portfolio worth?

Portfolio value is the value of supported stocks and ETFs. Transaction cash flow remains visible as event metadata and is not included in the total.

Where is the money concentrated?

Allocation puts the Top 3 and Top 5 summaries first, then shows the selected Top N equities in an exact sortable table. Each position’s percentage still uses the complete portfolio.

What has gained or lost value?

Known cost basis and unrealized gain / loss compare current value with the average cost you entered, in dollars and as a percentage of that known cost. The gain chart selects the Top N equities by current value, then orders them by gain amount or gain percentage.

What drove the latest daily move?

Day change compares the latest close with the previous close. The movers view places both the strongest Top N and weakest Bottom N equities in one chart, shown in dollars or percentages.

How do stocks and ETFs compare?

The type summary keeps stock and ETF totals separate for value, allocation, daily change, known cost basis, and unrealized gain or loss.

How do separate portfolios compare?

Up to five independently saved portfolios can be named, colored, reordered, and compared side by side. A new Portfolio tab starts empty rather than copying the active one.

Major inputs

Holding and type
The ticker, name, listing exchange, and whether the position is a stock or ETF. Search can supply these details when market lookup is enabled, or they can be entered manually.
Shares
The number owned, including fractional shares. Zero shares leave a holding in the list with no current value.
Average cost
The average amount paid per share as entered by you. It is optional and drives the tracker’s known cost and unrealized result.
Latest close
The latest known USD closing price per share. It may come from a saved provider response, manual entry, or the shipped introductory sample.
Previous close
The prior session’s USD close. When it is missing, the daily dollar and percentage movement remain unavailable rather than being guessed.
Price date
The session date attached to the saved close. A manual date describes the price you entered; a matched quote uses the provider’s session date.
Portfolio tabs
Each tab owns its own holdings, opening state, transactions, and quotes. Names, colors, ordering, and the active tab are saved locally.
Holding filters
Stock and ETF switches limit per-holding tables and charts. Independent Top N controls limit the Value, Unrealized gain / loss, Cost versus value, and Allocation views by current value. These controls do not change complete portfolio totals or the Stock-versus-ETF summary.

Importing a brokerage positions CSV

The tracker recognizes Fidelity, Vanguard, and Schwab positions exports. Choose Import on the Holdings heading, select the downloaded file, then review the detected accounts and equities before anything is saved. The file is parsed locally in the browser and is not uploaded.

Fidelity

Download the positions CSV from the Portfolio Positions page. The importer accepts the regular positions columns, including the 2026 capitalization changes, and uses Cash, Margin, or Financing only to distinguish separate position rows.

Vanguard

Use the CSV whose positions section starts with Account Number, Investment Name, Symbol, Shares, Share Price, and Total Value. A later transaction section in the same file is ignored.

Schwab

Export Positions from the Positions view. Aggregate and lot rows are retained separately when the file supplies a lot or acquisition-date discriminator.

With several accounts, check the accounts to combine in the current portfolio or create one portfolio per account name. A file can update a matching imported row or a likely symbol match, but it never removes a saved holding merely because that holding is absent from the new file.

Recognized options, cash and money-market balances, crypto, mutual funds, fixed income, futures, pending activity, totals, and short positions are excluded. A supported description containing ETF defaults to ETF; other equities default to Stock. Selected accounts appear as collapsible groups where every classification can be reviewed, changed, or skipped. Any unresolved row is highlighted and must be classified or skipped before import.

Starting and maintaining Portfolio history

Portfolio history begins when transactions are added or imported. Shares and weighted-average basis are derived from the ledger. Exact transaction cash flow remains visible for context but is not accumulated into an available-cash balance. Buys, sells, deposits, withdrawals, dividends, reinvestments, interest, fees, splits, transfers, and adjustments can be created or edited manually.

Adding a holding requires positive shares and a purchase date; average cost may be left blank when basis is unknown. The tracker records the opening position as a zero-cash adjustment, separately from the latest market-close date.

Fidelity, Vanguard, and Schwab transaction CSV files are parsed only in this browser. Exact signed cash amounts are retained, overlapping reimports are deduplicated, and account numbers are masked. Options, shorts, collateral or securities-lending activity, crypto, fixed income, mutual funds, and unsupported corporate actions are left in the review summary and mark the affected account history incomplete.

Portfolio value history uses raw Marketstack USD closes, split-adjusted share counts, and explicit ledger dividends. Provider splits are applied before same-day user transactions. Weekends, market holidays, and provider-confirmed missing sessions carry the latest earlier close forward; no price is invented before an equity’s first known close. Drag across either history chart to compare its start and end values; click the chart again to clear the selected range.

The Equity history section shows historical position values or split-adjusted stock prices. Stock-price mode divides every earlier raw close by all later provider split factors, including compounded forward and reverse splits, but does not adjust for dividends. Provider split markers are display-only and never add or change ledger transactions. By default the chart fixes the named lines to the current Top N equities by allocation and combines every remaining equity into Other at each historical date. Checking an individual equity exits Top N and updates both the chart and exact table; every checkbox may be cleared for an empty view. Hovering or focusing a legend equity emphasizes its line, and its remove button keeps the remaining lines as individual selections. The table lists current shares, value, allocation, and 5-day, 1-month, 3-month, 1-year, and 3-year changes for the selected equities. In portfolio-value mode, All measures the position-value change from that equity’s first purchase through the latest close; stock-price mode omits All because it is not tied to the portfolio’s purchase history.

Equity performance compares split-adjusted price growth without portfolio shares or dividends. Every selected equity starts at 0% on its first usable close in the chosen range, so later listings can join without inventing an earlier price. The legend, keyboard and pointer exploration, drag selection, chart visibility, table configuration, and section export behave like Equity history. Ending badges identify the strongest visible results while the exact table records start and end prices, price change, and performance.

Portfolio performance groups returns into adaptive calendar periods: daily for 5D, weekly for 1M, monthly for 3M and 1Y, quarterly for 3Y, and yearly for All. Whole portfolio uses a chain-linked investment return that neutralizes security flows, counts recorded income, and deducts fees; the black line uses its own currency axis for securities balance. Selecting equities switches to grouped, color-coded price-return columns and removes the balance line. Monthly, Quarterly, and Yearly tabs independently control the detailed table and its exports. A portfolio without a transaction ledger is explicitly shown as a Current-holdings backcast.

Expanding a holding opens Overview by default. Its instrument-level mini chart has independent value and range controls, the same point and drag-selection details as Equity history, and stays configured while the row is collapsed. Transaction ledger shows the existing account-specific ledger table and its column settings. Overview also loads a bounded public Marketstack company profile on demand; sparse ETF and manual-holding details remain explicitly unavailable.

Transaction Kind and Equity filters accept several choices and combine with AND semantics. Main transactions, each expanded holding ledger, Equity history, Equity performance, and Portfolio performance can be sorted by clicking a heading or reordered by dragging headings; the expanded-ledger order applies to every holding.

Reading the results

Portfolio value
The current value of every non-archived stock and ETF, using each saved latest close. Cash flow is not included.
Known cost basis
Shares multiplied by entered average cost, summed only where that cost is known. If any holding lacks cost, the page identifies the total as incomplete.
Unrealized gain / loss
Current value minus known cost basis. A positive amount is above entered cost and a negative amount is below it; it is not a realized or taxable gain.
Day change
The current portfolio value minus what the same shares were worth at their previous closes. Missing previous-close data makes the aggregate unavailable.
Value and cost charts
Per-holding views compare position size, known cost, gain or loss, and daily movers. The gain and cost-vs.-value charts select the Top N equities by current value before applying their display order. The gain chart can order by dollars or percentage. Cost and current value share one holding label beside their grouped horizontal bars, while the tooltip shows both gain measures. Missing basis omits only the cost-dependent mark, not the holding’s value.
Allocation
Every percentage and concentration summary uses the complete active portfolio as its denominator. The selected Top N equities appear individually, while everything outside the current type or Top N filters appears as Other in the exact table.

Use the portfolio comparison for top-level totals, then return to one active portfolio for holding-level detail. A large gain or one-day move can be driven by position size as much as by percentage performance, so read both views together.

Worked example

Hypothetical: the four sample holdings

The shipped sample contains eight shares of AAPL at a $190 average cost and $230 latest close, five shares of MSFT at $410 and $520, twelve shares of VTI at $285 and $320, and four shares of QQQ at $500 and $570. Its saved prices are illustrative rather than current market quotes.

Portfolio value$10,560
Known cost basis$8,990
Unrealized gain / loss$1,570, or about 17.5%
Day change+$35 from the saved previous closes

VTI is the largest position at $3,840, about 36.4% of the portfolio. The two ETFs total $6,120 and the two stocks total $4,440. That describes this hypothetical snapshot; it does not say whether the allocation is suitable or diversified enough for a particular investor.

Assumptions and limitations

  • Prices are end-of-day closes, not real-time quotes. A failed lookup or refresh keeps the previously saved values rather than erasing them.
  • The tracker accepts up to 250 long, USD-denominated stock and ETF position rows and 2,000 compactly persisted ledger transactions per portfolio. It has no currency conversion, live brokerage connection, bond, option, mutual-fund, crypto, or short-position valuation model.
  • The entered or imported average cost is a tracking input, not tax-lot accounting or reconciliation. Actual adjusted basis can include commissions, reinvested distributions, transfers, corporate actions, and lot-selection rules. Consult brokerage records and current tax guidance for reporting.
  • When cost is unknown, unknown cost is not treated as zero. Cost-dependent gains remain unavailable so a partial basis cannot be mistaken for a complete result.
  • The seven-day path beside a holding and displayed stock-price histories use split-adjusted closes. Cached raw closes and split factors remain unchanged for ledger replay. Portfolio and Equity history carry the latest earlier close through missing calendar sessions, while the assumptions section identifies affected data.
  • Stock and ETF filters change holding-level value, gain, cost, allocation, and day-mover views; they do not change complete portfolio totals or the type summary.
  • Portfolio names, holdings, ledgers, masked imported-account labels, filters, quotes, colors, and display choices stay in this browser. Brokerage CSV files are not uploaded and full account numbers are not saved. Only public instrument identities and date ranges reach the market-data service; public prices, split factors, and company profiles may be cached in browser IndexedDB, Cloudflare’s edge cache, and D1.
Concentration is a prompt for review, not a verdict. A large allocation can reveal reliance on one position, but an ETF can itself hold many securities and several funds can overlap. Review the investments inside a fund before treating the number of visible rows as diversification.

Calculations are estimates for planning and education, not personalized financial, tax, legal, or investment advice. Quotes may be delayed or unavailable. Read the Financial Disclaimer.

Sources and further reading

Sources reviewed August 2026. These sources explain investing and recordkeeping concepts; they do not endorse this tracker or its assumptions.