Sign in

Blog · Finance metrics and formulas · Consumer goods

Direct-to-consumer LTV: repeat purchases and margin

Calculate customer contribution after refunds, product costs and fulfillment from an order export. Compare acquisition cohorts at the same age, with a worked example and spreadsheet formulas.

The short answerDirect to consumer LTV measures customer value across repeat purchases. For a practical cohort comparison, divide contribution after refunds, product costs, fulfillment, payment fees and return handling by the original acquired customers. Use the same observation window for every cohort. Call the result observed contribution through that age; it does not include purchases customers might make later.

Direct to consumer LTV is most useful when it measures the contribution customers generate across repeat purchases, after returns and fulfillment costs. Start with contribution per acquired customer through a fixed age, then compare cohorts at that same age. A 90-day result is observed value through day 90, not a claim about the customer's entire future.

1. Set the cohort and the cost boundary

Use the first noncanceled paid order to assign each customer to an acquisition cohort. Keep that original customer list even if an order is later refunded. For this example, repeat-purchase retention means the share of original customers with at least two orders that retain positive sales after refunds within the observation window.

Observed contribution per acquired customer = Contribution from the cohort's orders within the window / Original acquired customers

Order contribution = Sales after discounts - Refunds - Net product cost - Fulfillment - Payment fees - Return handling

This is contribution before acquisition spending and fixed overhead. The broader LTV formula guide explains other definitions; keep this cohort calculation separate from an estimate of future purchases.

Export customer ID, order ID, order date, sales after discounts, refunds and the associated costs. Link refunds to the original order, including refunds recorded after the window closes. The IRS explains that sales returns and allowances reduce gross sales when calculating net sales.

Product cost here is the cost consumed after crediting inventory actually recovered for resale. Fulfillment includes pick-and-pack and outbound shipping. Return handling includes return labels and inspection. Keep each cost in one column so outbound freight is not deducted twice. Exclude buyer sales tax collected for remittance and use one currency throughout.

2. Compute contribution on each order

Consider an illustrative US personal-care brand. January customers all first bought on January 1, 2026; April customers first bought on April 1. Their respective 90-day windows end March 31 and June 29. Both windows are complete, and associated refunds have been reconciled before this comparison.

Put these rows in a worksheet named Orders, with headers in row 1 and columns A through I in the order shown. Sales are after discounts and before refunds. All money columns are USD.

Customer Order date Sales (USD) Refunds (USD) Product cost (USD) Fulfillment (USD) Fees (USD) Return handling (USD) Contribution (USD)
J1 1/1/2026 80 0 28 9 3 0 40
J1 2/1/2026 75 0 26 9 3 0 37
J1 3/15/2026 85 20 25 10 3 4 23
J2 1/1/2026 100 0 35 10 4 0 51
J2 3/1/2026 90 0 31 10 3 0 46
J3 1/1/2026 60 0 20 8 2 0 30
A1 4/1/2026 80 0 28 9 3 0 40
A1 5/20/2026 80 0 28 12 3 0 37
A2 4/1/2026 100 40 24 10 4 6 16
A3 4/1/2026 60 0 20 8 2 0 30

In Google Sheets, contribution in I2 and net sales in an additional column J are:

=C2-D2-E2-F2-G2-H2
=C2-D2

Fill both down through row 11. Keep negative contribution: a costly return can consume value even when no sales remain.

3. Rebuild the customer and cohort totals

Create a worksheet named Customers with columns A through E below. First-order dates must come from full customer history, not just the current export. Otherwise an established customer can be mistaken for a new acquisition.

Customer First-order date Retained orders Contribution (USD) Repeat flag
J1 1/1/2026 3 100 1
J2 1/1/2026 2 97 1
J3 1/1/2026 1 30 0
A1 4/1/2026 2 77 1
A2 4/1/2026 1 16 0
A3 4/1/2026 1 30 0

Use these formulas in C2, D2 and E2, respectively, and fill down:

=COUNTIFS(Orders!$A$2:$A$11,A2,Orders!$B$2:$B$11,">="&B2,Orders!$B$2:$B$11,"<"&(B2+90),Orders!$J$2:$J$11,">0")
=SUMIFS(Orders!$I$2:$I$11,Orders!$A$2:$A$11,A2,Orders!$B$2:$B$11,">="&B2,Orders!$B$2:$B$11,"<"&(B2+90))
=--(C2>1)

COUNTIFS counts rows meeting every criterion, while SUMIFS adds the matching amounts. Dates must be actual date values. Expand every range together for a larger export. Covirage is not affiliated with Google Sheets.

For January, calculate contribution per original customer and repeat-purchase retention, respectively:

=SUM(D2:D4)/ROWS(A2:A4)
=SUM(E2:E4)/ROWS(A2:A4)

April uses rows 5 through 7 in the same formulas.

Cohort Original customers Contribution (USD) Contribution/customer (USD) Repeat customers Repeat-purchase retention
January 3 227 75.67 2 66.7%
April 3 123 41.00 1 33.3%

Round dollar averages to cents and percentages to one decimal place, only after calculating. January contributes $34.67 more per acquired customer over the same window. Its higher repeat-purchase retention gives the team a reason to investigate reorder behavior, product mix and campaign differences; this small illustration cannot establish causation.

4. Prove the result before using it

January's order rows reconcile as 490 - 20 - 165 - 56 - 18 - 4 = $227. April's reconcile as 320 - 40 - 100 - 39 - 12 - 6 = $123. The six customer contributions sum to $350, matching the ten order contributions.

In a real export, tie each input column to its source report and explain timing differences. The ledger-based LTV guide covers that reconciliation in more detail. Compare acquisition spending separately, on the same customer base, before interpreting an LTV-to-CAC ratio.

Where it goes wrong

  • Unequal ages. An older cohort has had more time to reorder. Use days since first purchase, not total sales to today's date.
  • Dropping nonreturners. Keep every original customer in the denominator, including refunded buyers.
  • Missing late returns. Attach refunds and return costs to their orders, and mark immature results as provisional.
  • Duplicate joins. Multiple fulfillment or refund records can repeat sales. Aggregate each source to order ID before combining it with orders.

Compare your own DTC cohorts in Covirage

Bring an order export with customer IDs, first-order dates, refunds and associated costs. Covirage maps the columns; its tools compute and check the figures, and the external AI model explains the result with every figure traced to its rows. Create a free Covirage account and bring a sample of your own data.

See Covirage for consumer goods brands for the industry context.

Questions people ask

Should DTC LTV use revenue or profit?

Revenue LTV measures spending, but contribution LTV is more useful for acquisition decisions. Subtract refunds, product costs and the variable costs of serving orders. State the cost boundary clearly so finance and marketing compare the same measure.

Do customers who never reorder stay in the denominator?

Yes. Divide by all originally acquired customers, including buyers who never return and customers whose purchases were later refunded. Dropping them measures the value of survivors and makes an acquisition cohort look more valuable than it was.

How long should a DTC LTV observation window be?

Choose a window that covers a useful purchasing cycle for your category, then compare cohorts only after each reaches that age. A short window is an early contribution measure. It cannot establish the value of purchases beyond the observation period.

Is repeat-purchase retention the same as subscription retention?

No. A repeat-purchase measure counts customers who place qualifying later orders within a stated window. A customer can be inactive temporarily without canceling anything. Define which orders qualify and keep that definition consistent across cohorts.