Skip to content
Back to skills

Stock Business Review

ASecurity

Review a US-listed company's business model and revenue structure for an equity-research workup. Covers product/service mix, customer concentration, geographic exposure, industry position, revenue-growth decomposition (organic vs acquired vs price vs volume), and information-tier discipline (which numbers are facts vs management narrative). Trigger when analyzing a single US ticker's business fundamentals, when reading 10-K Item 1 "Business" and Item 1A "Risk Factors", or when the orchestrato...

  • 30 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 19, 2026
ai-agentspythongobashgitapi

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned September 19, 2026

npx -y skills add johnqtcg/awesome-skills --skill stock-business-review --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Stock Business Review?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Stock Business Review
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/johnqtcg-stock-business-review/badge)](https://www.skillsdirectory.com/skills/johnqtcg-stock-business-review)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: stock-business-review
description: Review a US-listed company's business model and revenue structure for an equity-research workup. Covers product/service mix, customer concentration, geographic exposure, industry position, revenue-growth decomposition (organic vs acquired vs price vs volume), and information-tier discipline (which numbers are facts vs management narrative). Trigger when analyzing a single US ticker's business fundamentals, when reading 10-K Item 1 "Business" and Item 1A "Risk Factors", or when the orchestrator stock-analysis-lead dispatches business review. Dispatched by stock-analysis-lead or invoked directly for business-focused analysis.
allowed-tools: Read, Grep, Glob, WebSearch, WebFetch, Bash
---

# Stock Business Review

## Purpose

Read a company's 10-K and 10-Q with the discipline of a senior equity analyst: identify what the business actually sells, to whom, how it makes money, and what kind of growth its revenue numbers are reflecting. Surface red flags that pure financial-statement readers miss — narrative buckets, undefined adjusted metrics, customer concentration risk, and acquired-growth dependency. The output is a structured set of Findings that the orchestrator uses to build the Good-Company score and frame valuation.

## When To Use

- Orchestrator `stock-analysis-lead` dispatches a business-dimension review.
- The user directly asks "what does <ticker> actually do" or "is <ticker>'s growth real" or "tell me about <ticker>'s customer concentration".
- A standalone business-model classification is needed before deeper financial analysis.

## When NOT To Use

- Cash-flow / margin / operating-leverage analysis → `stock-earnings-quality-review`
- Leverage / liquidity / goodwill → `stock-balance-sheet-review`
- Capital allocation / management quality → `stock-management-review`
- Competitive moat / TAM / market share → `stock-industry-review`
- Final verdict or target price → orchestrator's synthesis step (do NOT recommend buy/hold/sell from this skill)

## Mandatory Gates

### 1) Execution Integrity Gate
You must read the 10-K Item 1 "Business" section before drawing any conclusion. If the orchestrator's `data-manifest.json` does not include a 10-K path, return `SKIPPED (no 10-K available)` and do not fabricate analysis from press releases or analyst summaries.

### 2) Filing Vintage Gate
The 10-K must be the most recent annual filing (within the last 14 months from today). If the only available 10-K is older, flag it explicitly in Execution Status — old filings miss recent strategic shifts and recent customer-concentration data.

### 3) Citation Gate
Every Finding must cite a specific filing section (e.g., "10-K Item 1, page 7" or "10-K Item 1A, Risk Factor 3"). Findings without citations are suppressed.

### 4) Non-US Refusal Gate
If you detect the ticker is an A-share (3-digit or 6-digit Chinese code), HK-share (4-digit HK code), or ADR of a foreign private issuer filing 20-F instead of 10-K, return `SKIPPED (non-US issuer — out of scope)` immediately.

## Workflow

1. Locate the 10-K and latest 10-Q from the manifest. Read 10-K Item 1 (Business), Item 1A (Risk Factors), and Item 7 (MD&A) summary.
2. Run the Filing-Pattern-Gated Execution Protocol — for each checklist item with a filing-section pattern, locate the relevant section first, then apply semantic analysis only on those passages.
3. For checklist items that are pure-semantic (no stable filing keyword), apply full reasoning.
4. Cross-check Risk Factors against the Business section — discrepancies between the rosy "Business" narrative and the candid "Risk Factors" are a strong signal.
5. Emit Findings with severity, evidence quote, and citation. Suppress items not found rather than fabricate.

## Filing-Pattern-Gated Execution Protocol

This is the same idea as Grep-Gated for code: each check has a filing-section pattern. If the section/keyword is absent, mark NOT FOUND and skip semantic analysis. Only HIT sections get full reasoning.

### Execution Order

1. Identify target filings from the manifest (10-K, 10-Q, optionally earnings call transcript).
2. For each grep-gated checklist item, search the filing(s) for the documented keyword/section pattern.
3. **HIT** → semantic analysis to confirm true positive vs false positive.
4. **MISS** → auto-mark NOT FOUND. Do not extrapolate from absence — note absence in Execution Status if material.
5. For semantic-only items: full reasoning on the relevant section.
6. Report ONLY FOUND items.
7. Include `Filing pre-scan: X/Y items hit, Z confirmed as findings` in Execution Status.

### Compound Pattern Protocol

Some red flags are "presence of A without B" (e.g., "AI revenue" mentioned without a definition). Use compound patterns:
- HIT on A (keyword present)
- AND NOT on B (definition / methodology / breakdown absent in the same section)
- → Confirmed Finding

## Business Checklist (11 Items)

| ID | Item | Filing Pattern | Severity Bias |
|---|---|---|---|
| BUS-01 | Revenue composition: products vs services, subscription vs transactional, B2B vs B2C, hardware vs software | 10-K Item 1 "Products" / "Services" / "Revenue" subsection; 10-K Note "Disaggregation of revenue" | Med |
| BUS-02 | Customer concentration | 10-K Item 1A keyword `"significant customer"`, `"customer concentration"`, `"10% of revenue"` | High if Top1 > 10% |
| BUS-03 | Geographic revenue split + FX sensitivity | 10-K Note "Geographic information"; 10-K Item 7 "Foreign currency" | Med |
| BUS-04 | Industry position (market leader vs challenger vs long-tail) | 10-K Item 1 "Competition" subsection | Med |
| BUS-05 | Business-model archetype: high-margin low-turnover (software/SaaS) vs low-margin high-turnover (retail) vs capital-intensive (utility) | Derive from 10-K Item 1 + gross margin in Item 8 | Low (informational) |
| BUS-06 | Revenue-growth decomposition: organic vs acquired vs price vs volume | 10-K Item 7 MD&A; keywords `"acquisition contributed"`, `"organic growth"`, `"price increase"`, `"unit growth"` | High if mostly inorganic |
| BUS-07 | Deferred-revenue trend vs reported-revenue trend | 10-K balance sheet line "Deferred revenue" / "Contract liabilities", compared YoY against revenue | High if deferred growth << revenue growth (future slowdown signal) |
| BUS-08 | Material adjusted-metric usage and definition consistency | Earnings releases + 10-K "Non-GAAP reconciliation"; keywords `"Adjusted EBITDA"`, `"Non-GAAP"` | High if SBC excluded from Adjusted EBITDA |
| BUS-09 | Narrative buckets without defined methodology | Compound pattern: `"AI revenue"` OR `"<theme> revenue"` AND NOT (methodology paragraph in same section) | High if material % of total |
| BUS-10 | Information-tier discipline — what is fact vs management-defined | Cross-check: any number quoted by IR but absent from filings | High if material |
| BUS-11 | Contra-revenue / client incentives — the gross→net bridge | 10-K revenue-recognition note + MD&A; keywords `"client incentives"`, `"rebates"`, `"incentives"`, `"contra-revenue"`, `"net revenue"` | **High for network/platform/marketplace**; Med otherwise |

### Severity Rubric

- **High**: A finding that would change the orchestrator's Good-Company score for "real growth" or "diversification". E.g., 60% of revenue from one customer; 40% of growth from acquisitions; "AI revenue" without methodology.
- **Medium**: A material structural fact the orchestrator needs to weight scenarios — e.g., 30% of revenue is FX-exposed; the company is #3 in a #1-takes-most market.
- **Low**: Useful context that does not move the verdict — e.g., a clean disaggregation of revenue by segment.

## Evidence Rules

- Every Finding cites a filing section with at least one of: page number, item number, or note number.
- Direct quotes are preferred over paraphrase; cap each quote at 60 words.
- "I think" / "appears to" / "likely" without evidence → revise to evidence-based statement or drop the Finding.

## Output Format

### Findings

Order: High → Medium → Low. Within each severity, order by checklist ID.

#### [High|Medium|Low] Short Title

- **ID**: `BUS-NN` (use the checklist ID; if multiple instances, append `-a`, `-b`)
- **Citation**: `10-K Item X, page Y` (or Note Z)
- **Evidence**: direct quote ≤60 words
- **Implication**: one sentence describing what this means for the investment thesis

### Suppressed Items

Items the orchestrator might expect but you found no evidence for — flag as `[Suppressed]` with one-line reason. Do not invent Findings to fill gaps.

### Execution Status

```
Filings reviewed: 10-K (FY2024, filed 2025-02-15), 10-Q (Q3 2025)
Filing pre-scan: 9/10 items hit, 6 confirmed as findings
Skipped items: BUS-07 (deferred revenue not disclosed — company is non-subscription)
```

### Summary

One line: `N High / M Medium / K Low — most material: <BUS-NN short title>`.

### Machine-Readable Findings Block (mandatory)

End the reply with **exactly one** fenced block tagged `findings-json`, carrying
**Worker Findings Contract v1** (full schema and error codes:
`stock-analysis-lead/references/worker-contract.md`). The orchestrator synthesizes
the verdict **from this block only** — anything stated in the Markdown above but
omitted here does not reach the report. Everything above the fence is for the
human reader.

```findings-json
{
  "contract_version": "1",
  "worker": "stock-business-reviewer",
  "prefix": "BUS",
  "status": "OK",
  "depth_mode": "<echo the dispatched depth>",
  "archetype_applied": "<echo the dispatched archetype>",
  "archetype_challenge": null,
  "findings": [
    {
      "id": "BUS-NN",
      "severity": "High|Medium|Low",
      "title": "<= 80 chars",
      "citation": {"source": "10-K", "locator": "<item/page/note>", "fiscal_period": "FY2025"},
      "evidence": "direct quote <= 60 words, or a computed figure with its inputs",
      "implication": "one sentence on what this means for the thesis",
      "confidence": "first-hand|second-hand"
    }
  ],
  "positives": [],
  "data_gaps": [],
  "checklist_coverage": {"items_total": 11, "items_checked": 0, "items_not_found": 0, "ids_not_checked": []},
  "mandatory_checks_run": []
}
```

Contract rules that fail validation if broken:

- `status` is one of `OK` / `DEGRADED` / `SKIPPED` / `REFUSED`; any value other
  than `OK` **requires** a `status_reason`. The gate returns `SKIPPED (...)` in
  prose *and* `"status": "SKIPPED"` here.
- Every finding ID must start with `BUS` — the prefix is the whole segment
  before the first hyphen.
- `citation` is an **object**, never a bare string; `locator` and `fiscal_period`
  must be non-empty. A finding with no real citation is suppressed, not emitted.
- `source: "aggregator"` forces `confidence: "second-hand"` — this is what makes
  the first-hand data rule checkable rather than aspirational.
- `checklist_coverage`: `items_checked + items_not_found` must reach
  `items_total` (11), so "the checklist ran to completion" is verifiable.
- `archetype_challenge`: `null` when the dispatched archetype fits. When the
  evidence says it does not, file `{"proposed", "reason", "evidence"}` instead of
  silently analyzing against thresholds you believe are wrong — this is the only
  sanctioned way to disagree with the orchestrator's classification.
- `mandatory_checks_run`: list the archetype-specific check IDs the dispatch
  marked REQUIRED. Omitting one that was required fails validation.

Self-check before replying:

```bash
python3 <path-to>/stock-analysis-lead/scripts/finlib/worker_contract.py \
  validate --reply <this-reply>.md --expect-worker stock-business-reviewer
```

## No-Finding Case

If the business is structurally healthy (no concentration, clean disaggregation, organic growth, defined non-GAAP metrics), output:

```
No business-model findings — structurally clean.
Notable positives: <BUS-NN: positive observation, e.g., "Top10 customer < 5% revenue">
```

Do not fabricate marginal findings to look thorough. Suppression discipline matters: orchestrator interprets "no findings" as evidence of quality.

## Load References Selectively

- `references/business-model-patterns.md` — load when classifying business-model archetype (BUS-05), when SaaS-specific subscriptions need NRR/ARR awareness, or when building the contra-revenue / gross→net bridge (BUS-11); covers high-margin-low-turnover vs low-margin-high-turnover taxonomies, revenue-disaggregation patterns, and the client-incentives bridge.

## Review Discipline

You are one of the orchestrator's parallel workers (the fan-out size is depth- and trigger-dependent — see `stock-analysis-lead/references/dispatch-protocol.md`). The orchestrator depends on you reporting only what you actually found in filings, with full citations. Over-reporting wastes the orchestrator's deduplication budget; fabrication breaks the entire analysis. When in doubt, suppress.

Files in this skill

  • SKILL.md12.7 KB
  • references/business-model-patterns.md9.6 KB
  • scripts/run_regression.sh97 B
  • scripts/tests/test_skill_contract.py5.5 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.