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

Claude Code

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

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
@rgourley
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.

Stars on GitHub

Momentum

stars in total
7
Star history of rgourley/quant-garage on GitHub, a chart by star-history.com

Other skills on quant-garage.

8-k-scanner

8-k-scanner

Scan SEC 8-K disclosures across a single ticker or a watchlist using Massive's pre-parsed disclosure taxonomy. Groups the…

analyst-tracker

analyst-tracker

Track sell-side analyst positioning on a name via Benzinga Analyst Ratings. Pulls every rating event over the lookback window,…

backtest-data-prep

backtest-data-prep

Build a clean, point-in-time, ready-to-backtest OHLCV dataset for a US equity universe across an arbitrary date window. Emits…

commodity-cycle

commodity-cycle

Single-commodity macro read. Answers "is this commodity in a winning or losing macro setup right now" and names the macro driver…

More skills from other plugins.

context-loader
Auto-invoked

context-loader

Search memories from earlier Pi sessions in this repository. Use it when earlier work may already explain the code, error,…

mem05d69k
@mem0ai@mem0aiInstall Skill
analyzing-ai-citations

analyzing-ai-citations

Answer AI citation and answer engine optimization (AEO) questions in PostHog: whether AI answer engines (ChatGPT, Claude, and an…

posthog12d41k
@posthog@posthogInstall Skill

Questions about pitch-comps.

Which coding agents can use pitch-comps?
pitch-comps installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.