Skip to content

Cohorts

Performance → Cohorts shows a retention matrix and cumulative LTV curves from your retained Shopify order history. The page selects the latest 24 cohort calendar months; each cohort keeps all its later observations. Shopify history backfill reaches store inception, without the ad platforms’ 24-month cap.

A cohort contains customers whose first eligible order falls in that calendar month in your Brand’s reporting timezone. A January buyer returning in March stays in January’s cohort. Customers are joined across selected stores by email hash; without an email hash, customer IDs stay local to their store.

Choose a dimension and value: all customers, first product, first-order discount code, or first-order country. The value selector offers the top 25 values by customer count. Several products in the first order put the customer into each product cohort: product cohorts must not be added together. Product edits, refund-preserved membership and your product identity settings apply. An empty or excluded basket has no product row. Several discount codes form one sorted, uppercase value such as A+B; no code is a separate value. Country uses shipping, then billing, then ZZ for unknown. Acquisition channel is not available yet.

The matrix switches between retention, cumulative LTV, active customers and orders. Retention is ordering customers divided by original cohort size; Month 0 is 100%. Curves show cumulative LTV by month offset. Younger cohorts stop at the observation boundary; * marks the current partial month.

LTV is cumulative revenue per original cohort customer, including the first order, net of discounts and refunds under your Brand Revenue Basis and channel policy. Cancelled and VOIDED orders remain members with their current value. Money is shown in Base currency.

Refunds reduce LTV in the month they occur. A €100 purchase in Month 0, fully refunded in Month 3, yields [100, 100, 100, 0]. The series restores retained refunds to the order’s current value before subtracting them by date, so refunds are not counted twice. A refund dated before its parent order month stays in acquisition Month 0. When FX changes, an explicit refund-month reconciliation adjustment bridges event-date FX to the current order’s purchase-date valuation. Later refunds do not rewrite earlier cells when refund history is complete; policy changes, order edits and newly recovered history can change the reconstruction.

Totals reconcile to Performance net revenue over full matched history only. They do not equal independently queried historical store_revenue_net windows. Reconciliation metadata uses unique eligible customers before dimension or date filters; add excluded populations back to compare to the full retained-order population. Make sure the selected accounts and their window coverage match. If Performance excludes a backfilling account from that full window, the page shows a reconciliation warning naming the account; it does not claim equality.

The coverage strip reports unidentified orders, unknown customer history, accounts awaiting full-history verification, and missing refund amounts. Customers are eligible when the account’s current Shopify coverage reaches 2000-01-01, or retained order counts cover the synced lifetime customer order count. Incomplete first-order history is excluded, not treated as a new customer. One uncertain store makes a shared customer’s acquisition uncertain.

If retained refund rows cannot explain an order’s total refunded amount, its current value remains in its purchase month. That order and its missing refund amount are disclosed; no refund date is invented. Figures refresh with syncs and the ten-minute table cache. These are observed values, not predictive LTV.