asgard-ai-platform/biz-cac-ltv
Calculate and analyze Customer Acquisition Cost (CAC) and Customer Lifetime Value (LTV) to evaluate unit economics and marketing efficiency. Use this skill when the user needs to assess whether their customer acquisition is profitable, optimize marketing spend allocation, or evaluate business model viability — even if they say 'are we spending too much on ads', 'what's each customer worth', or 'is our growth sustainable'.
npx skills add https://github.com/asgard-ai-platform/skills --skill biz-cac-ltv
CAC (Customer Acquisition Cost) and LTV (Customer Lifetime Value) are the two fundamental unit economics metrics. Together they answer: "Does each customer generate more revenue than it costs to acquire them?" The LTV:CAC ratio is the single most important indicator of marketing efficiency and business model viability.
Trigger conditions:
When NOT to use:
IRON LAW: LTV:CAC > 3 for Healthy Business
LTV:CAC ratio must be at least 3:1 for sustainable businesses.
- < 1:1 = You're LOSING money on every customer
- 1-3:1 = Unsustainable unless you can reduce CAC or increase LTV
- 3-5:1 = Healthy
- > 5:1 = Potentially underinvesting in growth (leaving market share on the table)
This ratio applies to the BLENDED average. Individual channels can be
below 3:1 if the overall blend exceeds it.
IRON LAW: CAC Must Include ALL Acquisition Costs
CAC = Total marketing & sales spend / Number of new customers acquired
"Total spend" includes: ad spend, marketing team salaries, sales team
salaries, tools, content production, events — EVERYTHING spent to acquire
customers in that period. Excluding salaries or tools understates true CAC.
Basic formula:
CAC = Total acquisition spend in period / New customers acquired in period
By channel:
CAC (Channel X) = Spend on Channel X / Customers from Channel X
Include in total acquisition spend:
Simple formula:
LTV = ARPU × Gross Margin % × Average Customer Lifespan
Where:
Cohort-based (more accurate):
Track actual revenue per customer cohort over time. Sum cumulative revenue per customer, apply gross margin.
| Metric | Formula | Healthy Benchmark |
|--------|---------|-------------------|
| LTV:CAC | LTV / CAC | > 3:1 |
| Payback Period | CAC / (ARPU × Gross Margin) | < 12 months |
| CAC % of LTV | CAC / LTV × 100 | < 33% |
Calculate CAC and LTV by:
To reduce CAC:
To increase LTV:
# CAC-LTV Analysis: {Company/Product}
## Unit Economics Summary
| Metric | Value | Benchmark | Status |
|--------|-------|-----------|--------|
| CAC (blended) | ${X} | — | — |
| LTV | ${X} | — | — |
| LTV:CAC | {X}:1 | > 3:1 | ✓/✗ |
| Payback Period | {X} months | < 12 months | ✓/✗ |
## CAC by Channel
| Channel | Spend | Customers | CAC | % of Total |
|---------|-------|-----------|-----|-----------|
| {channel} | ${X} | {N} | ${X} | {X%} |
## LTV Calculation
- ARPU: ${X}/month
- Gross Margin: {X%}
- Avg Lifespan: {X} months (churn rate: {X%}/month)
- LTV = ${X}
## LTV:CAC by Segment
| Segment | CAC | LTV | Ratio | Action |
|---------|-----|-----|-------|--------|
| {seg A} | ${X} | ${X} | {X}:1 | Invest / Maintain / Cut |
## Optimization Recommendations
1. ...
2. ...
Scenario: CAC-LTV for a Taiwanese B2C subscription box (monthly NT$599)
CAC calculation:
| Item | Monthly Spend |
|------|-------------|
| Facebook/Instagram ads | NT$200,000 |
| Google Ads | NT$80,000 |
| KOL partnerships | NT$50,000 |
| Marketing team (2 people) | NT$120,000 |
| Total | NT$450,000 |
New customers in month: 300
CAC = NT$450,000 / 300 = NT$1,500
LTV calculation:
LTV:CAC = 4,118 / 1,500 = 2.75:1 — Below the 3:1 threshold. Need to either reduce CAC or improve retention.
What went wrong:
| Script | Description | Usage |
|--------|-------------|-------|
| scripts/cac_ltv.py | Compute CAC, LTV, LTV/CAC ratio, and payback period | python scripts/cac_ltv.py --help |
Run python scripts/cac_ltv.py --verify to execute built-in sanity tests.
references/cohort-ltv.mdreferences/attribution-models.mdTake asgard-ai-platform/biz-cac-ltv from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.