Skip to main content
Growth

Discount Dependency on Shopify: Signs, Cost, Fix

Are customers waiting for your discount code? How to measure discount dependency in Shopify, what 10% off does to break-even ROAS, and a taper plan to fix it.

November 4, 2026 18 min read Talha Butt.
Share

Discount Dependency on Shopify: Signs, Cost, Fix

Quick answer: Discount dependency is when a large and rising share of your orders, and most of your repeat orders, only happen with a code. Measure it inside Shopify with four numbers: the share of orders that carry a discount, discounts as a share of gross sales, discount given per order, and the repeat rate of customers whose first order was discounted against those who paid full price. To stop customers waiting, close the code leaks, swap blanket percent-off for conditional offers, cut depth one step at a time against a baseline, and move the persuading to the page. In the illustrative example below, 10% off lifts break-even ROAS from 2.13 to 2.41 and needs about 26% more orders to earn the same contribution.

Many Shopify founders have a discount they wish they could take away. It started as a welcome offer or a quiet-month sale, it worked, and now it sits in the pop-up, the email footer and the ad copy. Take it away and the orders stop. Leave it and the margin never recovers.

This post helps you tell those situations apart with your own numbers, put a dollar figure on the cost, and get out without a cliff in sales.

One scope note. Prism3 sells Shopify SEO, GEO and CRO. We do not run ads, email or SMS. Who gets which offer and when belongs to whoever runs your email, and I say where that hand-off sits. What I can speak to is the measurement, the maths, and the page and offer work that makes a code less necessary.

Shopify features below are as at 31 October 2026, from Shopify’s help centre; menu names change, so search the admin if a label has moved. Dollar figures in the worked examples are illustrative, not benchmarks, and exclude GST.

What discount dependency actually is

My working definition: a store is discount dependent when removing or shrinking the discount loses more than the discount was worth. It comes in two forms that need different fixes.

  • Acquisition dependency. Nearly every first order carries a code. The code has become the price, and shoppers compare your discounted price with a rival’s full price.
  • Habit dependency. Existing customers, who would have bought anyway, wait for the next sale or hunt for a code before reordering. You are paying people to do what they would have done.

Can I prove that discounts “train” customers on Shopify stores? No, and anyone quoting a neat percentage for it is guessing. The best evidence I found is academic and comes from packaged goods. A 1997 Journal of Marketing Research paper (Mela, Gupta and Lehmann) used 8¼ years of panel data for a frequently purchased packaged good and reported results consistent with consumers becoming more price and promotion sensitive over time, linked to less advertising and more promotion. A 1999 Marketing Science paper (Jedidi, Mela and Gupta) used over eight years of panel data for a packaged goods category and reported that promotions’ long-run effects on sales were negative, about two-fifths the size of the short-term positive effects.

That is direction, not a rate, and it is a different product from yours. Measure your own store.

The signs, and where to see each one

None proves dependency alone. Three or more together is a strong reason to run the numbers in the next section.

  1. The discounted share of orders keeps rising. Quarter on quarter, more orders carry a code. The clearest sign.
  2. Full-price orders go quiet before a sale. In the Total sales over time report, compare the fortnight before each sale with a normal fortnight. A dip that recovers when the sale starts is customers waiting.
  3. Customers who first bought with a code reorder only with a code. Needs the repeat-rate split in step 3 below.
  4. Reported ROAS looks fine but contribution is thin. The worked example shows how.
  5. Nearly every new customer uses the welcome code. It is no longer an incentive. It is your price.
  6. Your code is findable. Search your brand name plus “discount code” in Google. A code meant for one email list that is posted publicly will be used by people who would have paid full price.
  7. Pausing discounts drops orders off a cliff instead of a dip. The real test, and what the taper plan runs safely, in steps.

How to measure discount dependency inside Shopify

You need no new app: the Reports section, an order export and a spreadsheet.

Step 1: Read the discount reports properly

Shopify’s help centre lists Sales by discount codes among its default sales reports. It groups sales by discount name (an automatic discount name or a code) and shows how often each discount was applied and which drive the most sales. Columns include discount method (automatic or code), type (percentage, fixed amount, free shipping, buy X get Y or app), the code or automatic discount title, discount amount, orders and total sales. Three cautions:

  • Rows can overlap. Shopify says that with combinable discounts the same order might be included more than once. Do not add the Orders column across rows and call it your discounted-order count.
  • Sales values cover affected line items only. Shopify says the sales value includes only the total sales for the specific line items affected by the discount, not the order total.
  • Compare-at price sales do not appear. In Shopify’s definition, discounts are created using discount codes, not the compare-at price. A “was/now” price set through compare-at will not show in any discount figure. Add it by hand.

Also pull gross sales and discounts for the month. Shopify defines gross sales as product price times quantity before taxes, shipping, discounts and sales reversals, and net sales as gross sales minus discounts minus sales reversals.

Number 1, the discount rate: discounts divided by gross sales, by month.

Step 2: Export orders and count the discounted share

On the Orders page, use Export with a date range and file format. Exports by date are emailed to you, and large ones take time. The columns you need are Discount Code, Discount Amount, Email and Created at.

One catch: Shopify says the Discount Code column shows the code applied and discounts applied manually to draft orders, and does not include automatic discounts. So flag a discounted order by Discount Amount above zero, which catches both. Orders with several line items spread across several rows, so collapse to one row per order or you will count twice. Check one order you know to see whether Subtotal sits before or after the discount. Do not assume.

Number 2, the discounted-order share: discounted orders divided by all orders, by month, over twelve months if you can. A flat 20% and a line that went 10%, 15%, 22%, 31% tell very different stories.

Number 3, discount given per order: total Discount Amount divided by all orders, and by discounted orders only. It is not automatically “lost”. If the sale would not have happened without it, you traded margin for revenue. If it would have happened anyway, the whole discount is lost. A report cannot tell you which, which is why the taper tests it.

Step 3: Compare repeat rates, discounted-first against full-price-first

This separates a healthy welcome offer from a dependency. Shopify’s Customer cohort analysis report groups customers by first-order date and can show customer retention rate. The filters Shopify lists for defining a cohort’s first orders are sales channel, marketing channel, marketing type, product name and subscription. A discount filter is not among them. Split by discount from your export, and use the report as a cross-check (our guide to reading the Shopify cohort analysis report shows how).

In the spreadsheet:

  1. For each customer email, find the first order and flag whether its Discount Amount was above zero.
  2. Choose a window. I start with 90 days from the first order, but that is my choice, not a standard. Fit it to how often your product is bought and state it.
  3. Count whether each customer ordered again inside the window.
  4. Include only customers whose first order is at least one full window old.
  5. Compare the two groups.

Read it honestly. Show counts, not just percentages: 6 of 40 and 60 of 400 are both 15%, but only one is reliable. The groups also differ: code users may arrive from other channels and products, so repeat the split for your top product or channel if volume allows. A lower repeat rate for discounted-first customers is a flag, not a verdict. It can mean the code attracted bargain-hunters, which is an acquisition-quality problem with a different fix from habit dependency.

Number 4, repeat rate by first-order type: two numbers side by side, window stated.

Step 4: See where the discount dollars go

In the same sheet, flag each order as first or returning (the customer has an earlier order) and total the Discount Amount going to returning customers. If a large share goes to people who already know you, you are mostly rewarding behaviour that was going to happen. That is habit dependency.

Step 5: Put your real margin under it

Shopify’s profit reports use the cost per item you have recorded, and report profit only for products and variants that had a cost recorded at the time they were sold. Shopify also notes that discounts lower net sales and so margin, which is why a product’s details-page margin (based on full price) and the profit report can differ. If cost per item is blank, fill it in first. Our contribution margin per order worked example builds the full per-order picture.

What counts as “dependent”?

I cannot give you a threshold. No industry cut-off I could verify at a primary source exists, and a made-up “over 30% of orders means dependent” would be worse than nothing. Use rules relative to your own store:

SignalReads as healthyReads as dependent
Discounted-order shareFlat or falling over 12 monthsRising quarter after quarter
Repeat rate by first-order typeSimilar for both groupsDiscounted-first customers repeat much less, or only with a code
Where discount dollars goMostly to new customers you chose to acquireMostly to returning customers
Pause test (taper step)Orders dip, then recover to a profitable levelOrders fall and stay down

What a 10-point discount does to break-even ROAS

A discount is not 10% of revenue. It is 10 points off your price while the cost of making and sending the product stays the same, so the whole discount comes out of what is left over. These numbers are illustrative; replace them with your own.

Assumptions (A$, excluding GST): price A$100; product cost A$40; packaging and shipping you pay A$10; payment fees assumed at 3% of the price paid (check your rate); returns ignored. Contribution per order is price paid minus those costs, before ad spend. Break-even ROAS is price paid divided by contribution per order, the ROAS at which ad spend uses up all the contribution (our break-even ROAS guide goes through the formula).

ScenarioContribution per orderBreak-even ROAS
Full price (A$100)A$47.002.13
10% off (A$90 paid)A$37.302.41
20% off (A$80 paid)A$27.602.90

Check the 10% line: A$90 minus A$40, A$10 and A$2.70 in fees leaves A$37.30, and A$90 divided by A$37.30 is 2.41. The discount took A$10 off the price but A$9.70 off contribution after the fee saving, a fall of about 21%. Three consequences follow.

1. The ROAS you need goes up. If your reported ROAS stays at 2.3, you make a small profit at full price and lose money on every 10%-off first order. This assumes your ad platform reports revenue as the amount the customer paid. Confirm that in your setup; if it reports the pre-discount price, your ROAS flatters you.

2. You need more orders to stand still. To earn the same total contribution you need A$47.00 divided by A$37.30 times as many orders: about 26% more at 10% off, about 70% more at 20% off (A$47.00 divided by A$27.60). In conversion terms, if your rate was 2.0%, a 10% discount must lift it to roughly 2.5% to break even on contribution per session, and a 20% discount to about 3.4%. Whether yours does is the question the taper tests.

3. The same dashboard ROAS hides different profit. Suppose the platform shows 2.5 in all three cases.

ScenarioAd spend per order at ROAS 2.5Left after ads, per order
Full priceA$40.00A$7.00
10% offA$36.00A$1.30
20% offA$32.00-A$4.40

Same ROAS: A$7.00 profit, A$1.30 profit, a A$4.40 loss. A discount can lower your cost to win an order by lifting conversion, which is why it feels like it works. The point is to measure that lift against the larger loss per order.

Two limits. This is a first-order view; a discounted first order that leads to repeat full-price orders can be a good trade, which is why step 3 matters and why our post on first-order profitability on Shopify carries the maths through to payback. And it ignores returns, which can change real margin.

Why a deeper code is the wrong fix

When sales stall, the instinct is to go from 10% to 15%. Each extra point costs about a dollar of contribution in the example, so you need a bigger conversion lift for the same profit. A deeper discount gives no new reason to buy. It only removes one reason not to.

Ask what the discount is covering. A shopper who needs 10% off often has a doubt the page has not answered: is this worth the price against the cheaper option, will it work for me, when will it arrive and what does it cost to send back, and do people like me trust this brand? If the page answers those, a smaller discount, or none, may convert. If not, the discount is doing the page’s job and you pay about A$9.70 of contribution each time.

Find the real reason people hesitate

  • Session recordings and heatmaps. Watch sessions that reach a product page or cart and leave (Microsoft Clarity is one tool). Look for scrolling past shipping and returns information, repeated taps on the price, and visits to the returns policy before leaving. Our product page CRO checklist lists what to check.
  • Support and chat questions. Count how often “do you have a code?” and the same few questions repeat. Each is a gap on the page.
  • Reviews, yours and your rivals’. What do people warn about? Answer it before the shopper reads it.
  • A one-question survey. Ask recent buyers “What nearly stopped you buying today?” Answers cluster quickly, and each cluster is a page fix.

Page and offer fixes to try before cutting price

  1. Say what it is and who it is for on the first screen. If buyers cannot tell, price is all they can compare.
  2. Put proof next to the decision. Reviews with specifics, customer photos, the ingredient or material detail that explains the price. Claim only what is true and checkable.
  3. State delivery and returns where the choice is made.
  4. Offer a bigger basket, not a cheaper one. A bundle, a “buy two” price or a free-shipping threshold raises order value without cutting the price of a single item. Check each with the contribution maths first; our post on bundles and upsells does.
  5. Make the offer one sentence, with its conditions beside it. A confusing offer may work less well than a plain, smaller one, so test it.

I am not claiming any of these replaces a discount, or by how much. They are where to look first.

The taper plan

The goal is not zero discounts. It is to know what each discount is for and stop paying for the ones that do nothing. This is my suggested sequence, not a benchmark schedule; timing depends on your order volume.

Timing note. If you are reading this in Black Friday week (Friday 27 November 2026; Cyber Monday is Monday 30 November), do not taper now. Run the sale as planned, record results against your baseline using the Black Friday checklist, and start in December or after the post-Christmas period.

PhaseWhat changesWhat you watch
0. BaselineNothing customer-facing; set stop rulesNumbers 1 to 4, conversion rate, contribution per order
1. Close the leaksRemove pointless codes; fix stackingDiscounted-order share, discount per order
2. Conditional offersThresholds, bundles or gifts replace some percent-offAverage order value, contribution per order
3. Reduce depthCut remaining percentages one step at a timeContribution per session, orders, repeat rate
4. Protect full-price buyersHand-off to email on who sees whatDiscounted orders from returning customers
5. ReviewCompare to baseline; decide what staysEverything, against the stop rules

Phase 0: Baseline and stop rule

Record at least eight to twelve weeks of the four numbers, plus conversion rate, average order value and contribution per order, by device. Write the stop rule before changing anything, for example: “If contribution per session over four weeks is more than X% below baseline, we pause the step.” Choose X from your margins; I will not invent one.

Contribution per session is conversion rate times contribution per order. It beats conversion rate alone, because removing a discount can lower conversion rate while raising what you keep per order.

A proper A/B test needs enough traffic. Without it, use a clear before-and-after window with nothing else changing; our post on A/B testing with low traffic explains when each is honest.

Phase 1: Close the leaks

Leaks are the cheapest place to start, because the people using them were never the buyers you chose. List every active discount in Shopify with why it exists and when it ends.

  • Codes that should have expired. Staff, influencer, affiliate and one-off recovery codes that still work.
  • Stacking. Shopify’s help centre says a customer can use a maximum of five product or order discount codes and one shipping discount code per order, a store can have up to 25 active automatic discounts, and discounts combine only where each one’s combination setting allows it; if they cannot combine, the best discount for the cart applies. Test a real cart on your phone.
  • Always-on pop-up and footer codes. If every visitor sees the welcome code, ask whether they should.
  • Shareable links in old posts or partner pages keep working until switched off.
  • Public codes. If the search from the signs section found one, retire it.

Phase 2: Conditional offers instead of blanket percent-off

Shopify’s discount types include amount off products or orders, buy X get Y and free shipping, and buy X get Y can apply as a code or automatically when the cart meets the requirement. Tiered discounts and more complex logic need a discount app (or, on Shopify Plus, Checkout Blocks), per the help centre.

  • Free shipping above a threshold nudges basket size up. Set it above your current average order value and check the margin at that point.
  • Buy X get Y or a bundle price moves customers to more units rather than a lower price on one.
  • A gift with purchase has a known cost and does not reset the price in the shopper’s head. A gift that costs A$12 to buy and ship is a 12-dollar discount in a different costume, so run it through the contribution maths.

Phase 3: Reduce depth, one step at a time

Do not move from 20% to 0%. Cut one step (say 20 to 15), hold it and look. Step sizes are yours. What matters:

  • One change at a time. Change depth, a banner and a product page together and you will not know which did what.
  • Hold for a full buying cycle. For a product reordered every two months, two weeks says little. Aim for enough orders that a handful cannot swing the answer.
  • Keep the welcome offer for last. It drives first orders, so touch it after you have the step 3 repeat-rate numbers.

Phase 4: Protect full-price buyers (the hand-off)

Who sees which offer is email and SMS territory, which I do not run. If you use Klaviyo, Klaviyo’s help centre describes a repeat-purchaser segment as What someone has done (or not done) > Has Placed Order > is at least 2 > over all time, built on the Placed Order metric from your store integration. Ask whoever runs your email for:

  1. A segment of customers with two or more orders.
  2. A way to separate customers who have only ever bought with a code from those who paid full price. Ask whether the order data reaching the email platform includes the discount used. I have not verified that for any integration, so ask rather than assume.
  3. Fewer or no sitewide discount messages to repeat purchasers, with a non-price reason to buy (new arrival, restock, early access).

For the wider picture, see how email lifts customer lifetime value on Shopify.

Phase 5: Review and decide what stays

After each step, compare to baseline on the date you wrote down. For every discount left, you should be able to say what it is for, who gets it, what it costs per order and when it ends. If you cannot, remove it.

When discounting is the right call

I am not saying never discount. Discounts earn their place when:

  • Clearing stock you want gone, where the alternative is holding it.
  • A deliberate acquisition offer whose first-order loss you have worked out and can recover through repeat purchases visible in your cohort data.
  • Real events like Black Friday, where shoppers expect offers. State the terms plainly, and read the ACCC’s own guidance on sale advertising before you publish price claims; our Black Friday checklist points to it. This is general information, not legal advice.
  • Loyalty rewards for customers who have earned them, not everyone.

What these share is that you can name the purpose and the cost. Dependency starts when you cannot.

Where Prism3 fits, and where it does not

We do not run ads, email or SMS. Our work on this problem sits around the discount: finding why visitors hesitate, fixing the product page and offer so price is not doing all the persuading, and checking the tracking behind your numbers. The CRO service starts with a six-phase audit that includes a tracking check, and its qualitative and copywriting phases look at the questions in “Find the real reason people hesitate”. Discounting, segmentation and send decisions stay with you or whoever runs your email.

Key takeaways

  • Dependency means cutting the discount loses more than it was worth, as acquisition (first orders need a code) or habit (repeat customers wait).
  • Measure four things: discounted share of orders, discount rate (discounts over gross sales), discount given per order, and repeat rate for discounted-first against full-price-first customers.
  • Flag discounted orders by Discount Amount in the order export. The Discount Code column leaves out automatic discounts, and compare-at price sales are not discounts in Shopify’s reports.
  • Illustratively, 10% off cuts contribution per order from A$47.00 to A$37.30, lifts break-even ROAS from 2.13 to 2.41 and needs about 26% more orders.
  • A deeper code is rarely the fix. Find what it is covering and answer it on the page.
  • Taper in steps: baseline and stop rule, close leaks, conditional offers, smaller depth, hand-off to email, review. Not in sale week.
  • No verifiable source gives a “dependent” threshold. Compare against your own baseline.

FAQs

How do I know if my Shopify store is discount dependent?

Run four numbers: the share of orders with a discount, discounts over gross sales, discount given per order, and repeat rate for discounted-first against full-price-first customers. A rising share over several quarters, or discounted-first customers who repeat much less or only with a code, is a flag. The cleanest test is stepping a discount down against a baseline.

How do I stop customers waiting for discounts?

Make discounts less automatic. Close old and public codes, replace blanket percent-off with conditional offers like free-shipping thresholds or bundles, cut depth one step at a time, and keep full-price buyers away from sitewide codes. Then give the page the persuading work: clear value, proof, and delivery and returns information at the point of decision.

What does a 10% discount do to break-even ROAS?

It raises it, because the whole discount comes out of contribution. In the illustrative example above, contribution falls from A$47.00 to A$37.30 and break-even ROAS rises from 2.13 to 2.41. Use your own costs: break-even ROAS is the price paid divided by contribution per order.

Can I see discounted against full-price repeat rate in Shopify’s cohort report?

Not directly. The filters Shopify lists for a cohort’s first orders are sales channel, marketing channel, marketing type, product name and subscription, and a discount filter is not among them as at 31 October 2026. Export orders, flag each customer’s first order by Discount Amount, and compare repeat rates in a spreadsheet with the window stated.

Will removing a discount hurt my conversion rate?

It might lower it, which alone does not mean the change failed. Judge it by contribution per session (conversion rate times contribution per order) against baseline, over enough orders to be sure. If that holds or rises while conversion rate dips, you keep more of each sale. If it falls below your stop rule, pause and review.

Keep reading

Want a second opinion on what discounts are doing to your first order?

If discounts are doing the persuading, the page and the offer are doing too little of it. Book a free 30-minute diagnostic: we look at where your store loses buyers after the click, using your own numbers, and tell you what to fix first. We do not run ads or email. No pitch. No email gate. Our Shopify CRO service is where that work sits.

Free 30-min diagnostic

Seen enough?
Book a free diagnostic.

We'll look at where your store loses buyers after the click and what to fix first. No pitch. No email gate. 30 minutes.

More from Prism3