Home Blog Resume Contact Ask AI About Me
Home/Blog/How to Size a Klaviyo Engagement Window by Re…
How toKlaviyoKlaviyoSegmentationRetention

How to Size a Klaviyo Engagement Window by Repurchase

9 min readBy Miloš Mitrović

Copying a 30, 60 or 90 day engaged segment from a template is a guess. The window that actually protects your deliverability and your revenue is a function of how often your customers buy. The one line answer: set the window to roughly 1.5 times your median days between a customer's first and second order, then raise it to whatever floor your send frequency demands. A store whose customers reorder every 45 days should not treat someone as unengaged at day 30, because that person is still mid cycle and about to purchase.

Key takeaways

  • Size the window to about 1.5x your median repurchase interval, then take the larger of that number and your send frequency floor.
  • Klaviyo ships default 30, 60 and 90 day engaged segments defined as opened or clicked an email at least once, and they stay empty until you send your first email.
  • Klaviyo's Average Time Between Orders is an account level predictive metric that needs at least 500 customers with orders, 180 days of history and some customers with 3 or more orders before it appears.
  • Send cadence sets a hard floor: Klaviyo's schedule guidance puts a daily sender's most engaged track at a 30 day window and a monthly sender's at 275 days.
  • The cost of getting this wrong is asymmetric. Too tight and you suppress buyers mid cycle; too loose and you mail unengaged addresses that damage the sending domain.

What you need

  • A Klaviyo account with an ecommerce integration (Shopify or equivalent) syncing the Placed Order metric.
  • Permission to create and edit segments (a Manager or Admin role).
  • Order level history to compute the repurchase interval, either through a Shopify orders export or the Admin API, or Klaviyo predictive analytics if your account qualifies.
  • A view of your current send cadence per list, so you know the deliverability floor you cannot go below.

How to size and build the engagement window

  1. Pull the repurchase interval from your order data. The reliable source of truth is order history, not a model. Export your orders to CSV from the Shopify admin, or query the Admin GraphQL orders query, which returns each order's createdAt timestamp and lets you filter with processed_at. Pull enough history to cover at least two full purchase cycles.
    {
      orders(first: 250, query: "processed_at:>=2025-01-01", sortKey: PROCESSED_AT) {
        edges { node { createdAt email customer { numberOfOrders } } }
      }
    }
  2. Compute the median gap between the first and second order. Group orders by customer, sort each customer's orders by createdAt, and take the difference in days between order one and order two. Use only customers with 2 or more orders, otherwise one time buyers drag the number toward infinity. Take the median, not the mean, because a handful of very long gaps will distort an average. In a spreadsheet, once you have one row per customer with both dates:
    days_to_second = second_order_date - first_order_date
    window_base    = MEDIAN(days_to_second) * 1.5
    This first-to-second gap is the number that matters most for lifecycle timing, and it is the same input that should drive your replenishment timing decisions.
  3. Cross-check with Klaviyo's Average Time Between Orders. If your account qualifies, Klaviyo exposes Average Time Between Orders in predictive analytics, defined as the average number of days between each of a customer's orders. Treat it as a sanity check on your Shopify median, not the primary input. The metric is account wide and averages best across many customers, so do not trust it for any single profile. If it disagrees with your order level median by more than a few days, trust the raw order data.
  4. Set the send frequency floor. Klaviyo's sending schedule guidance ties the engaged window to cadence: a daily sender's most engaged track is 30 days, while weekly senders sit at 180 days and monthly senders at 275. This exists to keep daily open rates above 15 percent. Your window can never drop below this floor, whatever the repurchase math says.
  5. Choose the window. Take the larger of the two numbers: window = MAX(send_frequency_floor, round(median_interval * 1.5)). Round to the nearest window Klaviyo already supports (30, 60, 90, 180, 275) so the segment stays legible to the rest of the team.
  6. Build the segment in Klaviyo. Go to Audience, then Lists & segments, then Create segment. Define it as: What someone has done, Opened Email, at least once, in the last N days, then add an OR condition for Clicked Email, at least once, in the last N days, using your chosen N. Clicks are a stronger signal than opens now that privacy features inflate open counts, so if you want a tighter definition, drop the Opened Email leg and keep Clicked Email only. Save it with the window in the name, for example Engaged 90d (opened or clicked).

Choosing between the standard windows

The default windows are not interchangeable. Each one fits a different combination of send cadence and repurchase cycle.

WindowFits this cadenceFits this repurchase cycleMain risk if misapplied
30 dayDaily sendersConsumables reordered under ~20 daysSuppresses slower buyers still in cycle
60 daySeveral sends per weekMedian gap around 30 to 40 daysSlight over-mailing of the tail
90 dayWeekly to twice weeklyMedian gap around 45 to 60 daysIncludes some genuinely lapsed contacts
180 dayWeekly sendersMedian gap around 90 to 120 daysHigher share of unengaged, watch open rate
275 dayMonthly sendersConsidered or seasonal purchasesOnly safe at low frequency

Why the repurchase cycle, not the calendar, sets the window

An engaged segment exists to answer one question: who is safe to mail without hurting the domain. A copied 30 day window answers that question with a number pulled from a help article, not from your customers. If your median customer reorders every 50 days, a 30 day engaged segment quietly drops every customer who is between purchases and has not happened to open a campaign in the last month. Those are exactly the people a replenishment or browse flow is trying to reach. Aligning the window to the cycle keeps them in the mailable population until they are genuinely lapsed. Sending only to people who are truly engaged is also how you protect reputation, since a single unengaged segment can drag down your whole sending domain.

Troubleshooting

  • The engaged segment is empty. Default engaged segments, per Klaviyo's default lists and segments reference, stay empty until you send your first email. If you have been sending and it is still empty, check that the Opened or Clicked Email metrics are actually recording, which requires open and click tracking enabled on your sends.
  • Average Time Between Orders is blank. The predictive section requires at least 500 customers with a non cancelled, non zero order, 180 days of history and orders in the last 30 days. If you are below any threshold, skip step 3 entirely and rely on the Shopify median. The same reliability limits are why Klaviyo's predicted values can be wrong for an individual store.
  • The median looks implausibly long. You are almost certainly including one time buyers, whose second order never arrives. Filter to customers with 2 or more orders before computing the gap.
  • The computed window is below your send floor. The floor wins. A 20 day repurchase cycle does not license a 20 day engaged window if you mail daily; hold at the 30 day track and let cadence, not the cycle, govern.

How to verify it worked

Three checks confirm the window is sized correctly rather than merely changed.

  1. Segment size delta. Note the member count of the old and new engaged segments. A window that moved from a copied default to a cycle aligned number should change the count in the direction you expect: larger if you widened to match a longer cycle, smaller if you tightened.
  2. Coverage of buyers in cycle. Build a temporary segment of customers whose Expected Date of Next Order falls within the next window length. A correctly sized engaged segment should contain nearly all of them. If a large share sit outside it, your window is too tight and is excluding people about to buy.
  3. Deliverability holds. After two or three sends to the new segment, confirm daily open rates stay above the 15 percent line from Klaviyo's schedule guidance and that spam complaint rate stays under 0.1 percent. If open rate falls, the window is too loose for your cadence and should step back one level.

Sources

M
Miloš Mitrović
Revenue Operations & AI Automation

Have a question or a project?

Whether it is about this post or a system you want built, I'm happy to talk.

Get in touch

404

Post not found. It may have been moved or the link is incorrect.

← Back to the blog
Ask AI About Me
Clicking an assistant copies the prompt and opens it: ready to run in ChatGPT, Perplexity, and Grok; in Claude, Gemini, or Copilot press Ctrl+V (Cmd+V on Mac) to paste. Use Copy prompt for any other AI. The assistant reads my site, so it needs web access.
Summarize with AI
ChatGPT, Perplexity, and Grok open with the prompt ready to run. Claude, Gemini, and Copilot open a chat with the prompt copied; press Ctrl+V (Cmd+V on Mac) to paste. The full text is included, so it works even without web access.