Materiality

Methodology

Checked against the code 28 July 2026

Everything Materiality shows is either a figure taken from a company's own filing, a calculation performed on those figures by a fixed method, or a sentence written by AI about the first two. This page covers the middle one: where the numbers come from and exactly what is done to them.

The division of labour

Arithmetic produces every number. AI produces the sentences around them and is never asked to supply a figure. That split is the reason this page can exist at all: a calculation performed the same way every time can be written down, and a language model asked for a number cannot.

Five calculations are versioned. A version identifier travels with every result and is stored alongside it, so a score from March and a score from July can be compared and you can tell whether the company moved or the method did.

  • stock_score_v2, the company scorecard.
  • valuation_dcf_v1, the intrinsic value model.
  • market_health_v1, the market conditions reading.
  • portfolio_health_v1 and stress_scenarios_v1, for a portfolio taken as a whole.

Changing any weight, band or threshold requires a new version identifier. It is not optional and it is not a judgement call, because a score whose method changed silently is a history that lies about itself.

Where the data comes from

  • Filings and financial statements come from the SEC's EDGAR system, read from the company's own XBRL submissions rather than from a data vendor's copy of them.
  • Quotes and company profiles come from Finnhub, and historical price series from Yahoo Finance. Prices are delayed, not real time.
  • Written analysis comes from OpenAI models, working only from the figures above.

Annual figures come only from a 10-K or 10-K/A. That sounds obvious and was not always true: an earlier version fell back to the newest value under any form and any period when no annual figure existed, so that something would show. It showed the wrong thing twice over. A company reporting a tag only quarterly had a three-month figure used where a year was asked for, understating it roughly fourfold and inflating every margin derived from it. And a foreign issuer, which files no 10-K at all, had its entire scorecard built from 20-F and 6-K facts reported under IFRS and scored against bands calibrated on US GAAP.

Now the answer is null where there is no annual figure, the metric drops out, and the category reweights. Measured across 229 companies, fifteen scores changed when this landed. Several moved by ten points or more, in every case because a wrong input was removed rather than because a band moved.

Which twelve months the figures cover

Revenue, profit, cash flow and earnings per share are the trailing twelve months: the last full financial year, plus the current year to date, less the same span a year earlier. Every one of those three is a total a company stated outright in a 10-K or 10-Q, so nothing here is reconstructed from a chain of differences. Balance-sheet figures — assets, equity, debt, cash — come from the most recent statement rather than the most recent annual one. The date each covers is printed on the scorecard.

Until version stock_score_v2these were the last completed financial year. That is a defensible figure on its own, and misleading the moment it is divided by today’s share price: the two are up to fourteen months apart. On 31 July 2026 Micron showed a price-to-earnings ratio of 108, because the earnings underneath it were the $8.5bn of a year ended the previous August while the company had since reported $50.5bn over the trailing year. The real multiple was 18. Nothing was miscalculated. The numerator and the denominator were describing different years, and only one of them said which.

Where a company has restated — after a spin-off, or a change in what counts as a continuing operation — the comparative is taken as most recently filed rather than as first filed, so all three terms are measured the same way. Honeywell restated its 2024 revenue from $38.5bn to $34.7bn in February 2026; subtracting the original comparative from the restated year would have understated its trailing revenue by an entire divested business. The Financials tab keeps the opposite rule and shows each period as it was first reported, because that tab is a record of what was said at the time.

A company that has filed no quarterly report since its annual one has no newer figures to add, so its trailing year and its financial year are the same twelve months, and the scorecard says so. Checked against 94 companies across nine filer types: every one of them agreed with its own annual report to the cent.

How the statements are normalised

Companies do not tag their filings the same way, and the same company does not tag them the same way across its own history. Apple tags revenue under one XBRL concept, older filings use another, and both appear in the same company's record. So every statement line carries a list of candidate concepts, and they are resolved per period rather than per line. Committing to whichever concept happened to have data left the other years blank.

  • Quarterly figures are derived, not read. Filers report cumulative year-to-date amounts, so periods sharing a fiscal-year start are ordered and differenced. The shared start cancels, which makes this exact rather than approximate.
  • Fiscal years come from the period, not the filing. XBRL's own fiscal-year field describes the filing a fact appeared in, not the period it covers. A 10-K carries two years of comparatives and stamps all of them with the filing's year, so Boeing's 2017, 2018 and 2019 revenue all arrive labelled 2019. Periods are named by the calendar year they end in, which is the convention companies use themselves.
  • Missing balance sheet lines are derived from the accounting identity, but only from figures the filer did report, and never overwriting a reported value. Coca-Cola tags no total liabilities figure; it is recoverable from the two numbers either side of it.
  • Where a statement does not foot, we say so. Some filings genuinely do not add up as displayed, most often at REITs and utilities with unusual equity structures. A reader who adds a column and gets a different total concludes the data is broken, so the honest alternative to inventing a reconciling row is telling them which identity failed.

The scorecard

Five categories, each built from several metrics, each metric scored 0 to 100 by mapping its value onto ordered bands. Categories carry fixed weights:

  • growth, 25%.
  • health, 25%.
  • valuation, 20%.
  • momentum, 15%.
  • risk, 15%.

A category needs at least two metrics with usable data before it will score at all, and the overall score needs at least four of the five categories. Where a metric is missing, the remaining weights within that category are scaled up proportionally, which is exactly what a weighted average over the present weights does. The displayed weight and the effective weight are both shown, because a category quietly carrying 45% of a score after reweighting is something you should be able to see.

The individual band thresholds stay private. That is the one place in this page where something is withheld, and the reason is that the bands are the tuned part: publishing them invites optimisation against the number rather than the business, and they are the part of this that took work. Everything upstream of them, which is what determines whether a score is trustworthy, is above.

Intrinsic value

A 5-year discounted free cash flow model. Free cash flow is projected forward at a growth rate you set, a terminal value captures everything after that, both are discounted to today, and the balance sheet is bridged across: add cash, subtract total debt, divide by diluted shares.

  • Starting free cash flow is the latest fiscal year's operating cash flow less capital expenditure. Where it is not positive, no automatic value is produced at all, because projecting a negative figure forward at a positive growth rate compounds the negativity and answers a question that was not worth asking.
  • The opening growth assumption is the company's own three-year free cash flow CAGR, floored at -5% and capped at 12%. It is frequently negative, deliberately: a business whose cash flow has been shrinking opens on a shrinking projection rather than an invented positive one.
  • The discount rate must exceed terminal growth by at least a percentage point. The terminal formula divides by the gap between them, so the model refuses the assumption rather than returning a very large number.
  • Share count is diluted where reported. Where only a basic or outstanding figure exists, that is used and the substitution is labelled on screen rather than silently absorbed.

The figure shown beside the price is labelled “upside to value”, and that is what it is: the distance from the estimated value to the current price, as a share of the price. It is not the classic margin of safety, which is the discount to value and a different number. At a price of $60 against a value of $100 the upside is 67% and the margin of safety is 40%. The margin of safety calculator shows both, labelled, because the two are routinely mistaken for each other.

Market and portfolio readings

Market health reads four components of a benchmark index: trend, momentum, volatility and drawdown, weighted 30, 25, 20 and 15 against each other and divided by the weights actually present. It is a summary of recent conditions, not a forecast, and the page says so.

Portfolio health and the stress scenarios apply the same idea to a set of holdings rather than one company, under their own version identifiers. Scenario results are arithmetic on your holdings and stated exposures, not predictions about what any market will do.

What is deliberately not adjusted

These are the honest gaps. Each is a real choice, and knowing about them changes how you should read the output.

  • Stock-based compensation is left as filed. It is not added back, subtracted, or treated as a cash cost. Cash flow statements add it back as a non-cash expense even though it genuinely dilutes existing owners, so free cash flow here is flattered by it at companies that pay a lot of it. Compare share count over time to see what it cost.
  • Leases are taken as reported. There is no capitalisation adjustment and no reclassification between operating and finance treatment, so leverage at lease-heavy businesses such as retailers reflects the accounting standard rather than an adjusted view of it.
  • Only US dollar figures are read. No currency conversion is performed anywhere. A fact reported in another unit is not picked up, which is consistent with covering SEC filers and is also why non-US issuers are out of scope entirely.
  • No sector adjustment. Bands are calibrated once and applied across the market, so a capital-intensive utility is scored on the same leverage scale as a software company. That is a known blunt edge.

How often things update

  • Quotes refresh every 30 seconds, price charts every minute.
  • The market health reading refreshes every 15 minutes.
  • Earnings dates and estimates refresh every half hour to an hour, dividend history twice a day.
  • Filings update when a company files. Nothing is on a schedule of ours, because the SEC is not.
  • AI analysis is never regenerated automatically. It is written once against a specific filing date and reused until you ask for it again, which is why the filing it was written from is shown beside it.

Worked examples

The free calculators run the same arithmetic described here, with every input exposed and a worked example on each page. The discounted cash flow calculator uses the identical model this product runs on company data, so the fastest way to understand what the valuation tab is doing is to put your own numbers through it.

Limitations worth holding on to

  • Coverage depends on what a company actually filed. A recent listing with little history will be thin, and thin means fewer metrics, which means more reweighting.
  • Written analysis is generated by a language model and can be wrong, incomplete, or confidently both. The figures beside it are the check on it, which is the whole reason they are computed separately.
  • A score is a summary, and every summary discards something. It is a starting point for reading the filing, not a substitute for it.
  • None of this is investment advice, and nothing here accounts for your circumstances, tax position or risk tolerance.

If something on this page does not match what the product shows you, that is a defect worth reporting and we would rather hear about it. norrowstudiossupport@gmail.com.