MishaBook a demo

Aug 14, 2026

Common LTV Mistakes on Shopify

Lifetime Value (LTV) is the total gross profit a customer generates from first purchase through final transaction, measured within a defined observation window (typically 12-24 months post-acquisition). Formula: (Average Order Value × Purchase Frequency × Gross Margin %) - Acquisition Cost = LTV.

Definition and Core Formula

LTV on Shopify is often stated loosely as 'total revenue per customer.' This is wrong. LTV must be gross profit, not revenue. A $100 AOV customer with 40% COGS generates $60 in gross profit per order, not $100. Shopify's native analytics rarely surface COGS, forcing operators to calculate manually or use third-party tools.

The standard formula: LTV = (AOV × Repeat Purchase Rate × Observation Window in months / 12) × Gross Margin % - CAC. For a 12-month window, a customer with $50 AOV, 2.5 purchases per year, 60% margin, and $20 CAC yields: ($50 × 2.5 × 0.60) - $20 = $55 LTV.

Observation window matters. A 12-month LTV window is standard for DTC. A 24-month window inflates LTV by 50-100% and is appropriate only for subscription or high-repeat categories (beauty, supplements). Mixing windows across cohorts breaks comparability.

Mistake 1: Mixing Acquisition Cohorts

The most common error: calculating LTV across all customers acquired in a month without separating by channel, campaign, or product. A customer acquired via paid search (higher CAC, lower repeat) has different LTV than one from organic (lower CAC, higher repeat). Blending them masks which channels are actually profitable.

Correct procedure: segment LTV by acquisition source (paid search, email, organic, referral, affiliate). Calculate each cohort's LTV independently. Then compare LTV:CAC ratio (target: 3:1 minimum, 5:1+ for sustainable growth). A blended LTV of $80 across channels may hide a $40 LTV from paid search (unprofitable at $25 CAC) and $120 from organic (highly profitable at $15 CAC).

  • Always tag acquisition source at purchase (UTM, Shopify source, or custom field)
  • Recalculate LTV monthly by cohort; do not use rolling averages
  • Flag cohorts with LTV:CAC < 2:1 for immediate review

Mistake 2: Ignoring Churn Windows

LTV assumes repeat purchases. If 70% of customers never buy again, LTV collapses. Many operators calculate repeat rate across all customers ever acquired, including those still in their 'first-purchase window' (0-30 days post-acquisition). This inflates repeat rate and LTV.

Correct procedure: measure repeat rate only for customers 90+ days post-acquisition. A customer acquired 10 days ago has not had time to repeat. Exclude them from repeat calculations. For a cohort acquired Jan 1, measure repeat rate starting April 1 (90-day window). This prevents false positives and catches churn early.

Threshold: repeat rate should be measured at 90, 180, and 365 days. If repeat rate at 180 days is below 15%, LTV is likely unsustainable. If it drops below 10% at 365 days, the business model is at risk.

  • Exclude customers < 90 days old from repeat rate calculation
  • Track repeat rate at 90, 180, 365 days separately
  • Flag cohorts with < 15% repeat at 180 days

Mistake 3: Using Revenue Instead of Gross Profit

Shopify's native LTV metric (if enabled) is revenue-based. A $100 order with 30% COGS and $20 CAC shows LTV of $100 in Shopify, but true LTV is ($100 × 0.70) - $20 = $50. This 2x overstatement leads to overspending on CAC and underinvestment in retention.

Correct procedure: export transaction data from Shopify, calculate COGS per product (or use average margin by category), and compute gross profit per customer. If COGS data is unavailable, use industry benchmarks (apparel: 35-45% COGS, supplements: 25-35%, home goods: 40-50%). Conservative estimate: assume 40% COGS if unknown.

Decision rule: if LTV (revenue-based) / LTV (profit-based) > 1.5, COGS is material and must be tracked. Implement a simple spreadsheet or use Shopify's inventory cost fields to tag COGS at SKU level.

  • Always use gross profit, never revenue, in LTV calculations
  • Tag COGS per SKU in Shopify inventory settings
  • Audit margin assumptions quarterly

Mistake 4: Incomplete Transaction Data

Shopify's native analytics exclude refunds, discounts, and returns in some views. A customer with two $100 orders but one $50 return shows as $200 revenue, not $150. LTV inflates by 33%. Similarly, heavy discount usage (BOGO, site-wide 30% off) reduces effective AOV but is often ignored in LTV models.

Correct procedure: export order data with refunds and discounts applied. Calculate net revenue (revenue minus refunds minus discount value). Use net revenue to compute AOV. For repeat rate, count only orders that were not fully refunded. A customer with 3 orders and 1 full refund = 2 repeat purchases, not 3.

Threshold: if refund rate > 15% or average discount per order > 20% of AOV, LTV is overstated by > 10%. Recalculate with net figures.

  • Export order data with refunds and discounts applied
  • Calculate AOV as net revenue / order count
  • Track refund rate and average discount separately

Mistake 5: Misaligned Observation Windows

A common trap: calculating LTV for a cohort before the observation window closes. Cohort acquired Jan 1 measured on Feb 15 (45 days in) will have incomplete repeat data. Extrapolating to 12 months introduces error. Conversely, using a 24-month window for a 6-month-old business inflates LTV with data that does not exist yet.

Correct procedure: only calculate LTV for cohorts that are at least 12 months old (or 24 months if using a 24-month window). For newer cohorts, use a 'projected LTV' based on 90-day repeat rate and AOV, but flag it as incomplete. Update LTV monthly as new data arrives. Do not extrapolate beyond observed data.

Decision rule: if cohort age < observation window, use 'LTV (projected)' label. Do not use projected LTV for budget or channel decisions until cohort reaches 180+ days old.

  • Only finalize LTV for cohorts >= 12 months old
  • Use 'projected LTV' for younger cohorts; update monthly
  • Do not make channel decisions on cohorts < 180 days old

Audit Checklist

Run this checklist monthly to catch LTV errors before they affect budget allocation.

  • Is LTV calculated by acquisition source (channel, campaign)?
  • Are repeat rates measured only for customers >= 90 days old?
  • Is LTV based on gross profit, not revenue?
  • Are refunds and discounts deducted from revenue?
  • Is observation window consistent (12 or 24 months)?
  • Are cohorts >= 12 months old before finalizing LTV?
  • Is LTV:CAC ratio >= 3:1 for each channel?
  • Is repeat rate >= 15% at 180 days?

Questions

FAQ

What is the minimum LTV:CAC ratio for profitability?

3:1 is the minimum threshold for sustainable DTC. Below 3:1, unit economics are negative after accounting for operational overhead (fulfillment, support, platform fees). 5:1+ is ideal for growth-stage brands. If a channel has LTV:CAC < 2:1, pause it immediately.

How do I handle customers acquired before I started tracking COGS?

Use a conservative industry average (40% COGS) for historical cohorts. Once COGS tracking is live, recalculate LTV for new cohorts with actual data. Do not retroactively adjust old cohorts unless you have reliable COGS records. Flag historical LTV as 'estimated' in reports.

Should I include subscription or membership revenue in LTV?

Yes, but separately. A subscription customer has higher LTV due to predictable recurring revenue. Calculate subscription LTV using the subscription term (e.g., 12-month subscription = 12-month observation window) and add one-time purchase LTV on top. Do not mix subscription and one-time LTV in the same metric.

What if my repeat rate is very low (< 10%)?

LTV is unsustainable. Investigate: (1) Is the product category inherently low-repeat (e.g., furniture)? If yes, extend observation window to 24-36 months. (2) Is churn happening in the first 90 days? If yes, audit onboarding, product quality, and email sequences. (3) Is CAC too high relative to AOV? If yes, reduce paid spend and focus on organic. Do not increase CAC until repeat rate improves.

Want this on your account?

Thirty minutes. Bring the number that keeps you up.

More from the blog