Skip to content
Data
Skill

/pitch-comps

Build a Bloomberg / CapIQ-style comparable companies set for a subject ticker. Identifies peers via a curated override map (with correlation and SIC fallbacks), pulls current multiples (EV/Sales, EV/EBITDA, P/E) for the subject and peers, renders the comp table with median /

From plugin
quant-garage
761 skills
Install
$ npx -y skills add rgourley/quant-garage --skill pitch-comps --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/pitch-comps

Context preview

The summary Claude sees to decide when to auto-load this skill.

Build a Bloomberg / CapIQ-style comparable companies set for a subject ticker. Identifies peers via a curated override map (with correlation and SIC fallbacks), pulls current multiples (EV/Sales, EV/EBITDA, P/E) for the subject and peers, renders the comp table with median /

SKILL.md

pitch-comps.SKILL.md
name: pitch-comps
description: Build a Bloomberg / CapIQ-style comparable companies set for a subject ticker. Identifies peers via a curated override map (with correlation and SIC fallbacks), pulls current multiples (EV/Sales, EV/EBITDA, P/E) for the subject and peers, renders the comp table with median / mean / 25-75 percentile summary stats, runs a regression-adjusted multiples view that controls for growth and profitability, and surfaces a one-line banker read at the bottom. Use when an analyst or banker is preparing pitch materials, a fairness opinion, or a valuation memo. Requires Stocks Starter for financials.

pitch-comps

You hand over a subject ticker. The skill identifies peers using the same three-layer methodology as `earnings-drilldown`'s peer-reaction (curated override → correlation → SIC fallback), pulls TTM revenue, operating income, EPS, and balance-sheet items for the subject and the peers, computes current multiples (EV/Sales, EV/EBITDA, P/E) plus growth and margin metrics, summarizes the peer set with median / mean / 25-75 percentile bands, runs a regression of each multiple on growth and margin to compute a peer-implied multiple for the subject, and emits a one-sentence banker read.

The output drops into a pitch deck or fairness-opinion appendix unchanged. The structure matches what bankers already read in Bloomberg's RV (relative value) screen and CapIQ's comp set page.

When to invoke

  • A banker is building a comp page for an MD's pitch deck
  • An analyst is writing a coverage initiation and needs a valuation

table for the subject vs. its peer set

  • A buy-side PM is sizing a position and wants to know "what would the

subject's multiple look like if peers traded it"

  • The user says "build comps for $TICKER", "where does $TICKER trade vs.

peers", "is $TICKER cheap or rich on multiples"

What you need

  • A subject ticker (CRM, NVDA, etc.)
  • `MASSIVE_API_KEY` exported in the environment
  • Stocks Starter plan minimum. The full peer fetch fans out 9+

ticker-details and 9+ financials calls; on free Basic (5/min) this will run but will take ~5 minutes. Starter (unlimited) finishes in under 30 seconds.

What you get back

Two output layers from one analysis.

**Layer 1: canonical JSON** matching [`output-schema.json`](./output-schema.json). Subject metadata, peer list with each peer's multiples and metrics, summary statistics (median / mean / p25 / p75 per multiple), the regression-adjusted block (per-multiple implied vs. actual and discount / premium), the one-sentence read, and the source endpoints with fetched-at timestamps. UIs, downstream agents, and Python scripts consume this.

**Layer 2: rendered comp table** in Bloomberg RV / CapIQ comp page style. See [`references/rendering.md`](./references/rendering.md). Subject highlighted at the top, divider, peers, divider, summary stats, optional regression-adjusted section, mandatory one-sentence read at the bottom.

How it works

1. **Peer selection** per [`references/peer-selection.md`](./references/peer-selection.md). Three-layer waterfall: curated override map first (covers the top ~30 US large-caps where SIC misclassifies), correlation-based for uncurated names, SIC fallback last. Records the selection method in the JSON so the consumer knows the peer-set quality. 2. **Pull current price + market cap** for the subject and each peer. One snapshot call and one ticker-details call per name. Compute enterprise value per [`references/multiples-methodology.md`](./references/multiples-methodology.md) as `market_cap + total_debt - cash + operating_leases + minority_interest`. `total_debt` and `cash` are required; if either is missing for a name, EV-based multiples are emitted as `null` and the missing field is recorded on the per-name `ev_components` audit trail. 3. **Pull TTM financials** for the subject and each peer: revenue, operating income, depreciation and amortization (often null on software comps, see methodology), net income, diluted EPS. Compute revenue growth TTM vs prior TTM and EBITDA margin per [`references/growth-and-profitability.md`](./references/growth-and-profitability.md). 4. **Compute multiples**: EV/Sales, EV/EBITDA, P/E. Per peer. `null` where the inputs aren't available (e.g. SAP's ADR financials gap, or a peer with negative EBITDA where the multiple is meaningless). 5. **Cohort statistics** per [`references/cohort-statistics.md`](./references/cohort-statistics.md): median, mean, 25th and 75th percentiles, computed over peers only (subject excluded so the comparison is honest). Drop nulls from the summary; never impute zero. 6. **Regression-adjusted multiples** per [`references/regression-adjustment.md`](./references/regression-adjustment.md). Fit `multiple ~ growth + ebitda_margin` across peers with `numpy` least-squares. Predict the subject's multiple given its own growth and margin. Compare to actual; surface as a discount or premium. Flag when `n_peers < 8` because the regression's degrees of freedom get tight. 7. **Generate the read.** One sentence keyed off the regression output: where the subject sits vs. peers on growth-adjusted multiples and which multiple drives the divergence. Banker-tone, no hedge words, no "mispriced upside."

Foundations used

  • [`massive-api-patterns`](../massive-api-patterns) for REST auth, rate

limiting, and the 4-step `lastTrade.p → min.c → day.c → prevDay.c` snapshot fallback chain. FMV is not a field on the v2 snapshot response and is not in this waterfall.

Output mode: table

Same table mode as `universe-builder`. The format follows the canonical table rules in `universe-builder/references/rendering.md` with the comp-set-specific overrides in `references/rendering.md`: subject row at top, divider, peer rows, divider, summary stats rows, optional regression-adjusted block, mandatory one-sentence read.

A custom UI consumes the JSON a

Read more
Ships withquant-garage

Trade like a pro. Without the terminal. View the full landing page → Quant and equity research tools that run inside Claude, or behind your own UI.

Get the whole plugin
Stats
7
Stars
0
Forks
Active
Maintenance
Python
Language
7d ago
Last commit
2mo ago
Created

Repo: rgourley/quant-garage

Other skills on quant-garage.