plugins/pm/skills/expansion-strategy/SKILL.md
Upsell, cross-sell, and account growth tactics. Framework for revenue expansion.
npx skillsauth add coalesce-labs/catalyst expansion-strategyInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
/expansion-strategy
Then provide:
I'll decompose your NRR, identify the biggest expansion gap, assess pricing sensitivity, design in-product triggers, and build a playbook.
Output: Saved to thoughts/shared/pm/analyses/expansion-strategy-[date].md
Time: ~15 min for focused lever, ~30 min for full strategy
When to use: When optimizing monetization, planning pricing tiers, or building expansion features
Framework source: Aakash Gupta's expansion and monetization frameworks
Automatic Context Checks: When this skill is invoked, immediately check:
| Source | Files/Folders | Search Terms | What to Extract |
| ----------------- | ---------------------------------------------- | ----------------------------------------------------------------- | --------------------------------------------------------------------- |
| Business Info | thoughts/shared/pm/context/business-info-template.md | pricing, tiers, plans, ACV, revenue model, monetization | Current pricing, tiers, customer segments, revenue targets |
| Metrics/Analytics | thoughts/shared/pm/metrics/*.md | NRR, "net revenue retention", expansion rate, upsell, churn, MRR | Existing expansion metrics, NRR benchmarks, churn by segment |
| PRDs | thoughts/shared/pm/prds/*.md | pricing, tier, feature gate, monetization | Feature decisions tied to monetization, pricing rationale |
| Strategy | thoughts/shared/pm/frameworks/*.md | "growth", "expansion", "pricing", "positioning" | Strategic approach, customer segmentation, market positioning |
| Meeting Notes | thoughts/shared/product/meeting-notes/*.md | pricing, customer expansion, upsell, enterprise, segment, revenue | Sales conversations, customer upgrade opportunities, pricing feedback |
Context Priority:
Cross-Skill Links:
activation-analysisretention-analysiswrite-prod-strategyBefore diving into expansion tactics, let me check what you already know about your business...
Checking:
thoughts/shared/pm/context/business-info-template.md for current pricing and segmentsthoughts/shared/pm/metrics/ for existing expansion metrics and NRRthoughts/shared/pm/prds/ for monetization-related decisionsthoughts/shared/pm/frameworks/ for revenue growth strategythoughts/shared/product/meeting-notes/ for sales conversations about expansion[If analytics MCP connected]: "Let me also query [PostHog/PostHog] for current expansion rates, NRR, and customer segment growth patterns."
Based on what I find, I'll show you:
From Business Info:
From Metrics/Analytics:
From PRDs:
From Sales/CS Meetings:
From Strategy Docs:
Based on internal context, we don't yet know:
Should I dive into expansion strategy, or would you like to provide additional context first?
Instead of generic "what's your revenue model," I'll ask:
"What percentage of your customers expand each month, and how much revenue do they bring?"
This tells me your baseline expansion rate and whether expansion is already happening.
"Which customer segment should be expanding but isn't?"
Examples:
"What's preventing expansion right now—is it product gaps, unclear value, pricing confusion, or customer awareness?"
This helps prioritize what to fix first.
"Which expansion lever—upsell, cross-sell, or seat expansion—is closest to ready?"
Some need product changes, some just need sales motion.
"What would expanding by 10% do to your NRR and annual revenue?"
Anchors expansion work to business impact.
What it is: Move customers to higher-priced tiers
Examples:
When it works:
What it is: Sell additional products/modules
Examples:
When it works:
What it is: Grow usage within existing accounts
Examples:
When it works:
Track these stages:
Active Users (100%)
↓
Engaged Users (60%) - using product regularly
↓
Power Users (30%) - hitting limits or wanting more
↓
Expansion Trigger (15%) - ready to upgrade
↓
Upgraded (10%) - completed expansion
Key metrics:
Use this prompt:
Use /expansion-strategy and reference [[business-info-template]]
Help me identify expansion opportunities:
- Product: [describe your product]
- Current pricing: [tiers/plans]
- Usage patterns: [how customers use it]
What are our top 3 expansion levers?
Common levers:
Three expansion segments:
1. Ready to Expand (Hot)
2. Could Expand (Warm)
3. Not Ready (Cold)
In-product triggers:
1. Limit-based triggers
Example: "You've used 90% of your storage. Upgrade for unlimited?"
2. Feature-access triggers
Example: "Unlock advanced analytics with Professional plan"
3. Team-growth triggers
Example: "Invite 5+ teammates? Team plan is 30% cheaper per seat"
4. Success-based triggers
Example: "You've completed 100 projects! You're ready for Pro features"
Timing matters: Show upgrade prompts at moments of success, not frustration
Value ladder = clear progression of benefits
Example: Notion's tiers
Each tier unlocks new capabilities aligned with growing needs
What it is: Pay for what you use (seats, volume, API calls)
Examples:
Pros:
Cons:
Best for: Products with clear usage metrics
What it is: Tiers unlock features
Examples:
Pros:
Cons:
Best for: Products with distinct feature sets
What it is: Combination of seats + features + usage
Example: HubSpot
Best for: Complex products with multiple value dimensions
Goal: Convert free users to first paid plan
Tactics:
Example: Notion
Goal: Move paid users to higher tiers
Tactics:
Example: Salesforce
Goal: Grow seats within accounts
Tactics:
Example: Slack
Key metrics to track:
NRR = (Starting ARR + Expansion - Churn) / Starting ARR × 100%
Example:
- Starting ARR: $1M
- Expansion: $300K (upsells + cross-sells)
- Churn: -$100K
- NRR = ($1M + $300K - $100K) / $1M = 120%
Benchmarks:
Monthly Expansion Rate = (Accounts that expanded this month) / (Total accounts) × 100%
Target: 10-15% monthly expansion rate
Median days from signup to first upgrade
Target varies by product:
❌ Pushing expansion before activation
❌ Over-gating features
❌ Ignoring usage patterns
❌ No clear value differentiation
❌ Treating expansion as sales-led only
Strategy: Storage-based upsell
Trigger: File storage nearing limit
Result: Simple, usage-based expansion
Strategy: Usage limits + features
Trigger: 40-minute limit hit during meetings
Result: Natural friction point drives upgrades
Strategy: Seat expansion + feature gating
Trigger: Team collaboration needs
Result: 150%+ NRR, seat expansion drives growth
Identify your top 3:
What signals indicate expansion readiness?
List your pricing tiers and key differentiators:
Strategy Documents:
thoughts/shared/pm/analyses/expansion-strategy-[quarter].mdPricing Changes & Experiments:
thoughts/shared/pm/prds/ for any tier changes or feature gatingSales Playbooks:
/catalyst-pm-ops:slack-message to draft sales team battlecardsFeeds into:
/prd-draft - New tier/feature gating decisions reference expansion strategy/retention-analysis - Expansion cohort performance data informs retention strategy/activation-analysis - Activation rate by segment informs expansion readiness/write-prod-strategy - Revenue model and pricing strategy/metrics-framework - NRR, expansion rate as leading indicators of business healthPulls from:
/retention-analysis - Which segments retain best (expansion potential)/activation-analysis - When users are ready to expand (post-activation)/define-north-star - Ensure expansion metrics align with North Star/competitive-analysis - Competitor pricing and tier positioningAfter defining your expansion strategy, ask:
Break NRR into its components to diagnose where growth is coming from:
NRR = (Starting MRR + Expansion - Contraction - Churn) / Starting MRR
| Component | Current | Target | Gap | Primary Driver | | --------------- | ----------- | ----------- | ----------- | ------------------------------------- | | Starting MRR | $_ | - | - | Baseline | | Expansion MRR | $_ | $_ | $_ | Seat growth / tier upgrades / add-ons | | Contraction MRR | $_ | $_ | $_ | Downgrades / seat removals | | Churn MRR | $_ | $_ | $_ | Full cancellations | | NRR | ___% | ___% | ___% | [Biggest gap component] |
Focus your strategy on the component with the biggest gap.
| NRR Range | Diagnosis | Priority | | --------- | ----------------------------------------------------------------- | ----------------------------------- | | <90% | Churn is killing you. Fix retention before expansion. | Retention first | | 90-100% | Churn and contraction offset expansion. Reduce downgrades. | Balance churn reduction + expansion | | 100-110% | Healthy but room to grow. Focus on expansion levers. | Expansion optimization | | 110-120% | Strong. Optimize expansion efficiency and reduce CAC. | Efficiency + new expansion vectors | | 120%+ | Exceptional. Protect what's working, experiment with new vectors. | Protect + innovate |
Before recommending tier upgrades, assess pricing sensitivity:
What % of customers are at >80% of their tier limits?
What's the price gap between tiers?
Is there a "dead zone" where customers outgrow one tier but the next tier is too expensive?
What's the upgrade conversion rate at each tier boundary?
If a dead zone exists between tiers, consider:
When analyzing expansion opportunities, map your pricing against competitors:
| Tier | Your Price | Competitor A | Competitor B | Positioning | | ------------ | ----------- | ------------ | ------------ | ------------------------ | | Free/Starter | [$/user/mo] | [$/user/mo] | [$/user/mo] | [Cheaper/Parity/Premium] | | Mid-Tier | [$/user/mo] | [$/user/mo] | [$/user/mo] | [Cheaper/Parity/Premium] | | Enterprise | [$/user/mo] | [$/user/mo] | [$/user/mo] | [Cheaper/Parity/Premium] |
Key questions:
Pull competitor pricing from [[competitive-analysis]] documents or [[business-info-template]] competitor sections.
Design in-product triggers that naturally lead to expansion. Each trigger should surface a contextual upgrade prompt, not a generic paywall.
| Trigger | When It Fires | Message Pattern | Conversion Rate Benchmark | | ------------------------------ | ------------------------------------- | --------------------------------------------------------------------- | ------------------------- | | Usage limit approaching | 80% of seats/storage/API calls used | "You're at 80% of your [limit]. Upgrade to avoid hitting your cap." | 5-15% | | Team growth detected | New team member invited | "Welcome [name]! Your team is growing. Team plan saves 30% per seat." | 8-12% | | Advanced feature attempted | User clicks on a locked feature | "This feature is available on [tier]. Here's what it does: [value]." | 3-8% | | Success milestone reached | User hits a usage milestone | "You've shipped 10 PRDs! Power users like you get more from Pro." | 2-5% | | Competitor feature gap | User tries to do something they can't | "Looking for [capability]? It's available on [tier]." | 4-10% |
Not all triggers convert. Some just annoy. Track these per trigger:
| Trigger | Impressions | Clicks | Conversions | Conversion Rate | Dismiss Rate | Annoyance Signal | | ----------- | ----------- | ------ | ----------- | --------------- | ------------ | ------------------------------ | | [Trigger 1] | [N] | [N] | [N] | [%] | [%] | [NPS delta or support tickets] |
Metrics to track per trigger:
Decision framework:
Before delivering the expansion strategy, verify:
retention-analysis - Retention enables expansion (retained users more likely to expand)activation-analysis - Activation precedes expansion (activate before offering tiers)experiment-decision - Test expansion features and pricing changesdefine-north-star - Align expansion to metrics (ensure NRR supports growth)metrics-framework - Track expansion rate and NRR as leading indicatorscompetitor-analysis - Understand competitive pricing and positioningwrite-prod-strategy - Align expansion to broader strategyFramework credit: Adapted from Aakash Gupta's expansion and monetization frameworks. Read: https://www.news.aakashg.com/p/ultimate-guide-expansion
testing
Phase-agent that fixes a failing verify verdict so the pipeline self-heals instead of stalling to needs-human (CTL-653). Reads `${ORCH_DIR}/workers/<ticket>/verify.json`, fixes the `findings[]` (every severity:"high" plus the regression_risk drivers) directly via Edit/Write, commits the remediation, and emits `phase.remediate.complete.<ticket>`. The scheduler's router then re-dispatches `verify` to re-check (the verify⇄remediate cycle, cap 3). Dispatched as a `claude --bg` job by `phase-agent-dispatch`, which invokes it via slash command — hence `user-invocable: true`.
development
Phase agent for the verify step of the 9-phase orchestrator pipeline (CTL-450). NEW skill — has no canonical wrapper. Runs read-only adversarial verification against the implement-phase diff: tsc, tests, lint, security scan, reward-hacking scan, code review, test coverage, silent-failure hunt. Writes ${ORCH_DIR}/workers/<TICKET>/verify.json then emits phase.verify.complete.<ticket>. Reads phase-implement.json as its prior-phase artifact. NEVER writes application code — only test files allowed. Spawned via phase-agent-dispatch via slash command — hence `user-invocable: true`.
tools
--- name: phase-triage description: Phase agent that triages a Linear ticket — expands acronyms, classifies (feature/bug/docs/refactor/chore), identifies dependencies, estimates scope, writes triage.json, and posts a triage analysis comment to Linear. Triage completion is signaled by that comment plus the local triage.json — there is no `triaged` label. Emits phase.triage.complete.<TICKET> on success and phase.triage.failed.<TICKET> on error. Dispatched by the phase-agent orchestrator (CTL-452)
testing
Phase agent for the review step of the 9-phase orchestrator pipeline (CTL-450). Wraps the /review skill (gstack) — explicitly skips /ultrareview per user decision. Reads verify.json from the prior phase, runs /review against the diff, writes ${ORCH_DIR}/workers/<TICKET>/review.json, and creates a remediation commit for any HIGH-severity finding that has a deterministic fix. Emits phase.review.complete.<ticket>. Spawned via phase-agent-dispatch via slash command — hence `user-invocable: true`.