Customers and retention

How long do customers take to order again in WooCommerce?

WooCommerce doesn't report time between orders, so you calculate it from order dates. The most reliable way is an SQL query on the Analytics table wc_order_stats that measures the days between each customer's consecutive orders. Without database access, export orders from Analytics › Orders, sort by customer and date, and work out the gaps in a spreadsheet.

This guide covers both methods, why the first-to-second order gap matters most, and how to use the number.

Why time between orders matters

The gap between orders (sometimes called the purchase cycle or reorder interval) tells you three practical things:

  • When to follow up. A reminder email sent just before most customers would reorder works better than one sent at a random time.
  • When a customer is lapsed. If regulars reorder every 35 days, someone at 120 days has probably gone. That's the basis for defining a lapsed customer.
  • Whether loyalty is changing. If gaps get longer over the year, customers are buying less often even if they haven't left.

The free way: a spreadsheet from your orders

You need a list of orders with two things on each row: who placed it and when. The Download button in Analytics › Orders exports the orders for your date range as a CSV; open it and check which customer column your version includes. A name is a weak key (two customers can share one), so an order export that includes the billing email is more reliable if you have one.

  1. Export your orders for a long period, ideally a year or more, so repeat orders have time to show up.
  2. In a spreadsheet, sort by customer, then by order date.
  3. In a new column, for each row where the customer matches the row above, subtract the previous order date from this one. That's the gap in days.
  4. Take the median of that column for a typical gap.
  5. Filter to each customer's second order only (the first row with a gap) and take the median again. That's your first-to-second order gap.

For a quick sense without a spreadsheet, the Customers report helps a little: customers with 2 or more orders and a recent Last active date are your active regulars, but the report doesn't show their order dates.

For developers: time between orders in SQL

The Analytics table wc_order_stats has one row per order with customer_id and date_created, and works with HPOS or posts storage. These queries use window functions, which need MySQL 8.0+ or MariaDB 10.2+.

Average gap between consecutive orders, across all repeat customers:

SELECT COUNT(*) AS gaps,
       ROUND(AVG(DATEDIFF(date_created, prev_order)), 1) AS avg_days_between_orders
FROM (
  SELECT customer_id,
         date_created,
         LAG(date_created) OVER (PARTITION BY customer_id ORDER BY date_created) AS prev_order
  FROM wp_wc_order_stats
  WHERE parent_id = 0
    AND status IN ('wc-completed', 'wc-processing')
) ordered
WHERE prev_order IS NOT NULL;

The gap between first and second orders, grouped into buckets so you can see the shape rather than one average:

SELECT CASE
         WHEN days <= 30 THEN '0-30 days'
         WHEN days <= 60 THEN '31-60 days'
         WHEN days <= 90 THEN '61-90 days'
         WHEN days <= 180 THEN '91-180 days'
         ELSE 'over 180 days'
       END AS gap,
       COUNT(*) AS customers
FROM (
  SELECT DATEDIFF(date_created, prev_order) AS days
  FROM (
    SELECT customer_id,
           date_created,
           LAG(date_created) OVER (PARTITION BY customer_id ORDER BY date_created) AS prev_order,
           ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY date_created) AS n
    FROM wp_wc_order_stats
    WHERE parent_id = 0
      AND status IN ('wc-completed', 'wc-processing')
  ) ordered
  WHERE n = 2
) second_orders
GROUP BY gap
ORDER BY MIN(days);

parent_id = 0 leaves out refund rows. Match the status list to the statuses your Analytics counts, and change wp_ if your prefix differs. The bucket with the most customers is your typical first-to-second gap; the median falls wherever the running total passes half.

A worked example: reading the gap

Say you sell loose-leaf tea, and the bucketed query returns this for customers' first-to-second order gap:

Gap Customers
0–30 days 96
31–60 days 182
61–90 days 74
91–180 days 41
Over 180 days 27

That's 420 customers who placed a second order. The halfway point is customer 210, which falls in the 31–60 day bucket (96 + 182 = 278 passes 210). So the typical customer reorders between one and two months after their first order.

Three decisions follow from that. A follow-up email around day 30 reaches customers just before most of them reorder. Someone with no second order by day 90 is already in the slowest third and needs a stronger nudge. And a regular with no order in 150 days or more (well past the typical gap) is a reasonable definition of lapsed for this store.

What can throw the number off

  • Split orders. A customer who places two orders minutes apart (forgot an item) creates a gap of zero days. Consider ignoring gaps under a day.
  • Guests with several emails. Orders that belong to one person but different emails don't link up, so their gaps are missing.
  • Recent customers. Customers who bought for the first time last month can't have a long gap yet, so a fast-growing store's gaps look shorter than they will be.
  • Seasonal buying. Gift shops see many gaps of almost exactly a year. That's normal, not a problem.

What Askshelf can and can't tell you

Askshelf doesn't measure time between orders. It doesn't build per-customer order histories or read customer details, by design, so it can't follow one customer from order to order. The customer analytics use case page sets out what it covers.

Once you know your typical gap, though, it can tell you how many regulars have gone well past it:

Askshelfexample answer

How many customers with at least 3 orders haven't ordered in the last 90 days?

58 customers have placed 3 or more orders but none since 10 August 2026. If your regulars usually reorder within 40 days, these are well overdue.Lapsed customers, at least 3 orders, none since 10 August 2026
An example on a demo store. In your store, the numbers come from your own orders.

It's a count with no names. To see who they are, use the filters in how to find customers who stopped buying.

How to use your reorder gap

  • Time your follow-up emails to land just before the typical first-to-second gap.
  • Set your lapsed cutoff at two to three times the typical gap between orders.
  • Compare by first product. Customers who start with a consumable usually reorder sooner. The guide on first-purchase analysis shows how to split customers this way.
  • Watch it alongside your repeat purchase rate. Shorter gaps and a rising repeat rate together mean loyalty is improving.

For the rest of the customer metrics, see the WooCommerce customer analytics guide.

Common questions

Does WooCommerce show the average time between orders?

No. Neither WooCommerce Analytics nor the Customers report shows time between orders. You calculate it from order dates in an export or with an SQL query on the Analytics tables.

Should I use the average or the median gap?

The median is usually better. A few customers who come back after two years pull the average up a lot, while the median shows what a typical customer does.

Why measure the gap between the first and second order separately?

Because that's where most customers drop off. The first-to-second gap tells you when to send a follow-up to new customers, while later gaps describe your regulars.

See how Askshelf handles this: Customer analytics for WooCommerce