The Screener builds a ranked shortlist from the tickers already registered in the app. Returns come from adjusted closes (dividends reinvested, splits applied) and are cached in the database. The status bar names the date they cover and warns when newer prices have made the cache stale. A score is comparison evidence, not a recommendation.
What are you comparing?
The page opens in one of two comparison modes, and the mode is a control, not an inference:
- All funds: every registered ticker, ranked together. This is where the page starts. Search, category and broker still narrow it.
- Funds for a slice: candidates for one slice of one model. Choosing it names a model, selects that model's first slice and starts from the funds already saved on it.
In slice mode the Universe choice says how far to look beyond the slice: Saved funds are the ones currently filling it, Same category adds every other ticker that fits, and All funds removes the restriction while keeping the slice context, which is what keeps the Swap column and the slice summary underneath, available. Leaving slice mode returns the page to the whole universe and clears the narrowings the slice applied.
The scope summary's Ranked by readout names the active lens and the comparison it makes: Classic score across the whole universe for a broad or multi-category scope, or Peer score within one category after you narrow to one category. A permanent note above the shortlist repeats the consequence, because it is easy to misread: Classic ranks every asset class in scope together, so a bond fund can outrank a stock fund. That is a scoring fact, not a recommendation. Peer only ever compares funds against their own category, and its numbers must never be read across categories. Scoring rules beside that note opens the weights and floors for whichever lens is active.
Search, category and broker are kept in the first filter row. A broker choice only gates mutual funds by their no-transaction-fee list; ETFs and stocks still pass. Advanced filters & columns contains asset class, the stock-only sector filter, as-of date, saved filter views and table-column controls. Its collapsed summary names active advanced settings. A view saved before sectors existed still applies with no sector filter.
Saved column layouts carry forward across the Classic-score visibility update. The upgrade reveals Classic score even if you previously changed the sort, and it also reveals any active sort column. The saved order, sort direction, and other hidden-column choices stay intact.
Missing price history
When working results exist, an unpriced ticker is left out of the ranking. A compact disclosure gives both counts: excluded tickers and ranked results remaining. It also keeps Update prices or Set up prices, the ticker details and a way to show the rows directly available. The larger recovery message is reserved for a scope in which no matching ticker has a usable trailing-return period. Opening the page never starts a download on its own.
Reading the table
Return and score columns are heat-colored against the rows currently shown, not the whole universe. Filter first, then read the colors. The Classic and Peer scores answer different comparison questions; never compare Peer scores across categories. Both score headers carry a "?" for that difference, and the one the shortlist is ordered by is marked Ranking. expense ratios are percent units (0.45 = 0.45%/yr). Ticker and Name stay fixed while you scroll horizontally through scores, returns, risk and calendar history. Pin rows and Compare to isolate finalists; the Swap column puts a chosen ticker into the selected slice, keeping the slot's split. Swap opens a focused review dialog; Tab stays inside it, and Cancel, Escape, or the backdrop returns focus to the row you started from. CSV export follows the rows and columns currently shown.
Multi-year columns are annualized; calendar columns are full-year returns. A blank cell means the fund's history doesn't cover that window at the chosen end date, including a year the fund's record begins after, or ends before. A record that stops in June has no 2025 return; part of a year is not a year.