AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Investment Report Reader

skill-hhfinai-claude-equity-research-skills-investment-report-reader · by HHFinAi

Read and extract content from PDF investment reports — sell-side notes (GS/MS/JPM/UBS/Citi/BofA), 10-Ks, annual reports, fund factsheets, manager commentaries, and macro outlooks. Specialises in CHARTS, TABLES, and IMAGES that text-only extraction silently misses (most research charts are vector and invisible to pdfimages). Handles MULTI-REPORT TRIANGULATION when 2+ reports cover the same name, c…

No reviews yet
0 installs
10 views
0.0% view→install

Install

$ agentstack add skill-hhfinai-claude-equity-research-skills-investment-report-reader

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-hhfinai-claude-equity-research-skills-investment-report-reader)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
3mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Investment Report Reader? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Investment Report Reader

Version: 3.3 — adds missing-report detection, the EPS/PT/spot three-way race diagnostic (Rule 13), broadens Rule 12 from framework-switch to definition-switch, lowers the sector-mining threshold to single-paragraph mentions, requires bull-case sanity-checks against prior-cycle peaks, requires unit-consistency checks across estimate trajectories, and adds the unstated-falsifier prompt to every playbook. See changelog at the end of this file.

A specialised PDF reading skill for investment research documents. Built on top of the public pdf-reading skill but tuned for the specific structure, vocabulary, and extraction targets of investment reports.

When this skill applies

Trigger on any PDF that is:

  • Sell-side research — broker notes, initiations, company updates, sector primers, strategy notes
  • Company filings — annual reports, 10-K / 10-Q / 20-F, interim reports, prospectuses
  • Fund documents — factsheets, monthly/quarterly commentaries, KIIDs, holdings reports
  • Buy-side internal research — investment memos, IC papers, pitch books
  • Macro / strategy — house view documents, outlook reports, central bank publications

If the PDF is one of these AND the user wants to read, summarise, query, or extract from it — use this skill.

Core philosophy

Investment reports are hybrid documents. The thesis is in the prose, but the evidence is almost always in charts and tables — and most of those charts are vector graphics that pdfimages will silently miss. A naive pdftotext pass will extract the narrative and lose 60% of the value. This skill exists to make sure that doesn't happen.

The default workflow is therefore:

  1. Triage the report (type, length, structure)
  2. Extract text for narrative, thesis, ratings, targets
  3. Extract tables programmatically for financials, forecasts, comps
  4. Rasterize key pages so charts and visual exhibits can actually be read
  5. Synthesise into the format the user asked for (or infer)

Step 1 — Triage

Always start here. It takes ~5 seconds and determines everything else.

PDF=/mnt/user-data/uploads/report.pdf
pdfinfo "$PDF"                              # pages, size, metadata
pdftotext -f 1 -l 2 "$PDF" - | head -60     # cover + first page text
pdfimages -list "$PDF" | head -20           # raster image inventory

From the cover page text, identify:

| Signal | What to look for | |---|---| | Report type | "Equity Research", "Company Update", "Annual Report", "Factsheet", "Outlook" | | Issuer / author | Goldman Sachs, Morgan Stanley, BG, Wellington, the company itself | | Subject | Ticker, company name, fund name, theme | | Date | Publication date — critical for staleness assessment | | Rating & target (sell-side) | Buy/Hold/Sell, price target, prior target | | Length | "The price target was raised from $185 to $215 (page 1), driven by a 4% upward revision to FY26 EPS estimates (page 4, Exhibit 3)."

Mode 2 — Comprehensive summary (default if user says "summarise" or "read this report")

Markdown structure:

## [Report title] — [Issuer], [Date]

**Bottom line:** [1–2 sentence thesis]

**Key numbers:**
- Rating / target / upside (if sell-side)
- Top 3 financial metrics with prior comparison

**What's new / what changed:** [bullets]

**Thesis:** [3–5 bullets]

**Forecasts:** [table — extracted, not paraphrased]

**Charts worth knowing:** [exhibit-by-exhibit, page-numbered]

**Risks:** [bullets]

**My read:** [1 paragraph — only if the user asks for a view]

Mode 3 — Data extraction for downstream model

Structured table or JSON the user can drop into Excel or feed into another skill. Always include source page numbers.

Mode 4 — Word memo

If the user wants a formal write-up, hand off to the appropriate downstream skill:

  • Investment thesis / company analysis → bg-lens
  • Earnings print → earnings-analysis
  • Valuation / model → dcf-valuation, semi-dcf-modeler, biotech-dcf-modeler
  • Sector / theme → thematic-investment-research
  • Competitive positioning → competitive-analysis

This skill's job is to get the data out of the PDF; the downstream skill's job is to write the memo.

Mode 5 — Multi-report triangulation (≥2 reports on the same subject)

When the user uploads two or more reports covering the same company, fund, or theme, do not treat them as independent summaries. The whole point of having multiple reports is to find where they agree, where they disagree, and what each one sees that the other misses. Run the per-report extraction first, then build a comparison.

When the stack is mixed — some reports are company-specific and some are sector/industry-level — the company-of-interest is still the protagonist. Sector reports almost always contain company-specific exhibits, tables, and paragraphs that are just as valuable as the data in the direct company note. Mine them. See the sub-section below.

Output template:

# [Subject] — [House A] vs [House B] (vs [House C]…)

## Bottom line
[1–2 sentences: do they agree on the call? On the math?
 If a beat-vs-performance paradox exists, lead with it.]

## Headlines side by side
[Comparison table — rating, target, reference price (with date),
 implied upside, key forecasts year by year, valuation method]

## Event-anchored timeline
[Only when sequential reports are clearly driven by one or two
 discrete events — earnings prints, investor days, M&A announcements,
 guidance changes. Organise the reports as "Pre-event view / Post-event
 digestion / Post-event plus follow-up" rather than by calendar date.
 Omit this section entirely if no clear anchoring event exists.]

## Estimate-revision trajectory
[Required whenever ≥3 reports span >4 weeks. Small table showing how
 each key forecast line — revenue, EPS for the next 2 fiscal years,
 operating margin — evolved report by report. The pattern matters
 more than any individual number.]

## What the charts tell you that the text doesn't
[Per-report exhibit observations that change the read]

## Where they actually diverge
[Numbered list of substantive disagreements — earnings forecasts,
 valuation framework, risks flagged by one but not the other,
 catalysts, end-market assumptions]

## Coverage gap matrix
[Topic-by-report grid — see rules below]

## Risks (synthesized)
[Union of both risk sections]

## My read
[Which report to trust for what; what to verify before acting]

Rules for the comparison:

  1. Identical headline targets often hide different math. If two houses land on the same price target via materially different earnings forecasts or valuation methods, that's the most important thing in the comparison — surface it first. Identical targets with different math usually mean reasonable analysts have stopped arguing at a price, which is itself useful information.
  1. Always cross-check consensus citations. Sell-side notes quote consensus numbers, and two reports written days apart often cite different consensus figures because they're pulling from different vintages (Visible Alpha vs Bloomberg vs Refinitiv, different cut-off dates). Surface the discrepancy when it appears — it tells you which consensus the analyst is benchmarking against.
  1. Date-arbitrage the reference prices. Two reports published the same day may use reference prices from different trading sessions (intraday vs prior close, different time zones). On a volatile stock this can produce a 5–15% gap in the headline "implied upside" for an identical price target. Flag it explicitly. Cite the older reference price and note that the upside number is stale.
  1. Catalogue what each house addresses that the others ignore. This is often where the alpha is. If House A discusses a HBM4 redesign or an ADR catalyst or a China manufacturing issue and House B is silent, that's a real coverage gap — surface it as "House B readers will miss this".
  1. Don't average the forecasts. Show the spread. Investors need to see the dispersion, not a synthetic midpoint.
  1. The beat-vs-performance paradox always leads. If multi-report triangulation surfaces a contradiction between (a) earnings/pricing data showing a name has had the biggest beat in a peer group AND (b) relative-performance data showing the same name has been the worst-performing stock in that peer group, that contradiction is the single most important observation in the entire stack and must be surfaced first in the bottom line. Biggest beat plus worst performance is the visual proof of a de-rating thesis — the market is refusing to capitalise the new earnings level. Never bury this in the body. Lead with it.
  1. Brevity is not a downgrade signal. Short notes (3–4 pages) from senior analysts often contain the punchline that 30-page deep dives bury under model output. When a brief note delivers a sharper analytical observation than a longer note, weight the observation by quality, not by page count. Specifically: if the short note diagnoses a paradox or names a risk that the long note ignores, the short note is the more valuable read on that topic — say so.
  1. Event-anchor the timeline, don't calendar-anchor it. When sequential reports are clearly driven by one or two discrete events (earnings prints, investor days, M&A announcements, guidance changes, major equity investments), organise the comparison around the events, not the publication dates. The natural framing is "Pre-event view / Post-event digestion / Post-event plus follow-up meetings". This is especially important when one report predates the key event entirely — that report should be labelled as pre-event and its forecasts treated as a historical baseline, not a current view. To identify the anchoring event, look for language like "following the Investor Briefing", "post-OFC", "after the Q2 print", or dates clustered around a known company event. If no clear event drives the revisions, fall back to calendar ordering and skip this section in the output.
  1. Track multiple compression across sequential reports. When estimates rise faster than price targets, the implied forward multiple falls — and that is diagnostic. Rising targets built on compressing multiples mean consensus is catching up to buyside positioning rather than getting incrementally more bullish on valuation. This has different implications for whether the stock can keep running: a re-rating has room; a catch-up has less. Always compute, for each report in a sequential stack, the implied forward multiple on the furthest-out EPS number the report models. If the multiple is compressing while the PT rises, flag this as "consensus catch-up, not re-rating" in the output. Conversely, if the multiple is expanding while EPS is stable, flag it as a genuine re-rating. This distinction is often the most important read on whether a move has legs.
  1. The stranded rating pattern. When any report's price target is more than 30% away from the current spot price (in either direction) and that report is not the most recent in the stack, the rating is effectively untenable absent a refresh — surface this as a "stranded rating" and quantify the gap in dollars and percent. The output should state explicitly that any reader relying on the stranded report alone is looking at a historical artefact, and should carry a warning that the rating has not been reconciled with the new price. This is the inverse of the beat-vs-performance paradox (rule 6): instead of good results failing to move the stock, it is a sceptical analyst whose thesis has been mechanically invalidated by price action. Both patterns deserve equal billing and both must lead the bottom line when they occur. To operationalise: when extracting cover-page data per Playbook A, always compute the gap between the report's reference price and the most recent reference price available anywhere in the stack. Any gap exceeding 20% is a watch item; any gap exceeding 30% triggers the stranded-rating tag automatically.
  1. Forecast convergence to a named third party is consensus catch-up — credit whoever was right first. When an analyst's forecast moves over multiple reports in the direction of (and toward) a publicly-stated number from a named third-party data provider — TrendForce, IDC, Gartner, Wood Mackenzie, IHS, Visible Alpha consensus, or a competing sell-side house — that is a forecast convergence pattern, distinct from but related to multiple compression (rule 9). Compression is about price catching up to estimates within one model; convergence is about estimates catching up to a number someone else printed earlier. Both are catch-up patterns and both have the same diagnostic implication: the easy money has been made by whoever set the right anchor first. To operationalise: in any sequential stack of ≥3 reports, scan for third-party forecasts cited by name. If a cited number from an early report sits roughly where the analyst's own number lands two or three reports later, surface this explicitly as "the analyst spent N weeks closing the gap to [provider]'s [date] number" and credit the provider in the bottom line. The reader should know who called it first. This rule pairs with rule 9: compression is the within-model version of catch-up, convergence is the cross-source version.
  1. Anchored headline with shifting definition — the within-house cousin of rule 1. Rule 1 covers identical price targets across houses derived from materially different math. Rule 12 covers any headline number — price target, multiple, or otherwise — held constant across time within one house while its underlying definition changes. The classic case is the framework switch (P/B to P/E, DCF to comps, sum-of-parts to multiples). But the subtler and more common case is a definition switch within the same framework: the headline "11x" survives across reports while its EPS denominator silently moves from "FY27" to "FY26-29 average," or from peak-cycle to through-cycle, or from non-GAAP to GAAP, or from forward-year to two-year-forward. This is still a P/E in both reports, so a framework-only check misses it — but the referent of the headline has changed, which is the same revealed-preference behaviour as a full framework switch. To operationalise: in any sequential same-house stack, extract the PT-derivation language verbatim from each report's price-objective-basis section and diff it on all four axes — (a) framework label (P/E, EV/EBITDA, DCF, P/B), (b) EPS or denominator definition (which fiscal year, peak vs through-cycle, GAAP vs non-GAAP, diluted basis), (c) multiple level, and (d) EV vs equity basis. Any one of those four changing while the headline number stays constant fires the rule. Surface as "anchored headline with definition switch" and quote both derivations in the output, naming which axis moved. Treat the second definition as the analyst's revealed-preference rationalisation, not their model — the analyst found themselves needing the headline to land at a particular level and adjusted the math underneath until it did.
  1. Three-way race between EPS revisions, spot price, and price target — the trajectory shape diagnostic. In any sequential same-house stack of ≥3 reports, compute three percentage changes from the first report to the last: (a) the change in the furthest-out EPS estimate, (b) the change in the spot/reference price, and (c) the change in the price target. The relative ordering of these three numbers is itself a diagnostic, distinct from multiple compression (Rule 9), forecast convergence (Rule 11), and the stranded rating (Rule 10) — though it interacts with all three. The shapes worth naming:
  • PT > EPS > spot. The analyst is getting more bullish faster than the model justifies and the market is lagging. Usually means the analyst is leading; the runway depends on whether the model catches the PT or the PT catches reality.
  • **EPS

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.