Method
Core method inherited from owners.grok.me; the Extensions section below is fugazi's own — accuracy improvements the original does not make.
How fugazi values a business
This is a conservative, owner-earnings ledger — not a growth-at-any-price model. The 10% hurdle is intentional. Most wonderful companies will screen as a premium at today's prices. That is information, not a failure of the math.
Owner earnings
From Buffett's 1986 letter, as taught in Hagstrom's The Warren Buffett Way:
OE = Net income + D&A − maintenance CapEx
Reported earnings plus non-cash charges, minus the capital required to hold unit volume and competitive position. That last term is the hard part: companies do not file "maintenance CapEx."
CapEx split
Replacement CapEx is estimated as 1.25× D&A. In any year where reported (or implied) CapEx exceeds that replacement level, the extra is treated as growth CapEx and split out of owner earnings. The test is per year, not a 5-year average — a retailer or hyperscaler that only recently ramped expansion spend still gets the split in those years. Utilities and rate-base businesses (think American Water Works) would otherwise show blank or ugly IV because they invest ahead of earnings.
When CapEx is missing from XBRL, implied CapEx = max(0, ΔPPE + D&A). An implied zero (PPE declined) is treated as missing so owner earnings does not become NI + D&A with no maintenance charge.
Two-stage DCF
Base is normalized recent owner earnings (median of the last three years when available). Staged growth starts from the 5-year compound annual growth rate of owner earnings — skipping a near-zero start year so a recovery is not treated as 250% growth, and using the 3-year rate instead when latest OE has fallen below half the recent peak — then the growth haircut shaves that rate down, then max growth caps it (6% for utilities). Cash flows are projected for the explicit window, then a Gordon terminal, all discounted at the hurdle rate.
Per-share IV uses diluted filings shares, or — for dual-class names such as BRK-B — market cap ÷ listing price so an A-share count is never applied to a B price.
Margin of safety = (IV − price) / IV. OE yield = latest OE / market cap. Negative owner earnings leave IV blank rather than flattered.
Extensions
fugazi extends the owners.grok.me method with six accuracy improvements, all on by default. Each moves intrinsic value in a defensible direction, and each is visible on the stock page — a warning or a badge under the IV breakdown — so nothing changes the number silently.
Stock-based compensation (SBC). The base formula ignores SBC, a real dilution cost to existing owners — not a non-cash add-back like D&A. fugazi subtracts reported SBC from owner earnings in every year it is filed. For AAPL's last fiscal year it was $12.9B — 11.6% of owner earnings. Material in any equity-heavy business.
Working capital (ΔWC). Buffett's owner earnings omits the change in working capital; cash flow does not. fugazi adjusts each year by the change in current assets minus current liabilities: growth in receivables or inventory traps cash and reduces OE, liquidations release cash and increase it. This aligns owner earnings with the free-cash-flow identity (FCF = operating cash flow − CapEx).
Net debt, shown not subtracted. Owner earnings are built from net income, which is already after interest — the flows themselves carry the cost of debt. Subtracting net debt from the DCF total as well would charge leverage twice, understating levered businesses and flattering cash-rich ones. fugazi reports net debt from the latest annual balance sheet for context next to the breakdown instead. (The separate FCF model, which mirrors third-party DCF sites, does subtract it there.)
OCF haircut (earnings quality). Persistent operating cash flow below owner earnings means reported profit is not converting to cash — accruals or slow collection. When the average OCF/OE ratio across positive years falls below 0.85, fugazi scales the normalized base OE down by that ratio before the DCF. Earnings that do not hit the bank get valued less.
Fade terminal. The original's Gordon terminal is a hard cliff: growth steps from the used rate down to terminal growth in a single year, and terminal value is hypersensitive to that jump. fugazi fades — after the explicit window, growth interpolates linearly to terminal growth over five years, then the Gordon terminal. No cliff, and usually slightly lower (more conservative) value. Shown as Fade PV in the breakdown.
Implied growth (reverse DCF). A point IV is only as good as its growth assumption, so fugazi also solves for the growth rate today's price implies, using the same DCF. It is display-only — it never changes the IV — and reads as a check: implied above the model's growth used means the market expects more than the model underwrites; implied below means the market is more conservative than the model.
Assumptions
These five knobs are global. Changing a slider recomputes every name from stored annuals — no re-fetch. Reset to defaults in the Assumptions dialog restores the conservative set below.
Discount rate default 10% — The required annual return used to discount future owner earnings back to today. 10% is Buffett's long-standing hurdle — it is meant to be conservative, not a forecast of the market. Raise it to demand a wider margin; lower it only if you are willing to pay more for the same cash flows.
Terminal growth default 3% — The perpetual growth rate after the explicit forecast, used in a Gordon growth terminal. Keep it near long-run nominal GDP so the model does not assume a company outgrows the economy forever. The engine also caps it just below the discount rate so the math stays defined. Default 3%.
Projection years default 10y — How many years of staged owner-earnings cash flows are projected before the Gordon terminal value. A longer window puts more weight on the (already reduced) growth rate; a shorter window hands more of the value to the terminal. Default 10 years.
Growth haircut default 20% — Owner earnings rarely keep compounding at their old pace, so the model does not take history at face value. It starts from the 5-year compound annual growth rate of owner earnings — the steady yearly rate that gets you from five years ago to the latest year — then reduces that rate by this haircut. A near-zero start year is skipped so a recovery from $5 million to $3 billion is not treated as 250% growth, and if recent owner earnings have collapsed (latest below half the recent peak) that decline is used instead of the longer window. At the 20% default, 10% past growth becomes 8% in the forecast (10% × 80%). After the cut, max growth can still cap the rate (12% by default; 6% for utilities).
Max growth default 12% — A hard cap on the growth rate used in the explicit window, even for fast compounders. Default 12%. Utilities are capped at 6% regardless — rate-base earnings do not compound like software. This is why wonderful businesses often screen as a premium: the model refuses to underwrite heroic growth forever.
Growth used in the model is the 5-year compound annual growth rate of owner earnings (or the 3-year rate if recent OE has collapsed), reduced by the haircut, then limited to max growth — 6% for utilities — and floored at −15%. Terminal growth is also kept just below the discount rate so the Gordon formula stays defined.
Investment grade
Score 0–100 from historical fundamentals, then a letter:
- Earnings consistency (positive OE years, volatility)
- OE and revenue trajectory
- ROE level and persistence (≥12% is a plus)
- Capital intensity (low maintenance CapEx / OE is better)
- Balance sheet (debt, current ratio)
- Valuation margin of safety (weighted into the investment grade more than pure quality)
Letters: A / A- / B+ / B / B- / C / D / F. Negative equity from buybacks (Booking-style) does not get to destroy the whole story via ROE. Financial SICs (6000–6499) and REITs (6798, 6500–6799) carry explicit warnings: this is the wrong model for them.
Filings
Annuals come from SEC EDGAR company facts (XBRL) and submissions. Quotes are public-market proxies (Yahoo chart, Nasdaq, CNBC). The parser prefers the largest revenue series when merging tags so a lease slice or a customer subset cannot masquerade as the business. Share counts that jump ~1,000× between years are rescaled from thousands to units.
Nothing here is advice. Export your ledger; the JSON stores raw filings and assumptions only. Owner earnings, IV, and grades always recompute on open so engine fixes apply without a re-fetch.