- name
- market-analyst
- description
- Synthesize multiple sentiment analyses to identify market trends, gaps, opportunities, and predict likely hits. Cross-analyzes patterns to find underserved markets and highlight unique innovations.
# Market Analyst Skill
## Purpose
This skill consumes outputs from the **reddit-sentiment-analysis** skill to perform meta-analysis across multiple products/games. It identifies:
- **Common patterns** across successful products (what universally drives satisfaction)
- **Market gaps** where demand exists but supply is lacking
- **Underserved segments** with unmet needs
- **Novelty opportunities** where unique approaches could succeed
- **Predicted hits** based on cross-product sentiment intelligence
- **Strategic recommendations** for product development and positioning
## When to Use This Skill
Use this skill when you have:
- ✅ Multiple sentiment analysis reports (2+ products/games analyzed)
- ✅ Need to identify market opportunities across a product category
- ✅ Want to predict which upcoming products will succeed
- ✅ Looking for gaps in the market based on user sentiment
- ✅ Need strategic recommendations for product development
- ✅ Want to understand what makes products succeed or fail
## Prerequisites
1. **Input Data**: 2+ Reddit sentiment analysis reports in `/docs/`
- Generated by `reddit-sentiment-analysis` skill
- Must follow standard format with LIKES/DISLIKES/WISHES sections
- Recent data (ideally within same time period)
2. **Analysis Scope**: Clear product category (e.g., FPS games, productivity apps, streaming services)
## Core Workflow
### Phase 1: Data Ingestion and Normalization
**1. Identify Available Sentiment Reports**
- Scan `/docs/` for `reddit-sentiment-*.md` files
- Parse each report to extract structured data
- Validate format and completeness
**2. Extract Key Data Points**
For each product/game analyzed, extract:
```javascript
{
product_name: string,
overall_sentiment: {positive: %, negative: %, neutral: %},
likes: [
{aspect: string, mentions: number, sentiment: %, quotes: []}
],
dislikes: [
{aspect: string, mentions: number, severity: string, quotes: []}
],
wishes: [
{feature: string, mentions: number, urgency: string, quotes: []}
],
key_insights: [],
competitor_mentions: {}
}
```
### Phase 2: Cross-Product Pattern Analysis
**3. Identify Universal Success Factors**
Analyze LIKES across all products to find patterns:
**Pattern Detection Algorithm:**
```javascript
// Group similar aspects across products
const commonLikes = groupSimilarAspects(allProducts.likes);
// Calculate frequency and consistency
for (aspect in commonLikes) {
const frequency = countProducts(aspect);
const avgSentiment = calculateAverage(aspect.sentiment);
const consistency = calculateVariance(aspect.sentiment);
if (frequency >= 50% && avgSentiment >= 85% && consistency < 15%) {
markAs("Universal Success Factor");
}
}
```
**Success Factor Categories:**
- **Gameplay/Functionality**: Core mechanics, features, usability
- **Value Proposition**: Pricing, content volume, value-for-money
- **Polish/Quality**: Performance, visuals, stability, UX
- **Community/Social**: Multiplayer, social features, community engagement
- **Innovation**: Novel mechanics, creative approaches, unique features
**4. Identify Universal Pain Points**
Analyze DISLIKES across all products:
```javascript
// Find recurring complaints
const commonDislikes = groupSimilarIssues(allProducts.dislikes);
// Classify by universality
for (issue in commonDislikes) {
const frequency = countProducts(issue);
const avgSeverity = calculateSeverity(issue);
if (frequency >= 60% && avgSeverity === "HIGH") {
markAs("Industry-Wide Problem");
}
}
```
**Pain Point Categories:**
- **Monetization Issues**: Aggressive MTX, pay-to-win, expensive pricing
- **Technical Problems**: Performance, bugs, server issues
- **Design Flaws**: Poor UX, frustrating mechanics, balance issues
- **Content/Feature Gaps**: Missing features, lack of variety
- **Business Model Issues**: Live service problems, abandonment fears
**5. Analyze Wish Patterns**
Examine WISHES to identify unmet demand:
```javascript
// Find common wishes across products
const universalWishes = groupSimilarWishes(allProducts.wishes);
// Calculate demand intensity
for (wish in universalWishes) {
const demandScore = wish.frequency * wish.avgUrgency * wish.mentions;
if (demandScore > THRESHOLD) {
markAs("High-Demand Unmet Need");
}
}
```
### Phase 3: Gap Identification and Market Opportunity Analysis
**6. Identify Market Gaps**
**Gap Detection Framework:**
**Type 1: Feature Gaps** (Widely wished for, nobody delivers)
```
IF: Wish appears in 3+ products
AND: Urgency >= MEDIUM across all
AND: No product currently delivers it
THEN: Feature Gap Opportunity
```
**Type 2: Segment Gaps** (Underserved audience)
```
IF: Common complaint about product not serving a specific need
AND: No product specifically targets that need
THEN: Segment Gap Opportunity
```
**Type 3: Price/Value Gaps** (Wrong pricing tier)
```
IF: Multiple products criticized for pricing
AND: Wishes mention "more affordable option" or "premium option"
AND: No product fills that price point
THEN: Price Gap Opportunity
```
**Type 4: Business Model Gaps** (Better service model needed)
```
IF: Common complaints about monetization/lifecycle
AND: Alternative model wished for across products
THEN: Business Model Gap Opportunity
```
**7. Calculate Gap Priority Score**
```javascript
gapPriorityScore = (
demandIntensity * 0.35 + // How many people want it
competitiveGap * 0.25 + // How few products offer it
urgencyLevel * 0.20 + // How badly it's needed
marketSize * 0.15 + // Addressable market size
feasibility * 0.05 // Technical/business feasibility
) * 100
```
**Priority Tiers:**
- **CRITICAL (90-100)**: Massive demand, no competition, urgent need
- **HIGH (75-89)**: Strong demand, minimal competition, clear need
- **MEDIUM (60-74)**: Moderate demand, some competition, growing need
- **LOW (40-59)**: Niche demand, crowded market, optional feature
### Phase 4: Novelty Detection and Innovation Analysis
**8. Identify Outlier Successes**
Find products/features praised uniquely:
```javascript
// Detect novelty
for (product in allProducts) {
for (like in product.likes) {
const uniqueness = calculateUniqueness(like, otherProducts);
const sentiment = like.sentiment;
if (uniqueness > 80% && sentiment > 85%) {
markAs("Novelty Success", {
feature: like.aspect,
product: product.name,
why_unique: analyzeWhy(like),
replicability: assessReplicability(like)
});
}
}
}
```
**Novelty Categories:**
- **Mechanic Innovation**: Unique gameplay/feature never seen before
- **Design Innovation**: Novel UX/UI approach or artistic direction
- **Business Model Innovation**: New monetization or service model
- **Community Innovation**: Unique social/multiplayer approach
- **Accessibility Innovation**: Solving problems in new ways
**9. Assess Novelty Replicability**
For each novelty success:
- **Transferable to other products?** (YES/NO/PARTIAL)
- **Category-specific or universal?** (UNIVERSAL/CATEGORY/PRODUCT)
- **Competitive moat strength?** (WEAK/MEDIUM/STRONG)
- **First-mover advantage duration?** (MONTHS/YEARS/PERMANENT)
### Phase 5: Predictive Analysis and Recommendations
**10. Predict Likely Hits**
**Hit Prediction Algorithm:**
```javascript
function predictHitPotential(productConcept) {
const score = {
alignsWithSuccessFactors: 0, // Does it have universal likes?
avoidsCommonPitfalls: 0, // Does it avoid universal dislikes?
addressesUnmetNeeds: 0, // Does it fill market gaps?
hasNoveltyFactor: 0, // Does it innovate?
priceValueProposition: 0 // Is pricing right?
};
// Score each dimension (0-100)
score.alignsWithSuccessFactors = checkAlignment(productConcept, universalSuccessFactors);
score.avoidsCommonPitfalls = checkAvoidance(productConcept, universalPainPoints);
score.addressesUnmetNeeds = checkGapFilling(productConcept, marketGaps);
score.hasNoveltyFactor = checkNovelty(productConcept, noveltySuccesses);
score.priceValueProposition = checkPricing(productConcept, pricingAnalysis);
const hitProbability = (
score.alignsWithSuccessFactors * 0.30 +
score.avoidsCommonPitfalls * 0.25 +
score.addressesUnmetNeeds * 0.25 +
score.hasNoveltyFactor * 0.15 +
score.priceValueProposition * 0.05
);
return {
probability: hitProbability,
confidence: calculateConfidence(dataQuality, sampleSize),
breakdown: score,
recommendations: generateRecommendations(score)
};
}
```
**11. Generate Strategic Recommendations**
**Product Development Recommendations:**
```markdown
### Must-Have Features (Universal Success Factors)
1. [Feature] - Present in X/Y products with Z% positive sentiment
- Why it matters: [explanation]
- How to implement: [guidance]
### Critical Pitfalls to Avoid (Universal Pain Points)
1. [Issue] - Complained about in X/Y products with Z severity
- Why it fails: [explanation]
- How to avoid: [guidance]
### Market Gap Opportunities (High Priority)
1. [Gap] - Priority Score: XX/100
- Demand evidence: [data]
- Competition: [current state]
- Recommended approach: [strategy]
```
**12. Create Market Opportunity Matrix**
```
HIGH NOVELTY
|
LOW DEMAND Q2: Risky Innovation Q1: Blue Ocean HIGH DEMAND
| |
Q3: Avoid/Niche Q4: Proven Demand
|
LOW NOVELTY
Q1 (High Demand + High Novelty): PRIORITY - Innovate in underserved areas
Q2 (Low Demand + High Novelty): RISKY - Innovation without market validation
Q3 (Low Demand + Low Novelty): AVOID - Crowded, low-interest space
Q4 (High Demand + Low Novelty): SAFE - Proven market, execution differentiator
```
## Output Format
### Market Analysis Report Structure
```markdown
# Market Analysis Report: [Product Category]
**Analysis Date**: [Date]
**Products Analyzed**: [List]
**Sentiment Reports Used**: [Number]
**Total Data Points**: [Posts + Comments analyzed]
---
## Executive Summary
[2-3 paragraph overview of key findings, top opportunities, major risks]
---
## Section 1: Universal Success Factors
### What Drives Success Across All Products
1. **[Success Factor Name]** (appears in X/Y products, Z% avg positive sentiment)
- **Evidence**: [Quotes from multiple products]
- **Why it works**: [Psychological/practical explanation]
- **Implementation guidance**: [How to deliver this]
- **Products excelling**: [Examples]
[Repeat for 5-7 success factors]
### Success Factor Summary Table
| Factor | Frequency | Avg Sentiment | Consistency | Priority |
|--------|-----------|---------------|-------------|----------|
| [Factor 1] | 5/5 products | 92% | High | CRITICAL |
| [Factor 2] | 4/5 products | 87% | Medium | HIGH |
...
---
## Section 2: Universal Pain Points
### What Consistently Fails Across Products
1. **[Pain Point Name]** (appears in X/Y products, Z severity)
- **Evidence**: [Quotes showing frustration]
- **Why it fails**: [Root cause analysis]
- **How to avoid**: [Prevention strategy]
- **Products struggling**: [Examples]
[Repeat for 5-7 pain points]
### Pain Point Summary Table
| Issue | Frequency | Avg Severity | Impact | Avoidability |
|-------|-----------|--------------|--------|--------------|
| [Issue 1] | 5/5 products | CRITICAL | High | Easy |
| [Issue 2] | 4/5 products | HIGH | Medium | Hard |
...
---
## Section 3: Market Gaps & Opportunities
### High-Priority Gaps (Score 75-100)
1. **[Gap Name]** - Priority Score: XX/100
- **Type**: [Feature/Segment/Price/Business Model]
- **Demand Evidence**:
- Mentioned in X/Y products
- Y total mentions, Z% urgency HIGH
- Representative quotes: "[quote 1]", "[quote 2]"
- **Current Competition**: [Who's attempting this, if anyone]
- **Market Size Estimate**: [TAM/SAM if calculable]
- **Recommended Approach**: [Strategy to fill gap]
- **Risks**: [Challenges to address]
- **Timeline to Market**: [Estimate]
[Repeat for all high-priority gaps]
### Medium-Priority Gaps (Score 60-74)
[Similar structure, condensed]
### Gap Opportunity Matrix
```
Demand Intensity vs. Competitive Gap
[Visual representation of opportunities]
```
---
## Section 4: Novelty & Innovation Analysis
### Successful Innovations (Outlier Wins)
1. **[Innovation Name]** from [Product]
- **What makes it unique**: [Description]
- **Sentiment**: [% positive, mentions]
- **Evidence**: [Quotes praising novelty]
- **Replicability**: [EASY/MEDIUM/HARD]
- **Transferability**: [Which categories could use this]
View on GitHub