Stop Guessing 30 Days: How to Calculate the Right Shopify Discount Reset Window
Learn how to calculate your store's real reorder cycle using Shopify cohort data and an order export—then turn it into a recurring discount rule that fits customer behavior.
Stop Guessing 30 Days: How to Calculate the Right Shopify Discount Reset Window
Most advice about recurring Shopify discounts sounds like this:
- Coffee: every 30 days.
- Skincare: every 45–60 days.
- Pet food: every month.
- Apparel: every 90 days.
Fine.
Sometimes useful.
But none of those numbers came from your customers.
A merchant sees “monthly reorder” in a blog post, creates a code that resets every 30 days, and assumes the strategy is now data-driven because the rule contains a number.
It is not.
Thirty days might be too early. It might be too late. It might be right for one product and completely wrong for the rest of the catalog.
The better question is:
How long does it actually take my customers to place their next order?
This post shows you how to answer that question using two methods:
- Shopify’s Customer cohort analysis report for a fast directional answer.
- A Shopify order export for the exact number of days between purchases.
By the end, you should be able to replace “monthly sounds nice” with a rule you can defend, such as:
15% off selected products, $70 minimum, 1 use per customer every 45 days
One important caveat before we start: Shopify’s native “one use per customer” setting tracks the customer identity available at checkout, such as an email address or phone number. A per-customer discount app works with the customer identity Shopify can see; it is not identity verification. This guide is about measuring purchase timing and setting a sensible usage cadence—not claiming that one identifier always equals one human. For a deeper explanation, read Shopify ‘Limit One Per Customer’ Explained.
The number you need depends on the job of the promotion
There is no single “reorder cycle” hiding inside your store.
There are several related numbers, and they answer different questions.
| Question | Number to calculate | Best use |
|---|---|---|
| When do new customers usually place order #2? | Days from first order to second order | Welcome and second-purchase campaigns |
| How often do active repeat customers buy? | Days between every consecutive order | Recurring replenishment or VIP offers |
| When is a customer later than usual? | 75th percentile reorder interval | Win-back timing |
| Which products create different buying rhythms? | Reorder interval by first product or product group | Product-specific discount rules |
| How many first-time buyers return within a window? | 30-, 45-, 60-, and 90-day repeat purchase rate | Choosing and validating the campaign window |
That distinction matters.
Imagine a store where customers who return usually place order #2 after 42 days. But only 9% of first-time buyers return within 60 days.
The 42-day number tells you when returning customers tend to return.
It does not tell you that the store has a strong repeat purchase rate.
Timing and probability are different.
You need both.
Method 1: Get a directional answer from Shopify in 10 minutes
Before exporting anything, open Shopify’s built-in Customer cohort analysis report.
From Shopify Admin:
- Go to Analytics → Reports.
- Open Customer cohort analysis.
- Choose a customer or retention metric that makes repeat purchasing easy to see.
- Set the interval to weeks for faster-moving products or months for slower products.
- Use the cohort definition filters to narrow the first order by product name, sales channel, marketing channel, or subscription status.
- Expand the date range far enough to include several complete purchase cycles.
Shopify groups customers by when they placed their first order, then shows repeat activity in the weeks, months, or quarters after that first purchase. You can also click an interval cell for more detail about the cohort.
This is useful because it answers questions like:
- Do most repeat orders happen in weeks 4–6 or weeks 8–10?
- Do customers acquired during a deep sale return later than full-price customers?
- Do people whose first order included coffee beans return faster than people who bought brewing equipment?
- Do subscription and one-time buyers behave differently?
What the cohort report is good at
It is excellent for finding a range.
For example:
Repeat activity is weak in weeks 1–3, becomes meaningful in weeks 5–6, and fades after week 9.
That gives you three sensible candidates:
35 days45 days60 days
You have narrowed the test without touching a spreadsheet.
What the cohort report cannot answer cleanly
A cohort grid groups activity into periods. It does not give you an exact list of every customer’s days between consecutive orders.
It also centers the analysis on the first purchase. That is useful for acquisition and second-order behavior, but it can hide a different rhythm among established repeat customers.
Use the cohort report to find the neighborhood.
Use the order export to find the address.
Method 2: Calculate the exact Shopify reorder interval in a spreadsheet
Shopify lets you export orders as a CSV file from the Orders page.
The spreadsheet method takes longer, but it lets you calculate:
- exact days from order #1 to order #2
- exact days between every later order
- median reorder interval
- 25th and 75th percentiles
- repeat purchase rates within fixed windows
- different cycles by product group, channel, or customer segment
This is where the useful answer usually lives.
Step 1: Choose a date range that can actually reveal a cycle
Do not export six weeks of data to calculate a 60-day reorder cycle.
That sounds obvious.
It happens constantly.
A practical starting point:
| Expected purchase cycle | Useful order history |
|---|---|
| Under 30 days | At least 6–12 months |
| 30–60 days | At least 12 months |
| 60–120 days | At least 18–24 months |
| 120+ days | Usually 24–36 months |
These are starting points, not laws.
More history is not automatically better. If your catalog, pricing, fulfillment times, or customer mix changed dramatically, older orders might describe a business you no longer run.
Separate the data before and after major changes such as:
- a subscription launch
- a large pricing change
- a new flagship product
- a shift from wholesale to direct-to-consumer
- a major change in shipping speed
- a promotion that permanently changed buying behavior
The goal is not “maximum rows.”
The goal is comparable behavior.
Step 2: Export orders from Shopify
From the Shopify Orders page:
- Apply the date range and any channel filters you need.
- Click Export.
- Choose the relevant orders or the date range.
- Export the full order file, not only transaction history.
- Open the CSV in Google Sheets or Excel.
Shopify’s order export includes fields such as:
- order name
- phone
- financial status
- created date
- paid date
- cancellation date
- subtotal
- discount code
- line-item name
- line-item quantity
- source
There is one detail that catches people:
An order with multiple products appears across multiple CSV rows.
Shopify puts additional line items on separate rows and leaves many order-level fields blank on those extra rows.
If you calculate directly from the raw file, one three-product order can accidentally look like three orders.
That will wreck the result.
Step 3: Build a clean one-row-per-order table
Start with a store-wide calculation.
Filter the raw CSV so the Name field is not blank. In a standard Shopify export, this keeps the primary row for each order and removes the extra line-item rows. Verify that the result contains one row per unique order name or order ID; if your export repeats that field on every line-item row, deduplicate by the unique order instead.
Then create a new sheet called Orders with these columns:
| Column | Header | What goes in it |
|---|---|---|
| A | Customer key | Normalized email, with phone as a fallback |
| B | Order name | Shopify order number |
| C | Order date | Usually Created at |
| D | Product group | Optional; add later for segmented analysis |
| E | Subtotal | Order subtotal before shipping and tax |
Use Created at unless your business has a reason not to
For most stores, Created at is the cleanest measure of when the customer decided to buy.
Use a different date when the buying experience makes Created at misleading.
Examples:
- For long preorders, fulfillment date might better approximate when consumption starts.
- For manually captured payments, paid date might occur well after the purchase decision.
- For replacement orders created by support, the order date might not represent a new purchase at all.
Pick one definition.
Write it down.
Use it consistently.
Remove orders that are not real purchase events
At minimum, review these rows:
| Order type | Recommended treatment |
|---|---|
| Canceled or voided orders | Exclude |
| Fully refunded orders | Usually exclude |
| Partially refunded orders | Keep if a meaningful purchase remained |
| Test orders | Exclude |
| Free replacement orders | Exclude or tag separately |
| Draft orders created for operations | Exclude unless they represent real customer purchases |
| Subscription renewals | Analyze separately from one-time orders |
| POS, wholesale, and B2B orders | Segment if their buying cycle differs |
There is no universal cleaning rule for every store.
There is one universal rule:
Do not let operational records pretend to be customer demand.
Step 4: Create a consistent customer key
For a simple analysis, use a normalized email address.
In Google Sheets:
=LOWER(TRIM(email_cell))
If some valid orders have no email, use phone as a fallback:
=IF(
LEN(TRIM(email_cell)),
LOWER(TRIM(email_cell)),
REGEXREPLACE(phone_cell,"[^0-9+]","")
)
Replace email_cell and phone_cell with the relevant cells in your sheet.
This makes Jane@Example.com and jane@example.com the same key.
It does not solve every identity problem.
A customer who changes email addresses can appear as two customers. A household that shares one address can appear as one customer. Missing contact details can remove otherwise valid orders from the analysis.
That is not a spreadsheet bug.
It is a limit of the identity data available to the store.
If you know you have duplicate Shopify customer profiles, merge or clean them before treating the output as precise.
Step 5: Sort the orders correctly
Sort the Orders sheet by:
- Customer key from A to Z.
- Order date from oldest to newest.
- Order name from oldest to newest as a tie-breaker.
The formulas below assume that every customer’s orders are sitting together in chronological order.
If the sort is wrong, the math is wrong.
Spreadsheets are extremely loyal employees. They will calculate nonsense exactly as instructed.
Step 6: Calculate purchase number and days between orders
Add these columns:
| Column | Header |
|---|---|
| F | Purchase number |
| G | Previous order date |
| H | Days since previous order |
| I | First-to-second days |
Assuming row 1 contains headers and your data starts on row 2, enter these formulas.
Purchase number for each customer
In F2:
=IF(A2="","",COUNTIF($A$2:A2,A2))
This labels the customer’s orders 1, 2, 3, and so on.
Previous order date
In G2:
=IF(A2=A1,C1,"")
Days since the previous order
In H2:
=IF(G2="","",INT(C2)-INT(G2))
Days from first order to second order only
In I2:
=IF(F2=2,H2,"")
Copy all four formulas down the sheet.
You now have two different datasets:
- Column
Imeasures first-to-second purchase timing. - Column
Hmeasures every consecutive purchase interval.
Do not treat them as interchangeable.
Step 7: Calculate the numbers that matter
Median time between all consecutive orders
=MEDIAN(FILTER(H2:H,H2:H>0))
Median time from first order to second order
=MEDIAN(FILTER(I2:I,I2:I>0))
25th percentile of all reorder intervals
=PERCENTILE(FILTER(H2:H,H2:H>0),0.25)
75th percentile of all reorder intervals
=PERCENTILE(FILTER(H2:H,H2:H>0),0.75)
Share of observed second orders placed within 45 days
=COUNTIFS(I2:I,">0",I2:I,"<=45")/COUNTIF(I2:I,">0")
Repeat that formula for 30, 60, and 90 days.
Format the result as a percentage.
One warning: that last calculation uses only customers who placed a second order. It tells you how quickly returners came back.
It does not calculate the repeat purchase rate among all first-time customers.
That denominator deserves its own section.
The denominator problem: do not erase customers who never returned
Suppose you acquired 1,000 first-time customers.
- 100 placed a second order.
- 70 of those 100 returned within 45 days.
You could say:
70% of second orders happened within 45 days.
True.
You could not say:
Our 45-day repeat purchase rate is 70%.
The actual 45-day repeat purchase rate is:
70 returning customers ÷ 1,000 eligible first-time customers = 7%
That difference is not cosmetic.
It changes how you judge the promotion.
Build a one-row-per-customer summary
Create another sheet called Customers with these columns:
| Column | Header |
|---|---|
| A | Customer key |
| B | First order date |
| C | Second order date |
| D | Days to second order |
| E | Eligible for 60-day measurement |
| F | Returned within 60 days |
In A2, create the unique customer list:
=SORT(UNIQUE(FILTER(Orders!A2:A,Orders!A2:A<>"")))
In B2, find the first order date:
=MINIFS(Orders!$C$2:$C,Orders!$A$2:$A,A2)
In C2, find the second order date:
=IFERROR(SMALL(FILTER(Orders!$C$2:$C,Orders!$A$2:$A=A2),2),"")
In D2, calculate days to order #2:
=IF(C2="","",INT(C2)-INT(B2))
Put your fixed analysis date in H1. Then, in E2, mark customers who have had a full 60 days to return:
=B2<=$H$1-60
In F2, mark customers who returned within 60 days:
=AND(E2,D2<>"",D2<=60)
Copy the formulas down.
Your true 60-day repeat purchase rate is:
=COUNTIFS(E2:E,TRUE,F2:F,TRUE)/COUNTIF(E2:E,TRUE)
Change 60 to 30, 45, or 90 to build the full curve.
Why the eligibility check matters
A customer who placed a first order 12 days ago has not had 60 days to return.
Counting that person as a 60-day non-returner makes your retention look worse than it is.
Excluding every recent customer can make the result look better than it is.
The correct approach is simple:
For a 60-day metric, include only customers whose first order happened at least 60 days before the analysis date.
Analysts call this right-censoring.
The name is boring.
The mistake is expensive.
Why the median beats the average
Reorder timing is usually messy.
You might have ten customers who return around day 40 and one customer who returns after 280 days.
The 280-day customer pulls the average upward even though that gap describes almost nobody.
Use the median as your default “typical” interval.
Then use percentiles to understand the spread:
- 25th percentile: an early but common reorder point
- Median: the middle of observed reorder behavior
- 75th percentile: a later-than-typical reorder point
For example:
| Metric | Result |
|---|---|
| 25th percentile | 35 days |
| Median | 43 days |
| 75th percentile | 55 days |
That does not mean 43 days is magically correct.
It means your first serious candidates are probably closer to 35, 45, and 60 than to 30, 90, or “unlimited forever.”
Advanced: do not let your heaviest buyers dominate the answer
There is another quiet bias in the “all order gaps” calculation.
A customer with 20 orders contributes 19 intervals.
A customer with two orders contributes one interval.
That means your most frequent buyers can dominate the store-wide median.
Sometimes that is useful. If the promotion is for your most active customers, their cadence should carry more weight.
Sometimes it is not. If you want the rhythm of a typical repeat customer, calculate a median interval for each customer first, then take the median of those customer-level medians.
In Google Sheets, create a list of customers with at least one valid interval:
=SORT(UNIQUE(FILTER(Orders!A2:A,Orders!H2:H>0)))
Next to each customer, calculate that customer’s median interval:
=MEDIAN(FILTER(Orders!$H$2:$H,Orders!$A$2:$A=A2,Orders!$H$2:$H>0))
Then take the median of the resulting column.
Compare the two results:
- Interval-weighted median: every order gap counts equally.
- Customer-weighted median: every repeat customer counts equally.
If they are close, great.
If they are far apart, your power buyers have a different rhythm and probably deserve their own campaign.
One store can have several completely different reorder cycles
A store-wide median can be mathematically correct and strategically useless.
Imagine a coffee brand that sells:
- coffee beans
- paper filters
- mugs
- grinders
- gift boxes
Beans might be replenished every 28–42 days.
Filters might be reordered every 60–90 days.
A grinder might not be reordered for years.
Blend everything together and the “average store cycle” becomes a number that describes no product particularly well.
Group products by buying behavior, not by navigation
Your Shopify collections might be built for merchandising.
Your reorder analysis should be built for consumption.
Useful groups might look like:
| Product group | Include | Keep separate |
|---|---|---|
| Coffee replenishment | Beans, pods, concentrate | Grinders, mugs, equipment |
| Skincare replenishment | Cleanser, moisturizer, serum | Tools, gift sets, accessories |
| Pet consumables | Food, treats, supplements | Beds, carriers, leashes |
| Household refills | Soap, detergent, filters | Dispensers, appliances |
Use Shopify’s cohort report to filter by the product included in the first order, or add a Product group column to the spreadsheet and calculate the same medians within each group.
For multi-product first orders, do not blindly use the first line item in the CSV.
Choose the product that best represents the expected replenishment need. In many stores, that means the consumable “anchor” product rather than an accessory that happened to appear first in the file.
Clean up same-day “repeat” orders
A zero-day gap is often not a reorder cycle.
It might be:
- a customer who forgot one item and placed another order
- a post-purchase offer
- an order split by support
- a replacement order
- a POS transaction entered twice
- two legitimate orders from a wholesale buyer on the same day
For most direct-to-consumer replenishment analysis, exclude 0-day intervals or merge same-day orders into one purchase event.
That is why the summary formulas above use H2:H>0.
But do not delete them without looking.
If same-day repeat orders are a meaningful part of your business, they are a separate behavior worth understanding.
Separate one-time purchases from subscriptions
Subscription renewals create an artificial rhythm because the schedule is partly determined by the subscription contract.
If you mix subscription renewals into a one-time reorder analysis, the result can tell you something like:
Customers reorder every 30 days.
What it may really mean is:
Our subscription app bills every 30 days.
That is not the same insight.
For a recurring discount aimed at one-time buyers:
- exclude subscription renewal orders, or
- analyze subscription and one-time buyers in separate groups.
Shopify’s cohort report supports subscription-based filtering and also surfaces subscription versus one-time activity in cohort details.
Use it.
Turn the reorder data into a discount reset window
Now we get to the actual decision.
Suppose your cleaned data says:
- 25th percentile:
35 days - median:
43 days - 75th percentile:
55 days - strongest product group: replenishable skincare
- 45-day repeat purchase rate:
11% - 60-day repeat purchase rate:
15%
There are several defensible rules.
Option 1: Availability-first
Set the reset slightly before the median so the discount is available when a meaningful share of customers begins considering the next purchase.
Candidate:
1 use every 35–40 days
This is the more generous option.
It can help pull the next purchase forward.
It can also discount orders that would have happened anyway.
Test it carefully.
Option 2: Balanced
Round the median to a clean number customers can understand.
Candidate:
1 use every 45 days
This usually makes the best first test when you want the rule to follow the observed buying rhythm without pretending the spreadsheet is more precise than it is.
Your data said 43.
The customer does not need to hear 43.
Option 3: Margin-first
Set the reset later, near the 75th percentile.
Candidate:
1 use every 55–60 days
This makes the offer less available to customers who already buy frequently and more available as customers begin drifting later than normal.
It is usually the safer choice when margins are tight or the product is not truly replenishable.
Option 4: Win-back rather than recurring reward
If the goal is to reactivate customers who are late, use the 75th percentile—or a point beyond it—as the message trigger.
That might look like:
Send a one-time offer around day 60 to customers who have not reordered.
That is a different campaign from “everyone gets a reusable discount every 45 days.”
Do not make one code perform five jobs.
A simple rule for choosing the first test
Start with the median.
Then adjust based on the job:
Availability-first offer → median minus 5–10 days
Balanced replenishment offer → median, rounded to a clean number
Margin-first recurring offer → median plus 5–15 days
Win-back offer → 75th percentile or later
This is not a law of ecommerce.
It is a disciplined way to choose a test.
The data narrows the range.
The experiment chooses the winner.
A 30-day reset is not the same as a calendar month
This sounds pedantic until customer support has to explain it.
A day-based rule such as 1 use every 30 days is a rolling cadence.
“Once in each calendar month” is a calendar rule.
Those are different.
A customer who redeems on January 31 does not reach 30 elapsed days on February 1 simply because the month changed.
If your promotion is marketed as a monthly perk, write the terms in day-based language unless your system explicitly resets on calendar boundaries.
Clear copy:
Use this code once every 30 days.
Risky copy:
Use this code once per month.
The second version creates an expectation your technical rule might not match.
How many uses should reset at once?
The reorder interval tells you when the allowance should refresh.
It does not automatically tell you how many uses to grant in each window.
For many direct-to-consumer replenishment offers, this is the cleanest starting point:
1 use per customer every natural reorder cycle
Use more than one when the business genuinely expects multiple distinct orders in the same period.
Examples:
- A B2B buyer places separate department orders.
- An ambassador is expected to sample several product lines.
- A household regularly places two meaningful orders in one cycle.
- A customer group buys for multiple locations.
Do not choose 3 uses every 30 days because three sounds generous.
Look at the order data.
Count how many real purchase events active customers place inside the proposed window.
Then set the allowance.
Add margin and cart-size guardrails
A correct reset window can still produce a bad promotion.
The timing tells you when customers tend to buy.
It does not tell you whether 20% off is profitable.
Before launch, decide:
- discount percentage
- minimum order total
- eligible products
- whether the discount applies to the whole order or a narrower scope
- whether it can combine with other discounts
- maximum uses per customer in each window
Use the Shopify discount budget calculator to pressure-test the percentage, minimum order, and affordable number of uses.
A strong rule sounds boring:
12% off selected refill products, $70 minimum, 1 use every 45 days
A weak rule sounds exciting:
VIP20forever.
The first is a campaign.
The second is a lower price with extra steps.
Test two windows, not six variables
Do not change the discount percentage, minimum order, product scope, email copy, and reset window at the same time.
You will get a result.
You will not know why.
A cleaner test:
- Group A:
15% off, $75 minimum, 1 use every 45 days - Group B:
15% off, $75 minimum, 1 use every 60 days - Holdout: receives the same retention messaging without the discount, when practical
Keep everything else as similar as possible.
Then measure:
- Repeat purchase rate by day 45, 60, and 90.
- Median time to next order.
- Contribution margin per eligible customer.
- Average order value.
- Discount amount per order.
- Product mix.
- Returns and refunds.
- What happens in the period after the discounted order.
That last one matters.
A discount can move an order from day 60 to day 45 without creating an additional order.
That might still help cash flow, inventory planning, or customer retention.
But it is not the same as creating new demand.
Do not declare victory at the redemption screen.
Use Shopify’s reports after launch—but know what they measure
Shopify’s Sales by discount codes report helps you review orders and sales associated with each discount.
It is useful for:
- redemption count
- discount amount
- total sales linked to the code
- comparing code performance
It is not a complete incrementality model.
If discounts combine, one order can appear under multiple discount rows. And a sale associated with a discount does not prove the discount caused the sale.
Pair the report with your customer-level repeat purchase analysis.
Revenue tells you what happened.
The customer timeline tells you whether behavior changed.
Common mistakes that make the reorder cycle look cleaner than it is
Mistake #1: Using only the average
One long gap can drag it upward.
Use the median and percentiles.
Mistake #2: Looking only at customers who returned
That measures timing among returners, not repeat purchase rate among all eligible customers.
Keep the full denominator.
Mistake #3: Including customers who have not had enough time to return
For a 60-day metric, include only customers whose first order is at least 60 days old.
Mistake #4: Mixing subscriptions with one-time orders
A billing schedule is not the same as organic reorder behavior.
Mistake #5: Mixing consumables with durable products
A store-wide median can describe nothing useful.
Segment by replenishment group.
Mistake #6: Letting power buyers dominate every interval
Compare the interval-weighted and customer-weighted medians.
Mistake #7: Treating same-day orders as a replenishment cycle
Review zero-day gaps before including them.
Mistake #8: Using data from an existing promotion as “natural” behavior
If customers already receive a recurring discount, the observed cycle partly reflects the promotion.
Use a holdout, full-price segment, or pre-promotion period when possible.
Mistake #9: Picking an exact number from a tiny sample
Twelve returning customers do not justify a confident 47-day rule.
Round to a broad candidate, test it, and update the estimate as more orders arrive.
Mistake #10: Changing everything after one cycle
One cycle can be noisy.
Look for the same pattern across multiple cohorts before turning a test into a permanent offer.
Where Discount Spark fits
Shopify’s native discount controls let you cap total uses across the store or limit a discount to one use per customer. Shopify does not natively provide the middle-ground rule your analysis might produce, such as:
2 uses per customer1 use every 45 days2 uses every 60 days
Discount Spark is built for that missing middle.
After you calculate the cadence, you can create a percentage discount with:
- a custom usage limit per customer
- an optional reset after a chosen number of days
- a minimum order total
- the discount applied to the entire order, one highest-subtotal order line, or selected products
Example:
REFILL15— 15% off selected refill products, $70 minimum, 1 use per customer every 45 days.
The rule is enforced using the customer identity Shopify makes available. It is not a guarantee that a determined person cannot check out under a different email address or phone number.
That honest limitation does not make the usage rule pointless.
It makes it what it is:
A practical way to control how often the identified customer can use a recurring discount—without recreating codes by hand.
If your campaign needs one use forever, Shopify’s native setting may be enough.
If your data says the right rule is 1 use every 45 days, install Discount Spark on the Shopify App Store and turn the number into a checkout rule.
The reset-window worksheet
Before creating a recurring discount, fill in this table.
| Input | Your result |
|---|---|
| Median days from first order to second order | |
| Median days between all consecutive orders | |
| 25th percentile reorder interval | |
| 75th percentile reorder interval | |
| 30-day repeat purchase rate | |
| 45-day repeat purchase rate | |
| 60-day repeat purchase rate | |
| 90-day repeat purchase rate | |
| Product group being promoted | |
| Candidate reset window | |
| Uses allowed per window | |
| Discount percentage | |
| Minimum order total | |
| Measurement date | |
| Review date after at least one full cycle |
Then write the campaign in one sentence:
[Audience] gets [discount] on [products/order scope], with [minimum order], up to [uses] every [reset window].
Example:
Returning skincare customers get 15% off selected refill products on orders of $70+, up to 1 use every 45 days.
If the rule cannot be explained in one sentence, it is not ready for checkout.
FAQ: Shopify reorder cycles and recurring discount windows
What is a good reorder cycle for a Shopify store?
There is no universal number. Calculate it from your own first-to-second purchase timing, later order gaps, product groups, and repeat purchase rates. A 30-day cycle can be sensible for one consumable and absurd for another.
Should I use the average or median time between orders?
Use the median as the default. The average is more sensitive to unusually long gaps. Add the 25th and 75th percentiles so you can see how wide the behavior is.
Should the discount reset before or after the median reorder date?
Start near the median. Reset slightly earlier when availability and acceleration matter more. Reset later when margin protection matters more. Use the 75th percentile or later for a win-back campaign.
How much order history do I need?
Enough to observe several complete purchase cycles across multiple cohorts. A faster-moving product may need 6–12 months. A 90-day or seasonal product usually needs substantially more. Treat small samples as directional, not precise.
Can Shopify tell me the exact days between every customer order?
Shopify’s Customer cohort analysis report gives a strong directional view by weeks, months, or quarters after the first purchase. For exact day-level intervals between every consecutive order, export orders and calculate the gaps in a spreadsheet or analytics system.
Can Shopify natively create a code that works once every 30 or 45 days?
Shopify’s native maximum-use settings support a total store-wide cap and one use per customer. A custom recurring rule such as 1 use every 45 days requires additional discount logic, such as Discount Spark.
Is “one use every 30 days” the same as “once per month”?
No. Thirty elapsed days and a named calendar month are different rules. Use day-based language when the discount resets after a number of days.
Does a per-customer limit guarantee one use per real person?
No. Shopify identifies customers using the information available at checkout, such as email address or phone number. A different identifier can appear as a different customer. Per-customer limits control usage for the identified customer; they are not identity verification.
Should I use Created at, Paid at, or Fulfilled at?
Use Created at for most stores because it reflects when the order was placed. Use another date when preorders, delayed capture, or long fulfillment times make order creation a poor proxy for the start of the consumption cycle. Whatever you choose, apply it consistently.
Bottom line
Do not choose a recurring Shopify discount window because “monthly” sounds tidy.
Calculate:
- when order #2 happens
- how later orders are spaced
- how wide the timing distribution is
- how many eligible customers return inside each window
- which products follow different rhythms
Then start with a clean candidate.
If your data says:
- 25th percentile:
35 days - median:
43 days - 75th percentile:
55 days
Test 45 days against 60 days.
Keep the discount, minimum order, audience, and product scope stable.
Measure customer behavior and margin—not just code redemptions.
Your reset window should not come from a generic ecommerce calendar.
It should come from the customers who already told you when they buy again.
Simply Smarter Shopify Discounts.
Install Discount Spark and and start creating powerful promos that increase your revenue.