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:

  1. Export all orders for the two periods you want to compare.
  2. Assign each customer to a first-purchase cohort based on their first order date.
  3. Choose a repeat window, such as 90, 180, or 365 days.
  4. Count customers who placed at least one qualifying second order inside that window.
  5. Exclude canceled orders and decide how to handle refunded orders before calculating the rate.
  6. 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.

ApproachWhat it countsWhy it can misleadBetter operator use
Before: calendar-year repeat rateAll customers who bought during the year and had 2 or more ordersOlder customers have had more time to repeat, newer customers have had less time, and seasonal buying patterns get blended togetherUse only as a high-level trend indicator
After: first-purchase cohort repeat rateCustomers whose first order happened in a defined cohort period and who repeated within the same windowControls for customer age and makes year-over-year comparison cleanerUse 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 viewPurposeRequired fieldsHelpful fields
Raw ordersCreates the source table for every order-level calculationCustomer ID or email hash, order ID, order date, financial status, gross sales, refunds, net salesFulfillment status, discount code, channel, source, tags
Customer first-order cohortAssigns every customer to the date or month of their first purchaseCustomer ID or email hash, first order date, first order IDFirst order value, first discount used, first source or channel
Repeat-order windowChecks whether a customer placed a second order within the selected windowCustomer ID or email hash, order date, order sequence numberDays between first and second order, number of orders inside window
Refund-adjusted repeat ordersSeparates healthy repeat behavior from orders that were canceled or refundedOrder ID, financial status, refunds, net salesRefund reason, return reason, customer support tags
First product or category purchasedShows whether the product that acquired the customer changed year over yearCustomer ID or email hash, SKU, product, category, quantityVariant, collection, margin group, bundle flag
Acquisition sourceTests whether repeat rate changed because the customer mix changedCustomer ID or email hash, source or channel where availableCampaign, landing page, discount, affiliate, UTM fields
Year-over-year comparisonCompares matched cohorts with equal observation windowsCohort period, repeat window, cohort size, repeat customer count, repeat purchase rateRepeat revenue, net repeat revenue, second-order AOV, time to second order
Lifecycle action priorityTurns the analysis into actions for email, SMS, merchandising, support, and inventorySegment name, issue, priority, ownerRecommended 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 export

How 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.

  1. 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.
  2. Choose the repeat-purchase window. For example, count whether each customer placed a second qualifying order within 90 days of their first order.
  3. 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.
  4. Filter out canceled orders. Decide whether fully refunded second orders should be excluded from the numerator.
  5. Calculate the rate for each cohort. Divide customers with a qualifying repeat order by total customers in the first-purchase cohort.
  6. 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 patternUseful repeat windowWhy it helps
Fast replenishment30 daysShows whether customers return quickly enough for the natural consumption cycle
Consumables or beauty60 to 90 daysCaptures second orders after trial, usage, and early replenishment
Apparel or accessories180 daysAllows time for seasonal needs, new collections, and style-based buying
Gifting, seasonal, or durable products365 daysAccounts 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 questionReport field or segment to checkWhat it can reveal
Did new-customer volume change?First-purchase cohort size by month or quarterA 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 pageA 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 orderCustomers may still be repeating, but later than your lifecycle flows expect
Did first-product mix shift?SKU, product, category, collection from first orderA 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 salesRepeat rate may look stable while net repeat revenue gets weaker
Did discounts create low-quality second orders?Discount code, discount amount, second-order margin proxyCustomers may be repeating only when heavily discounted
Did subscriptions inflate repeats?Subscription flag, order tags, recurring order sourceRepeat 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 calendarA 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 timingMessages 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 firstCustomers 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.

ResultLikely causeReport to checkCustomer segment to buildLifecycle action
Repeat purchase rate down and first-order product mix changedNew customers are entering through products that do not lead naturally to a second purchaseFirst product or category by cohortCustomers whose first order included the changed product or categoryBuild product-specific education, cross-sell paths, bundles, and second-purchase recommendations
Repeat purchase rate down but refunds upCustomers are repeating less because of product, fit, expectation, or fulfillment issuesRefund-adjusted repeat orders and refund reasonsRepeat buyers with refunded or partially refunded ordersReview refund reasons, trigger customer support follow-up, and adjust product pages or post-purchase education
Repeat purchase rate down but AOV upCustomers may be placing fewer but larger orders, or only higher-intent customers are returningSecond-order AOV, repeat revenue, cohort sizeFirst-time buyers who have not reordered but bought high-fit productsTest replenishment reminders, bundle offers, and timing changes before assuming retention is broken
Repeat purchase rate flat but repeat revenue downThe same share of customers repeats, but they buy lower-priced items, use larger discounts, or refund moreNet repeat revenue, discount amount, product mix, refundsRepeat customers with lower net second-order valueAudit discounting, test higher-value bundles, and promote products that lift net revenue
Repeat purchase rate up but net revenue downMore customers repeat, but the repeat orders are less profitable or more frequently refundedNet sales, discounts, refunds, second-order product mixDiscount-heavy repeat buyers and refunded repeat buyersSeparate healthy repeat behavior from incentive-driven repeats and reduce blanket discount dependence
Repeat purchase rate up only for discount-heavy segmentsRetention is being bought through offers rather than earned through product fitDiscount code use by first and second orderCustomers who placed second orders only after high discountsTest non-discount education, loyalty benefits, replenishment timing, and segmented offer thresholds
Repeat purchase rate down for one acquisition channelChannel quality changed or campaign targeting shiftedFirst source, campaign, cohort repeat rateCustomers acquired from the declining channelSend channel-specific onboarding, review landing page promise, and feed findings back into acquisition strategy
Repeat purchase rate down after stockoutsCustomers could not buy again inside the expected repeat windowSKU stockout dates, first product purchased, second-order timingCustomers whose likely reorder item was unavailableUse 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:

  1. Import your order history. Start with order-level data that includes customers, dates, products, revenue, discounts, refunds, and order statuses.
  2. Define the cohort. Group customers by first order date, such as January through March 2025 versus January through March 2026.
  3. Choose the repeat window. Use a window that matches your buying cycle, then apply it equally to both cohorts.
  4. Exclude canceled orders. Decide whether fully refunded second orders should be excluded or reported as a separate refund-adjusted repeat view.
  5. Compare mature prior-year cohorts. Only compare cohorts that have had the full observation window available.
  6. Segment by first product and channel. Identify whether the retention change is concentrated in specific SKUs, categories, sources, campaigns, or customer types.
  7. Isolate refunded or discount-heavy repeat orders. Separate healthy repeat behavior from low-quality repeat behavior that does not translate into net revenue.
  8. Find the lifecycle gap. Check whether the issue points to second-purchase flows, replenishment reminders, winback timing, product education, discount strategy, support, or inventory.
  9. 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.