{
  "slug": "repeat-purchase-ltv",
  "title": "Repeat Purchase LTV Calculator",
  "heading": "Customer Lifetime Value Calculator (Repeat Purchase)",
  "category": "financial",
  "url": "https://www.revenuelab.fyi/toolbox/repeat-purchase-ltv",
  "summary": "Simple LTV from AOV, purchase frequency, margin, and customer lifespan.",
  "description": "For ecommerce, the most actionable LTV model uses observable repeat purchase behavior rather than complex cohort survival curves: average order value times purchases per year times contribution margin percentage times expected years as an active customer. This gives you gross contribution LTV, the number that should set your acceptable customer acquisition cost, since a $40 AOV product with strong repeat behavior can justify a much higher CAC than a one-and-done $150 purchase. Enter average order value, average number of orders per customer per year, contribution margin percentage on those orders, and expected years the customer keeps buying before churning. The calculator outputs annual value per customer, total lifetime value, and a suggested maximum CAC using a standard LTV:CAC ratio target. This is meant as a directional planning tool, not a precise cohort model, so revisit it quarterly against your actual repeat purchase rate data as it accumulates.",
  "formula": "Annual value = AOV × orders/year × margin%; LTV = annual value × years active; Max CAC = LTV ÷ target LTV:CAC ratio.",
  "dateModified": "2026-09-30",
  "run_url": "https://www.revenuelab.fyi/api/public/calc?tool=repeat-purchase-ltv",
  "inputs": [
    {
      "id": "aov",
      "label": "Average order value",
      "kind": "number",
      "hint": null,
      "default": 55,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "ordersYear",
      "label": "Orders per customer per year",
      "kind": "number",
      "hint": null,
      "default": 2.4,
      "unit": null,
      "min": 0.1,
      "max": null
    },
    {
      "id": "marginPct",
      "label": "Contribution margin",
      "kind": "number",
      "hint": null,
      "default": 35,
      "unit": "%",
      "min": 0,
      "max": 100
    },
    {
      "id": "yearsActive",
      "label": "Expected years active",
      "kind": "number",
      "hint": null,
      "default": 3,
      "unit": null,
      "min": 0.5,
      "max": null
    },
    {
      "id": "targetRatio",
      "label": "Target LTV : CAC ratio",
      "kind": "number",
      "hint": null,
      "default": 3,
      "unit": null,
      "min": 1,
      "max": null
    }
  ],
  "outputs": [
    {
      "id": "ltv",
      "label": "Lifetime value (contribution)",
      "format": "currency",
      "hint": null,
      "primary": true
    },
    {
      "id": "annualValue",
      "label": "Annual value per customer",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "maxCac",
      "label": "Suggested max CAC",
      "format": "currency",
      "hint": null,
      "primary": false
    }
  ],
  "worked_example": {
    "inputs": [
      "Average order value: 55 $",
      "Orders per customer per year: 2.4",
      "Contribution margin: 35 %",
      "Expected years active: 3",
      "Target LTV : CAC ratio: 3"
    ],
    "outputs": [
      "Lifetime value (contribution): $139",
      "Annual value per customer: $46",
      "Suggested max CAC: $46"
    ]
  },
  "how_to": {
    "title": "How to use this",
    "steps": [
      "Enter average order value ($).",
      "Enter orders per customer per year.",
      "Enter contribution margin (%).",
      "Enter expected years active.",
      "Enter target ltv : cac ratio.",
      "Read your lifetime value (contribution) on the right — it updates as you type.",
      "Hit Share to keep the scenario or send it to someone."
    ]
  },
  "scenarios": [
    {
      "name": "Conservative",
      "description": "Lower-end numbers — what if things land soft?",
      "values": {
        "aov": 33,
        "ordersYear": 1.44,
        "marginPct": 21,
        "yearsActive": 1.7999999999999998,
        "targetRatio": 1.7999999999999998
      }
    },
    {
      "name": "Typical",
      "description": "Defaults — the most common real-world setup.",
      "values": {
        "aov": 55,
        "ordersYear": 2.4,
        "marginPct": 35,
        "yearsActive": 3,
        "targetRatio": 3
      }
    },
    {
      "name": "Ambitious",
      "description": "Higher-end numbers — what if things really pop?",
      "values": {
        "aov": 88,
        "ordersYear": 3.84,
        "marginPct": 56,
        "yearsActive": 4.800000000000001,
        "targetRatio": 4.800000000000001
      }
    }
  ],
  "limitations": [
    "Results are estimates before tax, fees, and inflation unless an input explicitly covers them.",
    "Rates are treated as fixed for the whole period — variable-rate products will drift from this projection.",
    "This is educational maths, not financial advice. Check anything contractual with the lender or your accountant."
  ],
  "faq": [
    {
      "q": "Is this LTV based on revenue or profit?",
      "a": "Profit — specifically contribution margin, since it nets out COGS, shipping, and fees before multiplying by frequency and years. Revenue-based LTV overstates what you can actually afford to spend acquiring a customer, since it ignores the cost of fulfilling every order."
    },
    {
      "q": "What's a realistic LTV:CAC ratio target?",
      "a": "3:1 is the widely cited healthy benchmark across subscription and ecommerce businesses, meaning lifetime profit should be at least three times what you spent to acquire the customer. Below 2:1 usually signals a business that struggles to fund growth from its own margins."
    },
    {
      "q": "How do I estimate years active if I'm a new store?",
      "a": "Use industry benchmarks conservatively at first — 2-3 years is reasonable for most consumables and mid-frequency categories — then replace it with your own cohort retention data once you have 12-18 months of order history to analyze actual repeat behavior."
    },
    {
      "q": "Does this account for the time value of money?",
      "a": "No, this is a simple undiscounted model. For most DTC planning purposes over a 2-4 year horizon, discounting doesn't change decisions much, but if you're running longer subscription LTV models, consider discounting later-year cash flows."
    }
  ],
  "related": [
    "https://www.revenuelab.fyi/toolbox/blended-cac-mer",
    "https://www.revenuelab.fyi/toolbox/subscription-box-unit-economics",
    "https://www.revenuelab.fyi/toolbox/break-even-roas"
  ],
  "license": "CC-BY-4.0",
  "citation": "RevenueLab — Repeat Purchase LTV Calculator (https://www.revenuelab.fyi/toolbox/repeat-purchase-ltv)"
}