MaterialityIn development

Methodology

Checked against the code 27 August 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.

Ten 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_v5, the company scorecard.
  • piotroski_f_score_v1, the financial strength tests.
  • altman_z_v1, the distress score beside them.
  • sloan_accruals_v1, the earnings quality figure beside both.
  • dividend_safety_v2, how safe the dividend looks, for the companies that pay one.
  • peer_percentile_v1, where a company sits among its sector, and the letter grades read off it.
  • 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.

Four kinds of number, and how to tell them apart

Every figure on a company page is one of four things. The interface distinguishes them, and this is what the marks mean.

  • Reported. The company tagged this exact figure in a filing. It carries a dotted underline; opening it names the XBRL concept, the form it came from, and the date it was filed. Nothing has been done to the number except display it.
  • Derived. Arithmetic on reported figures, performed the same way every time. It carries no underline, and the absence is the signal: a quarterly figure computed by subtracting three quarters from a year, or a total liabilities line reconstructed from assets less equity, never inherits the tag of the numbers it was built from. Derivation never overwrites a figure the company reported.
  • Estimated. Somebody’s forecast of a number that does not exist yet. Only two things here are estimates: analyst consensus on the earnings tab, which is labelled consensus, and the intrinsic value model, whose inputs you set yourself and can change. No estimate is ever mixed into a reported or derived figure.
  • AI-generated. Sentences, never numbers. Every block of AI writing is labelled as written by AI, sits behind a button you have to press, and is produced from the figures above rather than from the model’s memory of the company. It can still be wrong about what the figures mean.

Where a figure is unavailable the answer is blank rather than approximate. A dash means no reported value exists and none could be derived from the ones that do, which is a different statement from zero and is meant to be read as one.

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. When Finnhub cannot be reached, quotes fall back to Yahoo Finance so prices stay on the page rather than disappearing. Prices are refreshed roughly every 30 seconds rather than streamed live, so a figure here can be a little behind the market.
  • The current dividend rate is the latest payment per share times how often it is paid, from Yahoo Finance's record of past payments. A board can change a dividend weeks before the first payment at the new amount, so a payment that has been declared and not yet paid is read from Nasdaq and used in preference, which is what keeps a raise or a cut from taking a quarter to appear. Nasdaq carries no such record for many companies; where it says nothing, the rate is the last payment made. The per-year history further down each dividends tab is what the company reported to the SEC and is not affected either way.
  • Exchange rates come from the European Central Bank, read from its own data portal rather than from a service that re-publishes it. These are reference rates: one fix per currency per business day, set at 2:15 pm Central European Time. They are not dealing prices and they do not move between fixes.
  • Crypto prices come from Coinbase, the exchange itself rather than an aggregator downstream of it. Each figure is a last traded price on that one venue. Crypto has no consolidated tape and no official close, so another exchange will quote a slightly different number at the same instant, and nothing here averages them. These are prices only: no crypto asset gets a score, a statement table or a written analysis, because there is no filing to read.
  • Option contract prices come from Cboe, the exchange the contracts list on rather than an aggregator downstream of it. They are delayed at least fifteen minutes, which matters more for a contract than for a share: one near expiry can move a long way in that time.
  • Short interest comes from FINRA, which is the owner and the source of every one of those figures. Broker-dealers report their short positions twice a month and FINRA publishes the totals about two weeks later, so what you see is a fortnightly snapshot of a settlement date already past, never a live number. The percentage shown is of shares outstanding, not of float: float excludes closely-held and restricted stock, neither FINRA nor the SEC publishes it, and the two are different measures rather than estimates of each other. This one is systematically lower than the percent-of-float figure quoted elsewhere. Where a company has more than one listed line, no percentage is shown at all, because a share count from its filings covers every line and the short interest covers one. Days to cover is FINRA's own calculation and is left blank where FINRA reports no usable value. Short interest is a count of shares sold short and nothing more: it says nothing about who sold them or why, and a great deal of it is one leg of a hedge rather than a bet against the company.
  • Congressional disclosures come from the Clerk of the US House of Representatives and from the Senate's own electronic financial disclosure system, read from what each publishes rather than from a tracker downstream of them. Members have 45 days to report a covered transaction, so a disclosure here is routinely weeks later than the trade it describes, and the forms ask for a range rather than an amount. Roughly one House report in eight is filed on paper and published as a scan with no readable text; those are listed with a link to the source and their contents are not read. The Senate publishes a table, so its reports are read in full.
  • Party, state and member portraits come from the unitedstates project, whose roster is released into the public domain under CC0 and whose photographs are official US Government portraits. Neither chamber publishes a party alongside a disclosure, and the Senate publishes no state either, so both are matched to the roster by name and left blank where the match is not certain. A member with no portrait here has usually left office, because the roster covers those currently serving.
  • Written analysis comes from OpenAI models, working only from the figures above.
  • The sector context panel is the one exception to that, and the only feature here that searches the open web. It searches a fixed list of 17 sources and no others, so it cannot quote a page from somewhere nobody vetted: sec.gov, federalreserve.gov, bls.gov, bea.gov, eia.gov, treasury.gov, reuters.com, apnews.com, wsj.com, ft.com, bloomberg.com, cnbc.com, barrons.com, marketwatch.com, spglobal.com, morningstar.com, nasdaq.com. Every page it used is listed under the briefing it produced. Community and contributor platforms are deliberately excluded, because anyone can publish on them and the model reads what it retrieves. The figures on a sector page are never taken from a search: they are measured here, and the model is told it may not contradict them.
  • Trace’s news comes from a feed of published articles, filtered to the same standard: only bloomberg.com, cnbc.com, reuters.com are carried, and everything else the feed offers is dropped before Trace sees it. That filter is severe, and it is meant to be. Most of what the feed carries is written on contributor platforms, so on a quiet week for a company there may be nothing left at all. When that happens Trace is told to say that no coverage from a cited publisher was found, rather than that nothing has happened, because those are different things. Headlines are shown as the publisher wrote them and are always attributed.
  • The price charts are drawn with Lightweight Charts, created by TradingView. The library draws the chart; every point plotted on it comes from the sources above.

Annual figures come 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.

One narrow exception was added later, and it is bounded by the two hazards that made the rule right in the first place. A 20-F or 40-F is read as an annual report where the filer tags its facts under US GAAP and reports in US dollars, because there is then no accounting standard to bridge and no exchange rate to guess. A company reporting under IFRS carries no US GAAP facts to widen into, and one reporting in its own currency stays on the narrow list, so both keep the refusal that names the real reason. What is left is the case with neither problem, and it is a small minority of foreign filers.

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, meaning assets, equity, debt and 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_v2 these 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

Six categories, each built from several metrics, each metric scored 0 to 100 by mapping its value onto ordered bands. Categories carry fixed weights, and the four drawn from the filings carry eighty percent of the result between them:

  • growth, 20%.
  • profitability, 20%.
  • health, 20%.
  • valuation, 20%.
  • momentum, 10%.
  • risk, 10%.

A category needs at least two metrics with usable data before it will score at all, and the overall score needs at least five of the six 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.

Financial strength

A second, separate reading of the same filings, and the one place on this site where the entire method is published rather than summarised. It is the F-Score set out by Joseph Piotroski in 2000: nine tests, each of which a company either passes or does not, scored from one annual report against the one before it. It does not feed the scorecard above and the scorecard does not feed it.

Nothing is withheld here, and the contrast with the paragraph above is deliberate rather than inconsistent. The scorecard's bands are calibrated here and publishing them would invite optimisation against the number. These nine tests were published by someone else a quarter of a century ago, and every one of them is a comparison rather than a tuned threshold, so there is nothing to optimise against and no reason to be coy:

  • Net income is positive.
  • Operating cash flow is positive.
  • Return on assets is higher than last year's.
  • Operating cash flow exceeds net income.
  • Long-term debt has fallen as a share of average assets.
  • The current ratio has risen.
  • The diluted share count has not risen.
  • Gross margin has widened.
  • Asset turnover has improved.

Returns and turnover are measured against the assets the company opened the year holding rather than the assets it closed with, which is the definition the paper uses and not the more convenient one. A company growing its balance sheet would look less profitable than it was on the closing figure, and the result would still be called an F-Score.

A test whose figures a company did not report is left unrun. It is never counted as a failure, because a failed test and an unrun test contribute the same nothing to a total and only the denominator can tell them apart. So the card reports how many tests it could run alongside how many passed: AT&T tags no gross profit at all and runs eight, Deere presents no classified balance sheet and runs six. Where fewer than six can be run, or where a whole group of them is missing, the tests are shown and no total is given. Where a company reports no long-term debt figure, that is read as unknown rather than as zero, which costs the leverage test for genuinely debt-free companies and is still the right way round: the opposite reading scored JPMorgan's lapsed debt tag as a well-capitalised bank.

Financial companies are not scored. Piotroski excluded them, and the exclusion is structural rather than fastidious: the tests read working capital, gross margin and long-term borrowing, and a bank, insurer or REIT reports those differently or not at all. Most foreign private issuers are not scored either, for the same reason the scorecard skips them; the exception is one reporting under US GAAP in US dollars, which has neither an accounting standard nor a currency in the way. Nor is any company that has not yet filed two comparable annual reports.

Earnings quality

A third reading of the same filings, and the only figure on this site that deliberately carries no verdict. It is Richard Sloan's accrual ratio: one fiscal year's net income less the cash operations generated over that year, divided by the average total assets employed across it. A large positive number means reported profit ran well ahead of the cash that actually arrived; a negative one means the reverse.

Why no verdict. Sloan's 1996 result is that companies in the top decile of accruals go on to underperform those in the bottom: a ranking of firms against one another in a given period, not a level any single company can be measured against. There is no ranked universe behind this page, for the same reason the scorecard uses fixed bands rather than peer percentiles. Inventing a threshold here would be this site's own number wearing Sloan's name, so the figure is published with the four inputs behind it and nothing calls it good or bad.

Two things worth knowing before reading it. The ordinary value is not zero: measured across twenty large filers the middle company sits near minus four and a half percent, because depreciation reduces profit without costing any cash, so most large companies generate more cash than they report as profit. And the ratio flatters a loss, because a company losing money against positive cash flow produces a strongly negative number that looks pristine on any “lower is cleaner” reading. Where the profit in question was a loss, the figure says so in its own sentence.

The fourth of the nine tests above asks whether operating cash flow exceeded net income. This is the same comparison given a size and a denominator. Neither is derived from the other, and both are shown because a yes-or-no and a magnitude answer different questions.

Distress risk

Beside the nine tests sits Edward Altman's Z-Score, which asks a different question: not whether the business improved, but how far it is from failing. It weighs five ratios into one number and reads that number against two thresholds. Everything it uses is on the latest balance sheet and the trailing twelve months, so unlike the tests above it describes the company as it stands today rather than against last year.

There are two models and this site computes both, because they are not interchangeable. Altman fitted the original on public manufacturers and later published a second for companies outside manufacturing, which drops the revenue term, reweights the rest, and measures equity at book rather than at market. The split follows the filer's SIC code and is not intuitive: Apple is a manufacturer, Microsoft is not, and nor are Walmart, Netflix, UPS or AT&T. The card names which model produced the number, and the two sets of thresholds are:

  • The original. Safe above 2.99, distress below 1.81. Equity is valued at the market price, so this one moves with the stock.
  • The non-manufacturer model. Safe above 2.6, distress below 1.1. Equity is book value, so this one does not move with the stock at all.

The zone is the model's real output and the number is the arithmetic behind it. Above the safe threshold the score has no resolution left: a company reading 40 is not thirteen times safer than one reading 3, and both mean the same thing. Read the zone, and treat the figure as the working.

Every term is required. Where a company does not report one, no score is given rather than a smaller one, because the thresholds assume all five and a sum missing a term is a number on no scale. That is the opposite of how the nine tests degrade, and deliberately so: a count can lose a member and still mean what it meant, a weighted sum cannot.

Two limits worth knowing. The model is unkind to businesses that run on negative working capital by design, which includes airlines, grocers and restaurants, because they collect from customers before they pay suppliers; several perfectly healthy ones read in the grey or distress zone for that reason alone. And financial companies are not scored at all, for the same reason Piotroski excluded them.

AI conviction

A whole number from 1 to 10, and the one figure in this product that a model produced rather than arithmetic on filings. The scorecard above is computed; this is judged. They are on different scales on purpose, so that a 7 and a 70 cannot be mistaken for each other.

It rates how compelling the investment case looks given only the figures already on the page, weighed against what the written analysis itself says. It is not a price target, it does not read the market, and it is not advice.

The Strong Buy to Strong Sell rating beside it is derived from the score rather than taken from the model: 9–10 Strong Buy, 7–8 Buy, 4–6 Hold, 2–3 Sell, 1 Strong Sell. The model is asked for both, and then the rating it gave is discarded and recomputed. That is not waste. Asking for it makes the model commit to a direction, and deriving it means the two halves can never disagree. A model that returned "Buy" beside a 3/10 produced a page arguing with itself, and a reader had no way to tell which half to believe.

A conviction score exists only for a company somebody has actually run an analysis on. A company that has not been analyzed has no score rather than a low one, and every surface that shows the column says so in words rather than printing a dash.

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 same model reads in the other direction, under valuation_implied_v1. Instead of assuming a growth rate and producing a value, it takes today's price as given and solves for the free cash flow growth rate that would justify it, holding your discount rate and terminal growth where you set them. The arithmetic is the same 5-year model over the same balance-sheet bridge, searched by halving a bracket from -50% to 100% a year until the value it produces equals the market value of the equity. Outside that range it refuses rather than reporting a rate at the end of it: a price no five years of growth can explain is a fact about the price, and rounding it to the edge of the search would hide exactly that.

That implied rate is reported beside what the company has actually done, because on its own it is only a number. The comparison uses the company's own free cash flow history unclamped, which is deliberately not the opening suggestion above: that one is held to -5% and 12% because it proposes a rate on your behalf, while this one is a measuring stick and a stick that stopped at 12% would make every fast-growing business look as though the market were asking the impossible. Where the implied rate is faster than the company has managed in any single year on record, that is said plainly. There is no comparison against other companies: this product has no peer group, and inventing one to fill the sentence would be worse than leaving it out.

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.

It is a daily reading, taken from the last session that has closed, and every page that shows it says which session that was. Nothing in it is an intraday figure: the components are 50 and 200-day averages, 20 and 60-session returns, a year of volatility readings and a 52-week drawdown. Reading a session still in progress as though it had closed would have moved the score minute by minute without making any of those measurements more current, and it meant two pages showing the same score could disagree simply because one was cached a little longer than the other.

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 from filings. No filed figure is ever converted from another currency, and a fact reported in another unit is not picked up at all, which is consistent with covering SEC filers and is why non-US issuers are out of scope entirely. The currencies board is the one place this product shows a non-dollar figure, and nothing on it feeds a company's statements, score or valuation: those remain dollars as filed.
  • 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.