We use cookies
MainRatios uses cookies for essential site functions. With your consent, we also use analytics cookies including session replay sampling (PostHog, Google Analytics) and advertising cookies (Google AdSense). You can reject non-essential cookies, including the "sale" or sharing of personal information under CCPA, and you may withdraw consent at any time (GDPR). See our Privacy Policy for details.
Last updated: 2026-04-17
Every intrinsic value on a stock page comes from a specific model with explicit rules. This page documents the math, the philosophy, and the calibration choices — so you can judge the output with the same context we use internally. Nothing here is proprietary or hidden behind a paywall: the formulas are standard practitioner finance, the assumptions are stated, and every calibration decision is traceable.
Every MainRatios stock page runs six independent investor models on the same financial data (10-K filings sourced from SEC EDGAR and ratios from FMP). Each model encodes a specific investor's philosophy — Buffett's DCF, Graham's defensive formula, Lynch's PEG, Greenblatt's magic formula, Munger's quality tilt, and Marks's mean-reversion view. The outputs often disagree loudly on the same stock. That's intentional: different philosophies produce different numbers on the same data, and the user judges which one resonates with their thesis.
Three explicit trade-offs shape our outputs and set us apart from analyst-consensus price targets (StockAnalysis, Finviz) and other DCF providers (Alpha Spread, ValueInvesting.io, Simply Wall St):
The result: our numbers lean value-investor. On mega-cap tech at current prices we'll often read “fair-to-slightly-above” while Wall Street targets price in higher growth. That gap is visible, labeled, and deliberate — not a bug to fix.
Each model below shows what it does, its formula, what inputs it reads from the financial statements, when it qualifies a stock vs skips it, and calibration choices with numeric examples.
Three paths depending on company type. Most stocks route to the DCF. Banks and insurance use the Excess Returns Model. Payment processors (V, MA, PYPL, etc.) are classified as Financial Services by sector taxonomy but are tech companies with recurring revenue — they use the standard DCF path by ticker override.
WACC:Risk-free 4.2% + sector β × market premium 5.5%. Tech β=1.20 → Cost of Equity 10.8%. Actual WACC then blends with the company's capital structure (debtWeight capped at 80%, after-tax cost of debt 3.95%). Debt-heavy balance sheets (like AAPL post-buybacks) lower the WACC substantially below the sector-beta starting point.
Growth rate: the projected growth rate (capped at 20%) is held for years 1-5, then faded toward the 2.5% terminal growth by year 10 (years 6-10 use the blended average of full growth and terminal). The 20% is a cap, not a default: a stock with trailing 6% CAGR projects at 6%, not 20%. The cap only binds for growth franchises (some quality compounders in their expansion phase).
Terminal value — dual approach: average of two assumptions to smooth the extremes.
Minimum requirements: ROE ≥ 10% (skipped if negative equity from buybacks), Net Margin ≥ 2%. Stocks failing these land in the Excluded section with reasons shown.
Cyclical normalization:For Energy, Basic Materials, Industrials, and Consumer Cyclical sectors, the growth rate uses median-EPS-based normalized growth (floor 3%, cap 20%) to avoid peak-cycle inflation. A stock like CAT at the top of a construction cycle isn't valued off that peak — the model normalizes.
Based on Damodaran's framework and Simply Wall St's open implementation. Banks hold customer deposits as liabilities and generate revenue from the spread between deposit cost and loan yield — the Buffett-style FCF DCF doesn't apply. Instead, the bank's ROE vs Cost of Equity tells us whether it creates or destroys shareholder value. ROE below CoE → fair value caps at book value (JPM-style discount). ROE above CoE → excess returns compound on top of book equity.
Why not DCF for banks:banks don't have “capital expenditure” in the traditional sense. Their “investment” is in originating loans, and their “depreciation” is loan loss provisioning. Forcing a DCF here produces garbage.
Real Estate is discarded. REIT accounting inflates depreciation (straight-line on physical assets whose economic value often rises), deflating EPS. Capex is frequently larger than D&A for a different reason than growth (building acquisition replacing depreciated property). And sector β=0.85 collapses WACC, which combined with REIT-style high FCF yields would inflate the DCF enormously. The correct approach is P/FFO or NAV valuation — on the roadmap.
The 1962 “defensive investor” formula. The 22.5 is Graham's proposed maximum P/E × maximum P/B (15 × 1.5) — the formula is the geometric mean of two defensive ceilings. A stock must trade below this number to be “safe” under Graham's strictest reading.
Minimum requirements (all must pass):P/E < 15, P/B < 1.5, Current Ratio > 2.0. These filters are Graham's own criteria, not our embellishments.
Excluded sectors:Real Estate, Financial Services, Utilities. The Graham Number was designed for industrial-company accounting. REIT depreciation deflates EPS and historical-cost BVPS is stale. Financial-sector balance sheets don't map to capex/inventory concepts. Regulated utility returns distort the formula (low growth but stable dividends makes the GN look wrong high or wrong low depending on rate cycles).
Lynch's heuristic: a stock growing at X% per year deserves a P/E multiple of roughly X. PEG of 1 is fair; < 1 is a deal; > 1.5 is expensive. We cap the implied fair P/E at 25 — even the fastest growers rarely sustain PEGs above 25 forever.
Earnings-trough normalization:Lynch's formula reads trailing EPS literally. If the latest annual EPS is less than 50% of the trailing 3-year average, we treat it as a cyclical trough and substitute the 3-year average instead. This prevents absurd outputs like “AMD fair value $2.10” when AMD's earnings temporarily dipped. When normalization fires, the card carries an earnings_trough_normalizedconfidence flag.
Extreme mispricing flag: when the resulting fair value is less than 30% of the current price, the card carries an extreme_mispricingflag. The signal “this stock is trading at 3×+ Lynch fair value” is valid; the number itself shouldn't be read as an actionable price target.
From Greenblatt's 2006 book “The Little Book That Beats the Market.” The magic formula is a screener, not a per-share intrinsic value model. We compute both yields on a single stock and derive a qualifying band: stocks in the top quartile of EY and ROC among the coverage universe pass.
The card shows the EY/ROC scores and a price range corresponding to the ROC-implied fair multiple (P/E commensurate with sector return on capital). This is the most schema-shifted of our six models — it's a screen plus a loose price-range derivation, not a rigorous DCF.
Munger's view: exceptional businesses with moats deserve a quality premium. We encode this as a discount-rate reduction of up to 0.50%, scaled by a 0-100 quality score combining:
Minimum requirements:ROIC ≥ 15%, Gross Margin ≥ 25%. Both are Munger's own strict standards for “durable competitive advantage.” The GM threshold was lowered from 40% to 25% to cover industrials and retailers Munger has actually held (Costco, BYD).
Conservative fade: years 1-3 use full growth, years 4-10 fade linearly from capped growth to 3% terminal. This prevents the runaway terminal values that plagued the model pre-calibration (ADBE was producing FVs above $1500 before this fix — the Gordon growth terminal at low quality-adjusted WACC was producing a ~50× multiplier on year-10 cash flow).
Exit-only terminal: dropped the Gordon Growth perpetual-growth component. At low WACC (5%), Gordon gives cf × 51.5 as terminal; exit-only gives cf × 20. We use exit-only to stay conservative.
Extreme valuation flag:when FV > 2.5× current price, the card carries an extreme_valuation flag (confidence = low). The number is kept but flagged.
Excluded sector: Real Estate (same reason as Buffett).
From Marks's “Mastering the Market Cycle.” The model flags stocks whose current P/B sits meaningfully below their 5-year historical P/B — a contrarian signal that market sentiment or transient earnings may revert upward.
This is not a forward-looking DCF.It's a mean-reversion flag using backward-looking market multiples. The thesis: if a quality business is trading at 1.2× P/B today but averaged 1.8× over five years, the discount may close through earnings recovery, multiple expansion, or both. We report the implied fair value but don't guarantee it reverts.
Doesn't apply to:companies with rapidly growing or shrinking book value (growth stocks, aggressive buyback programs producing negative equity). Flagged as low-confidence when the 5-year P/B series shows >50% volatility.
Standard DCF uses Free Cash Flow = Operating Cash Flow − Total CapEx. For companies in aggressive growth phases (AMZN building AWS data centers, META/GOOGL investing in AI infrastructure, MSFT expanding Azure), this understates sustainable cash generation. A large share of CapEx is “growth CapEx” — investment in future revenue, not maintenance of current operations.
Buffett's Owner Earnings (1986 letter):Net Income + D&A − average annual amount of capitalized expenditures required to maintain competitive position. Practitioner proxy: maintenance capex ≈ D&A (depreciation covers replacement of existing assets).
Derivation of our formula:Buffett's original is Net Income + D&A − maintenance capex. Starting from Operating Cash Flow (which by construction adds back D&A and SBC to Net Income and adjusts for working-capital changes), we subtract D&A as the maintenance-capex proxy and subtract SBC to treat it as a real economic cost of doing business. Result: OCF − D&A − SBC ≈ Net Income + ΔWorkingCapital + other non-cash items (excluding D&A and SBC). It's Buffett's owner earnings using cash-flow-statement inputs that are less prone to accrual distortion than Net Income.
Our trigger rule:when trailing 3-year average CapEx > 1.5 × trailing 3-year average D&A, the FCF input to both Buffett and Munger DCF models switches fromOCF − CapEx to OCF − D&A − SBC (Owner Earnings proper, including stock-based compensation as a real economic cost).
The fcfMethod field on the result inputs tells you which basis was used — you can see it in the Key Inputs section of any investor detail page.
Why include SBC:stock-based compensation is real dilution — future shareholders pay via new share issuance. Buffett's classical owner earnings subtracted “capitalized expenditures required to maintain competitive position.” SBC is the labor cost equivalent: it's the portion of employee comp that isn't in the P&L but is a real drain on per-share value.
Cards can carry one or more flags that modify the reading of the number. When any qualifying model has a low-confidence flag, the consensus card inherits the flag so the headline isn't falsely authoritative.
Fires when Munger's Quality-DCF produces a fair value > 2.5× current price. The number is kept and shown — Munger's thesis may be valid (market could be under-pricing a durable compounder) — but the user sees a red border and warning copy signaling that the output stretches the model.
Fires when Lynch's PEG model normalized EPS from the 3-year average because trailing was < 50% of that average. Card shows both eps (trailing) and epsUsed(normalized) in the inputs panel for auditability.
Fires when Lynch's resulting fair value is < 30% of current price. The model is saying “this stock is > 3.3× fair value” — the direction is real, but the absolute number is more a signal than a target. The card is still shown, with a visible red banner so the user knows to interpret the number as “way overvalued by this framework” rather than “buy at $X”.
These are sketched on the roadmap:
growth_extreme — growth rate ≥ 30% CAGR triggers flagdata_incomplete — fewer than 5 years of data availablenegative_fcf_recent — at least one of the 3 recent years had negative FCFsector_mismatch — sector-specific model exists for this stock's sector but isn't yet used (REIT / bank / utility)Some models don't translate across sectors. Rather than producing misleading numbers, we discard them with a clear reason.
Real Estate, Financial Services, Utilities.
Real Estate. Same reasons as Graham plus the sector-β=0.85 WACC-collapse issue that inflates the DCF terminal. Until a dedicated P/FFO model ships, REITs are discarded across all three DCF paths.
Financial Services (banks, insurance) route to the Excess Returns Model inside the Buffett path. Exception: payment processors (V, MA, PYPL, XYZ, ADYEN, FI, GPN) — classified as Financial Services but economically tech-company with recurring revenue; they use the standard DCF. (Note: SQ was renamed to XYZ by Block in 2024, FISV merged into FI.)
Energy, Basic Materials, Industrials, Consumer Cyclical. These don't get excluded — they get normalized. Instead of using trailing EPS CAGR (which can capture a cycle peak and extrapolate), Buffett's path uses median-EPS-based normalized growth with a 3% floor and 20% cap. Detection: positive EPS coefficient of variation > 0.20 AND not in a clear growth trajectory.
The consensus card at the top of the stock page aggregates every qualifying investor model — all of them, no hiding — into a single headline number. Three aggregate views:
The overall consensus signal is driven by the majority of qualifying models, with ties going to the conservative direction (AVOID > HOLD > BUY). Confidence rolls up: if any qualifying model has a low-confidence flag, the consensus inherits it.
We previously experimented with hiding cards whose fair value sat ≥30% below current price, but that made the consensus misleading — it excluded legitimate “this stock is overvalued by X's framework” signals from the headline number. The filter is gone; users see every qualifying model and the consensus reflects all of them.
Cache policy: valuations are cached in DynamoDB. Computed on-demand with a rate limiter (50 requests/min). For our curated universe (270 stocks), refreshed weekly via an EventBridge CRON job. Non-universe tickers use 24-hour TTL. Tombstones cache for 1 hour when FMP fails or data is incomplete (prevents repeated failed fetches).
Each investor card shows three blocks of information, from top to bottom:
Monogram (WB, BG, PL, JG, CM, HM) + investor name. If the model flagged low confidence, a small alert triangle appears next to the name, and a banner below the pill explains why (e.g., “Valuación extrema — revisar con criterio” for extreme_valuation, or “Ganancias normalizadas (trailing bajo vs 3yr avg)” for earnings_trough_normalized).
Dollar fair value is the model's intrinsic value per share. The upside % next to it is (FV − Price) / Price × 100— positive means undervalued, negative means overvalued. Color matches the display signal: green when undervalued, yellow when fairly valued, red when overvalued.
UNDERVALUED / FAIRLY VALUED / OVERVALUED pill. The left edge rail of the card mirrors the pill color for quick scanning in the grid. Pill logic: upside ≥ 8% → UNDERVALUED; −8% ≤ upside < 8% → FAIRLY VALUED; upside < −8% → OVERVALUED. The ±8% band reflects inherent estimation error in fair-value models (WACC, growth, and terminal multiple assumptions) — a stock within ±8% of fair value is considered fairly priced, independent of the per-investor margin of safety that still drives the Buy Below price.
Navigating to /stock/TICKER/valuation/INVESTOR opens the per-model detail view: full formula, calculation steps with values, inputs, minimum-requirement checks, margin of safety note, and (when applicable) confidence notes. For Buffett specifically, the DCF scenarios page (/stock/TICKER/valuation/warren-buffett/dcf) provides a bear/base/bull slider interface — this UX isn't replicated across the other 5 models yet.
Our DCFs use conservative inputs: sector-beta WACC, trailing-only growth, 2.5-3% terminal growth. Quality compounders trade at premium multiples that reflect lower implicitdiscount rates in the market. For mega-cap tech at current prices, our cards will often read “fair-to-slightly-above” while Wall Street consensus targets trade closer to the market price. That gap is the cost of value-investor discipline, not a bug. Analysts get paid to publish price targets that approximate where stocks will be in 12 months — we don't.
Real Estate Investment Trusts (SPG, O, CCI, PLD, etc.) and regulated utilities (DUK, SO, D, etc.) are currently handled by sector exclusions rather than a proper sector-specific model. The correct approach is P/FFO (for REITs) and regulated-return modeling for utilities — on the roadmap. Until then, these sectors show only the models that happen to qualify (usually Lynch) with reduced confidence.
Growth rates are computed from trailing 5-year CAGRs, not analyst forward EPS estimates from FMP or elsewhere. A company in a major growth inflection (NVDA post-H100, META post-Reels, MSFT post-Azure) will read conservatively until the inflection appears in trailing numbers. We believe this is the honest approach for “what would Buffett pay today on known information” but it's worth knowing.
The market prices optionality (AI monetization potential, new product cycles, market-share expansion) into premium multiples. Our DCFs price the cash-flow engine as it exists. If a stock is trading at 40× PE because the market expects 30%+ growth for 10 years, our model caps at 20% growth for 5 years and says overvalued. The market may be right; our model may be right; the user decides.
Reported EPS and OCF can diverge from economic reality via accounting choices (revenue recognition timing, inventory methods, impairments, restructuring charges). We don't normalize for these. A company taking a one-time impairment will show a trailing EPS drop that flows into the models. The 3-year weighting helps; it doesn't eliminate.
Risk-free rate at 4.2% reflects long-term US Treasury yields. Market premium at 5.5% is a long-run historical estimate. Both are staticin our WACC — we don't adjust for the current rate cycle. In a zero-interest-rate environment, our WACC is high vs where the market would apply it; in a high-rate environment, it's low. Users in a specific rate regime should recalibrate mentally.
A 100-ticker cross-comparison in April 2026 showed our results sit in a specific band versus other public valuation providers:
| Provider | Median |Δ%| vs price | Type |
|---|---|---|
| Finviz | 14.5% | Analyst consensus |
| Simply Wall St | 14.9% | Analyst consensus |
| StockAnalysis.com | 15.0% | Analyst consensus |
| ValueInvesting.io | 25.0% | DCF |
| Alpha Spread | 26.2% | DCF |
| MainRatios (consensus) | ~30% | Multi-model |
The three analyst-consensus providers cluster around 14-15% median delta because analyst targets are published relative to current price. The two pure-DCF providers (Alpha Spread, ValueInvesting.io) sit at 25-26%. We sit slightly above that band because our multi-model aggregation includes deeper-value models (Graham, Munger quality-adjusted) that are further from the market. After the April 2026 calibration pass, the gap to pure DCFs narrowed considerably.
Every qualifying model on these stocks returns fair values well below market price (NVDA at −40 to −60% across Buffett, Lynch, Munger; AVGO similar). The deep-value DCF framework doesn't credit the AI-cycle optionality the market is pricing in. External analyst targets for NVDA/AVGO sit at +30% upside (bullish); our DCFs at −50% (bearish). Neither is “correct” — they're two different worldviews applied to the same earnings stream. Our job is to show both sides honestly, not to silently hide the value-investor view.
Take AAPL as the case study. Buffett's DCF on Apple's trailing $100B+ FCF at cycle-reasonable growth gives ~$253 — within 6% of the current price (pill: roughly fair, mildly overvalued). Lynch's PEG model on AAPL's 7% trailing EPS growth caps the fair P/E at 7 → FV ~$50 (pill: massively overvalued). Both numbers are correct outputs of their respective frameworks on the same inputs. Lynch's philosophy says growth-at-reasonable-price; AAPL at a 34× P/E with 7% growth is expensive by that lens. Buffett's philosophy says quality-compounder-cash-flow; AAPL's $100B FCF at conservative discount rates supports most of today's multiple. The user reconciles, not the model.
The consensus is the median of allqualifying models. When the models disagree loudly (Buffett +5%, Lynch −80%, Munger −20%), the median lands between them. That's the point of aggregating multiple frameworks — you see a central tendency that respects the dispersion rather than a number cherry-picked from one investor's philosophy.
No, and we show 2 decimals only because the market displays prices to 2 decimals. Our fair values are estimates with a real uncertainty band on the order of 15-25%. Treat them as ballparks, not precise targets. The value-investor discipline is in the relationship between price and fair value, not the absolute number.
Curated-universe stocks (270 tickers): weekly via CRON. Other tickers: on-demand, cached 24 hours. If you see a value that looks stale, the dataAsOf timestamp on the card tells you when it was computed.
Yes — click any card to go to the per-investor detail page. Calculation Steps section shows label, formula, input values, and intermediate results for every step of the model. For Buffett specifically, the DCF sliders page lets you override growth rate, WACC, and terminal growth to see how FV responds.
A filter that hid cards with fair value ≥30% below current price was introduced and then removed. The rationale to hide them (noisy model breakdowns) was real, but the implementation made the consensus number misleading — it excluded legitimate “overvalued by X's framework” signals from the headline. We now show every qualifying model and let the user interpret. The confidence flags (earnings_trough_normalized, extreme_mispricing, extreme_valuation) still flag outlier cases with visible warnings.
All source code for the valuation engine is inspectable via the per-model detail views on any stock page. See MainRatios home to search any US ticker.
For educational and informational purposes only. Not financial advice, not a recommendation to buy or sell any security. See Terms.