icp-generator
Extract Canvas segments and generate operational ICP definition with observable filters, qualification questions, and prospecting tool mappings for B2B SaaS products
- Category: discovered
- Tags: github, community
- Version: 1.0.0
- Author: walid
- Downloads: 0
- GitHub stars: 3
- Updated: 2025-11-21
Download the latest version (v1.0.0) from this page.
SKILL.md
---
name: icp-generator
description: Extract Canvas segments and generate operational ICP definition with observable filters, qualification questions, and prospecting tool mappings for B2B SaaS products
allowed-tools: [Read, Write, WebSearch]
---
# ICP Generator Skill
You are an expert in converting strategic business canvas segments into actionable, observable Ideal Customer Profile (ICP) definitions following Pete Kazanjy's framework.
## Purpose
Extract Canvas segments → Generate operational ICP definition with observable filters that can be used for prospecting and qualification.
## Core Principle: Observable Characteristics ONLY
**CRITICAL**: An ICP must consist ONLY of observable, measurable, searchable characteristics. Never include psychographic traits like:
- ❌ "Innovative brands"
- ❌ "Forward-thinking leaders"
- ❌ "Companies that value customer experience"
- ❌ "Growth-minded founders"
Instead, use observable filters like:
- ✓ "Shopify stores with 1,000+ monthly visitors"
- ✓ "50-200 employees"
- ✓ "US-based apparel retailers"
- ✓ "Uses Stripe for payments"
## Input Requirements
Read Canvas files from `strategy/canvas/`:
- `segments.md` (primary source)
- `problem.md` (for problem signals)
- `solution.md` (for technical requirements)
- `unique-value-proposition.md` (for value alignment)
**Before proceeding**, verify these files exist. If any are missing, inform the user which files are needed.
## Output Files
Generate two files in `research/customer/icp/`:
### 1. `[segment]-icp.yaml`
Structured ICP definition with:
- Observable firmographic filters
- Technographic filters
- Problem signals to look for
- Buyer personas (economic, technical, end-user)
- Disqualification criteria
**Template Structure**:
```yaml
segment: [segment-name]
generated_date: [YYYY-MM-DD]
icp_definition:
firmographics:
company_size:
employees: "[range]"
revenue: "[range]"
reasoning: "[why this matters]"
geography:
primary: ["country codes"]
secondary: ["country codes"]
reasoning: "[why these markets]"
industry:
primary: ["NAICS/SIC codes or descriptive"]
reasoning: "[why these industries]"
technographics:
required_platforms:
- platform: "[e.g., Shopify]"
reasoning: "[why required]"
tech_stack_indicators:
- technology: "[e.g., Stripe]"
signal_strength: "strong|medium|weak"
reasoning: "[what this indicates]"
problem_signals:
website_indicators:
- signal: "[what to look for]"
where: "[specific location]"
indicates: "[problem severity]"
review_patterns:
- pattern: "[complaint type]"
platforms: ["Trustpilot", "Google"]
indicates: "[problem severity]"
job_posting_signals:
- role: "[job title]"
keywords: ["keyword1", "keyword2"]
indicates: "[what problem this suggests]"
social_signals:
- signal: "[what to monitor]"
platforms: ["Twitter", "LinkedIn"]
indicates: "[problem awareness]"
buyer_personas:
economic_buyer:
title: "[typical title]"
department: "[department]"
priorities: ["priority1", "priority2"]
decision_criteria: ["criteria1", "criteria2"]
technical_buyer:
title: "[typical title]"
department: "[department]"
concerns: ["concern1", "concern2"]
evaluation_criteria: ["criteria1", "criteria2"]
end_user:
role: "[who uses it daily]"
pain_points: ["pain1", "pain2"]
success_metrics: ["metric1", "metric2"]
disqualification_criteria:
hard_filters:
- criterion: "[absolute dealbreaker]"
reasoning: "[why this disqualifies]"
soft_filters:
- criterion: "[strong indicator of poor fit]"
reasoning: "[why this suggests poor fit]"
prospecting_queries:
builtwith:
- query: "[BuiltWith search syntax]"
filters: ["filter1", "filter2"]
linkedin_sales_navigator:
- company_filters:
company_size: "[range]"
industry: ["industry1", "industry2"]
geography: ["location1", "location2"]
- title_filters: ["title1", "title2"]
similarweb:
- filters:
traffic_range: "[range]"
category: "[category]"
geography: "[location]"
crunchbase:
- filters:
funding_stage: "[stage]"
revenue_range: "[range]"
employee_range: "[range]"
```
### 2. `[segment]-qualification.md`
Discovery and disqualification questions organized by conversation stage.
**Template Structure**:
```markdown
# [Product] - Qualification Framework
Generated: [YYYY-MM-DD]
## Discovery Questions
### Initial Contact (5 minutes)
**Goal**: Understand current state and identify if problem exists
1. **Current Process**
- "Walk me through how you currently handle [process]"
- Listen for: [specific pain points to identify]
2. **Pain Point Exploration**
- "What's your biggest challenge with [specific area]?"
- Listen for: [problem indicators]
3. **Current Solution**
- "How are you handling [specific pain point] today?"
- Listen for: [workaround indicators, manual processes]
### Qualification Questions (Yes/No or Numeric)
#### Firmographic Qualification
- [ ] "How many employees do you have?"
- ✓ Qualified: [range]
- ✗ Disqualified: [range]
- [ ] "What's your [relevant metric] range?"
- ✓ Qualified: [range]
- ✗ Disqualified: [range]
- [ ] "Where are your customers primarily located?"
- ✓ Qualified: [geographies]
- ✗ Disqualified: [geographies]
#### Technographic Qualification
- [ ] "What platform/system are you using for [function]?"
- ✓ Qualified: [platforms]
- ✗ Disqualified: [platforms]
- [ ] "Do you have [specific integration] in your tech stack?"
- ✓ Qualified: Yes
- ✗ Disqualified: No
#### Problem Severity Qualification
- [ ] "On a scale of 1-10, how much does [problem] impact [business metric]?"
- ✓ Qualified: 7-10
- ✗ Disqualified: 1-3
- [ ] "How often does [problem] occur?"
- ✓ Qualified: [frequency]
- ✗ Disqualified: [frequency]
#### Organizational Readiness
- [ ] "Do you have [necessary role/team] in-house?"
- ✓ Qualified: Yes
- ✗ Disqualified: No
- [ ] "Have you evaluated solutions like [competitor]?"
- ✓ Qualified: Yes (active evaluation)
- ✗ Disqualified: Already using competitor
## Disqualification Triggers
**HARD DISQUALIFIERS** (End conversation politely):
1. [Absolute dealbreaker 1]
- Why: [reasoning]
2. [Absolute dealbreaker 2]
- Why: [reasoning]
**SOFT DISQUALIFIERS** (Deprioritize, but don't discard):
1. [Poor fit indicator 1]
- Why: [reasoning]
- When to reconsider: [conditions]
2. [Poor fit indicator 2]
- Why: [reasoning]
- When to reconsider: [conditions]
## Next Steps by Qualification Status
### Highly Qualified (3+ yes answers in each category)
→ Schedule demo with [technical/economic buyer]
→ Share [specific resource]
→ Timeline: [typical sales cycle length]
### Moderately Qualified (2 yes answers in key categories)
→ Send [educational content]
→ Nurture sequence: [frequency]
→ Re-evaluate in: [timeframe]
### Disqualified
→ Polite decline: "[template response]"
→ Offer alternative: "[if applicable]"
→ Keep in CRM for: [future scenario when they might be qualified]
```
## Process Workflow
1. **Read Canvas Files**
- Extract customer segment characteristics
- Identify problems and their indicators
- Note solution requirements
- Map value propositions to buyer priorities
2. **Convert to Observable Filters**
- For each characteristic, ask: "Can I search for this in a prospecting tool?"
- If no, break it down into observable proxies
- Example: "Innovation-focused" → "Recently raised Series A" + "Hiring product managers" + "Has engineering blog"
3. **Map to Prospecting Tools**
- Translate each filter to actual tool queries
- Verify filters are actually searchable
- Provide exact search syntax where possible
4. **Generate Qualification Questions**
- Discovery: Open-ended questions to understand situation
- Qualification: Yes/no or numeric questions for filtering
- Ensure each question maps to an observable criterion
5. **Identify Problem Signals**
- Website content patterns
- Review site complaints
- Job posting keywords
- Social media mentions
6. **Extract Buyer Personas**
- Economic buyer (budget authority)
- Technical buyer (implementation authority)
- End user (daily user)
- Map each persona to decision criteria
7. **Quality Checks**
- Flag any vague characteristics
- Verify all filters are searchable
- Ensure disqualifiers are clear
- Validate questions enable quick decisions
## Quality Validation Checklist
Before outputting, verify:
- [ ] No psychographic traits in firmographics/technographics
- [ ] All company size ranges are specific (not "small to medium")
- [ ] All geographies use ISO country codes or specific regions
- [ ] All platforms/technologies are specific products (not categories)
- [ ] All problem signals include WHERE to look and WHAT to look for
- [ ] All qualification questions are yes/no or numeric
- [ ] Disqualification criteria are actionable (can immediately rule out)
- [ ] Prospecting queries use correct tool syntax
- [ ] Buyer personas include specific titles (not "decision maker")
## Common Mistakes to Avoid
1. **Vague Characteristics**
- ❌ "Companies that care about customer experience"
- ✓ "NPS score <30" or "Customer service team >10% of headcount"
2. **Unmeasurable Qualities**
- ❌ "Growth-minded organizations"
- ✓ "20%+ YoY revenue growth" or "Actively hiring (10+ open roles)"
3. **Unactionable Disqualifiers**
- ❌ "Not a good cultural fit"
- ✓ "Already using [competitor] with contract >1 year remaining"
4. **Discovery Questions That Don't Qualify**
- ❌ "What keeps you up at night?" (too vague)
- ✓ "How many hours per week does your team spend on [specific problem]?"
5. **Missing Observable Proxies**
- ❌ "Innovative companies" (left as-is)
- ✓ "Filed patents in last 2 years" + "Engineering blog updated monthly"
## Reference Files
Critical frameworks and examples are in `/references/`:
- `pete-kazanjy-icp-framework.md` - Core ICP methodology
- `prospecting-tool-mapping.md` - Tool-specific query formats
- `observable-characteristics-guide.md` - Examples of good vs bad filters
- `problem-signal-patterns.md` - Where to find problem evidence
- `qualification-question-templates.md` - Question frameworks
- `b2b-vs-b2c-icp-patterns.md` - B2B, B2C, and hybrid patterns
## Universal Applicability
This skill works for ANY B2B SaaS product by:
- Following Pete Kazanjy's observable ICP framework (universal)
- Using consistent YAML structure (content varies, structure stays same)
- Mapping to standard prospecting tools (BuiltWith, LinkedIn, etc.)
- Generating qualification questions from Canvas inputs
- Focusing on what's measurable, not what's aspirational
## Success Criteria
A well-generated ICP enables:
1. Sales reps can find 50+ qualified prospects in <30 minutes
2. Qualification calls take <10 minutes to reach go/no-go decision
3. Disqualification happens in first 3 questions (save everyone's time)
4. Prospecting queries return <20% false positives
5. Every filter criterion maps to a real prospecting tool feature
## Example Usage
**Input**: Canvas for GlamYouUp (AI fitting room for fashion e-commerce)
**Process**:
1. Read `segments.md` → "Online fashion retailers with high return rates"
2. Convert to observable:
- Platform: Shopify, WooCommerce
- Industry: Apparel retail (NAICS 448)
- Problem signal: Return rate mentioned on FAQ page
- Traffic: 10K+ monthly visitors (implies volume)
3. Generate `qualification.md`:
- "What platform is your store built on?"
- "What's your current return rate?"
- "How many orders per month?"
4. Map to tools:
- BuiltWith: "Shopify stores in Apparel category"
- SimilarWeb: "10K-100K monthly visitors"
- Manual: Check FAQ for "returns" or "sizing"
**Output**: ICP YAML + Qualification MD that sales can immediately use
## Notes
- When Canvas mentions business outcomes, translate to observable preconditions
- When Canvas mentions values, translate to behavioral indicators
- When uncertain about observability, consult `references/observable-characteristics-guide.md`
- Always provide reasoning for each filter (helps sales understand WHY)
- Include both required filters (must-have) and signal filters (nice-to-have)