How the scoring models are built

A score you can't inspect is a horoscope. So here is how Buy Like Buffett turns a company's own SEC filings into model outputs — and, just as important, where the honest limits are. Nothing here is a recommendation; these are educational frameworks for studying business quality.

Where the data comes from

Every input is pulled from primary filings via the SEC's EDGAR XBRL data — the same 10-K numbers a company files with regulators. We normalize each filer's tagged concepts into a consistent set of line items, take annual (10-K) figures, and prefer the latest-filed disclosure when a period has been restated. When a company hasn't reported something we need, we leave it blank rather than guess.

Coverage includes operating companies whose annual SEC filings provide enough comparable inputs for the relevant model; missing inputs remain unscored rather than guessed.

The operating Moat Score (0–100)

The current methodology, score-record version moat-index@3.0.0, asks five investor questions in this order. Each sub-score begins at 20% of the composite. When exactly one component genuinely lacks filing data, the other four weights are renormalized over the scored 80% and that abstention is stored and disclosed. Two or more abstentions mean no composite is published.

Business trend — 20%

Are revenue and diluted earnings per share growing, holding, or eroding? We use the five most recent calendar fiscal years ending with the latest available fiscal year. Within that fixed window, only years where both measures exist are aligned. A missing year remains missing; the model never reaches farther back to manufacture five observations. CAGR uses the actual elapsed span. Each series blends compounded direction (60%) with observed-period consistency (40%), then revenue and EPS contribute equally. Direct diluted EPS is preferred. When that tag is missing for a year, we derive the value from same-year net income divided by diluted weighted-average shares. At least two aligned observations are required. A two-year record can score with a low-history-confidence note; a single aligned year is a genuine component abstention.

Pricing power — 20%

Gross-margin level and stability across up to the ten most recent annual observations. High, steady gross margins are the fingerprint of a moat: a brand, a switching cost, or a low-cost position that lets a business hold price without losing customers.

Returns on capital — 20%

Return on invested capital (after-tax operating profit ÷ invested capital), measured for both median magnitude and how consistently up to the ten most recent annual observations clear a 12% hurdle. Consistently high ROIC is the hardest thing for a competitor to attack — it's what "wonderful business" means in numbers.

Balance-sheet safety — 20%

Leverage is measured as max(net debt, 0) ÷ EBITDA alongside interest coverage. Net cash cannot create a leverage bonus; it simply contributes zero leverage. Positive net debt requires usable depreciation and amortization and positive EBITDA, while interest coverage remains an independent check.

Capital allocation — 20%

Owner-earnings growth and share-count behaviour across up to the ten most recent annual observations. Buybacks at sensible prices shrink the share count and compound per-share value; serial issuance dilutes it. This is the sub-score that separates a great business from a great business run by people who waste its cash.

Moat tiers: Wide (80–100), Narrow (60–79), Shallow (40–59), None (below 40).

The financial-sector model

Operating companies use the Moat Score. Covered banks and insurers are scored under a separate financial-sector model with its own components and calibration; financial-sector scores are never ranked, averaged, or described as comparable with the operating Moat Score.

A bank is read through return-on-equity quality, capital strength, earnings stability, book-value growth, and net-interest measures when the filings support them. An insurer uses the same balance-sheet foundation plus underwriting measures when they apply. Every component may abstain when comparable filing data is missing, and the model withholds the composite when coverage is too thin. See the published bank result for JPMorgan Chase and insurer result for UnitedHealth Group.

Owner-earnings value range

For operating companies, quality is only half the question; price is the other. We calculate owner earnings — net income plus depreciation and amortization, minus maintenance capital expenditure — for each usable year and normalize it as the median of up to the five most recent observations. Maintenance capital expenditure is the lesser of reported capital expenditure and depreciation and amortization. If capital expenditure is present but depreciation and amortization is missing, the estimate abstains rather than assuming maintenance spending.

The low end assumes no growth and capitalizes normalized owner earnings at a 9% discount rate: 1 ÷ 9%, or an 11.111× multiple. The high end uses the lower of revenue CAGR and split-safe diluted-EPS CAGR between the latest fiscal year and the fiscal year exactly five years earlier. Growth is floored at 0% and capped at 4%; when valid five-year endpoints are unavailable, growth is 0%. The capitalization multiple is 1 ÷ (9% − growth), capped at 18×. The high end is displayed as our conservative value estimate; it is not presented as intrinsic value or fact. Separately, the low, zero-growth end is the value if growth stopped today, and price is shown as a discount or premium to that low-end floor. Every company page discloses the range, per-share values, growth rate, discount rate, multiple cap, and maintenance-capex method. The financial-sector model remains price-free and publishes no operating-company value estimate.

Changelog

— reader-language relabel

Reader-facing labels now use Capital allocation and point-in-timelanguage. The labels changed; scoring formulas, inputs, weights, thresholds, tier assignments, methodology versions, and published score history did not.

moat-index@3.0.0

Business Trend now uses the five most recent calendar fiscal years rather than the full available history. The five equal weights, abstention rules, ROIC hurdle, and disclosed valuation model remain unchanged from moat-index@2.0.0.

moat-index@2.0.0

Baseline figures below are bound to the immutable pre-v2 methodology source for moat-index@1.0.0; current figures come from the moat-index@3.0.0 contract on this page.

Business Trend: v1 had four quality questions and no explicit revenue-and-EPS trend component; v2 adds Business Trend as the first question so deterioration cannot hide inside a strong historical average.

Weights and abstentions: the archived moat-index@1.0.0 contract weighted Pricing Power and Returns on Capital at 30% each and Balance-Sheet Safety and Capital Allocation at 20% each, and required every component; moat-index@2.0.0 starts all five questions at 20%, renormalizes the other four after exactly one disclosed abstention, and withholds the composite after two or more abstentions.

ROIC hurdle: moat-index@1.0.0 measured consistency against an approximately 9% cost-of-capital hurdle; moat-index@2.0.0 uses 12%, a more demanding test of durable excess returns.

Valuation presentation: v1 showed one intrinsic-value estimate using normalized owner earnings, a discount rate, and capped growth; v2 shows a fully disclosed low-to-high owner-earnings range, calls the high end a conservative estimate rather than fact, and exposes every assumption.

D&A normalization: v1 could not reliably distinguish a combined D&A fact from separate depreciation and amortization facts; v2 prefers the combined fact and otherwise sums only disjoint same-year facts, avoiding both missing and double-counted owner earnings.

Split-safe diluted EPS: v1 used filed or same-year derived diluted EPS without the new corroboration rules; v2 rebases EPS when either a restated EPS fact matches a share-count movement or at least two share tag families report the same integer factor and direction in adjacent fiscal years, with no comparable family reporting an incompatible integer-like transition. Duration and period-end facts from the same filing may key the event one fiscal year apart; the normalizer reconciles those representations before testing agreement. Basic, diluted-weighted, and period-end share series all participate. An uncorroborated share jump may be issuance, an acquisition, or an IPO recapitalization, so it never turns otherwise available EPS into a false abstention. The uncertainty remains disclosed, however, and the owner-earnings value range holds growth at 0% rather than trusting an unproved EPS basis.

Version provenance: v1 score records remain append-only with their original version labels; v2 records never rewrite them. The v1→v2 boundary is sacred history: it is recorded as a methodology transition, never presented as an operating-company score movement. CFA charterholder Nikhil Bhauwala reviewed the v2 Moat Score methodology; that review did not cover v1, code, individual scores, valuations, or investment outcomes.

The honest limits

Maintenance capex is an estimate. The SEC doesn't split capital spending into "maintenance" and "growth," so we approximate maintenance capex as the lesser of reported capex and depreciation and amortization. It's a defensible proxy, not a precise figure, and we'd rather say so than pretend.

Some financial businesses remain not covered. Insurance agents and brokers, REITs, and other real-estate or holding and investment businesses fit neither published model today, so they remain not scored rather than receive a stretched formula.

Coverage gaps stay visible. If a company is missing inputs a sub-score needs, it gets an explicit abstention, never a guessed value. One abstention is disclosed while the other four weights renormalize; two or more abstentions mean no composite. Under the current v3.0.0 rules, a one-year Business Trend record is one such genuine abstention.

Scores change only as filings do. The composite moves when a company files new numbers, not with the daily price. We log every reading with a timestamp and the methodology version that produced it, so the history stays auditable and comparable over time.

Technical appendix

The operating universe starts with the SEC company-ticker map. Symbols containing a dot or hyphen are excluded because they do not round-trip reliably through every upstream provider; SEC CIK is the durable filing identifier. There is no U.S.-domicile or market-cap minimum.

Annual facts are selected by fiscal year and filing context, with the latest-filed comparable disclosure winning when a period is restated. Diluted EPS uses USD-per-share facts with a same-year net income ÷ diluted-weighted-share fallback, and it is aligned with revenue on every jointly available fiscal year. Score history, value assumptions, component and composite coverage notes, insufficient-data reasons, and methodology version are stored with each reading.

What this is not

The Moat Index is an educational framework, not investment advice, and not a buy or sell signal. It can't know your circumstances, and a high score is a statement about a business's past durability, not a promise about its stock. Read the full disclaimer, then go score a company.