Methodology
A mechanical, published methodology — not a recommendation. Every figure traces to an SEC filing. Where history is too short to test a criterion, we mark it not evaluated rather than treating it as a pass.
GrahamWise tracks 0active S&P 500 constituents. Former index members remain available on their stock pages with a note; they are excluded from directory counts and nightly screens.
The 7 defensive-investor criteria
Benjamin Graham's The Intelligent Investor(1949, revised through 1973) proposed a checklist a "defensive" investor could apply without deep analysis. Graham listed 7 numbered criteria; GrahamWise applies these 7 mechanically to filed data. Criterion 2 (strong financial condition) has two sub-tests — a current-ratio floor and a limit on long-term debt relative to working capital — and both must pass for criterion 2 to pass.
- 1.Adequate size
- 2.Strong financial condition
- 2a. Current ratio of at least 2 (classic) / 1.5 (modern)
- 2b. Long-term debt within net current assets
- 3.Earnings every year
- 4.Unbroken dividends
- 5.Earnings growth
- 6.Moderate price vs earnings
- 7.Moderate price overall
Graham classic 1973 vs. modern thresholds
GrahamWise precomputes both readings nightly. The site defaults to Graham classic 1973. Modern relaxes three thresholds for shorter listing histories and common restatements of Graham's work in the wild.
| Criterion | Classic 1973 | Modern |
|---|---|---|
| 1. Adequate size | ≥ $500M revenue | ≥ $500M revenue |
| 2. Strong financial condition | 2a ≥ 2.0× current ratio; 2b LT debt ≤ WC | 2a ≥ 1.5× current ratio; 2b LT debt ≤ WC |
| 3. Earnings every year | 10 years positive EPS | 7 years positive EPS |
| 4. Unbroken dividends | 20 years paying | 10 years paying |
| 5. Earnings growth | ≥ 33% over 10 years | ≥ 33% over 10 years |
| 6. Moderate price vs earnings | ≤ 15× (3-yr avg EPS) | ≤ 15× (3-yr avg EPS) |
| 7. Moderate price overall | P/E × P/B ≤ 22.5 | P/E × P/B ≤ 22.5 |
How we measure revenue for banks and insurers
Graham's adequate-size test uses the same $500 million threshold for every company. Industrials use the face income-statement revenue (net sales) line. Banks and broker-dealers do not file that line. They report net interest income and noninterest income. We store that sum — or the single XBRL tag RevenuesNetOfInterestExpense when the issuer files it — because that is the figure they present as total revenue / total net revenues (Wells Fargo 2025: $83.699 billion; Goldman Sachs 2025: $58.283 billion).
We do notuse gross interest income. That includes interest paid to depositors and other funding sources and is not the analogue of industrial sales. On Wells Fargo's 2025 10-K, gross interest plus noninterest income is $123.5 billion against reported total revenue of $83.7 billion.
Some regional banks present "total revenue" on a fully taxable-equivalent (FTE) basis in MD&A. SEC XBRL is GAAP. The gap is small (Fifth Third 2025: $20 million on about $9.0 billion) and does not change the $500 million size test.
Synchrony Financial does not report a labeled total-revenue line. Retailer share arrangements sit between net interest income and other income. We leave SYF unscored rather than invent a total.
Banks and insurers are excluded from criterion 2, as Graham did. Verdicts use a fixed pass threshold(six true passes for non-financials, five for financials where criterion 2 is N/A). The "X of Y evaluable criteria" denominator is likewise fixed under each ruleset — six testable slots for classic non-financials (seven criteria minus the unevaluated dividend rule), five for classic financials — and does not shrink when filed data for another criterion is missing. Missing inputs are marked Not evaluated but still occupy their slot. Stock pages show each sub-test under criterion 2 so you can see which half failed.
What we cannot currently evaluate
The unbroken dividend record (criterion 4) under Graham classic 1973 requires twenty consecutive years of dividend data. Our pipeline stores at most ten fiscal years per company from SEC EDGAR companyfacts — so this criterion is marked Not evaluated for every company today, not pass or fail. Under modern rules (ten years required), many companies can be tested, but names with shorter stored history remain unevaluated.
On the default classic ruleset, a non-financial company therefore has six of 7 criteria in the denominator today (criterion 4 shown as not evaluated). A financial company has five. The count on each stock page is computed from these definitions at runtime — not hardcoded per ticker.
To fix this: raise the fetch/store limit (currently annual[:10] in the pipeline), widen read/RLS windows, and re-backfill fundamentals from EDGAR. SEC often holds more than ten years; the gap is in our loader, not the database schema.
Fair value & margin of safety
Graham's classic formula estimates fair value as the square root of (max earnings multiple × max book multiple × earnings per share × book value per share) — his own defaults being 15× earnings and 1.5× book, a combined ceiling of 22.5. Margin of safety is the gap between that fair value and the current price, expressed as a percentage of fair value. The calculator on each verdict page lets you adjust either multiple and see both figures recompute live.
Unscored companies
Before any criterion runs, GrahamWise requires at least 5 fiscal yearswith both EPS and revenue on file. Among active S&P 500 constituents, 0 currently fail that gate and receive an Insufficient data verdict — the same count the nightly market snapshot stores as insufficient, recomputed from the active universe each time.
- 0 — genuinely short history (fewer than five fiscal years stored).
- 0 — extraction gap (five or more fiscal years on file, but our pipeline cannot yet read EPS and/or revenue from those filings). The filings exist; the gap is ours. Most unscored names fall here.
Classifications
Provenance
Terminal mode shows the exact source filing, its filed date, and its SEC accession number, with a direct link to EDGAR and a CSV export of the underlying per-share record — so every number can be checked against the primary source.