> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gocrux.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Pillar 02: Frequency

> Diagnosing changes in customer retention, repurchase rates and lifetime revenue using cohort analysis.

The Frequency pillar covers everything to do with how often customers come back (customer retention). CRM, email, SMS, retention, repurchase rate and LTV all live here. Along with anything that communicates to existing customers. If the question is about returning buyers rather than first-time buyers, you're in the right place.

Frequency analysis is fundamentally cohort-based. You're not asking "how is retention this week", you're asking "how is the cohort acquired in March performing six months on?". That distinction matters.

## The core formula

Order frequency is predominantly driven by two factors; how many customers make a second purchase (in the typical purchase timeframe) and the size of the subsequent active customer pool (i.e. customers continuing to purchase within the typical purchase period).

<Note>
  **`med_repurchase rate`** x `active_customer_base`
</Note>

Where both are filtered to the median repeat order time frame. Note - median is used to avoid outlier influence that comes with averaging.

## Retention versus re-purchase rate

There are two retention metrics that get used interchangeably but mean different things.

<Note>
  **`retention_rate`** = `SUM(active_customers) / SUM(cohort_size)`

  The percentage of a cohort still actively buying at a given point in time.
</Note>

<Note>
  **`repurchase_rate`** = `SUM(cumulative_repeat_customers) / SUM(cohort_size)`

  The percentage of a cohort that has come back at least once by a given point in time.
</Note>

The difference: retention is a snapshot, repurchase is cumulative. A customer who bought once after acquisition contributes to repurchase rate forever, but only contributes to retention rate during the period they were active.

Converting customers to their second order is typically always the biggest hurdle with retention. Thats why we recommend looking at this in isolation with `repurchase_rate` constrained to the median order timeframe (`med_repurchase_rate`). i.e. if customers are taking longer to make their second order it effects your payback so you need to ensure you're accounting for that in the metric you're tracking.

Use `retention_rate` alongside `months_since` to understand overall cohort behaviour and analyse the performance of your active\_customer\_base.

For lifetime revenue, the right metric is:

<Note>
  **Average revenue per customer** = `SUM(cumulative_shopify_total_sales) / SUM(cohort_size)`

  The total revenue generated by a cohort, divided by its starting size. This is your LTV at a given months\_since point.
</Note>

## The metric tree

<Frame>
  <img src="https://mintcdn.com/crux/4Gi8LgA3iN_zkUdl/analysis-framework/images/metric-tree-frequency.svg?fit=max&auto=format&n=4Gi8LgA3iN_zkUdl&q=85&s=9dda62ded07aac01b25eb5ba3d432e73" alt="Frequency metric tree showing retention rate, repurchase rate and average revenue per customer with cohort dimensions" width="1100" height="640" data-path="analysis-framework/images/metric-tree-frequency.svg" />
</Frame>

## The role of months\_since

Cohort metrics only mean something at a specific time horizon. "Retention rate" without a time period is meaningless. "12-month retention" tells you something. Always pair retention or repurchase metrics with a `months_since` filter or grouping.

Note - the headline metrics `med_repurchase_rate` and `active_customer_base` are already filtered to the median time between orders so use `months_since` with the standard `repurchase_rate` and `retention_rate` to understand the raw undlrying behaviour of cohorts.

A few rules to keep cohort analysis honest:

* **Let cohorts mature.** If you're analysing 6-month LTV, the most recent cohort you can include is the one acquired six months ago. Anything more recent has incomplete data and will pull the average down artificially (note by default we don't populate immature cohorts in the LTV & Retention reporting).
* **Use leading indicators for fresh cohorts.** `repeat_orders` (from `channel_reporting`) is a useful early signal or `median_repurchase_rate`. If repeat order volume is dropping now, retention will drop later.
* **Pick a fixed horizon and stick with it.** Switching between 90-day and 180-day retention mid-analysis is a common way to confuse yourself.

## Key drivers and dimensions

Retention is rarely uniform across a customer base. The interesting questions are about which segments retain better than others.

<Tabs>
  <Tab title="Subscription vs one-off">
    For brands with both, this is usually the single biggest driver of retention and LTV. Subscription customers retain dramatically better. A drop in the percentage of new customers acquired on subscription is a leading indicator of falling retention later.

    This also has a big influencer on your `active_customer_base` i.e. the number of customers are still active (bought within median re-order timeframe) after their second purchase.

    Slice by `cohort_order_type` to compare retention curves between subscription and one-off acquisitions.
  </Tab>

  <Tab title="Discount usage at acquisition">
    Customers acquired with a discount code typically retain worse than those acquired at full price. The size of the gap varies by brand and discount depth, but the direction is consistent.

    If your overall retention is dropping, check whether the proportion of discounted acquisitions has risen.
  </Tab>

  <Tab title="Product mix at acquisition">
    The products in a customer's first order shape their long-term behaviour. Trial sizes, starter packs and bundles often have very different retention profiles to single-product orders.

    Slice by `cohort_product_categories` to see which acquisition baskets produce the best long-term customers.
  </Tab>

  <Tab title="Acquisition channel">
    Channels acquire different customer types. A customer who came through a discount-led affiliate doesn't retain like a customer who came through organic search. Slice by `cohort_channel` to find this.

    The interesting comparison is usually CAC against LTV by channel, not just one or the other.
  </Tab>

  <Tab title="Days since previous order">
    The gap between a customer's first and second order tells you how engaged they are. Use the **median**, not the mean, here. A small number of customers with very long gaps will distort an average and make the metric useless.

    A growing median gap is a leading indicator of retention drop.
  </Tab>
</Tabs>

## Worked example: drop in 6-month retention

The 6-month retention of cohorts acquired six months ago has fallen from 28% to 22%.

<Steps>
  <Step title="Confirm cohort maturity">
    Check the cohort window you're using has actually had six full months to mature. If you're including a cohort acquired four months ago in a 6-month retention metric, you'll get misleading results. Filter cohorts to those acquired between six and nine months ago.
  </Step>

  <Step title="Slice by acquisition channel">
    Retention is steady on Paid Search and Organic. It's dropped sharply on Paid Meta. The Paid Meta cohort is the driver.
  </Step>

  <Step title="Slice by cohort_order_type">
    Within Paid Meta, the proportion of subscription acquisitions has fallen from 40% to 22%. The remaining one-off customers from this channel retain at roughly 15%, which drags the blended figure down.
  </Step>

  <Step title="Find the cause">
    Cross-reference with the Meta strategy in that period. The team shifted from a subscription-focused offer to a one-off starter pack to test acquisition cost. CAC came down, but the lower-quality customer mix is now showing up in retention six months later.
  </Step>

  <Step title="Recommend">
    Reinstate the subscription offer for prospecting audiences. Track new\_user subscription % weekly as a leading indicator. Calculate the LTV-to-CAC ratio for both offer types before deciding the long-term mix.
  </Step>
</Steps>

The cause was a decision made six months ago. Without cohort-level slicing by acquisition channel and order type, you'd see a generic "retention is down" headline and have nothing actionable.

## Worked example: repeat orders dropping faster than retention metrics suggest

Repeat orders in `channel_reporting` are down 15% week-on-week, but cohort retention metrics still look healthy.

<Steps>
  <Step title="Recognise the time mismatch">
    Repeat\_orders is a leading indicator. It moves now. Retention curves move with a lag because they're tied to mature cohorts. The two won't agree in real time, that's expected.
  </Step>

  <Step title="Slice repeat orders by channel">
    The drop is concentrated in email and SMS. Both are down 25-30%. Retargeting and direct are flat.
  </Step>

  <Step title="Check campaign activity">
    The CRM team paused two automated flows during a platform migration. The drop in repeat orders aligns exactly with the pause.
  </Step>

  <Step title="Recommend">
    Reactivate the flows once migration completes. Build a flow status check into the CRM team's weekly review. Estimate the revenue cost of the outage to inform future migration planning.
  </Step>
</Steps>

This is why `repeat_orders` matters as a leading indicator. By the time it shows up in cohort retention curves, you've lost months of compounding revenue.

## Where this data lives

The primary mart for cohort analysis is `ltv_retention`. It contains `cohort_size`, `active_customers`, `cumulative_repeat_customers`, `cumulative_shopify_total_sales`, sliced by `cohort_month`, `months_since`, `cohort_channel`, `cohort_order_type` and `cohort_product_categories`.

For real-time signals, `channel_reporting` exposes `repeat_orders` and `repeat_customer_cr`.

The relevant dashboards:

* [LTV & Retention](/dashboard-suite/ltv_retention) for cohort-level retention curves and lifetime revenue
* [Customer Deep Dive](/dashboard-suite/customer_deep_dive) for segment-level customer behaviour
* [Channel Performance](/dashboard-suite/channel_performance) for `repeat_orders` and channel mix

## Common mistakes

<AccordionGroup>
  <Accordion title="Reading retention metrics on immature cohorts">
    A cohort acquired three months ago cannot have a 6-month retention rate. If you include it, the metric calculation will treat the missing data as zero and pull the average down. Always check cohort maturity before drawing conclusions.
  </Accordion>

  <Accordion title="Confusing retention rate with repurchase rate">
    These move differently and answer different questions. Retention is "are they still active right now?". Repurchase is "have they come back at least once by now?". Pick the one that fits your question.
  </Accordion>

  <Accordion title="Using mean instead of median for days_since_previous_order">
    A handful of customers who reorder after two years will distort the mean badly. Median is the right metric here. It tells you what a typical engaged repeat customer actually does.
  </Accordion>

  <Accordion title="Treating retention as channel-agnostic">
    Blended retention numbers hide where the issues actually are. Different channels acquire different customer types. Always slice by acquisition channel before drawing conclusions about retention strategy.
  </Accordion>

  <Accordion title="Reading too much into a single cohort">
    Month-on-month cohort comparisons are noisy, especially for smaller brands. Look for trends across three to six cohorts before concluding something has structurally changed.
  </Accordion>
</AccordionGroup>
