Skip to content

Model-based estimates: the method

FinancialMD publishes its own forward estimates. They are computed from a company's SEC filings and its own published guidance by a fixed, published method. They are not consensus, not analyst or Street estimates, and not advice.

What this is and is not

GET /v1/company/estimates returns four things for one company: baseline estimates for the next four quarters and two fiscal years, the guidance the company itself stated, descriptive signals, and the track record of the method. The MCP tool is company_estimates.

curl "https://api.financial.md/v1/company/estimates?company=ticker:AAPL&metric=revenue"
  • It is model output. Every estimate says generated_by: model, names the method version fmd-baseline-1 and lists the proof ids of the reported facts it read.
  • It is not consensus. No analyst, broker or data vendor is a source. We do not carry Street estimates, ratings or price targets, and GET /v1/company/estimates/consensus answers not_covered.
  • It is a baseline. The method knows a company's own history and its own guidance, and nothing else: no news, no prices, no industry view. Judge it by the track record served with each number.
  • It is information only, not investment advice. Nothing here says what to do with a security.

Inputs

Five lines are estimated: revenue, operating income, net income, diluted earnings per share and free cash flow. The input is the company's quarterly series of that line from the standardized statements, which come from its XBRL filings on SEC EDGAR. A fourth quarter is the fiscal year minus the first three quarters.

The method needs eight consecutive reported quarters. With fewer there is no estimate and the answer says why.

Per-share series get two repairs, both from values already filed. A missing fourth-quarter figure is fourth-quarter net income times the year's earnings per share over the year's net income. And when the share count that net income and earnings per share imply jumps by a split-like ratio, earlier quarters are restated to the latest basis.

The formulas

Write y for the reported quarters, oldest first, and n for their number. For a target h quarters ahead, k = ceil(h / 4) is the number of years back to the same fiscal quarter and b = n - 1 + h - 4k is that quarter's index. Four components are computed:

f1 = y[b]
f2 = y[b] + k * mean(d[-8:])            d[i] = y[i] - y[i-4]
f3 = y[b] * g^k                         g = clip(median(r[-4:]), 0.5, 2.0),  r[i] = y[i] / y[i-4]
f4 = y[b] + k * s                       s = exponential smoothing of d, alpha from {0.2, 0.4, 0.6, 0.8}
estimate = median(f1, f2, f3, f4)
scale = mean(|y[-4:]|)
  • f1, seasonal naive: the same quarter one year earlier.
  • f2, seasonal drift: that quarter plus the average year-over-year change of the last eight quarters, once per year ahead.
  • f3, seasonal growth: that quarter times the median year-over-year ratio of the last four quarters, limited to between 0.5 and 2. Used only when the last eight quarters are all positive.
  • f4, smoothed drift: as f2, with the change smoothed exponentially; the weight is the one of four that had the smallest one-step error on the history.

The estimate is the median of the components that exist. With four values that is the mean of the middle two, so one runaway component cannot move it. All component values are in the answer.

A fiscal year is the quarters already reported plus the estimates of the rest. For earnings per share the sum of four quarters approximates the annual figure, because the share count moves within a year.

Company guidance

Guidance is read from the company's own documents on EDGAR: the earnings release attached to a Form 8-K as exhibit 99, and the text of Forms 10-Q and 10-K. A statement is kept only when one sentence holds a forward word, a future fiscal period, a known metric and a value. Each one is served with the exact sentence, its character offsets in the document, the accession number and a link to the document.

A statement is GAAP, adjusted or constant currency when the sentence says so, and unspecified otherwise. Unspecified is never read as GAAP. When two documents of one filing disagree, nothing is published for that metric and period.

Some sentences are read by a language model instead of a pattern. Those rows say generated_by: model and name the model. An answer is kept only when the quoted sentence is found word for word in the document and every number is printed in it.

Guidance moves an estimate in three cases: revenue guidance that is GAAP or unspecified; revenue growth guidance on the same terms, applied to the same period one year earlier; and guidance for operating income, net income or earnings per share that the company marks as GAAP. The estimate becomes the midpoint of the range and anchor says so, with the statistical value beside it. Adjusted guidance is shown but never moves a GAAP estimate. Free cash flow is never moved.

The interval

Each estimate carries an interval meant to hold the reported value four times in five. It is built from past errors of the same method, by the split-conformal rule:

scaled error e = (actual - estimate) / scale
w = r-th smallest |e| over the n past errors, r = ceil((n + 1) * 0.8)
interval = estimate ± scale * w
  • company_history: the past errors are the company's own, at the same horizon. At least eight are needed.
  • pooled_history: with fewer, the errors of all companies at that horizon are used.
  • guidance_range, guidance_history, guidance_and_history: for an estimate moved to guidance, the interval is the company's stated range, widened by how far its results have landed from its own midpoints, or by the statistical width when that history is short.

Only errors already known on the date of the estimate are used. When neither history exists there is no interval, and the answer says so.

Track record

The method is replayed over each company's history. One estimate is made at the moment each quarter was first reported, reading, for every period, only the version of the value that was known at that moment. A value filed later, or a restatement filed later, cannot reach an earlier estimate. Each estimate is scored against the first value reported for its period.

ape = |estimate - actual| / |actual|
median_ape = median(ape)        mape = mean(ape)
wape = sum |estimate - actual| / sum |actual|
naive_wape = the same for f1, the same quarter one year earlier
bias = mean((estimate - actual) / |actual|)
interval_coverage = share of actuals inside the interval

The statistics are served per company and for all companies, by line, by quarter or year, and by horizon, next to every estimate. naive_wape is there so you can see whether the method beats the plainest benchmark. On profit lines it often does not by much: read the numbers before relying on an estimate.

When a reported value arrives, the stored estimate that was in force just before it is scored too, and the result is kept as a live outcome. The per-company record respects as_of. The all-company table is rebuilt by each run and carries its own date.

Signals

Signals describe filed facts by fixed rules. There are four kinds:

  • guidance_change: the midpoint of the company's current statement against its prior one for the same period and basis: raised, lowered, maintained, narrowed, widened or initiated.
  • estimate_revision: our own estimate against our own prior version: up, down or unchanged.
  • result_vs_guidance: the first reported value against the company's guided range: above, within or below.
  • result_vs_own_estimate: the first reported value against our estimate made before it: above, equal or below.

Each signal names its rule and the proofs it rests on. There are no ratings, no price targets and no recommendation words.

Limits

  • The method sees one company's own history. It does not see demand, prices, competitors, one-time items or anything said on a call.
  • Profit lines and free cash flow swing far more than revenue, and the errors show it.
  • Guidance printed only in a table, or whose period is named in an earlier sentence, is not read yet.
  • Future period dates are projected from the fiscal calendar and can be a few days off for 52 or 53 week years.
  • Companies without eight consecutive standardized quarters of a line have no estimate for it.

If an estimate or a guidance row looks wrong, tell us.

Sources and legal basis

  • Source: SEC EDGAR only. Filings are public documents; we follow the SEC's fair access rules with a declared user agent and a rate limit.
  • Guidance: facts the issuer published about itself, with a short quoted sentence and a link to the original. We do not host the document.
  • Estimates and signals: our own computation over those facts, labelled as model output.
  • Not used: any vendor's estimates, analyst reports, consensus figures, transcripts or news text.

The terms apply. This page describes method version fmd-baseline-1; a change to any formula changes the version.