
Data And Funnel Analytics
- 279 installs
- 80 repo stars
- Updated May 18, 2026
- manojbajaj95/claude-gtm-plugin
data-and-funnel-analytics is a Claude GTM plugin skill that maps funnel stages, measures drop-offs and conversion rates, and segments users so developers running go-to-market analytics can pinpoint leaks and prioritize p
About
data-and-funnel-analytics is a go-to-market analytics skill from manojbajaj95/claude-gtm-plugin that helps developers and product teams diagnose funnel performance. The skill structures GTM funnel stages, quantifies drop-offs and conversion rates between steps, and segments users to isolate where prospects stall. Claude uses the analysis to recommend prioritized experiments that improve pipeline throughput. Developers reach for data-and-funnel-analytics when SaaS metrics show conversion cliffs between signup, activation, or purchase stages and they need a structured diagnostic frame rather than ad hoc spreadsheet review.
- Multi-stage funnel definition and benchmarking
- Drop-off and stage conversion rate analysis
- GTM-oriented user and cohort segmentation
- Leak diagnosis with experiment recommendations
- Pipeline metrics aligned to go-to-market motions
Data And Funnel Analytics by the numbers
- 279 all-time installs (skills.sh)
- +4 installs in the week ending Aug 2, 2026 (Skillselion tracking)
- Ranked #251 of 853 Sales & Marketing skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/manojbajaj95/claude-gtm-plugin --skill data-and-funnel-analyticsAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 279 |
|---|---|
| repo stars | ★ 80 |
| Last updated | May 18, 2026 |
| Repository | manojbajaj95/claude-gtm-plugin ↗ |
How do you find drop-offs in a SaaS conversion funnel?
Map GTM funnel stages, measure drop-offs and conversion rates, and segment users so Claude can pinpoint leaks and recommend prioritized experiments to improve pipeline performance.
Who is it for?
Developers and product engineers supporting SaaS GTM who need funnel stage metrics and experiment priorities from pipeline data.
Skip if: Developers implementing product code, infrastructure monitoring, or application error tracking should use engineering analytics or observability skills instead.
When should I use this skill?
The user asks to analyze funnel conversion, segment users by stage drop-off, or prioritize GTM experiments from pipeline metrics.
What you get
Funnel stage map, conversion and drop-off metrics, user segments, and a prioritized experiment backlog.
Files
Data & Funnel Analytics
Workspace Context
Read bootstrap context before asking questions: strategy/brand.md for brand, audience, offer, channels, tools, constraints, and metrics; about/me.md for personal voice; content/ideas.md and content/calendar.md for content planning. Use legacy product-marketing context files only as fallback. Save generated drafts to content/<platform>/drafts/YYYY-MM-DD_short-topic-slug.md, and route durable learnings back to strategy/brand.md, about/me.md, or content/ideas.md.
Operating Contract
This skill is self-contained for its frontmatter scope: use its local instructions, references, scripts, and assets as the playbook; ask only for missing task-specific inputs; hand off to adjacent skills instead of expanding scope; and return an actionable artifact, decision, plan, draft, or diagnostic.
End-to-end analytics: set up tracking, interpret data, analyze funnels, measure product engagement, validate conversion paths, and calculate ROI.
Principle: Track for decisions, not data — every event should inform an action.
---
Analytics Tracking
Event Naming Convention
Format: object_action in lowercase snake_case.
signup_completed | cta_hero_clicked | checkout_started | onboarding_step_completedRules: Specific over vague (cta_hero_clicked not button_clicked), past tense for completed actions, context in properties not event name.
Tracking Plan
| Category | Event | Key Properties |
|---|---|---|
| Marketing | page_view | page_title, page_location, referrer |
cta_clicked | button_text, location, page | |
form_submitted | form_type, page | |
signup_completed | method, plan | |
| Product | onboarding_step_completed | step_number, step_name |
feature_used | feature_name, context | |
trial_started | plan, source | |
purchase_completed | plan, value, currency | |
| E-commerce | product_viewed | product_id, category, price |
product_added_to_cart | product_id, price, quantity | |
checkout_started | cart_value, items_count |
Standard Properties
- User context: user_id, user_type (free/paid/admin), plan_type
- Attribution: source, medium, campaign, content, term (UTM params)
- Page: page_title, page_location, content_group
- PII hygiene: Never send email, name, or phone as event properties. Use hashed user IDs only.
GA4 Implementation
// gtag.js custom event
gtag('event', 'signup_completed', {
'method': 'email',
'plan': 'free',
'user_id': userId
});
// GTM dataLayer
dataLayer.push({
'event': 'signup_completed',
'method': 'email',
'plan': 'free'
});Enhanced Measurement (enable in GA4): page_view, scroll, outbound_click, site_search, video_engagement, file_download.
Conversions: Admin → Events → Toggle "Mark as conversion." Counting: once per session (form submit) or every time (purchase).
UTM Parameters
Convention: utm_source={channel}&utm_medium={cpc|email|organic|social}&utm_campaign={id}&utm_content={variant}&utm_term={keyword}
- Apply to ALL paid and email links
- Never use on internal links (breaks session attribution)
- Lowercase, hyphens not spaces
- Document in a UTM tracking sheet
Privacy & Compliance
- GDPR/CCPA: Implement consent management, block GA4 until consent granted
- GA4 data retention: 14 months max (Admin → Data Settings)
- IP anonymization enabled
---
Analytics Interpretation
GA4 Benchmarks
| Metric | Good | Warning | Poor | Action When Poor |
|---|---|---|---|---|
| Avg Time on Page | >3 min | 1–3 min | <1 min | Improve content depth |
| Bounce Rate | <40% | 40–70% | >70% | Add internal links, improve intro |
| Engagement Rate | >60% | 30–60% | <30% | Review content quality |
| Scroll Depth | >75% | 50–75% | <50% | Add visual breaks |
| Pages/Session | >2.5 | 1.5–2.5 | <1.5 | Improve internal linking |
Google Search Console Benchmarks
| Metric | Good | Warning | Poor | Action When Poor |
|---|---|---|---|---|
| CTR | >5% | 2–5% | <2% | Improve title/meta description |
| Avg Position | 1–3 | 4–10 | >10 | Strengthen content, build links |
| Impressions | Growing | Stable | Declining | Refresh content |
Traffic Quality Matrix
High Engagement
│
┌──────────────┼──────────────┐
│ HIDDEN GEM │ STAR │
│ Low traffic │ High traffic│
│ → Promote │ → Maintain │
Low ───────┼──────────────┼──────────────┼─── High
Traffic │ UNDERPERFORM│ LEAKY │ Traffic
│ Low traffic │ High traffic│
│ → Rework │ → Optimize │
└──────────────┼──────────────┘
│
Low EngagementAnomaly Detection
| Metric | Significant Change | Alert Level |
|---|---|---|
| Traffic | ±30% WoW | HIGH |
| CTR | ±1pp WoW | MEDIUM |
| Position | ±5 positions | HIGH |
| Bounce Rate | ±10pp WoW | MEDIUM |
---
Product Analytics
North Star Metric
The ONE metric that represents customer value:
| Company | North Star |
|---|---|
| Slack | Weekly Active Users |
| Airbnb | Nights Booked |
| Spotify | Time Listening |
| Shopify | GMV |
Criteria: Represents customer value, correlates with revenue, measurable frequently, rallies the team.
Key Metrics by Stage
| Stage | Metrics |
|---|---|
| Acquisition | Traffic sources, CPC, visitor → signup rate |
| Activation | Signup → first core action, time to value, onboarding completion |
| Retention | DAU/MAU (stickiness), D1/D7/D30 retention, churn rate |
| Revenue | MRR/ARR, ARPU, LTV, LTV:CAC ratio |
| Referral | Viral coefficient, referral signups, NPS |
Retention Benchmarks
| Timeframe | Good | Bad |
|---|---|---|
| D1 | 60–80% | <40% |
| D7 | 40–60% | <10% |
| D30 | 30–50% | <2% |
Good = flattening curve. Bad = steep drop-off.
Dashboard Design
- Executive: North Star Metric (big number), revenue (MRR/ARR), key trends
- Product: Active users, feature usage, retention cohorts, funnels
- Marketing: Traffic sources, conversion rates, CPA, ROI by channel
---
Funnel Analysis
Core Workflow
1. Load and merge user journey data 2. Define funnel steps and calculate step-by-step conversion rates 3. Segment by user attributes (device, cohort, plan) 4. Visualize bottlenecks 5. Generate optimization recommendations
Common Funnel Types
| Funnel | Steps |
|---|---|
| E-commerce | Promotion → Search → Product View → Add to Cart → Purchase |
| SaaS Signup | Landing Page → Sign Up → Email Verify → Onboarding Complete |
| Content | Article View → Comment → Share → Subscribe |
Analysis Patterns
- Bottleneck identification — Steps with highest drop-off rates
- Segment comparison — Conversion across user groups
- Temporal analysis — Conversion over time
- A/B testing — Compare funnel variations
See examples/ for Python implementations with Plotly visualizations.
---
Funnel Validation (DotCom Secrets)
Score existing funnels against Russell Brunson's framework: Hook → Story → Offer.
Scoring Dimensions
| Dimension | Weight | What It Measures |
|---|---|---|
| Hook Strength | 2x | Stops the scroll, grabs attention |
| Story Connection | 1.5x | Creates emotional connection and belief |
| Offer Clarity | 2x | Clear, compelling, irresistible |
| Value Ladder Fit | 1x | Fits the ascension path |
| Traffic Match | 1.5x | Matched to traffic temperature |
| Conversion Path | 1x | Next step obvious and frictionless |
Rating Scale
| Score | Verdict |
|---|---|
| 85–100 | Conversion Machine — Ready to scale |
| 70–84 | Strong Funnel — Fix weak points, then scale |
| 55–69 | Leaky Funnel — Fix before scaling traffic |
| 40–54 | Broken Funnel — Rebuild key components |
| 0–39 | Non-Functional — Start over |
Traffic Temperature
| Temperature | They Know | Appropriate Funnel |
|---|---|---|
| Cold | Nothing about you | Lead funnel, value-first content |
| Warm | Problem + your solution | Tripwire, webinar, challenge |
| Hot | Ready to buy | Sales page, order form, call booking |
For complete scoring criteria and examples, see references/full-guide.md.
---
ROI Analysis
Core Metrics
ROI: (Net Profit / Total Investment) × 100%
- ✅ INVEST: ROI > 100% (realistic case)
- ⚠️ REVIEW: ROI 50–100%
- ❌ REJECT: ROI < 50%
Break-Even: Investment / Monthly Net Profit
- ✅ INVEST: Break-even < 50% of realistic target
- ❌ REJECT: Break-even > 70%
Payback Period: Investment / Monthly Net Profit
- ✅ INVEST: < 12 months
- ⚠️ REVIEW: 12–24 months
- ❌ REJECT: > 24 months
3-Scenario Analysis
Always model Best / Realistic / Worst:
| Case | Assumptions | Revenue | Profit | ROI | Assessment |
|---|---|---|---|---|---|
| Worst | Pessimistic | Risk level | |||
| Realistic | Expected | Target | |||
| Best | Optimistic | Upside |
Decision rule: If worst-case ROI ≥ 0%, investment is low-risk.
Executive Summary Template
[Investment] achieves [ROI%] ROI at [conversion/growth rate].
Break-even occurs at [threshold], with payback in [months].
Investment is [recommended/not recommended] because [reason].For detailed formulas (NPV, LTV, CAC, sensitivity analysis), see references/roi-reference.md.
---
Validation & QA
Before Launch
- [ ] Events fire in GA4 DebugView
- [ ] Properties have expected values
- [ ] No duplicate events
- [ ] Conversions marked correctly
- [ ] UTM parameters captured on landing
Ongoing
- Weekly: Check for sudden drops in key events (>20% change = investigate)
- Monthly: Audit for new pages/features without tracking
- Quarterly: Full tracking plan review — remove stale events, add missing ones
---
Tools
| Category | Tools |
|---|---|
| Event Tracking | Mixpanel, Amplitude, PostHog (open-source) |
| Session Recording | FullStory, LogRocket, Hotjar |
| A/B Testing | Optimizely, VWO |
| Web Analytics | GA4, Google Search Console |
| Tag Management | Google Tag Manager |
---
Related Skills
- ab-test-setup — A/B test measurement and setup
- seo-and-aeo-strategy — Measuring SEO/AEO performance
- conversion-rate-optimization — Optimizing conversion after funnel analysis
- executive-dashboard-generator — Building dashboards from analytics data
<!DOCTYPE html>
<html>
<head>
<title>Funnel Analysis Report</title>
<style>
body { font-family: Arial, sans-serif; margin: 40px; }
.header { background-color: #f0f0f0; padding: 20px; border-radius: 5px; }
.metrics { margin: 20px 0; }
.insights { background-color: #f9f9f9; padding: 20px; border-radius: 5px; }
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #f2f2f2; }
</style>
</head>
<body>
<div class="header">
<h1>Funnel Analysis Report</h1>
<p>Generated on 2025-12-19 21:20:13</p>
</div>
<div class="metrics">
<h2>Key Metrics</h2>
<ul>
<li><strong>Total Conversion Rate:</strong> 0.2%</li>
<li><strong>Total Drop-off Rate:</strong> 99.8%</li>
<li><strong>Biggest Drop-off:</strong> Purchase</li>
</ul>
</div>
<div class="insights">
<h2>Key Insights</h2>
<ul>
<li>❗ Critical: Overall conversion rate is below 1%, requires immediate attention</li><li>🎯 Biggest drop-off: Purchase (92.9% loss)</li><li>📊 Search has moderate conversion (49.8%)</li><li>📊 Product View has moderate conversion (30.2%)</li><li>📉 Add to Cart has very low conversion (15.9%)</li><li>📉 Purchase has very low conversion (7.1%)</li>
</ul>
</div>
<div>
<h2>Funnel Details</h2>
<table>
<tr>
<th>Step</th>
<th>Users</th>
<th>Conversion Rate</th>
<th>Drop-off Rate</th>
</tr>
<tr>
<td>Homepage</td>
<td>10,000</td>
<td>100.0%</td>
<td>0.0%</td>
</tr>
<tr>
<td>Search</td>
<td>4,978</td>
<td>49.8%</td>
<td>50.2%</td>
</tr>
<tr>
<td>Product View</td>
<td>1,505</td>
<td>30.2%</td>
<td>69.8%</td>
</tr>
<tr>
<td>Add to Cart</td>
<td>239</td>
<td>15.9%</td>
<td>84.1%</td>
</tr>
<tr>
<td>Purchase</td>
<td>17</td>
<td>7.1%</td>
<td>92.9%</td>
</tr>
</table>
</div>
</body>
</html>
"""
Basic Funnel Analysis Example
This example demonstrates how to use the Funnel Analysis skill
to analyze a simple e-commerce conversion funnel.
"""
import pandas as pd
import numpy as np
import sys
import os
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
from scripts.funnel_analyzer import FunnelAnalyzer
from scripts.visualizer import FunnelVisualizer
def create_sample_data():
"""
Create sample e-commerce funnel data.
"""
np.random.seed(42)
n_users = 10000
# Generate user data
data = {
'user_id': range(1, n_users + 1),
'device': np.random.choice(['Mobile', 'Desktop'], n_users, p=[0.6, 0.4]),
'gender': np.random.choice(['Male', 'Female'], n_users, p=[0.55, 0.45]),
'homepage': True, # All users visit homepage
'search': np.random.choice([True, False], n_users, p=[0.5, 0.5]),
'product_view': np.random.choice([True, False], n_users, p=[0.3, 0.7]),
'add_to_cart': np.random.choice([True, False], n_users, p=[0.15, 0.85]),
'purchase': np.random.choice([True, False], n_users, p=[0.05, 0.95])
}
# Create dependencies: users must complete previous steps to reach later steps
df = pd.DataFrame(data)
# Apply logical dependencies
for i in range(len(df)):
if not df.loc[i, 'search']:
df.loc[i, 'product_view'] = False
df.loc[i, 'add_to_cart'] = False
df.loc[i, 'purchase'] = False
elif not df.loc[i, 'product_view']:
df.loc[i, 'add_to_cart'] = False
df.loc[i, 'purchase'] = False
elif not df.loc[i, 'add_to_cart']:
df.loc[i, 'purchase'] = False
return df
def main():
"""
Run basic funnel analysis example.
"""
print("=== Basic Funnel Analysis Example ===\n")
# Create sample data
print("1. Creating sample e-commerce data...")
df = create_sample_data()
print(f" Generated data for {len(df)} users")
# Initialize analyzer
analyzer = FunnelAnalyzer()
# Load data
analyzer.load_data(df, user_id_col='user_id')
# Define funnel steps
steps = ['Homepage', 'Search', 'Product View', 'Add to Cart', 'Purchase']
step_columns = ['homepage', 'search', 'product_view', 'add_to_cart', 'purchase']
analyzer.define_steps(steps, step_columns)
# Build funnel
print("\n2. Building conversion funnel...")
funnel_df = analyzer.build_funnel()
print("\nFunnel Results:")
print(funnel_df[['step', 'users', 'conversion_rate']].to_string(index=False,
formatters={'conversion_rate': '{:.1%}'.format}))
# Calculate metrics
print("\n3. Calculating key metrics...")
metrics = analyzer.calculate_metrics(funnel_df)
print(f"Overall Conversion Rate: {metrics['total_conversion_rate']:.1%}")
print(f"Total Drop-off Rate: {metrics['total_drop_off_rate']:.1%}")
if metrics['biggest_drop_off_step']:
print(f"Biggest Drop-off: {metrics['biggest_drop_off_step']} ({metrics['biggest_drop_off_rate']:.1%})")
# Generate insights
print("\n4. Generating insights...")
insights = analyzer.generate_insights(funnel_df)
print("Key Insights:")
for insight in insights:
print(f" {insight}")
# Create visualizations
print("\n5. Creating visualizations...")
visualizer = FunnelVisualizer()
# Basic funnel chart
funnel_fig = visualizer.create_basic_funnel(
funnel_df,
title="E-commerce Conversion Funnel"
)
visualizer.save_figure(funnel_fig, 'basic_funnel_chart.html', 'html')
# Conversion rate chart
conv_rate_fig = visualizer.create_conversion_rate_chart(
funnel_df,
title="Step-by-Step Conversion Rates"
)
visualizer.save_figure(conv_rate_fig, 'conversion_rates.html', 'html')
# Drop-off analysis
drop_off_fig = visualizer.create_drop_off_analysis(
funnel_df,
title="User Drop-off Analysis"
)
visualizer.save_figure(drop_off_fig, 'drop_off_analysis.html', 'html')
# Comprehensive dashboard
dashboard_fig = visualizer.create_comprehensive_dashboard(
funnel_df,
title="E-commerce Funnel Dashboard"
)
visualizer.save_figure(dashboard_fig, 'funnel_dashboard.html', 'html')
# Export detailed report
print("\n6. Exporting detailed report...")
report_path = analyzer.export_report(funnel_df, filename='basic_funnel_report.html')
print(f"\n=== Analysis Complete ===")
print(f"Generated files:")
print(f" - basic_funnel_chart.html")
print(f" - conversion_rates.html")
print(f" - drop_off_analysis.html")
print(f" - funnel_dashboard.html")
print(f" - basic_funnel_report.html")
if __name__ == "__main__":
main()
<!DOCTYPE html>
<html>
<head>
<title>Funnel Analysis Report</title>
<style>
body { font-family: Arial, sans-serif; margin: 40px; }
.header { background-color: #f0f0f0; padding: 20px; border-radius: 5px; }
.metrics { margin: 20px 0; }
.insights { background-color: #f9f9f9; padding: 20px; border-radius: 5px; }
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #f2f2f2; }
</style>
</head>
<body>
<div class="header">
<h1>Funnel Analysis Report</h1>
<p>Generated on 2025-12-19 21:20:33</p>
</div>
<div class="metrics">
<h2>Key Metrics</h2>
<ul>
<li><strong>Total Conversion Rate:</strong> 100.0%</li>
<li><strong>Total Drop-off Rate:</strong> 0.0%</li>
<li><strong>Biggest Drop-off:</strong> None</li>
</ul>
</div>
<div class="insights">
<h2>Key Insights</h2>
<ul>
<li>✓ Overall conversion rate is 100.0%</li>
</ul>
</div>
<div>
<h2>Funnel Details</h2>
<table>
<tr>
<th>Step</th>
<th>Users</th>
<th>Conversion Rate</th>
<th>Drop-off Rate</th>
</tr>
<tr>
<td>Homepage</td>
<td>15,000</td>
<td>100.0%</td>
<td>0.0%</td>
</tr>
<tr>
<td>Search</td>
<td>15,000</td>
<td>100.0%</td>
<td>0.0%</td>
</tr>
<tr>
<td>Product View</td>
<td>15,000</td>
<td>100.0%</td>
<td>0.0%</td>
</tr>
<tr>
<td>Add to Cart</td>
<td>15,000</td>
<td>100.0%</td>
<td>0.0%</td>
</tr>
<tr>
<td>Purchase</td>
<td>15,000</td>
<td>100.0%</td>
<td>0.0%</td>
</tr>
</table>
</div>
</body>
</html>
"""
Segmented Funnel Analysis Example
This example demonstrates advanced funnel analysis with segmentation,
showing how different user groups behave differently in the conversion funnel.
"""
import pandas as pd
import numpy as np
import sys
import os
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
from scripts.funnel_analyzer import FunnelAnalyzer
from scripts.visualizer import FunnelVisualizer
def create_segmented_data():
"""
Create sample e-commerce funnel data with segmentation.
"""
np.random.seed(42)
n_users = 15000
# Generate user segments with different behaviors
segments = []
devices = []
genders = []
for i in range(n_users):
# Create segments with different characteristics
segment_prob = np.random.random()
if segment_prob < 0.3:
segments.append('New User')
elif segment_prob < 0.7:
segments.append('Returning User')
else:
segments.append('VIP User')
devices.append(np.random.choice(['Mobile', 'Desktop'], p=[0.6, 0.4]))
genders.append(np.random.choice(['Male', 'Female'], p=[0.55, 0.45]))
# Generate funnel behavior based on segments
data = {
'user_id': range(1, n_users + 1),
'segment': segments,
'device': devices,
'gender': genders,
'homepage': True
}
df = pd.DataFrame(data)
# Generate step completion probabilities based on segment
for i, row in df.iterrows():
segment = row['segment']
if segment == 'New User':
# Lower conversion rates for new users
search_prob = 0.4
product_view_prob = 0.2
add_to_cart_prob = 0.08
purchase_prob = 0.02
elif segment == 'Returning User':
# Medium conversion rates
search_prob = 0.6
product_view_prob = 0.35
add_to_cart_prob = 0.18
purchase_prob = 0.06
else: # VIP User
# Higher conversion rates for VIP users
search_prob = 0.8
product_view_prob = 0.6
add_to_cart_prob = 0.4
purchase_prob = 0.25
# Apply segment-specific probabilities
df.loc[i, 'search'] = np.random.random() < search_prob
if df.loc[i, 'search']:
df.loc[i, 'product_view'] = np.random.random() < product_view_prob
if df.loc[i, 'product_view']:
df.loc[i, 'add_to_cart'] = np.random.random() < add_to_cart_prob
if df.loc[i, 'add_to_cart']:
df.loc[i, 'purchase'] = np.random.random() < purchase_prob
else:
df.loc[i, 'purchase'] = False
else:
df.loc[i, 'add_to_cart'] = False
df.loc[i, 'purchase'] = False
else:
df.loc[i, 'product_view'] = False
df.loc[i, 'add_to_cart'] = False
df.loc[i, 'purchase'] = False
return df
def analyze_segments(analyzer, df, segment_col):
"""
Perform detailed segment analysis.
"""
print(f"\n=== Analysis by {segment_col} ===")
# Get segmented funnels
segment_funnels = analyzer.segment_analysis(segment_col)
# Calculate metrics for each segment
segment_metrics = {}
for segment, funnel_df in segment_funnels.items():
metrics = analyzer.calculate_metrics(funnel_df)
segment_metrics[segment] = metrics
print(f"\n{segment} Segment:")
print(f" Users: {funnel_df.iloc[0]['users']:,}")
print(f" Conversion Rate: {metrics['total_conversion_rate']:.1%}")
if metrics['biggest_drop_off_step']:
print(f" Biggest Drop-off: {metrics['biggest_drop_off_step']} ({metrics['biggest_drop_off_rate']:.1%})")
return segment_funnels, segment_metrics
def create_segment_comparison_chart(segment_funnels, segment_metrics, segment_type):
"""
Create a detailed segment comparison visualization.
"""
visualizer = FunnelVisualizer()
# Create comparison chart
comparison_fig = visualizer.create_segment_comparison(
segment_funnels,
metric="total_conversion_rate",
title=f"Conversion Rate by {segment_type}"
)
visualizer.save_figure(comparison_fig, f'segment_comparison_{segment_type.lower()}.html', 'html')
# Create segmented funnel chart
segmented_funnel_fig = visualizer.create_segmented_funnel(
segment_funnels,
title=f"Funnel Comparison by {segment_type}"
)
visualizer.save_figure(segmented_funnel_fig, f'segmented_funnel_{segment_type.lower()}.html', 'html')
def main():
"""
Run segmented funnel analysis example.
"""
print("=== Segmented Funnel Analysis Example ===\n")
# Create segmented sample data
print("1. Creating segmented sample data...")
df = create_segmented_data()
print(f" Generated data for {len(df)} users")
print(f" Segments: {df['segment'].value_counts().to_dict()}")
# Initialize analyzer
analyzer = FunnelAnalyzer()
analyzer.load_data(df, user_id_col='user_id')
# Define funnel steps
steps = ['Homepage', 'Search', 'Product View', 'Add to Cart', 'Purchase']
step_columns = ['homepage', 'search', 'product_view', 'add_to_cart', 'purchase']
analyzer.define_steps(steps, step_columns)
# Overall analysis
print("\n2. Overall funnel analysis...")
overall_funnel = analyzer.build_funnel()
print("\nOverall Funnel Results:")
print(overall_funnel[['step', 'users', 'conversion_rate']].to_string(
index=False,
formatters={'conversion_rate': '{:.1%}'.format}
))
# Segment analysis
print("\n3. Segment analysis...")
# Analysis by user segment
segment_funnels, segment_metrics = analyze_segments(analyzer, df, 'segment')
create_segment_comparison_chart(segment_funnels, segment_metrics, 'User Segment')
# Analysis by device
device_funnels, device_metrics = analyze_segments(analyzer, df, 'device')
create_segment_comparison_chart(device_funnels, device_metrics, 'Device')
# Analysis by gender
gender_funnels, gender_metrics = analyze_segments(analyzer, df, 'gender')
create_segment_comparison_chart(gender_funnels, gender_metrics, 'Gender')
# Generate insights with segmentation
print("\n4. Generating segmented insights...")
insights = analyzer.generate_insights(overall_funnel, segment_funnels)
print("Key Insights:")
for insight in insights:
print(f" {insight}")
# Create comprehensive dashboard with segmentation
print("\n5. Creating comprehensive dashboard...")
visualizer = FunnelVisualizer()
dashboard_fig = visualizer.create_comprehensive_dashboard(
overall_funnel,
segment_funnels,
title="Segmented Funnel Analysis Dashboard"
)
visualizer.save_figure(dashboard_fig, 'segmented_dashboard.html', 'html')
# Export segmented report
print("\n6. Exporting segmented report...")
report_path = analyzer.export_report(
overall_funnel,
segment_funnels,
filename='segmented_funnel_report.html'
)
# Performance summary
print("\n=== Performance Summary ===")
best_segment = max(segment_metrics.items(), key=lambda x: x[1]['total_conversion_rate'])
worst_segment = min(segment_metrics.items(), key=lambda x: x[1]['total_conversion_rate'])
print(f"Best Performing Segment: {best_segment[0]} ({best_segment[1]['total_conversion_rate']:.1%})")
print(f"Worst Performing Segment: {worst_segment[0]} ({worst_segment[1]['total_conversion_rate']:.1%})")
print(f"Performance Gap: {(best_segment[1]['total_conversion_rate'] / worst_segment[1]['total_conversion_rate'] - 1):.1f}x")
print(f"\n=== Analysis Complete ===")
print(f"Generated files:")
print(f" - segment_comparison_user segment.html")
print(f" - segmented_funnel_user segment.html")
print(f" - segment_comparison_device.html")
print(f" - segmented_funnel_device.html")
print(f" - segment_comparison_gender.html")
print(f" - segmented_funnel_gender.html")
print(f" - segmented_dashboard.html")
print(f" - segmented_funnel_report.html")
if __name__ == "__main__":
main()Funnel Validator - Full Guide
Execution Workflow
Step 1: Gather the Funnel
Ask the user:
Show me your funnel. I need to see:
>
1. What's the funnel URL or can you describe each step?
2. What's the entry point? (Ad, email, content, etc.)
3. What are you selling? (Free offer, low-ticket, high-ticket?)
4. What's the desired action? (Opt-in, purchase, call booking?)
5. Where is traffic coming from? (Paid ads, organic, email list?)
6. What's your current conversion rate? (If known)
Funnel Types (Reference):
- Lead Funnel: Free offer → Opt-in → Thank you + Upsell
- Tripwire Funnel: Low-ticket offer ($7-47) → Order form → OTO
- Webinar Funnel: Registration → Webinar → Application/Sale
- Application Funnel: Free content → Application → Call → Sale
- Challenge Funnel: Free challenge → Daily content → Pitch
Step 2: Score Hook Strength (0-10, Weight: 2x)
Evaluate the first 3 seconds of the funnel experience:
- Does the headline stop the scroll?
- Is there a pattern interrupt (unexpected element)?
- Is the hook specific to the target audience?
- Does it create curiosity or urgency?
- Is the promise immediately clear?
Scoring Criteria:
| Score | Description |
|---|---|
| 9-10 | Scroll-stopping hook, specific to audience, creates immediate curiosity |
| 7-8 | Strong hook, grabs attention, clear promise |
| 5-6 | Decent hook, somewhat generic, could be stronger |
| 3-4 | Weak hook, generic, doesn't stand out |
| 0-2 | No hook, boring headline, immediate bounce |
Red Flags:
- Generic headlines ("Welcome to our page")
- No headline above the fold
- Hook doesn't match the traffic source
- No curiosity or urgency element
- Wall of text before the hook
Hook Formula:
[End Result] + [Time Period] + [Address Objection]
"How to [Result] in [Time] Without [Objection]"Step 3: Score Story Connection (0-10, Weight: 1.5x)
Evaluate the emotional journey:
- Is there an origin story or epiphany bridge?
- Does the story create relatability ("I was like you")?
- Is there conflict and transformation?
- Does it build belief that the solution works?
- Is the story relevant to the audience's pain?
Scoring Criteria:
| Score | Description |
|---|---|
| 9-10 | Powerful epiphany bridge, emotionally resonant, builds complete belief |
| 7-8 | Good story, relatable, some emotional connection |
| 5-6 | Story present but weak, or too long, or disconnected |
| 3-4 | Minimal story, facts without emotion |
| 0-2 | No story, just features and claims |
Red Flags:
- No story at all
- Story about the company, not the customer
- Story too long (loses attention)
- Story doesn't connect to the offer
- No transformation shown
Epiphany Bridge Framework:
1. Backstory (where you were)
2. Wall (the problem you hit)
3. Epiphany (the breakthrough discovery)
4. Plan (what you did about it)
5. Success (the result you achieved)
6. Transformation (who you became)Step 4: Score Offer Clarity (0-10, Weight: 2x)
Evaluate the offer presentation:
- Is the offer immediately clear?
- Is the value proposition compelling?
- Are the deliverables specific?
- Is there a stack (multiple components)?
- Is the price positioned correctly?
Scoring Criteria:
| Score | Description |
|---|---|
| 9-10 | Crystal clear offer, overwhelming value stack, irresistible positioning |
| 7-8 | Clear offer, good value stack, compelling presentation |
| 5-6 | Offer understood but not compelling, weak stack or positioning |
| 3-4 | Confusing offer, unclear what they get |
| 0-2 | No clear offer, or buried below the fold |
Red Flags:
- Offer buried below the fold
- Confusing pricing or options
- No value stack
- Features without benefits
- Multiple CTAs competing
Offer Clarity Test: Can someone explain what they get in one sentence?
Step 5: Score Value Ladder Fit (0-10, Weight: 1x)
Evaluate funnel positioning in the ascension path:
- Does this funnel match the traffic temperature?
- Is there a logical next step after conversion?
- Does the offer ascend to higher-ticket?
- Is there a tripwire to create buyers?
- Is the pricing appropriate for this funnel stage?
Scoring Criteria:
| Score | Description |
|---|---|
| 9-10 | Perfect ladder fit, clear ascension, obvious next step |
| 7-8 | Good ladder fit, ascension path exists |
| 5-6 | Decent fit, but gaps in the ladder |
| 3-4 | Funnel doesn't fit the ladder, pricing mismatch |
| 0-2 | No value ladder, dead-end funnel |
Red Flags:
- High-ticket offer to cold traffic
- No upsell or next step after purchase
- Pricing jump too large between steps
- Lead magnet unrelated to paid offer
Step 6: Score Traffic Match (0-10, Weight: 1.5x)
Evaluate traffic-to-funnel alignment:
- Does the funnel match the traffic temperature?
- Is the message-to-market match strong?
- Does the landing page continue the conversation from the ad?
- Is the ask appropriate for the traffic type?
- Is there congruence from click to page?
Scoring Criteria:
| Score | Description |
|---|---|
| 9-10 | Perfect match, message continues seamlessly, appropriate ask |
| 7-8 | Good match, minor disconnects, mostly congruent |
| 5-6 | Decent match, some friction, message shift |
| 3-4 | Poor match, confusing transition, wrong ask |
| 0-2 | Complete mismatch, traffic bouncing immediately |
Red Flags:
- Selling high-ticket to cold traffic
- Long-form sales page for hot traffic
- No scent trail from ad to page
- Headline doesn't match ad copy
- Asking for too much too soon
Step 7: Score Conversion Path (0-10, Weight: 1x)
Evaluate the path to conversion:
- Is the CTA clear and prominent?
- Is there one primary action (not multiple)?
- Is the form simple (minimal fields)?
- Is there friction in the process?
- Is the next step obvious after conversion?
Scoring Criteria:
| Score | Description |
|---|---|
| 9-10 | One clear CTA, minimal friction, obvious next step |
| 7-8 | Clear CTA, some minor friction, good path |
| 5-6 | CTA present but not prominent, some friction |
| 3-4 | Multiple CTAs competing, confusing path |
| 0-2 | No clear CTA, or buried, major friction |
Red Flags:
- Multiple CTAs on the page
- Long forms with unnecessary fields
- No CTA above the fold
- Unclear what happens after clicking
- Exit popups before they've read anything
CTA Best Practices:
- One primary CTA per page
- Button text = outcome ("Get Instant Access")
- CTA above the fold AND at the end
- Minimize form fields (name + email max for opt-in)
Step 8: Calculate Final Score
Formula:
Hook Strength × 2 = ___
Story Connection × 1.5 = ___
Offer Clarity × 2 = ___
Value Ladder Fit × 1 = ___
Traffic Match × 1.5 = ___
Conversion Path × 1 = ___
─────────────────────────
TOTAL = ___ / 100Step 9: Generate Recommendations
For each dimension scoring below 7, provide:
1. What's wrong (specific diagnosis) 2. How to fix it (actionable steps) 3. Example (show them what good looks like)
Output Format
# Funnel Validation: [Funnel Name/URL]
## Quick Rating
| Rating | Score | Verdict |
|--------|-------|---------|
| [Conversion Machine / Strong / Leaky / Broken / Non-Functional] | XX/100 | [One-line summary] |
## Score Breakdown
| Dimension | Raw Score | Weight | Weighted Score | Status |
|-----------|-----------|--------|----------------|--------|
| Hook Strength | X/10 | ×2 | XX/20 | [Fix/Optimize/Strong] |
| Story Connection | X/10 | ×1.5 | XX/15 | [Fix/Optimize/Strong] |
| Offer Clarity | X/10 | ×2 | XX/20 | [Fix/Optimize/Strong] |
| Value Ladder Fit | X/10 | ×1 | XX/10 | [Fix/Optimize/Strong] |
| Traffic Match | X/10 | ×1.5 | XX/15 | [Fix/Optimize/Strong] |
| Conversion Path | X/10 | ×1 | XX/10 | [Fix/Optimize/Strong] |
| **TOTAL** | | | **XX/100** | |
## Detailed Assessment
### Hook Strength: X/10
**What's Working:** [Positive aspects]
**Conversion Killer:** [What's causing drop-off]
**Fix:** [Specific action to improve]
**Better Hook:** "[Example rewrite]"
### Story Connection: X/10
**What's Working:** [Positive aspects]
**Conversion Killer:** [What's causing drop-off]
**Fix:** [Specific action to improve]
### Offer Clarity: X/10
**What's Working:** [Positive aspects]
**Conversion Killer:** [What's causing drop-off]
**Fix:** [Specific action to improve]
### Value Ladder Fit: X/10
**What's Working:** [Positive aspects]
**Conversion Killer:** [What's causing drop-off]
**Fix:** [Specific action to improve]
### Traffic Match: X/10
**What's Working:** [Positive aspects]
**Conversion Killer:** [What's causing drop-off]
**Fix:** [Specific action to improve]
### Conversion Path: X/10
**What's Working:** [Positive aspects]
**Conversion Killer:** [What's causing drop-off]
**Fix:** [Specific action to improve]
## Conversion Killers (Fix These First)
1. **[Dimension]:** [Specific issue + expected lift from fixing]
2. **[Dimension]:** [Specific issue + expected lift from fixing]
3. **[Dimension]:** [Specific issue + expected lift from fixing]
## Next Steps
### If Score 85+:
- [ ] Scale traffic
- [ ] A/B test minor optimizations
- [ ] Add upsells/cross-sells
### If Score 70-84:
- [ ] Fix priority conversion killers above
- [ ] Re-validate after changes
- [ ] Use `copy-validator` to check copy quality
### If Score 55-69:
- [ ] Major rework needed before scaling
- [ ] Use `funnel-architect` to redesign weak areas
- [ ] Fix hook and offer first
### If Score Below 55:
- [ ] Do not send traffic to this funnel
- [ ] Use `funnel-architect` to rebuild
- [ ] Consider using `offer-validator` to validate the core offerExample Validations
Example: Leaky Funnel
User's Funnel: Lead magnet opt-in page
Issues Found:
- Generic headline: "Download Our Free Guide"
- No story, just bullet points
- Form asks for phone number (unnecessary friction)
- No scent trail from Facebook ad
Validation:
| Dimension | Score | Issue |
|---|---|---|
| Hook Strength | 4/10 | Generic, doesn't stop scroll |
| Story Connection | 2/10 | No story at all |
| Offer Clarity | 6/10 | Clear but not compelling |
| Value Ladder Fit | 7/10 | Good fit for lead gen |
| Traffic Match | 4/10 | Ad message doesn't continue |
| Conversion Path | 5/10 | Phone number field adding friction |
Total: 46/100 - Broken Funnel
Priority Fixes:
1. Hook: Rewrite to "How I Got 50 Clients in 30 Days Without Paid Ads" 2. Story: Add 2-3 sentence epiphany bridge about discovery 3. Traffic Match: Match headline to exact ad copy 4. Conversion Path: Remove phone number, keep name + email only
Example: Strong Funnel
User's Funnel: Webinar registration
Strengths:
- Scroll-stopping hook with specific result
- Strong origin story video
- Clear value stack for attending
- Perfect traffic match from YouTube ads
- Single CTA, minimal form
Validation:
| Dimension | Score | Notes |
|---|---|---|
| Hook Strength | 9/10 | Specific, scroll-stopping, curiosity-driven |
| Story Connection | 8/10 | Good video story, could be tighter |
| Offer Clarity | 8/10 | Clear what they'll learn |
| Value Ladder Fit | 9/10 | Perfect for warm traffic |
| Traffic Match | 9/10 | YouTube ad → Webinar seamless |
| Conversion Path | 8/10 | Clean, but could add countdown |
Total: 85/100 - Conversion Machine
Minor Optimizations:
1. Add countdown timer to increase urgency 2. Tighten video story to under 2 minutes
Common Validation Mistakes
1. Ignoring Traffic Temperature: The funnel might be great for the wrong traffic 2. Missing the Hook: First 3 seconds determine everything 3. Forgetting Mobile: Most traffic is mobile—test on phone 4. Too Many CTAs: One page, one goal 5. No A/B Testing Reference: Ask what they've already tested 6. Ignoring the Ad: The funnel starts with the traffic source
{
"name": "roi-analyzer",
"version": "1.0.0",
"description": "Comprehensive ROI and business value analysis framework with financial modeling and investment evaluation",
"author": "Tempuss",
"license": "MIT",
"repository": "https://github.com/Tempuss/agent-hub",
"format": "claude",
"subtype": "skill",
"tags": [
"roi-analysis",
"financial-modeling",
"investment-evaluation",
"business-value",
"cost-benefit-analysis"
],
"files": [
"SKILL.md",
"README.md",
"REFERENCE.md"
]
}
ROI Analyzer Reference Guide
Core Formulas
1. ROI (Return on Investment)
ROI = (Net Profit / Total Investment) × 100%
Where:
Net Profit = Revenue - Total Costs
Total Costs = Investment + Operating Costs
Example:
- Investment: 100M KRW
- Revenue: 200M KRW
- Operating Costs: 50M KRW
- Net Profit: 200M - 50M - 100M = 50M KRW
- ROI: (50M / 100M) × 100% = 50%2. Break-Even Point (BEP)
For Project Investment:
Break-Even Point = Total Investment / (Revenue per Unit - Variable Cost per Unit)
Or for subscription:
Break-Even Months = Total Investment / Monthly Net Profit
Example:
- Investment: 120M KRW
- Monthly Revenue: 20M KRW
- Monthly Costs: 10M KRW
- Monthly Net Profit: 10M KRW
- BEP: 120M / 10M = 12 monthsFor Conversion-Based Projects:
Break-Even Conversion Rate = Investment / Potential Revenue
Example (Phase 0 → Phase 1):
- Investment: 50M KRW
- Phase 1 Contract: 200M KRW
- BEP: 50M / 200M = 25% conversion needed3. Payback Period
Payback Period = Investment / Annual Net Cash Flow
Or monthly:
Payback Months = Investment / Monthly Net Profit
Example:
- Investment: 240M KRW
- Monthly Profit: 20M KRW
- Payback: 240M / 20M = 12 months4. Net Present Value (NPV)
For multi-year projects:
NPV = Σ (Cash Flow_t / (1 + r)^t) - Investment
Where:
- t = year (1, 2, 3...)
- r = discount rate (typically 10-15%)
Example (3 years, 10% discount):
- Y0: -200M (investment)
- Y1: +50M / 1.1 = 45.5M
- Y2: +100M / 1.21 = 82.6M
- Y3: +150M / 1.33 = 112.8M
- NPV: 45.5 + 82.6 + 112.8 - 200 = 40.9M KRW ✅---
Scenario Analysis Framework
3-Scenario Template
| Scenario | Probability | Key Assumptions | ROI | Assessment |
|---|---|---|---|---|
| Worst | 10-20% | [List pessimistic] | Risk level | |
| Realistic | 60-70% | [List expected] | Target | |
| Best | 10-20% | [List optimistic] | Upside |
Variable Selection (Top 5)
For each scenario, vary these 5 variables:
1. Revenue Growth Rate
- Worst: 50% of target
- Realistic: Target
- Best: 150% of target
2. Customer Acquisition Cost (CAC)
- Worst: 2x budget
- Realistic: Budget
- Best: 0.5x budget
3. Churn Rate
- Worst: 10%/month
- Realistic: 5%/month
- Best: 2%/month
4. Pricing / ARPU
- Worst: -20% (discounts needed)
- Realistic: Target price
- Best: +20% (premium positioning)
5. Time to Market / Launch Delay
- Worst: +3 months
- Realistic: On time
- Best: -1 month
Example: B2B SaaS 3-Year Scenarios
Assumptions:
- Investment: 200M KRW
- Target MRR: Y1: 10M, Y2: 30M, Y3: 60M
- Monthly Costs: 15M KRW
Worst Case (50% revenue, 2x CAC, 10% churn):
| Year | MRR | ARR | Churn Impact | Net ARR | Costs | Profit |
|------|-----|-----|--------------|---------|-------|--------|
| Y1 | 5M | 60M | -20M (churn) | 40M | 180M | -140M |
| Y2 | 15M | 180M | -60M | 120M | 180M | -60M |
| Y3 | 30M | 360M | -120M | 240M | 180M | +60M |
3-Year Total: -140M (ROI: -70%) ❌
Payback: 36+ monthsRealistic Case (target):
| Year | MRR | ARR | Churn (5%) | Net ARR | Costs | Profit |
|------|-----|-----|-----------|---------|-------|--------|
| Y1 | 10M | 120M | -6M | 114M | 180M | -66M |
| Y2 | 30M | 360M | -18M | 342M | 180M | +162M |
| Y3 | 60M | 720M | -36M | 684M | 180M | +504M |
3-Year Total: +600M (ROI: +300%) ✅
Payback: 18 monthsBest Case (150% revenue, 0.5x CAC, 2% churn):
| Year | MRR | ARR | Churn (2%) | Net ARR | Costs | Profit |
|------|-----|-----|-----------|---------|-------|--------|
| Y1 | 15M | 180M | -4M | 176M | 180M | -4M |
| Y2 | 45M | 540M | -11M | 529M | 180M | +349M |
| Y3 | 90M | 1080M | -22M | 1058M | 180M | +878M |
3-Year Total: +1223M (ROI: +612%) ✅
Payback: 13 months---
Sensitivity Analysis
Single-Variable Sensitivity
Test each variable independently (hold others constant):
Example: Revenue Growth Rate Sensitivity
| Growth Rate | Y3 ARR | 3-Year Profit | ROI | Payback |
|---|---|---|---|---|
| -50% | 360M | -140M | -70% | Never |
| -25% | 540M | +240M | +120% | 30 months |
| Target | 720M | +600M | +300% | 18 months |
| +25% | 900M | +960M | +480% | 12 months |
| +50% | 1080M | +1320M | +660% | 10 months |
Key Insight: Revenue growth is THE critical variable (high sensitivity)
Multi-Variable Sensitivity Matrix
Test combinations of top 2 variables:
| CAC -50% | CAC Target | CAC +100% | |
|---|---|---|---|
| Revenue +50% | ROI 800% | ROI 660% | ROI 480% |
| Revenue Target | ROI 400% | ROI 300% | ROI 180% |
| Revenue -50% | ROI 0% | ROI -70% | ROI -150% |
Key Insight: If CAC doubles AND revenue misses by 50%, project fails
---
Industry Benchmarks
SaaS Metrics (B2B)
| Metric | Seed | Series A | Series B+ |
|---|---|---|---|
| ARR Growth | 3x YoY | 2.5x YoY | 2x YoY |
| CAC | < 6mo LTV | < 12mo LTV | < 18mo LTV |
| Churn (Annual) | <30% | <20% | <10% |
| Gross Margin | 50%+ | 70%+ | 80%+ |
| Payback Period | <12mo | <18mo | <24mo |
| ROI (3 years) | 200%+ | 300%+ | 400%+ |
E-commerce
| Metric | Target |
|---|---|
| Gross Margin | 30-50% |
| CAC Payback | 3-6 months |
| Repeat Rate | 30%+ |
| LTV:CAC Ratio | 3:1 minimum |
| ROI (1 year) | 100%+ |
Hardware / Physical Products
| Metric | Target |
|---|---|
| Gross Margin | 40-60% |
| Inventory Turns | 6-12x/year |
| Payback Period | 6-12 months |
| ROI (2 years) | 150%+ |
---
Advanced Analysis
Customer Lifetime Value (LTV)
LTV = ARPU × Gross Margin % × (1 / Monthly Churn Rate)
Example (B2B SaaS):
- ARPU: 50,000 KRW/month
- Gross Margin: 80%
- Monthly Churn: 5%
- LTV: 50,000 × 0.8 × (1/0.05) = 800,000 KRW
Target: LTV:CAC ≥ 3:1Customer Acquisition Cost (CAC)
CAC = (Marketing Spend + Sales Spend) / New Customers
Example:
- Marketing: 10M KRW/month
- Sales: 5M KRW/month
- New Customers: 50/month
- CAC: 15M / 50 = 300,000 KRW
Target: CAC Payback < 12 monthsCohort Analysis
Track each monthly cohort separately:
| Signup Month | M0 | M1 | M2 | M3 | M6 | M12 |
|---|---|---|---|---|---|---|
| Jan 2024 | 100% | 80% | 70% | 65% | 55% | 45% |
| Feb 2024 | 100% | 85% | 75% | 70% | 60% | ? |
| Mar 2024 | 100% | 90% | 80% | 75% | ? | ? |
Insight: Retention improving (Feb/Mar > Jan at same stages)
---
Risk Assessment Framework
Risk Scoring
| Risk Factor | Weight | Score (1-5) | Weighted Score |
|---|---|---|---|
| Market Size | 20% | ||
| Competition | 15% | ||
| Technical Feasibility | 15% | ||
| Team Experience | 15% | ||
| Funding Runway | 15% | ||
| Regulatory | 10% | ||
| Economic Conditions | 10% | ||
| Total | 100% | ?/5 |
Interpretation:
- 4.0+: Low risk ✅
- 3.0-4.0: Moderate risk ⚠️
- <3.0: High risk ❌
Contingency Planning
For each major risk (score ≤2), define:
Risk: [Description]
Likelihood: [%]
Impact: [Financial impact if occurs]
Mitigation: [Preventive actions]
Contingency: [Plan B if it happens]
Owner: [Responsible person]---
Decision Trees
Investment Decision Tree
Start
├─ ROI (realistic) ≥ 100%?
│ ├─ Yes → Continue
│ └─ No → ❌ REJECT
│
├─ Payback ≤ 18 months?
│ ├─ Yes → Continue
│ └─ No → ⚠️ REVIEW (require strong strategic value)
│
├─ Break-even achievable at <50% of target?
│ ├─ Yes → Continue
│ └─ No → ⚠️ REVIEW (high execution risk)
│
├─ Worst-case ROI ≥ 0%?
│ ├─ Yes → ✅ INVEST
│ └─ No → ⚠️ REVIEW (potential loss)Phase Progression Decision (0→1→2)
Phase 0 Complete
├─ Conversion ≥ 70%?
│ ├─ Yes → ✅ Proceed to Phase 1
│ └─ No → Check conversion
│ ├─ 50-70%? → ⚠️ Improve & retry
│ └─ <50%? → ❌ Cancel or pivot
│
Phase 1 Complete
├─ ROI ≥ 150%?
│ ├─ Yes → ✅ Proceed to Phase 2
│ └─ No → Check metrics
│ ├─ 100-150%? → ⚠️ Optimize first
│ └─ <100%? → ❌ Pause expansion---
See Skill.md for: Quick examples, templates, common use cases
Related skills
FAQ
What metrics does data-and-funnel-analytics produce?
data-and-funnel-analytics produces a mapped GTM funnel with stage-level conversion and drop-off rates, user segments highlighting leak points, and a prioritized list of experiments to improve pipeline performance. Output is diagnostic analytics rather than code changes.
Who should use data-and-funnel-analytics?
data-and-funnel-analytics suits developers and product teams analyzing SaaS go-to-market funnels when signup or activation rates stall. The skill frames leaks and suggests experiments instead of replacing a full product analytics warehouse.