A read-it-once workflow for the morning after a print. When a company reports, the earnings press release hits EDGAR as an 8-K Item 2.02 (the EX-99.1 exhibit) before the analyst notes, before the headline aggregators, and usually before the stock has finished repricing. Most coverage leads with the one number management chose to feature — the adjusted EPS, the flattering growth rate. The decoder reads the actual release and separates the reported quarter from the framing around it: what GAAP says, whether the growth is real and cash-backed, and where the guidance moved.
Why this works with edgar.tools MCP
The earnings release is a primary source, filed within minutes of the print. Ask a vanilla LLM "how was [company]'s quarter?" and you get its recollection of a quarter from training data — often the wrong fiscal period, with numbers months or years stale. Ask it over a news headline and you inherit the headline's spin.
The release itself is unspun in one dimension and heavily spun in another:
- The numbers are exact — GAAP and non-GAAP, the income statement, the cash-flow lines, the guidance ranges are all there, lifted verbatim from the filing.
- The narrative is management's — the bullet points up top, the CEO/CFO quotes, and the choice of which metric to headline are a sell-side pitch. The adjusted number is almost always larger than GAAP; the featured growth rate is almost always the flattering comp.
The decoder uses MCP to anchor on the exact figures and read the narrative skeptically:
material_events— finds the 8-K Item 2.02 (the earnings 8-K) for the company; the most recent one is the quarter just reported.filing_section('earnings_release')— returns the EX-99.1 press release as markdown prose plus the financial statements as lossless HTML (tables='core'— income, balance sheet, cash flow, outlook), so every reported value is preserved, not paraphrased.- Freshness signal —
data_qualityon every response; the 8-K isfreshness_lag_days: 0the day it files.
How to use
Copy the framework below into your Claude / ChatGPT / Gemini conversation. With edgar.tools MCP connected, the model will locate the latest earnings 8-K and read the release. Then ask:
Run the Earnings Release Decoder on [TICKER].
Or right after a print: "[TICKER] just reported — decode the release."
The framework (v1.0)
You are a buy-side analyst reading an earnings release the morning after the print, before the sell-side notes land. Your job is to separate the reported quarter from the framing around it and produce a one-page brief: what was actually reported, whether the quality holds up, where guidance moved, and what management is steering you toward or away from.
Non-negotiables
- Quote GAAP and non-GAAP side by side — never the adjusted number alone. Every figure traces to the release.
- The headline number is the adjusted one unless proven otherwise. Reconcile it to GAAP and name the add-backs (SBC, acquisition amortization, restructuring). A large GAAP-to-non-GAAP gap is the story.
- Guidance moves the stock more than the printed quarter — lead the forward read with it.
- No analyst consensus is in the filing. "Beat/miss" vs the Street can't come from EDGAR; measure against the company's own guidance and history. If you cite consensus, flag it as external.
- Cite growth year-over-year, plus sequential where the release shows it — a flattering YoY can mask a sequential stall.
- Cash audits earnings: compare free cash flow to net income. Profit that doesn't convert to cash is a flag.
- If
data_quality.is_stale, or the latest 8-K predates the expected report date, say so and stop — you may be reading last quarter.
Workflow (ordered, mandatory)
Step 1 — Locate the latest earnings 8-K
Call material_events({ company: "[TICKER]", item: "2.02", days: 120 }). Item 2.02 is the earnings 8-K; the most recent hit is usually the quarter just reported. Confirm it's the real release — it carries the EX-99.1 press release and financial statements — since a 2.02 tag sometimes rides on a non-earnings 8-K (e.g. a CEO change bundling preliminary results). No 2.02 in the window? Widen days, or drop the item filter — some issuers report semi-annually or file results under Item 8.01; foreign private issuers use a 6-K.
Optional (+1 fetch). For a beat-vs-guidance read, also grab the second-most-recent 2.02 — its outlook is the guidance set for the quarter just reported. Skip it if you only need the print.
Step 2 — Pull the release
Call filing_section({ accession: "<accession>", section: "earnings_release", tables: "core" }) — returns the press-release prose plus the income statement, balance sheet, cash flow, and outlook tables as lossless HTML in tables_html (enough for all four reads). Read figures from `tables_html`, not the markdown grid.
- Skip `tables: "all"` — it adds the full non-GAAP reconciliation but often overflows and truncates.
core+ the prose highlights already carry the headline non-GAAP figures and the SBC/restructuring add-backs (read #1). - Guidance is usually in the prose "Business Outlook" section or the outlook table in
core. Edge case: a prose-captioned table (caption in the prose, bare cells likeTotal revenue | $X to $Y) can slip pastcore— if guidance is in neither prose norcore, report "outlook table not retrieved" rather than guess.
Step 3 — The four reads
Each is where management's framing diverges from the numbers.
- Headline reconciliation. Quote both EPS and both net-income figures; state the gap and its drivers — usually SBC, then acquisition amortization and restructuring. The load-bearing sentence: "non-GAAP EPS $X vs GAAP $Y; the $Z gap is mostly $W of SBC." SBC dilutes — it's a real cost, not a footnote, even when management strips it out.
- Growth quality. Read YoY off the income statement — but watch the column labels: a two-period statement shows the current and prior-year period, not the prior quarter. Any YoY must use that period's own prior-year figure; never reuse a column from another filing without checking its label (the easiest number to get wrong). Sequential (QoQ) usually needs the prior quarter's release — compute it when it's decision-relevant. Flag any single segment driving the growth: it's the bull case and the concentration risk at once.
- Cash conversion. Compare free cash flow (operating cash flow − capex) to net income: FCF below it means earnings aren't becoming cash (working-capital build, heavy capex); at or above is a quality signal. Quote the ratio. For loss-makers (both negative), the ratio is meaningless — report burn as FCF ÷ revenue and the cash balance as quarters of runway.
- Guidance delta. The forward catalyst. Is the guided growth accelerating or decelerating vs the quarter just reported? A guide above the run-rate is the strongest bull signal in the release; below it overrides an otherwise strong print. If you pulled the prior guidance (Step 1), note whether actuals landed above / within / below the range — the only beat/miss the filing substantiates.
Step 4 — Read the quotes critically
The top bullets and CEO/CFO quotes are a pitch; the tell is what they lead with. Note the featured metric, then test whether the rest of the numbers back it. Be wary of a headline metric absent from the GAAP statements — "record adjusted EBITDA" while GAAP operating income is flat, or a management-defined "AI revenue" that lives only in the commentary.
Required output
Produce the brief in Markdown — it renders cleanly in Claude Desktop, ChatGPT, and Gemini, so don't wrap it in a code block. Use this shape (a small headline table, bold deltas, prose for the reads):
EARNINGS RELEASE DECODER — [TICKER] [Fiscal period] · reported YYYY-MM-DD · [8-K Item 2.02](filing-index-URL)
| Revenue | Dil. EPS | Net income | |
|---|---|---|---|
| GAAP | $X | $Y | $Y |
| Non-GAAP | — | $X | $X |
YoY ±A% · QoQ ±B% · non-GAAP↔GAAP EPS gap $Z (mostly $W SBC / amortization / restructuring)
Quality
- Growth: [YoY vs sequential; segment concentration]
- Cash conversion: FCF $X = [N]% of revenue, [above / below] net income (loss-makers: report burn vs quarters of runway instead)
- Margins: [gross / operating, direction]
Guidance — next period $X, ±C% · [↑ accelerating / ↓ decelerating vs the quarter just reported] (YoY % only if that quarter's prior-year actual is derivable — often it isn't from this workflow.) [If the prior quarter's guidance was pulled: actual landed above / within / below the guided range.]
The framing — management led with [first-bullet / first-quote metric]; supported by the numbers? [yes / partially / the GAAP picture is softer]
Read: [2–3 sentences — the result vs the company's own guidance and history (not Street consensus, which isn't in the filing), the guidance signal, and whether the adjusted framing holds up against GAAP and cash]
Confidence: High / Medium / Low — [caveats: management-reported, unaudited until the 10-Q/10-K; any beat/miss is vs guidance or history, not analyst consensus]
Stopping conditions
- No Item 2.02 in the window and none under 8.01 → the company may not have reported recently, or files results elsewhere (foreign private issuers use a 6-K). Say so; don't synthesize a quarter from memory.
- The 8-K is a pre-announcement or "preliminary results" release → flag it as partial; the full release follows.
- Guidance withdrawn or absent → note it explicitly. Absence of guidance after a history of giving it is itself a signal.
What MCP-grounded interpretation adds
| Workflow element | Without MCP | With MCP |
|---|---|---|
| The reported quarter | The model's recollection — often the wrong fiscal period, numbers stale | filing_section('earnings_release') returns the EX-99.1 verbatim, filed minutes after the print |
| GAAP vs non-GAAP | Headline (adjusted) number repeated as fact | Both figures + the reconciliation tables; the gap is quantified, not glossed |
| Growth framing | Whatever comp the headline chose | YoY and sequential from the income statement in tables_html |
| Cash quality | Ignored | Operating cash flow + capex from the cash-flow table (tables: 'core') |
| Guidance | Buried or paraphrased | The outlook section lifted from the release, compared to the printed quarter |
| Freshness | Hidden | data_quality.freshness_lag_days: 0 the day the 8-K files |
The decoder is the recipe to run in the first hour after a print — when the release is public, the analyst notes aren't, and the stock is still deciding what the quarter meant.
Sample output structure
A decoder run on AVGO (Broadcom, Q2 FY2026 reported 2026-06-03) — an AI-bellwether megacap whose release pairs a record printed quarter with an even larger guidance raise — looks like the preview below.
EARNINGS RELEASE DECODER — AVGO Q2 FY2026, ended 2026-05-03 · reported 2026-06-03 · [8-K Item 2.02](https://www.sec.gov/Archives/edgar/data/1730168/000173016826000051/0001730168-26-000051-index.htm)
| Revenue | Dil. EPS | Net income | |
|---|---|---|---|
| GAAP | $22,187M | $1.91 | $9,310M |
| Non-GAAP | — | $2.44 | $12,074M |
YoY +48% (vs $15,004M) · QoQ +14.9% (vs $19,311M Q1) · non-GAAP↔GAAP net-income gap $2.76B, of which $2,092M is SBC
Quality
- Growth: +48% YoY is real but flattered by an easier prior-year base; the +15% sequential is the cleaner read. Concentration is the story — AI semiconductor revenue was $10.8B, +143% YoY, ~49% of total revenue. The AI line is both the bull case and the single-driver risk.
- Cash conversion: FCF $10,262M = 46% of revenue ($10,493M operating cash flow − $231M capex), above GAAP net income — high-quality, cash-backed earnings.
- Margins: gross margin $15,415M (~69% of revenue); GAAP operating income $10,788M (~49%), up from ~39% a year ago — strong operating leverage.
Guidance
- Q3 FY2026: ~$29.4B revenue, +84% YoY — a sharp acceleration from the +48% just printed. Management guides AI semiconductor revenue to grow >200% YoY to $16.0B, with non-GAAP operating margin stable at ~67%.
The framing
- Management led with: AI semiconductor revenue and the Q3 AI acceleration (first CEO quote, top bullets).
- Supported by the numbers? Yes — but the thesis now rests almost entirely on the AI line continuing to compound; the non-AI semiconductor and infrastructure-software base grows far slower.
Read: A clean beat on the company's own trajectory — record revenue, ~69% gross margin, 46% FCF conversion — with the real signal in the guide: Q3 revenue growth accelerating to +84% on AI semis up >200%. The adjusted framing holds up (the GAAP picture is strong on its own and earnings convert to cash), but the $2.1B SBC add-back is a genuine shareholder cost, and the bull case is now a near-pure bet on AI-accelerator demand.
Confidence: High Figures are management-reported and lifted from the EX-99.1 release (8-K Item 2.02, freshness_lag_days: 0); reconciliations are unaudited until the 10-Q. The AI-revenue and guidance figures are management-defined operating metrics from the CEO/CFO commentary, not GAAP income-statement line items.
Actual output varies by sector: a bank leads with net interest margin and credit provisions, a SaaS name with net revenue retention and billings, a retailer with comps and inventory. The four reads — GAAP reconciliation, growth quality, cash conversion, guidance delta — apply to every print.
Related
- 8-K Event Triager — the decoder is the deep read for one Item 2.02; the triager is the watchlist-wide scan that surfaces which names reported and flags the high-impact 8-Ks.
- 10-K Speedrun — when a print changes your view on a name you don't know well, run the speedrun on the latest 10-K for the full picture behind the quarter.
- F.O.R.G.E. Framework — when the question is whether the company is a durable compounder rather than a single good quarter, FORGE's SBC-aware, owner-earnings lens is the follow-up.