Every Stock File carries a score from 0–100 built from six factors. The score is computed daily from Finnhubdata and cached as a snapshot in Sanity. Editor overrides supersede computed values factor by factor — when an override is active, you'll see an editor note on the Stock File. If Finnhub data is missing for a factor, that factor shows N/A and defaults to a neutral 50 baseline — it never silently inflates or penalises the overall score.
Weighted average of the six factor scores, using only the factors that have data. If every factor is N/A, the overall is also N/A.
How cheap the stock is relative to its fundamentals. Four sub-scores are combined — P/E is the heaviest because it reflects earnings power most directly.
Finnhub peNormalizedAnnual ÷ hardcoded sector median P/E (e.g. Canadian Banks = 12×, Technology = 32×)
Finnhub pbAnnual
Finnhub evEbitdaTTM
Finnhub pfcfShareTTM or pfcfShareAnnual
How fast the business is compounding. Revenue and EPS 3-year CAGRs anchor the score; quarterly YoY gives a forward-looking signal.
Finnhub revenueGrowth3Y (%). Values above 200% are capped — acquisition spikes can distort this metric.
Finnhub epsGrowth3Y (%)
Finnhub revenueGrowthQuarterlyYoy (%) — proxy for recent growth momentum
How durable and efficient the business is. Debt/equity is assessed differently for banks — structural leverage from deposits is not the same as financial stress.
Finnhub roeTTM (%)
Finnhub roiTTM (%)
Finnhub totalDebt/totalEquityAnnual. Banks use a separate scale (D/E 5–15× is structurally normal).
Bank scale: D/E < 5 → 70, < 10 → 55, < 15 → 40, ≥ 15 → 30
Finnhub netProfitMarginTTM (falls back to grossMarginTTM if missing) (%)
Can the company keep paying and growing its dividend? If no dividend is paid, the factor returns a neutral 50 — neither rewarded nor penalised.
Finnhub payoutRatioAnnual or payoutRatioTTM (%)
0% (no dividend) → 50 neutral
Finnhub dividendGrowthRate5Y (% per year)
Finnhub pfcfShareTTM or pfcfShareAnnual — FCF yield as a coverage signal
Is the stock trending in the right direction? Returns are compared to the TSX Composite (^GSPTSE). If index candles are unavailable, we use long-run TSX averages (4% over 6 months, 8% over 12 months) as the benchmark.
Finnhub 26WeekPriceReturnDaily minus GSPTSE 6M return (or 4% benchmark)
Finnhub 52WeekPriceReturnDaily minus GSPTSE 12M return (or 8% benchmark)
Computed from 1-year daily Finnhub candles
Rule-based. Measures how advantageous this stock is for a Canadian investor in the optimal account type. The Account Fit table on each Stock File page shows the per-account breakdown.
Determined by exchange (TSX/TSXV vs NYSE/NASDAQ), sector label, and dividend yield
US dividend stocks score 30 in a TFSA (15% IRS withholding is irrecoverable). The Account Fit table shows this penalty explicitly.
All market data comes from Finnhub (free tier). Scores are refreshed daily at 06:00 ET via a GitHub Actions cron job that writes snapshots to Sanity.
Fundamentals for smaller TSX stocks may be incomplete. Where data is missing, the factor shows N/A and contributes a neutral 50 to the overall score.
Quotes are delayed ~15 minutes. Scores are not investment advice — see the disclaimer.