Portfolio and cash

The dashboard is the app's home screen: what you're worth today, how you got here, and where it's all invested. This page walks it top to bottom, then covers the two things behind it that are worth understanding — cash and prices.

Reading the dashboard

The headline

Total portfolio value, the date your holdings are priced at, and the change over whichever period the chart is showing. A small sparkline on the right shows the shape of the last year.

Holdings priced at the close of Aug 21, 2026

That date is the oldest last close among the securities you currently hold — the day on and after which the total stops being fully backed by real prices. If most of what you hold is priced through last night's close but one holding you added this morning is still backfilling and only has prices through Friday, it says Friday, because Friday is what is true of the whole number. A holding with no prices at all isn't a date and isn't counted here; the price banner is what tells you about that one.

There is deliberately no "what it moved today" figure. A day's change is computed from two consecutive days of closing prices, and a market only produces one close a day — in the evening, hours after the day it belongs to has finished trading. So for most of any given day the two most recent points carry the same price, and the figure reads as no movement whether or not anything moved; the real close-to-close move has already happened, one point further back, where nothing was showing it. Rather than show a number that can only mislead, the dashboard tells you how current the prices are and leaves the day trading to somewhere else. For what happens over decades rather than hours, that's the plan.

Portfolio value

A chart of your value day by day, reconstructed from balances, trade history, and historical prices — not a log of snapshots. Range pills run 1M · 3M · 1Y · 5Y · All, defaulting to 1Y. A range with fewer than two points says so rather than drawing a flat line.

The chart shows history only. For what happens next, see the retirement plan — it runs thousands of simulations over your real allocation, spending, income and taxes rather than compounding a single assumed return forward.

Asset allocation

A donut across US stocks, Intl stocks, Bonds, Cash, Crypto, and Real estate & alt, with a legend giving each one's value and share.

If any account is on margin, a line below the donut names it — the debit is excluded from the slices, which show what you hold, but subtracted from your totals.

By security

Break this down by security opens a stacked area chart of the securities you held on each day. It follows the same range pills as the value chart, shows at most eight bands and folds the rest into Other, and deliberately excludes cash — so the bands sum to what your securities were worth, not your portfolio total.

It's computed in your browser rather than on the server, from data the dashboard already has, so opening it and switching ranges are both instant.

Accounts, top holdings, and the plan

Your accounts, grouped and totalled, each with its value. An account with no known value shows an em-dash rather than a misleading $0.

Top holdings aggregates the same symbol across accounts and shows your six largest. Only holdings-tracked accounts appear here — cash isn't a holding, and options are kept separate from the equity of the same ticker.

The plan card is a preview of the retirement plan, or a row of em-dashes until you've made one.

It updates itself

If another member of the household imports a file, or a price refresh finishes, the dashboard follows along without a reload.

Cash

Cash is part of a holdings account's value, not a footnote to it. It's signed: positive cash is money waiting to be invested and adds to the account's value, negative cash is a margin debit — money borrowed against the account — and subtracts from it.

Only holdings-tracked accounts have cash. A balance-tracked account's balance already states its whole value, so adding a cash figure on top would count it twice.

Anchor plus running delta

Cash comes from two places, and the way they combine is the thing to understand:

  • Derived. Every trade carries its own signed cash impact — a buy is negative, a dividend positive, a transfer whichever you wrote. Add them up and you have a balance, with no input from you at all.
  • Asserted. You state a balance: "cash was $12,400 on 30 June". That becomes an anchor.

From then on:

cash = the anchor, plus every trade dated after the anchor's date

That's the whole rule, and it has some useful consequences:

  • Stating a balance re-bases; it doesn't override. Your figure is exactly right on the day you gave it, and every later trade keeps moving it. Nothing goes stale, because nothing is frozen.
  • A snapshot is the end of that day. Trades dated the same day are already inside the figure you stated, so they aren't applied twice.
  • Clearing the snapshot hands the account back to fully-derived cash.
  • With no snapshot at all, the account starts from zero at inception — so a complete import derives correctly with no input from you.
  • Setting an earlier anchor re-derives everything from that date forward. Setting a later one leaves the earlier period alone: the most recent anchor on or before a date is the one that governs it.

Set cash balance

Set cash balance is in a holdings account's ⋮ menu and on its trades screen. It asks for two things — Cash (negative for a margin debit) and As of, which defaults to today.

It also tells you what your trades already imply, and names the difference:

Your trades imply $9,180; you entered $12,400 — a $3,220 gap, usually missing deposits or an incomplete import. Saving keeps your figure and moves it forward with every later trade.

That gap is the useful part. If it's zero, your import is complete. If it isn't, it's usually deposits you never imported — and stating the balance is the quick fix, while importing the missing transfers is the thorough one.

Clear date removes the most recent anchor and reverts to derived cash.

Cash and a partial history

Importing only the last two years of an account leaves it starting from zero cash. Two ways to fix it: put a transfer row dated before the first trade carrying the opening balance (see Trades CSV format), or just set a cash balance and let the anchor do it.

Prices and backfills

Your holdings are valued against daily closing prices, fetched per security for exactly the period you held it — from your first trade to today if the position is open, or to your last trade if you've closed it. A closed position is left alone once its history is complete, and revisited only if part of that history is still missing.

Open positions are refreshed twice a day, once in the early hours and again in the evening, and what each pass can collect depends on what you hold:

  • Stocks, ETFs and funds have a closing price for the day published in the evening, so the evening pass picks it up and a day's close reaches your dashboard that same evening rather than the following morning.
  • Crypto trades around the clock, so a day's figure isn't final until the day itself ends at midnight UTC. There is nothing for the evening pass to collect — a coin's daily close arrives on the following early-hours pass, once a day. If a coin is missing older prices, though, either pass will fill them in.

The banner

After an import, or any change that touches new securities, a banner appears at the top of the dashboard with a live count:

Fetching prices — 12 of 19 securities. Values may be incomplete until this finishes.

It disappears on its own when everything succeeds. When something doesn't, it says which, and there are four cases.

A ticker needs matching

One ticker needs matching to a security. Your broker spells these differently from our price feed. Until they're matched, these holdings are valued at what you paid for them.

This is the fixable one, and it's common — Ally writes BRKB where the price feed says BRK-B. Each unmatched ticker gets a Match SYMBOL button, which opens a search: type the company name or the correct ticker, pick the right result, done.

What that does, and doesn't do: it records that your spelling means that security, for this household only. Your trades are never rewritten. Your whole history re-values immediately, positions imported from two brokers under two spellings collapse into one, and if you get it wrong you can point it somewhere else.

No market data at all

No market data available for XYZ — valued at cost basis.

The price feed has nothing for this security. An alias won't help; this is usually something genuinely untracked.

Waiting on the price feed's limit

Waiting on the price provider's request limit — 12 securities resume at 2:00 PM. Nothing to do — this picks up on its own. Values are incomplete until it does.

Our price feed allows a fixed number of requests per hour. A large first import can use them all up, and when it does the remaining securities are simply booked for the moment the limit resets, and fetched then. Nothing is lost and nothing needs re-running — the securities already fetched stay fetched, and the rest continue from where they stopped. If your import is large enough this can happen more than once, an hour apart.

A fetch failed

Couldn't fetch ABC, DEF. The next scheduled refresh will try again — it re-checks every holding whose price history has a gap, so nothing stays stuck here.

A transient problem — the feed was briefly unreachable, or returned an error. It's retried immediately a few times, and after that the next scheduled refresh picks it up, because that pass looks for any holding whose price history still has a hole in it rather than only at recent activity.

What a missing price does to your numbers

A holding with no price is valued at what you paid for it — its running average cost — rather than at zero. This matters: a zero would be indistinguishable from a closed position or a total loss, and would quietly wrong your totals. Cost basis is at least the right order of magnitude, and the banner is what tells you it's an estimate.

Options are always valued at cost basis by design.

Who can do this

Setting a cash balance, matching a ticker, and refreshing prices all require editor or owner access. Viewers see the whole dashboard, including the banner, but not the buttons.