skills/financial-unit-economics/SKILL.md
Analyzes profitability per customer, product, or transaction to determine business model viability and scalability. Covers CAC, LTV, contribution margin, cohort analysis, and growth-readiness assessment. Use when evaluating business model viability, validating startup metrics (CAC, LTV, payback period), making pricing decisions, comparing business models, or when user mentions unit economics, CAC/LTV ratio, contribution margin, customer profitability, or break-even analysis.
npx skillsauth add lyndonkl/claude financial-unit-economicsInstall 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.
Scenario: SaaS startup, $100/month subscription
Copy this checklist and track your progress:
Unit Economics Analysis Progress:
- [ ] Step 1: Define the unit
- [ ] Step 2: Calculate CAC
- [ ] Step 3: Calculate LTV
- [ ] Step 4: Assess contribution margin
- [ ] Step 5: Analyze cohorts
- [ ] Step 6: Interpret and recommend
Step 1: Define the unit
What is your unit of analysis? (Customer, product SKU, transaction, subscription). See resources/template.md.
Step 2: Calculate CAC
Total acquisition costs (sales + marketing) ÷ new units acquired. Break down by channel if applicable. See resources/template.md and resources/methodology.md.
Step 3: Calculate LTV
Revenue over unit lifetime minus variable costs. Use cohort data for retention/churn. See resources/template.md and resources/methodology.md.
Step 4: Assess contribution margin
(Revenue - Variable Costs) ÷ Revenue. Identify levers to improve margin. See resources/template.md and resources/methodology.md.
Step 5: Analyze cohorts
Track retention, LTV, payback by customer cohort (acquisition month/channel/segment). See resources/template.md and resources/methodology.md.
Step 6: Interpret and recommend
Assess LTV/CAC ratio, payback period, cash efficiency. Make recommendations (pricing, channels, growth). See resources/template.md and resources/methodology.md.
Validate using resources/evaluators/rubric_financial_unit_economics.json. Minimum standard: Average score ≥ 3.5.
Pattern 1: SaaS Subscription Model
Pattern 2: E-commerce / Transactional
Pattern 3: Marketplace / Platform
Pattern 4: Freemium / PLG (Product-Led Growth)
Pattern 5: Enterprise / High-Touch Sales
Fully-loaded CAC: Include all acquisition costs (sales salaries, marketing spend, tools, overhead allocation). Excluding sales team salaries is a common miss that inflates perceived economics.
True variable costs: Only include costs that scale with each unit (COGS, hosting per user, transaction fees). Exclude fixed costs (rent, core engineering). Accurate margins are essential for LTV.
Cohort-based LTV: Early cohorts are not the same as recent cohorts. Track retention curves by cohort. Base LTV on observed retention, not assumptions.
Use conservative time horizons: LTV is a prediction. For new products with limited data, weight recent cohorts more heavily and avoid projecting far beyond observed behavior.
Optimize both payback and LTV/CAC: High LTV/CAC but long payback (>18 months) strains cash. Fast payback (<6 months) allows rapid reinvestment.
Analyze at channel level: Blended metrics hide the truth. CAC and LTV vary by channel (paid search vs. referral vs. content). Break down separately to optimize spend.
Retention drives LTV exponentially: Improving monthly churn from 5% to 4% increases LTV by 25%. Retention improvements typically matter more than acquisition improvements.
Gross margin floor: SaaS needs >=60% gross margin, e-commerce >=40%, to be viable. Low margin means even high LTV/CAC ratios yield poor cash flow.
Common pitfalls:
Key formulas:
CAC = (Sales + Marketing Costs) ÷ New Customers Acquired
LTV (subscription) = ARPU × Gross Margin % ÷ Monthly Churn Rate
LTV (transactional) = AOV × Purchase Frequency × Gross Margin % × Lifetime (years)
Contribution Margin % = (Revenue - Variable Costs) ÷ Revenue
LTV/CAC Ratio = Lifetime Value ÷ Customer Acquisition Cost
Payback Period (months) = CAC ÷ (Monthly Revenue × Gross Margin %)
CAC Payback (months) = S&M Spend ÷ (New ARR × Gross Margin %)
Gross Margin % = (Revenue - COGS) ÷ Revenue
Customer Lifetime (months) = 1 ÷ Monthly Churn Rate
MRR (Monthly Recurring Revenue) = Sum of all monthly subscriptions
ARR (Annual Recurring Revenue) = MRR × 12
ARPU (Average Revenue Per User) = Total Revenue ÷ Total Users
NRR (Net Revenue Retention) = (Starting ARR + Expansion - Contraction - Churn) ÷ Starting ARR
Benchmarks (varies by stage and industry):
| Metric | Good | Acceptable | Poor | |--------|------|------------|------| | LTV/CAC Ratio | ≥5:1 | 3:1 - 5:1 | <3:1 | | Payback Period | <6 months | 6-12 months | >18 months | | Gross Margin (SaaS) | ≥80% | 60-80% | <60% | | Gross Margin (E-commerce) | ≥50% | 40-50% | <40% | | Monthly Churn (B2C SaaS) | <3% | 3-7% | >7% | | Monthly Churn (B2B SaaS) | <1% | 1-3% | >3% | | CAC Payback (SaaS) | <12 months | 12-18 months | >18 months | | NRR (SaaS) | ≥120% | 100-120% | <100% |
Decision framework:
| LTV/CAC | Payback | Recommendation | |---------|---------|----------------| | <1:1 | Any | Stop: Losing money on every customer. Fix model or pivot. | | 1:1 - 2:1 | >12 months | Caution: Marginal economics. Don't scale yet. Improve retention or reduce CAC. | | 2:1 - 3:1 | 6-12 months | Optimize: Unit economics acceptable. Focus on improving before scaling. | | 3:1 - 5:1 | <12 months | Scale: Good economics. Can profitably invest in growth. | | >5:1 | <6 months | Aggressive scale: Excellent economics. Raise capital, increase spend rapidly. |
Inputs required:
Outputs produced:
unit-economics-analysis.md: Full analysis with CAC, LTV, ratios, cohort breakdownscohort-retention-table.csv: Retention curves by cohortchannel-profitability.csv: CAC and LTV by acquisition channelrecommendations.md: Pricing, channel, growth recommendations based on metricsdevelopment
--- name: zettel-note description: The note-writing discipline for this vault's evergreen knowledge graph, modeled on a Zettelkasten reading companion and governed by the vault conventions. Enforces declarative-claim titles, one claim per note (atomicity), own-words prose with no block quotes, the piped [[slug|Title]] link form, the labeled link-relationship vocabulary (Confirms/Contradicts/Extends/Context/Prerequisite/Builds-on/Applies/Example-of/Contrasts-with), 3-6 links per note, and search-
development
Plans between-round FIFA World Cup Fantasy transfers — budgets the round's free transfer(s), forces out players whose nation has been eliminated, chases fixture-swing drops, upgrades on value, and decides when a rebuild is large enough to fire the Wildcard instead of spending free transfers one at a time. Ranks candidate in/out pairs by EV gain over each player's remaining survival horizon (delta xEV weighted by progression_carry) MINUS transfer cost (a free transfer is cheap, a points hit is real, churning the squad for marginal swings is a critic flag), and tags forced/fixture/upgrade priority. Emits a `transfer-plan` signal. Use when called by wc-squad-architect (whose transfer work this skill is the engine for) and by the strategists in the populate stage when their candidate is transfer-adjacent rather than a full rebuild.
testing
Reads and updates the FIFA World Cup Fantasy tournament state machine (footballfantasy/context/tournament-state.md) — the temporal backbone tracking phase (pre-tournament → group MD1-3 → R32 → R16 → QF → SF → final), budget ($100m group / $105m knockouts), nation cap (3 group, loosening in knockouts), chips remaining, surviving nations, each owned player's elimination-risk horizon, and deadlines. Validates state on load (count/feasibility checks), applies phase transitions, and appends to the append-only state log (never silent overwrite). Use to load state at the start of a run and to commit state changes after the manager makes a move.
development
Validates and persists FIFA World Cup Fantasy signal files to signals/YYYY-MM-DD-<type>.md. Checks the required frontmatter (type, round, date, emitted_by, confidence, source_urls), range-checks declared numeric signals, confirms every factual claim carries a source URL or "manager-provided", rejects unknown signal types, and refuses to persist a signal that fails validation (logging the failure instead). Keeps the inter-agent signal layer auditable so downstream agents can trust what they read and never re-derive it. Use whenever an agent or skill writes a signal.