Business Models & Revenue

Unit Economics and Profitability

Understand whether you make money on each individual customer — the foundation of a viable business.

Unit Economics: Do You Make Money on Each Customer?

Unit economics answers a single critical question: for every customer you acquire, do you make more money than you spend?

A business with poor unit economics cannot be fixed by growing faster. Growth accelerates losses. Fix unit economics first, then grow.

Gross Margin

Gross margin measures how much revenue remains after the direct costs of delivering the product.

typescript
const grossMargin = (revenue - cogs) / revenue;
// Costs of Goods Sold (COGS) for SaaS:
// - Hosting and infrastructure
// - Third-party API costs (AI API credits, email, SMS)
// - Payment processing fees
// - Customer support cost per customer

Good SaaS gross margins:

  • Traditional SaaS: 70-85%
  • AI-powered SaaS: 40-65% (AI API costs are significant)
  • Marketplace: 20-40%

The AI Cost Challenge

AI applications often have lower gross margins because each user interaction consumes API tokens that cost money.

typescript
// AI-powered product unit economics example
const monthlyRevenue = 49; // Customer pays $49/month
const monthlyCosts = {
  hosting: 2.50,         // Vercel/AWS per customer
  aiApiCosts: 8.00,      // 160K tokens/month at $0.05/1K
  supportCost: 1.00,     // Average support cost per customer
  paymentFees: 1.47,     // 3% processing fee
};
const totalCOGS = Object.values(monthlyCosts).reduce((a, b) => a + b, 0);
// $12.97 COGS

const grossProfit = monthlyRevenue - totalCOGS; // $36.03
const grossMargin = grossProfit / monthlyRevenue; // 73.5%

Improving Unit Economics

Increase ARPU: Upsell customers to higher tiers, introduce usage-based pricing for heavy users, add premium features.

Decrease AI API costs:

  • Use cheaper models for simple tasks (GPT-4o-mini instead of GPT-4o)
  • Cache responses to identical prompts
  • Set token limits per user tier
  • Batch requests where real-time isn't required

Decrease churn: Improve onboarding, increase feature adoption, add customer success touchpoints.

Decrease CAC: Invest in content marketing (lower per-customer cost than paid), build referral programs.

Contribution Margin

Contribution margin is the revenue from a customer minus all variable costs of serving that customer.

typescript
const contributionMargin = (monthlyRevenue - variableCostsPerCustomer) / monthlyRevenue;
// If contribution margin is negative, every new customer makes you poorer
// You MUST fix this before scaling

If contribution margin is negative, you have a fundamental cost problem. Raising prices or reducing costs is mandatory before adding customers.

The Path to Profitability

Most early-stage companies are intentionally unprofitable — they're investing revenue into growth. The critical question is: could you be profitable if you stopped growing?

typescript
function couldBeProfitable(
  mrr: number,
  fixedCosts: number,   // Team, tools, rent — doesn't scale with customers
  variableCosts: number // COGS — scales with customers
): boolean {
  return mrr - fixedCosts - variableCosts > 0;
}

// If yes: you have a viable business choosing to invest in growth
// If no: you have a cost structure problem that growth will make worse

Key Takeaways

  • Gross margin for SaaS should be 70-85%; AI-heavy products often land at 50-65% due to API costs
  • AI API costs are significant and variable — model selection, caching, and usage limits are direct levers on unit economics
  • If contribution margin is negative, stop growing — every new customer loses money
  • The path to profitability question: "Could we be profitable if we stopped growing?" — if no, fix costs first
  • Improving unit economics is about four levers: increase ARPU, decrease COGS, decrease churn, decrease CAC

Example

typescript
// Unit economics analysis
function analyzeUnitEconomics({
  arpu,
  monthlyChurnRate,
  cac,
  cogs,  // Monthly cost of goods sold per customer
}: {
  arpu: number;
  monthlyChurnRate: number;
  cac: number;
  cogs: number;
}) {
  const grossMargin = (arpu - cogs) / arpu;
  const ltv = (arpu - cogs) / monthlyChurnRate; // Contribution LTV
  const ltvCacRatio = ltv / cac;
  const paybackMonths = cac / (arpu - cogs);

  const isViable = ltvCacRatio >= 3 && grossMargin >= 0.5 && paybackMonths <= 18;

  return {
    grossMarginPct: (grossMargin * 100).toFixed(1) + '%',
    ltv: '$' + ltv.toFixed(0),
    ltvCacRatio: ltvCacRatio.toFixed(2) + ':1',
    paybackMonths: paybackMonths.toFixed(1),
    verdict: isViable ? 'Viable' : 'Needs improvement',
    bottleneck: grossMargin < 0.5 ? 'High COGS' :
                ltvCacRatio < 3 ? 'High CAC or high churn' :
                paybackMonths > 18 ? 'Long payback period' : 'None',
  };
}
Try it yourself — TYPESCRIPT