
Onboarding Cro
Quantify onboarding funnel drop-offs and prioritize CRO fixes using stepwise conversion and impact estimates from funnel JSON.
Overview
Onboarding-cro is an agent skill for the Grow phase that analyzes onboarding funnel JSON to find drop-off steps and improvement leverage.
Install
npx skills add https://github.com/alirezarezvani/claude-skills --skill onboarding-croWhat is this skill?
- Activation funnel analyzer script for stepwise users, rates from start, and drop rates between steps
- Identifies worst drop-off step and dropped user counts for prioritization
- Accepts JSON funnel definitions or demo mode when no file is passed
- Optional --json output for piping into dashboards or agent follow-up tasks
- Example ladder from signup through email verify, profile, first action, aha, and day-7 activated
- Requires at least 2 funnel steps in input JSON
- Demo funnel template spans 6 milestones from signup to Day-7 activated
Adoption & trust: 522 installs on skills.sh; 17.5k GitHub stars; 3/3 security scanners passed (skills.sh audits).
What problem does it solve?
You see users churn early but lack a ranked view of which onboarding step bleeds the most people.
Who is it for?
Indie SaaS builders with exported funnel counts who want a fast, repeatable activation post-mortem.
Skip if: Products without at least two measurable funnel steps or teams needing live warehouse SQL instead of a JSON snapshot.
When should I use this skill?
You have onboarding step user counts in JSON and want drop-off rates and the worst leak identified for CRO planning.
What do I get? / Deliverables
You get per-step conversion, drop rates, and a highlighted worst step so CRO work targets the highest-leak milestone first.
- Funnel analysis with per-step rates and drops
- Worst-step identification for prioritization
- Optional JSON report via --json
Recommended Skills
Journey fit
Canonical shelf is Grow lifecycle because activation and onboarding conversion directly affect retention and revenue after launch. Lifecycle covers activation funnels, aha moments, and day-7 style milestones the analyzer models.
How it compares
Lightweight funnel math script for activation CRO—not a full product analytics platform or session replay tool.
Common Questions / FAQ
Who is onboarding-cro for?
Solo founders and growth-minded builders optimizing SaaS signup-to-activation paths with simple exported counts.
When should I use onboarding-cro?
In Grow lifecycle work when reviewing weekly activation, before redesigning onboarding, or when prioritizing experiments on verify, profile, or first-action steps.
Is onboarding-cro safe to install?
Review the Security Audits panel on this Prism page; the script processes funnel JSON you provide and does not need secrets by default.
SKILL.md
READMESKILL.md - Onboarding Cro
#!/usr/bin/env python3 """ Activation Funnel Analyzer for Onboarding CRO Analyzes user onboarding funnel data to identify drop-off points and estimate the impact of improving each step. Usage: python3 activation_funnel_analyzer.py # Demo mode python3 activation_funnel_analyzer.py funnel.json # From data python3 activation_funnel_analyzer.py funnel.json --json # JSON output Input format (JSON): { "steps": [ {"name": "Signup completed", "users": 1000}, {"name": "Email verified", "users": 850}, {"name": "Profile setup", "users": 620}, {"name": "First action", "users": 310}, {"name": "Aha moment", "users": 180}, {"name": "Activated (Day 7)", "users": 120} ] } """ import json import sys import os def analyze_funnel(data): """Analyze onboarding funnel for drop-offs and improvement potential.""" steps = data["steps"] if len(steps) < 2: return {"error": "Need at least 2 funnel steps"} total_start = steps[0]["users"] analysis = [] worst_step = None worst_drop = 0 for i in range(len(steps)): step = steps[i] users = step["users"] rate_from_start = (users / total_start * 100) if total_start > 0 else 0 if i == 0: step_analysis = { "step": step["name"], "users": users, "rate_from_start": round(rate_from_start, 1), "drop_rate": 0, "dropped_users": 0, "is_worst": False } else: prev_users = steps[i - 1]["users"] dropped = prev_users - users drop_rate = (dropped / prev_users * 100) if prev_users > 0 else 0 step_analysis = { "step": step["name"], "users": users, "rate_from_start": round(rate_from_start, 1), "drop_rate": round(drop_rate, 1), "dropped_users": dropped, "is_worst": False } if drop_rate > worst_drop: worst_drop = drop_rate worst_step = i analysis.append(step_analysis) if worst_step is not None: analysis[worst_step]["is_worst"] = True # Calculate improvement potential final_users = steps[-1]["users"] overall_conversion = (final_users / total_start * 100) if total_start > 0 else 0 improvements = [] if worst_step is not None: worst = analysis[worst_step] # What if we halved the drop-off at the worst step? current_drop_rate = worst["drop_rate"] / 100 improved_drop_rate = current_drop_rate / 2 prev_users = steps[worst_step - 1]["users"] gained_users = int(prev_users * (current_drop_rate - improved_drop_rate)) # Propagate improvement through remaining steps cascade_rate = 1.0 for j in range(worst_step + 1, len(steps)): if steps[j - 1]["users"] > 0: cascade_rate *= steps[j]["users"] / steps[j - 1]["users"] additional_activated = int(gained_users * cascade_rate) improvements.append({ "action": f"Halve drop-off at '{worst['step']}'", "current_drop": f"{worst['drop_rate']}%", "target_drop": f"{worst['drop_rate'] / 2:.1f}%", "users_saved": gained_users, "additional_activated": additional_activated, "impact_on_overall": f"+{(additional_activated / total_start * 100):.1f}pp" }) # Score score = min(100, max(0, int(overall_conversion * 5))) # 20% activation = 100 if overall_conversion < 5: score = max(0, int(overall_conversion * 10)) return { "steps": analysis, "summary": { "total_start": total_start, "total_activated": final_users, "overall_conversion": round(overall_conversion, 1), "worst_step": analysis[worst_step]["step"] if worst_step else None,