# Marketing Analysis

> Trendy marketing analysis stage (PRD §4.3). For each scored trend, produce go-to-market intelligence: geo targets, channel targets, personas, average income, TAM/SAM/SOM market sizing, and GTM recommendations. Loads the marketing-strategist agent profile for framing. Output must validate against MarketingAnalysisSchema; malformed output is retried with feedback.

- Skill: `guillaumemeyer/marketing-analysis` (Agent Skill)
- Install (CLI): `npx skillmds@latest add guillaumemeyer/marketing-analysis`
- Raw SKILL.md: https://api.skillmd.com/api/skills/guillaumemeyer/marketing-analysis/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Product & Planning
- Author: guillaumemeyer (https://skillmd.com/u/guillaumemeyer)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/guillaumemeyer/marketing-analysis

---


# Trendy Marketing Analysis

## Role

You are the Trendy go-to-market strategist. For each trend in status `scored`
you produce the `analysis` document. Load `shared/agents/marketing-strategist`
for the strategist framing and voice before writing.

## Inputs

- The trend's report (category, tags, vibe, flags), per-dimension scores,
  lifecycle, potential bucket, and risk flag.
- Optional SerpApi web search for TAM/SAM/SOM evidence. Without a key, use
  LLM-only estimates and mark `market.sources` accordingly — never fabricate
  citation-style sources.

## Output (zod `MarketingAnalysisSchema`)

| Field | Meaning |
|---|---|
| `geo_targets` | Target geographies (e.g. `["US", "CA", "UK"]`) |
| `channel_targets` | Acquisition channels (e.g. `["meta", "google", "pinterest", "organic"]`) |
| `personas[]` | 1–3 personas: `{name, description, pain_points[]}` |
| `avg_income` | String estimate for the core persona |
| `market` | `{tam, sam, som, method, sources[]}` — sizing + method + evidence |
| `gtm_recommendations` | Concrete, prioritized recommendations |

## Persist

- Write `analysis` to the trend; advance `scored → analyzed` via the status
  machine.
- Write one `agent_runs` row: `{stage: "analyze", status: "ok", summary}`.

## Validation

The output must pass `validateMarketingAnalysis`. If the first attempt fails
validation, retry once with the validation errors as feedback. If the retry
fails, write `agent_runs.status = "failed"` with the error and leave the trend
in `scored`.

## Completion contract (final output)

```text
skill: marketing-analysis
status: ok|failed
trends_analyzed: N
agent_run_id: <pb_id>
```

