Blog

Jesús Avendaño
·
The most repeated advice on how to measure customer lifetime value is a one-line formula: average order value times purchase frequency times lifespan. It is easy to put on a slide, and it is the wrong number for almost every budget a Shopify store sets.
That formula treats every buyer as the same person, values a dollar in year three the same as a dollar this week, and ignores what it costs to ship, refund, and support the order. A store can look healthy on revenue lifetime value while the customers inside the average are one-time buyers on a steep first-order discount.
I would not use one blended lifetime value for bids, promotions, or retention spend. Measure a distribution of contribution margin, by cohort and channel, and only spend when the offer costs less than the extra margin it is likely to produce. A simple formula is a sketch. A month-by-month cohort table is what smaller stores should trust. A discounted or predictive model earns its place once repeat history is deep enough.
Inputs You Need Before Calculating Lifetime Value
Most inflated lifetime value figures come from the inputs, not from the algebra. Swap gross sales for net revenue, or forget payment fees, and every method downstream looks better than the business.
Lock seven numbers before you calculate. Each one lives in Shopify, payout reports, ad platforms, or the product cost sheet, and each one has a mistake that breaks it.
Input | What It Measures | Where to Pull It | Common Error |
|---|---|---|---|
Average order value (AOV) | Net revenue per order after discounts and refunds | Shopify orders export, grouped by first order | Using gross sales before discounts |
Purchase frequency | Orders per customer per year within one cohort | Customer order history | Dividing total orders by all customers, including new ones |
Customer lifespan or retention | Share of customers still buying each period | Cohort retention reports | Assuming one lifespan for every customer |
Gross margin | Revenue minus product cost (COGS) | Product cost sheet | Ignoring first-order discounts |
Contribution margin | Gross margin minus shipping, payment fees, returns, support and variable marketing | Payouts, fulfillment invoices, ad platforms | Leaving out payment fees and returns |
Customer acquisition cost (CAC) | Marketing spend divided by new customers | Ad platforms and order data | Subtracting CAC in LTV and again in LTV:CAC |
Discount rate | Annual rate reflecting the time value of money | Finance team or a fixed planning rate | Skipping it for horizons longer than a year |
Average order value has to be net. A welcome code and a partial refund are not "marketing." They are revenue you did not keep. Purchase frequency only makes sense inside one cohort over a full year. Fold in customers who bought last week and the rate collapses for a reason that has nothing to do with loyalty.
Lifespan is a retention share, not a personality trait of your brand. Gross margin fails when the cost sheet still shows full price and the first order was 30% off. Contribution margin is the default for decisions because revenue ignores the cost of serving the customer. Shipping, payment fees, returns, support, and variable media all move when you sell one more unit. The contribution margin boundary is the line I want fixed before anyone talks about a bid.
Cost boundary: If a cost moves when you ship one more order, it belongs in contribution margin. If it does not, leave it in overhead.
CAC is counted once. Put it inside lifetime value and then divide by CAC again, and the ratio is fiction. Discount rate matters as soon as the horizon runs past a year. A fixed planning rate, written down, beats a silent assumption that future margin is worth face value.
Shopify's guidance on turning each sale into lasting revenue draws a practical hierarchy. Revenue LTV is for demand analysis. Gross-margin LTV comes after product costs and discounts. Contribution LTV comes after fulfillment, payment, returns, support, and variable marketing. Cash payback shows when acquisition spend is recovered. Revenue CLV is often the wrong metric for acquisition and retention, especially when first orders are heavily discounted or products carry very different gross margins. The question that governs bidding is which version of CLV you will let set the budget.
What to verify before you calculate
Matching dates: Every cost line covers the same range as the orders it is applied to.
Net revenue: Discounts and refunds are already out of AOV, not subtracted a second time.
CAC sits beside LTV: Acquisition cost is stored next to lifetime value, not buried inside it.
Segments are columns: Channel, first product, geography, and cohort are in the export.
Equal windows: You will compare cohorts over the same number of months, not over all time.
Shared rent and salaried overhead stay in the P&L. They do not belong in a per-customer bid.
How to Calculate Simple CLV With a Worked Example
Simple CLV starts as revenue. Revenue LTV equals average order value times purchase frequency per year times lifespan in years. It answers how much these people tend to spend, not how much you can afford to pay to acquire them.
Take one cohort with a $60 net AOV, 2.5 orders a year, and a lifespan you cap at three years. Revenue LTV is 60 × 2.5 × 3 = $450. Apply a 40% contribution margin and margin LTV is $180. The $450 figure is what gets pasted into a media plan. The $180 figure is what that plan can spend against.
Run one cohort through the arithmetic
Choose one cohort and one window. Use customers acquired in a single period, such as Q1 2026, and leave everyone else out. Mixing January buyers with people who arrived last week makes frequency meaningless.
Calculate net AOV for that cohort. Sum revenue after discounts and refunds, then divide by orders. On these numbers that is $60, not the $75 sticker before the welcome code.
Get purchase frequency from a full year. Divide that cohort's orders by its unique customers over twelve months. Here that is 2.5. Do not divide storewide orders by every customer on file.
Estimate lifespan, then cap it. Lifespan is one divided by the annual churn rate. If about a third of the cohort stops buying each year, lifespan lands near three years. I would still cap most DTC catalogs at three years, because replenishment cycles rarely justify an open-ended life.
Multiply for revenue LTV. $60 × 2.5 × 3 = $450. That is a demand figure. It is useful for forecasting units and useless as a bid cap.
Apply the contribution margin percentage. Forty percent of $450 is $180. That $180 is the number I would hand to whoever sets cost per acquisition. A bid near $450 assumes every sales dollar is profit.
Simple CLV assumes the rate stays constant. Treat it as a starting sketch you will replace, not as a forecast you will fund.
Check it against repeat revenue you already have
Pull the same cohort and add up the contribution margin those customers have produced. If the model says $180 and the cohort has delivered $40 after a year on a flat repurchase curve, the three-year life was hopeful. If they have already cleared $90 and are still reordering, the cap may be tight, but you know which way the error runs. The check uses observed orders, not the lifespan you typed in.
How to Build a Cohort CLV Table Month by Month
A storewide average hides the split that matters. One-time buyers, repeat purchasers, subscribers, and a handful of high-value outliers all collapse into one mean, so you cannot see when value shows up or whether a retention offer will pay for itself.
Cohort analysis CLV throws out the assumed lifespan and uses observed behavior instead. The screen below is the working view: customers grouped by when they first bought, with margin accumulating by month.
Build the table in six moves
Group by first-order month, and by channel if you can. January paid social and January email are different businesses that happen to share a calendar.
Give every cohort the same observation window. Twelve months is a clean default. A cohort analysis that lets older groups run longer will always crown them the winners.
Sum contribution margin per customer at fixed ages. Months 1, 3, 6, and 12 are enough. Use margin, not gross sales.
Compare cohorts only at the same age. A 2024 cohort has had more time to buy. That is not evidence it is a better cohort.
Subtract acquisition cost once. The month when cumulative contribution margin per customer crosses CAC is the payback month. Do not subtract CAC again inside the margin.
Read the shape of the curve. A line that flattens means retention has settled and the average is usable. A line that is still steep means the estimate will move, so do not lock a bid to it.
Cohort | Month 1 | Month 3 |
|---|---|---|
Jan 2026, paid social | $14 | $26 |
Jan 2026, email referral | $16 | $38 |
Jan 2026, search brand | $13 | $29 |
Read the rows as cumulative contribution margin per customer, not as revenue. Paid social, email referral, and branded search all open in a tight band, $13 to $16 in month 1. By month 3, email referral has reached $38 while paid social is at $26 and branded search is at $29. Similar first orders, different curves. By month 6 that gap usually widens further if email buyers keep replenishing and paid social buyers do not. A single store average would have reported something near $30 and sent the same bid to all three channels.
Older cohorts look richer for a boring reason. They have had more months to buy.
Shopify's customer lifetime value guidance makes the same case from the other direction. Conventional formulas reduce a customer's future to one number, so they cannot show when value will materialize, why someone may leave, or whether keeping them is worth the cost. Report cohort-level and segment-level CLV with uncertainty around it: realized contribution margin to date, predicted future margin, the probability of another purchase, expected time to the next purchase, and a percentile range rather than only a mean. The question worth answering is which customers are likely to generate profitable margin in the next 90 days, not what the store's average LTV is.
A walk-through of how cohort curves get misread in a live dashboard is worth ten minutes before you freeze a retention budget.
Decide on a month-3 retention offer
Take the month-3 contribution margin for that channel and ask what the offer costs. Say paid social sits at $26 per customer by month 3, and a free-shipping incentive plus the media to deliver it costs $18 per person you try to save. You are spending $18 to protect a pool of margin that is only $26 so far, and only the incremental slice you would not have earned anyway counts. If that slice is $10, the offer loses money even though predicted lifetime value looks high. A customer can be valuable and still be a poor target when the discount, free shipping, or media cost is larger than the extra margin.
Discounted and Predictive CLV for Smarter Decisions
A large CLV can still be a poor basis for a bid or retention offer. The number only supports those decisions if it represents contribution margin, accounts for when that margin arrives, and makes the cost boundary explicit. Revenue totals blur those distinctions and can make future cash look more certain than it is.
The discounted form combines timing and the chance a customer keeps buying. CLV equals the discounted sum of contribution margin multiplied by the probability the customer remains active in each period, minus acquisition cost. In symbols, CLV = Σ[m_t × r_t / (1+i)^t] − AC. Here m_t is contribution margin in period t, r_t is the probability the customer remains active, i is the discount rate, and AC is acquisition cost.
If annual margin m, retention r, and the horizon stay constant, the sum simplifies to CLV = m × r / (1 + i − r) − AC. The margin must already exclude the costs within your chosen boundary, such as product costs, fulfillment, payment fees, advertising, and service. Set that boundary before calculating: discounting revenue does not turn it into profitable customer value.
A worked discount, with the arithmetic shown
Use $100 of annual contribution margin, 80% retention, a 10% discount rate, and $60 of acquisition cost. First, $100 × 0.80 / (1.10 − 0.80) = $100 × 0.80 / 0.30 = $266.67 before acquisition cost. Then $266.67 − $60 = $206.67 net. Keep the assumptions and subtraction visible. Calling the result about $260 would blur the difference between value before acquisition cost and value after it.
One store-wide average also hides where margin and retention differ. Channel, product, geography, and first-order cohort can each produce different patterns, so use cohorts and segments when deciding where to bid or retain customers. A blended figure may be useful as a summary, but it is a weak guide to allocating budget across a Shopify catalog.
Planning rate: Write the discount rate into the model. A 0% rate treats next year's margin as equal in value to this week's cash, so make that assumption explicit rather than leaving it implicit.
When a predictive model is worth fitting
BG/NBD estimates whether a customer is still active and how many purchases they may make. Gamma-Gamma estimates spend per order, given that they buy. Together, these methods can produce a distribution rather than a single mean. They require enough repeat buyers to fit, clean order timestamps, and pricing that is not swinging every week. A few hundred repeat customers alongside a messy export may produce a confident-looking forecast that is mostly noise. Use cohort tables while repeat history is shallow; consider prediction when the history is deep enough to support decisions about customers you may contact in the next quarter.
Method | Inputs needed | Accounts for time value | Data required | Best use |
|---|---|---|---|---|
Simple CLV | AOV, purchase frequency, lifespan, contribution margin % | No | One cohort and one full year of orders | Quick starting estimate for demand analysis |
Cohort CLV | Contribution margin per customer by month, first-order month, channel | Not by default | Repeat history for each cohort over a fixed window | Bidding and retention checks for smaller stores |
Discounted / predictive CLV | Margin, retention probability, discount rate, acquisition cost | Yes | Many repeat buyers, clean timestamps, stable pricing | Forecasts once repeat history is deep enough |
A lifetime total alone is not enough to choose an audience or budget. Track the probability the customer is still alive, expected purchases in the next 90 days, and expected contribution margin in those 90 days. The first helps prioritize who to contact, the second indicates whether a purchase may happen within the window, and the third shows how much margin is available to cover the cost of contact. Judge the offer against that expected margin, using the same cost boundary as the CLV calculation.
Pitfalls That Inflate Your LTV and How to Fix Them
The expensive mistake is using revenue LTV to set bids. That number overstates value by the full cost of goods, the shipping, and the fees. You then buy customers at a price the margin cannot support, and the dashboard still looks fine because it was built on sales.
Pitfall | Effect on LTV | Fix |
|---|---|---|
Revenue used for bidding decisions | Overstates value by the full COGS, fees and shipping share | Use contribution-margin LTV for bids and budgets |
Cohorts of unequal age compared directly | Older cohorts look more valuable | Compare every cohort over the same observation window |
CAC counted twice | Understates LTV:CAC and distorts payback | Keep CAC out of LTV, then subtract it once |
One blended store average | Hides channel and product differences | Segment by channel, first product, geography and cohort |
One lifespan for every customer | Misstates one-time buyers and repeat buyers | Use observed retention curves by cohort |
Discounted first orders | Revenue LTV looks healthy while margin is thin | Report margin LTV by discount depth |
Unequal ages are the quiet cousin of the revenue mistake. Last January's cohort has had a year to reorder. This month's cohort has had ten days. Rank them on cumulative value and you will shift budget toward whoever has been around longer. Freeze every cohort at the same age, even if that means ignoring later orders from the older group until the younger one catches up.
Double-counted CAC pushes the other way. Lifetime value looks smaller, the ratio looks worse, and payback looks slower than cash is. People then cut a channel that was fine, or they "fix" the model by ignoring CAC entirely. Keep acquisition cost out of the lifetime value numerator, subtract it once, and let payback be a separate month on the curve.
Two distortions that survive a clean formula
A blended average is not neutral. It hides a profitable email cohort inside an unprofitable paid social cohort, and it hides a high-margin hero SKU inside a discounted bundle. Segment by channel, first product, geography, and cohort before you change a bid. A universal lifespan does similar damage in the other direction. It gives one-time buyers a fantasy second and third order, and it cuts off subscribers who are still paying. Observed retention by cohort replaces that guess.
Discounted first orders are the case I see merchants celebrate too early. Revenue LTV clears a round number while contribution margin on that first order is thin or negative, and the second order never comes because the buyer wanted the deal, not the product. Report margin LTV by discount depth. A 10% code and a 40% code should not share a row.
I would treat an LTV:CAC ratio that looks above 3 as a warning, not a win, when cash payback is still past 12 months. Check discounting and returns before you scale spend. There is also a case for ignoring a high predicted value on purpose. If the retention offer costs more than the incremental margin it produces, do not run it, however flattering the lifetime number is.
Automate LTV Tracking in Shopify and Pick Your Next Step
A one-time spreadsheet is stale within a quarter. New orders land, refunds post late, ad invoices shift, and the cohort you trusted in January is a different shape by April. Lifetime value has to be a recurring report, or it becomes a story about a month you no longer have.
Cifra is one way to keep that report current for a Shopify store without rebuilding the export. Cohort Reports track retention, repeat purchasing, and lifetime value over time. The ecommerce KPI set carries AOV and repeat purchase rate next to net profit, so the demand number and the profit number sit in the same place. Metric Tree shows which drivers moved lifetime value when the headline changes. The Ask bar can answer a plain question such as contribution LTV by channel for the last 90 days. Automated Delivery sends the cohort view by email or Slack, and the underlying data refreshes about every 15 minutes, so a bad day of returns does not wait for a monthly close.
A Shopify integration only helps if product costs, fees, and ad spend are in the profit figure. Connect the store and leave COGS blank, and you are back to revenue LTV with a nicer chart.
Five steps for this month
Confirm net profit is complete. Product costs, payment fees, and ad spend have to be in the number. If one of those is missing, fix that before you trust any lifetime value on the screen.
Split the two lifetime values. Contribution LTV governs bids, promotions, and retention budgets. Revenue LTV stays a demand metric for forecasting units and revenue.
Build a monthly cohort report. Break it by channel and by first product. Read month 1, month 3, and month 6 on contribution margin per customer, and do not rank cohorts of different ages.
Schedule a weekly delivery. Send the cohort view to the people who change bids and offers. A report nobody sees on Monday will not change Tuesday's spend.
Set a threshold an offer must beat. Pick a month-3 contribution value, or the expected margin over the next 90 days, and do not run a retention offer that costs more than that incremental margin.
Pick one of those five and finish it this week. The fastest useful one, for most stores, is step 1. A pretty cohort chart on incomplete costs will send you back to the inflated number this whole measurement problem starts with.
Cifra connects Shopify orders, product costs, fees, and ad spend so you can track contribution lifetime value by cohort instead of guessing from a revenue average. Cohort reports, a metric tree, and scheduled delivery keep the same view current for bidding and retention decisions. Visit Cifra and set the first cohort report against the channel you spend the most on.
Jesús Avendaño
·