Lifetimely: Time between orders

Time between orders

At a glance

Time between orders shows how completed repeat purchases are distributed by the number of days since the customer's previous purchase, together with an average interval. Use it to choose evidence-based timing for replenishment, lifecycle, and win-back messages, and to see whether a single average hides several purchasing cycles.

Availability and data freshness

Availability and prerequisites: The report route sends either Shopify or Amazon store context to the reporting API, but the current Customer behaviour navigation omits this report; open it by direct path as described below. Shopify-only marketing, tag, channel, subscription, and survey filters are hidden for Amazon stores.

Freshness and history: With no remembered report range, the initial request covers the previous 365 days through yesterday in the store timezone. A range selected on this or another report can replace that default. The frontend caches each distinct request for 60 seconds and does not refresh it merely because the browser window regains focus.

On this page

Open the report

The current navigation does not list Time between orders. While signed in to Lifetimely, open the report directly at /customer_behaviour/time_between_orders.

Use the report controls

The page initially uses All repeat orders and 5 days granularity.

  • Time Period: Select custom dates or Last 6 months, Last 12 months, This year, or a Since 2020 through Since 2025 preset. Presets end yesterday in the store timezone. The selected range is stored locally and reused as the main time period on other reports; until a range has been stored, this report uses the previous-365-days default described above.
  • Order frequency: Choose 1st to 2nd order, 2nd to 3rd order, 3rd to 4th order, or All repeat orders. The numbered options request one specific transition. All repeat orders requests every qualifying repeat transition, so one customer can contribute more than one interval.
  • Granularity: Choose 1 day, 5 days, 10 days, or 30 days. This changes how the API groups elapsed days into chart buckets; it does not change the order-frequency transition requested.
  • Filters: Narrow the population by product, SKU, product type, vendor, geography, and first-order value or discount. Shopify stores can additionally filter by marketing touch, Klaviyo list or segment, customer or order tag, product tag, sales channel, subscription platform, discount code, and AMP or Fairing survey responses. Applicable order filters let you choose First Order, Any Order, or All Orders. Saved cohorts can be applied from the filter panel.

Your store-wide prefilters are included automatically in every request. They can exclude configured order statuses, zero-value, POS, draft, or cancelled orders and selected channels or tags. Currency does not appear in the displayed duration or percentage metrics.

Do not assume that a product filter means the customer repurchased that product specifically.

Other features on this page

  • Average time between orders card: Shows the API-provided average to one decimal place. Its information tooltip identifies the selected range by month and year. When the API returns a non-zero comparison value, an increase is red with an up arrow and a decrease is green with a down arrow because a shorter interval is treated as favorable.
  • Distribution chart: Blue columns show the percentage in each returned interval bucket; the purple line shows the cumulative percentage through that bucket. Select a legend item to hide or reveal a series, and hover a bucket to see its repurchase percentage.
  • Chart export: Use the chart menu to print it or download PNG, JPEG, or SVG. The image title includes the selected order-frequency transition.
  • CSV export: Downloads the current order-frequency, granularity, date, prefilter, and complex-filter result. It contains Time Lag, Repurchases, and Percentage of Repurchases, ordered by the numeric part of the bucket label. Percentages use two decimals. It does not include the average card or cumulative percentage, and the frontend removes any API row labelled first order.
  • Ask AI: When shown, Ask AI receives the active dates, order frequency, granularity, active-filter count, and returned report data as context.

The page does not provide a comparison selector, customer/order table, or order-level drill-down.

Data contract: what goes into each number

The current frontend sends the store identifier, dates, order frequency, granularity, store-wide prefilters, store settings, platform context, and applied complex filters to the Insights reporting API. The API returns one average, one comparison value, and bucket labels with counts.

Where the data comes from

Report section Verified source and processing
Average and comparison card Values returned by the Time between orders Insights endpoint for the active request. The frontend only formats the average and comparison to one decimal.
Chart columns and cumulative line Commerce-order interval buckets returned by the same endpoint. The frontend removes first order, sorts the remaining labels by their first number, and calculates percentages from their returned counts.
CSV The same endpoint is fetched again with the active controls; the frontend exports the filtered and sorted bucket counts rather than an order-level extract.

Grain and weighting

The intended grain is one completed interval between two qualifying orders by the same customer. 1st to 2nd order can contribute at most the first repeat transition for a customer, while All repeat orders can contribute multiple transitions from a frequent buyer. Therefore, the chart is a distribution of intervals or repurchases—not a distribution of unique customers—and frequent buyers carry more weight in All repeat orders.

Metrics and calculations

Field Definition
Average time between orders API-provided average interval in days for the active request, displayed to one decimal. A missing value is displayed as 0.0 days, which is not distinguishable in the UI from a genuine zero-day average.
Comparison % API-provided comparison value, displayed to one decimal with a percent sign when non-zero. Positive is red and negative is green.
Repurchases Returned dayCount for a displayed bucket after the frontend excludes first order. Despite the API field name, the chart and CSV present it as a count of repurchases.
% of repeat orders bucket repurchases / repurchases across all displayed buckets × 100, rounded to one decimal on the chart and two decimals in CSV. If the displayed total is zero, the percentage is 0.
Cumulative % of repeat orders repurchases from the first displayed bucket through the current bucket / repurchases across all displayed buckets × 100, rounded to one decimal.
Days between orders API-provided bucket label on the x-axis.

Caution: Bucketing can make the chart easier to read but less precise. Do not treat a 5- or 30-day bucket label as an exact repurchase day until its boundaries have been confirmed.

Example: choose a message time

Suppose the displayed buckets contain 20, 30, and 50 repurchases, for 100 displayed intervals total. The columns are 20 / 100 = 20.0%, 30 / 100 = 30.0%, and 50 / 100 = 50.0%; the cumulative line is 20.0%, 50.0%, and 100.0%.

To choose a message time:

  1. Select the order transition that matches the campaign—for example, 1st to 2nd order for a first-repurchase flow.
  2. Start with 5 days granularity, then use 1 day when you need more precise timing or 10/30 days when the distribution is sparse.
  3. Read the cumulative line to find the returned bucket by which the desired share of completed repurchases has occurred.
  4. Place a replenishment reminder before that interval and a win-back message after it, allowing for fulfillment and product-consumption time.
  5. Re-run the report for relevant product or customer segments. Confirm the filter semantics before treating a product-filtered result as product-specific replenishment behavior.

Use both the distribution and average: a long tail can pull the average later even when most repeat orders cluster earlier.

Resolve differences

Time between orders does not match Repurchase Rate

Repurchase Rate divides repurchasing customers by an anchored customer cohort within fixed 30–365-day windows. Time between orders divides completed repeat-order intervals among elapsed-day buckets. All repeat orders can count one customer several times, and customers without a completed next order contribute no interval. The two reports therefore should not have matching denominators or percentages.

Time between orders does not match Repurchase Rate Breakdown

Repurchase Rate Breakdown groups customer cohorts by a selected dimension and reports a Time Between Orders column for each row. This report instead groups completed intervals by elapsed-day bucket and can include multiple intervals per customer. Dimension overlap, different order-frequency scope, filters, date anchoring, and rounding can all produce different averages.

Results look unexpectedly fast or sparse

  1. Confirm Order frequency, Granularity, Time Period, and the active filter count.
  2. Check the store-wide prefilters, which are applied even though they are not edited on this page.
  3. Remember that customers whose next order has not yet occurred are absent. Recent date ranges can therefore omit longer future intervals and make completed repurchases look faster.
  4. Use a wider date range or coarser granularity when individual buckets contain few repurchases.
  5. Export CSV to inspect the bucket counts used by the chart; it is not an order-level reconciliation file.
  6. If an exact order-level reconciliation is required, ask the report owner to verify the endpoint's date, identity, status, and bucket rules because the current page has no interval drill-down.

Next actions

Did this answer your question? Thanks for the feedback There was a problem submitting your feedback. Please try again later.

Still need help? Contact Us Contact Us