← Back to the library
Research and business strategy

Market adjacency analysis

Internal Conversint market research runs. Given one or more input docs (use-case research, product strategy, consulting deliverable), produces a markdown research report covering market sizing (TAM/SAM/SOM), industry targets, competitive landscape, pricing power, differentiation thesis, and confidence scoring — plus a summary row in the cross-topic Market Research Inventory sheet. Methodology is pluggable: researchers pick which families run per engagement. Use when Patrick asks for market research, market sizing, competitive landscape, pricing power, TAM/SAM/SOM, or analyst view questions. When the primary question is who to target first, ICP definition, buying group, jobs to be done, or anti-ICP, use /icp-research instead.

Works with the context you provideVersion 2.0.1Historical revision

# /market-research — Internal market research with pluggable methodology

Internal-only. No branded DOCX, no CRM handoff (see `./references/dependencies/conversint-current/references/crm-handoff.md` for the CRM owner boundary), no client-facing polish. The audience is the Conversint cofounders (Patrick Saul + Daniel Nfodjo) using the output to make internal strategy calls.

Shared ChiefOS skill conventions live in `./references/dependencies/conversint-current/references/skill-operating-standards.md`; output paths and artifact lifecycle remain owned by `./references/dependencies/conversint-current/references/output-paths.md`. Keep this SKILL.md focused on the market-research workflow and point reusable conventions back to those references. If a run surfaces a sales-system follow-up, route it through `/crm` instead of writing CRM rows here.

Load org context first

**Before any research work, load every structural org-bundle file** (see AGENTS.md § Org Context Bundle for the authoritative current set):

  • `./references/dependencies/conversint-current/references/org/identity.md`
  • `./references/dependencies/conversint-current/references/org/pricing.md`
  • `./references/dependencies/conversint-current/references/org/founders.md`
  • `./references/dependencies/conversint-current/references/org/constraints.md`
  • `./references/dependencies/conversint-current/references/org/positioning.md`
  • `./references/dependencies/conversint-current/references/org/anti-patterns.md`
  • `./references/dependencies/conversint-current/references/org/value-signals.md`

After loading, print one line:

``` Loaded org context as of <date> ```

Where `<date>` is the most recent commit timestamp on any file in `references/org/` (use `git log -1 --format=%cs references/org/`).

Apply the loaded context throughout the run:

  • **Capacity rail** (`constraints.md`): refuse to recommend any plan that exceeds ~20–30 hrs/wk total founder time over the chosen horizon.
  • **Niche-discovery stance** (`positioning.md`): treat any specific niche named in `research-thought-leadership/` as a candidate, not a Conversint commitment.
  • **Audience filter** (`positioning.md`): default to SMB owner/operators 10–500 headcount (soft floor; 20+ is the sweet spot) unless a narrower niche-specific filter is in play.
  • **Drift check** (chatty): if anything in this run contradicts a loaded org-bundle value, pause and surface the contradiction to the user before proceeding.
  • **Anti-patterns** (`anti-patterns.md`): banned terms, prior-employer filters, side-business framing exclusion all apply to any output. The "side business" framing must NOT appear in client-facing surfaces.

Mental model

Each run produces two artifacts:

  1. **A markdown report** — always lives under `research-thought-leadership/<topic-slug>/`, organised by *market / topic*, never by customer. The reasoning: market-research output is a market analysis, not a client deliverable, even when the input was a customer's use-case research. Filename is `research-thought-leadership/<topic-slug>/market-research.md`, or split into `sizing.md`, `targets.md`, `positioning.md`, etc. when the user asks for a split layout.

The topic slug is the market/category, never the customer (e.g. `bh-ambient-ai-scribe`, not `bh-ambient-ai-scribe-lighthouse`). Customer context, when relevant, lives *inside* the report as the seed exemplar — not in the folder name and not in the filename. Re-running the same topic with a different customer anchor overwrites the prior report by design; git history and the inventory are the audit trail. 2. **A row in the Market Research Inventory sheet** — summary fields for cross-topic comparison, keyed by `topic` slug so re-runs overwrite rather than duplicate. Schema and call pattern: `./references/inventory.md`. Skip the inventory write (and warn) if the sheet is not yet provisioned — see step 8.

The skill is **methodology-pluggable**: researchers pick which methodology families run per engagement. The canonical playbook lives in `./references/methodology-survey.md` at the repo root. Load it once at the top of every run. Default families, registry handles, and per-family subagent prompt scaffolds: `./references/families.md`. When `industry-targets` is selected, also load `./references/dependencies/conversint-current/references/icp-research.md`; it owns the ICP decision model, source protocol, and evidence-status terms.

Run framing — pick the lens before dispatching families

The methodology survey is a menu, not a meal. The same TAM/SAM/SOM rubric reads very differently depending on *what decision the research is supporting*. Pick one of three run framings before family dispatch and pass it explicitly to every family subagent — otherwise the subagents default to product/category-flavored sizing and the synthesis tax later is brutal.

| Lens | When to use | Sizing denominator | ICP | Pricing-power subject | Differentiation thesis subject | |---|---|---|---|---|---| | `product` (default) | Sizing a software/category for a vendor entrant or repositioning incumbent | Vendor revenue pool | Who buys the product | The category's pricing power | The vendor's "what would have to be true" | | `services` | Should Conversint chase this market as a consulting service line? | Engagements per addressable buyer × services ACV | Who pays Conversint for engagements | Conversint's own services pricing power | Conversint's "what would have to be true" to win as a services entrant | | `operator` | Should Conversint or a client acquire/operate a business in this market? | Operator EBITDA / acquirable revenue | Who Conversint would buy or build | Operator margin durability | Conversint's "what would have to be true" to operate at edge-leading margin |

The customer-anchored runs Conversint does for service-line decisions are almost always `services`. Dropping the lens uniformly into every family subagent prompt is the single biggest lever on output quality — the dry-run audits showed this clearly.

Customer-anchored runs — the customer is an exemplar, not the ICP

When the scoping turn fills in a "Customer anchor," the customer should be treated as *one specimen of a broader buyer category Conversint could find more of* — not as the category itself.

The failure mode this prevents: a customer-anchored run produces an ICP that reads "this customer and four organizations exactly like them," when the actual market is 50–500 organizations whose *job-to-be-done* matches even though their firmographics or vertical don't. Lighthouse looked like "PE-backed multi-site BH" because that was the input shape — but the deeper market read is "regulated mid-market AI implementation where vendor-independent rigor matters," with PE-backed BH as the wedge. TPL Journey looked like "mid-sized faith nonprofits with content missions" — but the deeper read is "content-heavy mission-driven nonprofits with governance/review gates," with faith-nonprofits as the wedge. Both are useful framings; the narrow one tells you who to call this quarter, the broader one tells you whether the practice has legs past 12 months. The skill's job is to surface both, with the seed customer named as the lead exemplar inside the broader frame — not to pretend the broader frame doesn't exist.

Concrete guidance to pass to every family subagent and apply in synthesis:

  • **Sizing**: produce TAM/SAM at the *category* level (one or two layers up from the customer's exact shape). The customer's exact shape can appear as a sub-band within SAM with its own line, but the headline TAM is the category, not the customer's shape squared.
  • **Targets**: Slice A describes the buyer *category* the customer represents — large enough that the customer is one of many. Name the seed customer as the lead exemplar; don't define the slice around them. Slice B and Slice C should explicitly probe whether the same JTBD shows up in adjacent shapes (different funding base, different vertical, different buyer persona) — not just adjacent slivers of the same vertical.
  • **Competitive**: the differentiation thesis should compose at the category level. If it only works for the seed customer's exact shape, that's a tell the run anchored too tightly.
  • **Pricing-and-adjacencies**: at least one of the three named adjacencies should be a meaningfully different shape, not three flavors of the same vertical.

This is not a license to over-generalize. "AI consulting for everyone" is worse than "PE-backed multi-site BH operators" — the discipline of vertical specificity still wins. The shift is *one or two layers up* from the customer's exact shape: broad enough that we can find 50 candidates, narrow enough that we can name what they all share. If the family subagent finds itself widening to "anyone who uses data," it has overcorrected — pull back.

Source citations

Every external-fact claim in the report (sizing inputs, analyst findings, vendor capabilities, regulatory facts, case-study references) follows the four-step rule in `./references/dependencies/conversint-current/references/client-deliverable-standards.md` §4 — capture URLs as each family subagent gathers research, cite inline at each restatement (including the executive summary), reproduce every URL in the final **Sources** section with a one-line descriptor, and re-verify URL ↔ claim pairings during synthesis before committing. Family subagent prompts in `./references/families.md` must enforce capture-as-you-go so the main thread isn't reconstructing citations during synthesis. The §4 reshape rule applies in full when the executive summary is written last but placed first.

Market intel capture

Read `./references/dependencies/conversint-current/references/vendor-intel.md` before any competitive-landscape or pricing family work. Load relevant vendor profiles as internal background, and require vendor research to capture vendor/platform pricing as a first-class field: pricing model, public price points, vendor-specific setup or implementation fees, ongoing fees, quote-required language, confidence, checked date, and source URLs. After the report is saved, append reusable source-backed vendor or industry observations with `lib/vendor_intel.py`, then run the printed `commit_recommended=` command for every touched vendor-intel file. If a touched file reaches 3+ unsummarized observations, run `/vendor-intel summarize <path>` for that touched file only and commit that summary update too.

Value benchmark capture

Read `./references/dependencies/conversint-current/references/value-benchmarks.md` before sizing, pricing-and-adjacencies, or any family that depends on CAC, conversion, churn, labor, utilization, margin, standards, academic evidence, or unit economics. Load relevant files under `research-thought-leadership/value-benchmarks/` as internal background, and pass the useful benchmark context into the relevant family prompts. After the report is saved, append reusable source-backed benchmark observations with `lib/value_benchmarks.py`, then run the printed `commit_recommended=` command for every touched benchmark file. If a touched benchmark file reaches 3+ unsummarized observations, update its `## Current Summary`, mark only summarized observation IDs, and commit that summary update too.

Use vendor intel for named vendors/platforms and vendor-specific pricing. Use value benchmarks for generic market costs, CAC, conversion, churn, labor, standards, academic evidence, and value-pricing metrics.

Siblings and boundaries

`/research-usecase` is client-facing; it loads `./references/dependencies/conversint-current/references/client-deliverable-standards.md`, produces DOCX, and offers a CRM handoff. `/market-research` is internal, markdown-only, and feeds an inventory sheet. `/icp-research` owns a customer-facing or internal answer to the narrower target-selection question: which customers to pursue, their buying group, jobs to be done, exclusions, and validation gaps. Do not bury a new ICP decision inside a broad market report; route that request to `/icp-research`, then use the resulting artifact as input here when sizing, competition, or pricing needs to follow.

Inputs

Any subset of:

  • **Use-case research doc** — typically a prior `/research-usecase` output
  • **Product strategy doc** — Patrick's notes, slide decks, or strategy memos
  • **Consulting deliverable** — a prior scoping, evaluation, or advisory artifact

Accept paths via the `argument-hint`, a dropped file, or freeform description. If none are supplied, ask once: *"Any input docs to anchor this run, or should I work from the topic slug alone?"* Don't over-ask.

Workflow

1. **Confirm auth.** ```bash scripts/python - <<'PY' import sys; sys.path.insert(0, 'lib') import gws_auth print(gws_auth.auth_ok()) PY ``` If `False`, print `gws_auth.AUTH_INSTRUCTIONS` and stop. Do **not** run `scripts/gws auth login` from inside the skill.

  1. **Load the methodology survey.** Read `./references/methodology-survey.md` for the current framework menu. If the user has amended it since the last run, those amendments apply automatically.
  1. **Read the input docs** (if any).
  1. **Input-doc freshness check.** For each input doc, note its `Date:` frontmatter (or git-log first commit if unframed) and write a one-paragraph "what's stale, what's still load-bearing" memo. Pass this memo verbatim to every family subagent in step 5. AI-category vendor maps and funding-velocity numbers go stale in 6–9 months; ICP, JTBD, and regulatory framing usually carry longer. The point is to tell each subagent which input claims to inherit and which to refresh — not to redo the underlying use-case research.

5. **Scoping turn** — one `AskUserQuestion` bundle covering: - **Topic slug** (kebab-case, market/category — `agentic-crm`, `voice-ai-support`, `bh-ambient-ai-scribe`, `faith-based-content-ai`). Never customer-named — market research is a category artifact and the topic slug is the only path component. - **Customer anchor** (optional) — kebab-case customer slug (`tpl-journey`, `lighthouse`) when the run is anchored on a specific customer's research. Used only to drive the GENERALIZATION DISCIPLINE block in step 6 and to populate the report's "seed exemplar" framing — **not** part of the filename or folder. - **Run lens** (single-select) — `product` / `services` / `operator`, per the table above. Default `services` when any input doc lives under `customers/`; otherwise `product`. - **Methodology families** (multiSelect) — `sizing`, `competitive-landscape`, `industry-targets`, `pricing-and-adjacencies`. Default all four. - **Report layout** — single consolidated file (default — `market-research.md` under the topic folder), or split into named sub-reports (`sizing.md`, `targets.md`, `positioning.md`, etc.).

If the user has already signalled any of these in the original request, skip that question. If the request itself names the lens ("services-targeting decision"), don't re-ask.

  1. **Per-family subagent dispatch.** For each selected family, spawn a Sonnet subagent in parallel using the prompt scaffold in `./references/families.md`. Pass: (a) the family's section of the methodology survey, (b) the run lens from step 5, (c) the freshness memo from step 4, (d) the input docs, and (e) on customer-anchored runs, the "GENERALIZATION DISCIPLINE" block from this SKILL.md's "Customer-anchored runs" section (paste it verbatim into the subagent prompt — the families.md scaffold has the slot for it). For `industry-targets`, also pass the relevant rules from `./references/dependencies/conversint-current/references/icp-research.md`. Each subagent returns a structured markdown section plus the required family-specific artifact (sizing estimates with confidence, ICP cards with source coverage status, density score, pricing-power score, etc.) plus its own 1–5 confidence grade with named factors.

*Runtime note:* parallel fan-out works when this skill is invoked at the top level (main thread). If `/market-research` is dispatched from inside another subagent (nested fan-out is not supported in current Claude Code), run the families serially in-thread using the same prompts and call out the degradation in the Methodology section. Output contract holds either way.

7. **Synthesize** into the report markdown with sections: - **Executive Summary** — a 200–350 word block at the top that follows the operator's reading path: run lens (one sentence) → overall confidence grade + limiting factor → the headline differentiation thesis ("what would have to be true," compressed to 2–3 sentences) → Slice A one-liner naming who to call → concentration reading + the one-line angle → recommended posture (build / pilot / monitor / pass). Format as short prose paragraphs (not a bulleted dump) — this is what gets read first and skimmed by anyone deciding whether to read the rest. Pull all content from the family sections below; do not introduce new claims here. The full thesis with supporting/weakening evidence lives in the Differentiation thesis section as before — the executive summary compresses it, doesn't replace it. - **Methodology** — families run, run lens, input docs, date, freshness memo - **Sizing** — TAM/SAM/SOM with derivation method(s) and per-figure confidence - **Targets** — ICP slices, JTBD, DMU - **Competitive landscape** — density, concentration, evidence - **Differentiation thesis** — the "what would have to be true" statement, framed for the chosen lens (services / product / operator) - **Confidence** — overall grade = the *minimum* of the per-family confidence scores, with one-sentence rationale naming the limiting family. (Min, not mean, because the weakest family is the cap on the synthesis.) - **Sources** — numbered list, per-claim credibility tags, deduplicated across families

The Executive Summary is the last thing the main thread writes during synthesis — after all family sections, the differentiation thesis, and the confidence grade have been finalised. Writing it last (but placing it first) prevents the summary from drifting from the body.

If the user chose a split layout, produce one file per family group — keep Methodology and Sources in each file so they stand alone, put Differentiation thesis in `positioning.md` only, and put the Executive Summary in `positioning.md` only (since it depends on cross-family synthesis).

8. **Write and commit.** Write to the path picked in step 5 (customer-anchored or general — see Mental Model). Overwrite in place on re-run. Then commit to `main` via the repo helper: ```bash scripts/commit-md-to-main.sh \ "<path/to/report>.md" \ "Update Market Research: <topic-slug>" ``` Capture the `GitHub URL:` line from the helper — it's the shareable link.

  1. **Upsert the inventory row.** Call `lib/market_research.py:upsert_row(topic, fields)`. The row includes `topic`, `lens` (from step 5), `report_path`, `report_url` (the GitHub URL from step 8), summary fields for each methodology family, and `last_updated`. Per-field mapping: `./references/inventory.md`. If the helper raises `MarketResearchError("Inventory sheet not yet provisioned…")`, skip the upsert and print a one-line warning telling the user to run the provisioning script — do not block the run on inventory.

10. **Print the confirmation.** Always include both links so the user can jump to either (omit the inventory line if step 9 was skipped): ``` ✓ Market research updated: <topic-slug> (<lens> lens) Report: <GitHub URL> Inventory: <Sheet URL> ```

File placement rules (no version suffixes)

See `./references/dependencies/conversint-current/references/output-paths.md` for the canonical path table.

  • All `/market-research` outputs live under `research-thought-leadership/<topic-slug>/` — mirrors sibling topics (`ai-seo/`, `campaign-planning/`, `compounding-ai/`, `customer-support/`, `lead-gen/`). The folder is the *market or category*, never the customer.
  • Filenames inside the topic folder are always `market-research.md` (consolidated layout) or `sizing.md` / `targets.md` / `positioning.md` / `pricing.md` etc. when the user requests a split layout. **Do not prefix the filename with a customer slug** — market research is a category artifact, and the customer anchor (when present) lives inside the report as the seed exemplar, not in the filename.
  • Re-running the same topic overwrites the prior `market-research.md` by design. The inventory row plus git history are the audit trail; if a previous run anchored on a different customer needs to be preserved, branch the topic slug (e.g. `faith-based-content-ai-vs-secular`) rather than juggling filenames.
  • Report filenames use the markdown rule from `./references/dependencies/conversint-current/references/client-deliverable-standards.md` §7 — no date, no version suffix, overwrite in place. Git history is the version record.
  • The inventory `topic` key is the *market slug* (`bh-ambient-ai-scribe`, `faith-based-content-ai`). One row per topic; the row's job is to summarize the market, not to log every anchor. Per-customer detail lives in the report body, not in the path or the inventory key.

Do not auto-invoke /gdrive

Per repo convention, Drive upload is user-driven. Return the GitHub URL and the inventory-sheet URL; stop there.

Iteration loop

When a run's findings are thin or the methodology needs to evolve, edit `./references/methodology-survey.md` directly and re-run. The skill picks up the change on next invocation — that's the pluggable bit.

Further reading

  • `./references/methodology-survey.md` — the full methodology playbook (sizing, competitive, targeting, pricing, analyst synthesis)
  • `./references/families.md` — family-registry handles and per-family subagent prompt scaffolds
  • `./references/inventory.md` — inventory-sheet schema and the `gws` call pattern via `lib/market_research.py`