Direct answer: how to measure repeat purchase rate year over year
Measure repeat purchase rate year over year by grouping customers into comparable first-purchase cohorts, giving each cohort the same amount of time to place another order, counting customers who placed at least one qualifying repeat order, and comparing that rate against the same cohort period from the prior year.
The core formula is:
Repeat purchase rate = customers with 2 or more qualifying orders / customers with at least 1 qualifying order in the cohort
For a year-over-year comparison, do not just ask, “How many customers bought more than once in 2026 compared with 2025?” Ask a cleaner operator question:
Of customers whose first order happened in the same period last year and this year, what percentage placed a second qualifying order within the same repeat-purchase window?
For example, compare customers acquired from January through March 2025 with customers acquired from January through March 2026. Then measure whether each customer placed a second qualifying order within 90 days, 180 days, or 365 days. Both cohorts need the same observation window, or the newer cohort will look worse simply because customers have had less time to buy again.
The best report is usually not a single dashboard tile. The most reliable source is a customer-level order export or cohort report that includes customer ID, first order date, repeat order dates, order status, refunds, products purchased, discounts, subscription status, and revenue. A dashboard can show the metric, but the export explains why the metric changed.
If you need a fast answer, start with this operator version:
- Export all orders for the two periods you want to compare.
- Assign each customer to a first-purchase cohort based on their first order date.
- Choose a repeat window, such as 90, 180, or 365 days.
- Count customers who placed at least one qualifying second order inside that window.
- Exclude canceled orders and decide how to handle refunded orders before calculating the rate.
- Compare the current cohort against the prior-year cohort with the same start months and the same repeat window.
Why a simple calendar-year repeat purchase rate can mislead you
A calendar-year repeat purchase rate sounds simple: take all customers who bought in a year, count how many placed more than one order, and compare that number with last year. That can be useful as a rough health check, but it often creates false signals when you are trying to diagnose retention.
The problem is that a calendar year mixes new customers, returning customers, old loyal customers, subscription customers, holiday buyers, and customers who have had very different amounts of time to buy again. If you compare that blended number year over year, you may be measuring customer age, seasonality, or acquisition mix rather than retention improvement.
| Approach | What it counts | Why it can mislead | Better operator use |
|---|---|---|---|
| Before: calendar-year repeat rate | All customers who bought during the year and had 2 or more orders | Older customers have had more time to repeat, newer customers have had less time, and seasonal buying patterns get blended together | Use only as a high-level trend indicator |
| After: first-purchase cohort repeat rate | Customers whose first order happened in a defined cohort period and who repeated within the same window | Controls for customer age and makes year-over-year comparison cleaner | Use for retention diagnosis and lifecycle planning |
There are five common ways the calendar-year version gets distorted.
Maturity bias
A customer acquired in January has much more time to place a second order than a customer acquired in November. If you include both in one annual repeat rate, the result does not tell you whether retention is better. It tells you that some customers had more time to repeat.
Seasonality bias
Holiday buyers, gift buyers, back-to-school shoppers, and seasonal replenishment cycles can all behave differently. Comparing a full-year blended rate can hide the fact that one seasonal cohort improved while another declined.
Acquisition mix changes
If last year’s customers came mostly from branded search, email referrals, or organic traffic, and this year’s customers came from a broader paid social prospecting push, repeat purchase behavior may change because customer intent changed.
Subscription and one-time order distortion
Subscription orders can inflate repeat purchase rate if they are mixed with one-time purchase behavior. That may be fine if subscriptions are a core part of your business, but you should also view repeat rate with subscriptions separated or excluded.
Holiday cohort distortion
Customers acquired during gifting periods may have low personal repeat intent. If your new-customer mix shifts heavily toward gifting, your repeat purchase rate may decline even if your core replenishment or everyday-use cohorts are healthy.
Key definitions for cleaner reporting:
- Repeat purchase window: the number of days after the first order in which a second qualifying order must happen, such as 90, 180, or 365 days.
- Mature cohort: a customer cohort that has already had the full repeat-purchase window available.
- First-purchase cohort: customers grouped by the date of their first order, not by any order they placed later.
- Qualifying repeat order: a second or later order that meets your rules for inclusion, such as paid, fulfilled, not canceled, and not fully refunded.
Repeat Purchase Rate YoY Audit Map: the reports and fields you need
To measure repeat purchase rate year over year, build the report like an audit map instead of a single metric export. The goal is not only to calculate the rate. The goal is to explain which customer group, product, channel, refund pattern, or lifecycle gap caused the change.
Your audit should have these working tabs or views.
| Audit view | Purpose | Required fields | Helpful fields |
|---|---|---|---|
| Raw orders | Creates the source table for every order-level calculation | Customer ID or email hash, order ID, order date, financial status, gross sales, refunds, net sales | Fulfillment status, discount code, channel, source, tags |
| Customer first-order cohort | Assigns every customer to the date or month of their first purchase | Customer ID or email hash, first order date, first order ID | First order value, first discount used, first source or channel |
| Repeat-order window | Checks whether a customer placed a second order within the selected window | Customer ID or email hash, order date, order sequence number | Days between first and second order, number of orders inside window |
| Refund-adjusted repeat orders | Separates healthy repeat behavior from orders that were canceled or refunded | Order ID, financial status, refunds, net sales | Refund reason, return reason, customer support tags |
| First product or category purchased | Shows whether the product that acquired the customer changed year over year | Customer ID or email hash, SKU, product, category, quantity | Variant, collection, margin group, bundle flag |
| Acquisition source | Tests whether repeat rate changed because the customer mix changed | Customer ID or email hash, source or channel where available | Campaign, landing page, discount, affiliate, UTM fields |
| Year-over-year comparison | Compares matched cohorts with equal observation windows | Cohort period, repeat window, cohort size, repeat customer count, repeat purchase rate | Repeat revenue, net repeat revenue, second-order AOV, time to second order |
| Lifecycle action priority | Turns the analysis into actions for email, SMS, merchandising, support, and inventory | Segment name, issue, priority, owner | Recommended flow, audience export, offer test, product education angle |
At minimum, your order export should include customer ID or email hash, order ID, order date, financial status, fulfillment status, gross sales, discounts, refunds, net sales, SKU, product, category, quantity, subscription flag, and channel or source where available.
If you do not have every helpful field, do not stop the analysis. You can still calculate repeat purchase rate with customer ID, order ID, order date, and order status. The extra fields explain the cause of the movement.
Build your Repeat Purchase Rate YoY Audit in SignalOps
SignalOps helps operators turn order exports into a repeat purchase audit with cohort, refund, product, and customer history views in one workflow. Instead of stopping at “repeat rate is down,” you can see which first-purchase cohorts, products, channels, or refund patterns are driving the change.
Analyze your order exportHow to compare repeat purchase cohorts fairly year over year
The cleanest method is to compare matched first-purchase cohorts with the same repeat window. This avoids penalizing newer customers for not having enough time to place another order.
Use this walkthrough as your base method.
- Choose the acquisition period you want to compare. For example, customers whose first order happened from January 1 through March 31, 2025, compared with customers whose first order happened from January 1 through March 31, 2026.
- Choose the repeat-purchase window. For example, count whether each customer placed a second qualifying order within 90 days of their first order.
- Make sure both cohorts are mature. If the 2026 cohort has not yet had the full 90 days to repeat, wait or shorten the window for both years.
- Filter out canceled orders. Decide whether fully refunded second orders should be excluded from the numerator.
- Calculate the rate for each cohort. Divide customers with a qualifying repeat order by total customers in the first-purchase cohort.
- Compare the rate, repeat revenue, second-order AOV, and time to second order year over year.
The repeat window should match how your customers naturally buy. A fast replenishment product may need a 30-day view. Consumables, beauty, wellness, pet, or household categories often need a 60- to 90-day view. Apparel, gifting, seasonal goods, accessories, and durable products may require 180 to 365 days before the repeat behavior is visible.
| Business pattern | Useful repeat window | Why it helps |
|---|---|---|
| Fast replenishment | 30 days | Shows whether customers return quickly enough for the natural consumption cycle |
| Consumables or beauty | 60 to 90 days | Captures second orders after trial, usage, and early replenishment |
| Apparel or accessories | 180 days | Allows time for seasonal needs, new collections, and style-based buying |
| Gifting, seasonal, or durable products | 365 days | Accounts for longer consideration cycles and annual occasions |
You can run more than one window. A 90-day repeat rate may show whether lifecycle messaging is working early. A 365-day repeat rate may show whether the customer relationship is durable. Just do not compare a mature 365-day prior-year cohort with a current-year cohort that has only had 120 days to repeat.
Diagnose the change: cohort decay, product mix, refunds, or lifecycle execution
Once you know repeat purchase rate moved, the next question is why. A decline does not automatically mean your email program failed. It could be a product mix issue, a refund issue, a channel quality issue, a stockout issue, or a change in how discounts created second orders.
Use this decision tree to isolate the cause.
| Diagnostic question | Report field or segment to check | What it can reveal |
|---|---|---|
| Did new-customer volume change? | First-purchase cohort size by month or quarter | A larger top-of-funnel push may have added lower-intent customers who repeat less often |
| Did cohort quality change? | First source, channel, campaign, discount, landing page | A channel that looks efficient on first purchase may bring customers with weaker second-purchase behavior |
| Did time to second order lengthen? | Days between first and second order | Customers may still be repeating, but later than your lifecycle flows expect |
| Did first-product mix shift? | SKU, product, category, collection from first order | A new bestseller may acquire customers who do not naturally buy the rest of the catalog |
| Did refunds increase among repeat buyers? | Refund amount, financial status, refund reason, net sales | Repeat rate may look stable while net repeat revenue gets weaker |
| Did discounts create low-quality second orders? | Discount code, discount amount, second-order margin proxy | Customers may be repeating only when heavily discounted |
| Did subscriptions inflate repeats? | Subscription flag, order tags, recurring order source | Repeat rate may rise because of auto-renewal rather than broader retention health |
| Did email or SMS flows change? | Flow send dates, audience rules, suppression logic, campaign calendar | A broken second-purchase flow or changed segment rule can reduce timely repeat orders |
| Did replenishment timing change? | Product usage cycle, days to second order, reorder reminder timing | Messages may be arriving too early, too late, or not matched to the product purchased |
| Did products go out of stock before the repeat window? | Inventory availability, SKU stockout dates, product purchased first | Customers may have wanted to repeat but could not buy the relevant product |
A useful retention diagnosis usually combines at least three cuts: cohort period, first product purchased, and refund-adjusted repeat revenue. That prevents you from treating every repeat purchase as equal.
For example, if repeat purchase rate is flat but fully refunded second orders increased, the customer behavior is not as healthy as the headline metric suggests. If repeat purchase rate is down only for customers whose first order contained a specific SKU, the fix may be product education, merchandising, or quality control rather than a generic winback campaign.
Metric matrix: what to do when repeat purchase rate is up, down, or flat
The report should end with an action plan. A repeat purchase rate decline is only useful if it tells your team which segment to build and what to change next.
| Result | Likely cause | Report to check | Customer segment to build | Lifecycle action |
|---|---|---|---|---|
| Repeat purchase rate down and first-order product mix changed | New customers are entering through products that do not lead naturally to a second purchase | First product or category by cohort | Customers whose first order included the changed product or category | Build product-specific education, cross-sell paths, bundles, and second-purchase recommendations |
| Repeat purchase rate down but refunds up | Customers are repeating less because of product, fit, expectation, or fulfillment issues | Refund-adjusted repeat orders and refund reasons | Repeat buyers with refunded or partially refunded orders | Review refund reasons, trigger customer support follow-up, and adjust product pages or post-purchase education |
| Repeat purchase rate down but AOV up | Customers may be placing fewer but larger orders, or only higher-intent customers are returning | Second-order AOV, repeat revenue, cohort size | First-time buyers who have not reordered but bought high-fit products | Test replenishment reminders, bundle offers, and timing changes before assuming retention is broken |
| Repeat purchase rate flat but repeat revenue down | The same share of customers repeats, but they buy lower-priced items, use larger discounts, or refund more | Net repeat revenue, discount amount, product mix, refunds | Repeat customers with lower net second-order value | Audit discounting, test higher-value bundles, and promote products that lift net revenue |
| Repeat purchase rate up but net revenue down | More customers repeat, but the repeat orders are less profitable or more frequently refunded | Net sales, discounts, refunds, second-order product mix | Discount-heavy repeat buyers and refunded repeat buyers | Separate healthy repeat behavior from incentive-driven repeats and reduce blanket discount dependence |
| Repeat purchase rate up only for discount-heavy segments | Retention is being bought through offers rather than earned through product fit | Discount code use by first and second order | Customers who placed second orders only after high discounts | Test non-discount education, loyalty benefits, replenishment timing, and segmented offer thresholds |
| Repeat purchase rate down for one acquisition channel | Channel quality changed or campaign targeting shifted | First source, campaign, cohort repeat rate | Customers acquired from the declining channel | Send channel-specific onboarding, review landing page promise, and feed findings back into acquisition strategy |
| Repeat purchase rate down after stockouts | Customers could not buy again inside the expected repeat window | SKU stockout dates, first product purchased, second-order timing | Customers whose likely reorder item was unavailable | Use back-in-stock messages, substitute recommendations, customer rescue audiences, and inventory-aware flow suppression |
The most important move is to avoid one-size-fits-all retention fixes. A customer who failed to repeat after a stockout needs a different message than a customer who refunded a second order, and both are different from a customer who only repeats with deep discounts.
SignalOps workflow: turn repeat purchase reporting into lifecycle action
The final goal is not a prettier repeat purchase chart. The goal is to know which customer group caused the year-over-year change and what action should happen next.
A practical SignalOps-style workflow looks like this:
- Import your order history. Start with order-level data that includes customers, dates, products, revenue, discounts, refunds, and order statuses.
- Define the cohort. Group customers by first order date, such as January through March 2025 versus January through March 2026.
- Choose the repeat window. Use a window that matches your buying cycle, then apply it equally to both cohorts.
- Exclude canceled orders. Decide whether fully refunded second orders should be excluded or reported as a separate refund-adjusted repeat view.
- Compare mature prior-year cohorts. Only compare cohorts that have had the full observation window available.
- Segment by first product and channel. Identify whether the retention change is concentrated in specific SKUs, categories, sources, campaigns, or customer types.
- Isolate refunded or discount-heavy repeat orders. Separate healthy repeat behavior from low-quality repeat behavior that does not translate into net revenue.
- Find the lifecycle gap. Check whether the issue points to second-purchase flows, replenishment reminders, winback timing, product education, discount strategy, support, or inventory.
- Export action audiences. Build customer groups for email, SMS, support follow-up, replenishment reminders, product education, VIP rescue, or post-purchase surveys.
A good Repeat Purchase Rate YoY Audit Sheet should include tabs for raw orders, customer first-order cohort, repeat-order window, refunded repeat orders, product or category of first purchase, year-over-year comparison, and lifecycle action priority.
When the report is built this way, you can answer more than “Did repeat purchase rate go up or down?” You can answer the operator question that matters: which cohort changed, which product or channel caused it, whether the revenue was healthy after refunds and discounts, and what lifecycle action should happen next.