Shopify discounts end to end — seven mechanisms, native vs apps vs Functions, B2B price lists, stacking, ROI math, playbooks, edge cases and compliance.
Published
Updated
·
Estimated reading time
Roughly 27 minutes at an average reading pace of 230 words a minute. It’s approximate and counts the main text only — not quizzes or collapsed FAQ answers.
·
How this page was written
Written by AI from official sources. Separate AI agents check its facts and links; a human editor sets the direction and the rules and checks that the page is complete and displays correctly. No person checks its facts or wording.
Some links in this article are affiliate links. If you sign up for a Shopify store through these links, we may earn a commission at no extra cost to you.
Start with Shopify's native discounts — automatic discounts, codes, BOGO and free shipping — add a public Function app only for a specific gap, and consider a custom Function app only on Plus.
Set the discount from a margin floor, not intuition: at a 35% margin, a 20% promo needs 133% more orders just to hold gross profit, and a 30% promo needs 600% more.
Run one mechanism per campaign, model the worst-case basket, give every promo a hard end date, and measure gross profit rather than revenue.
What's New Since Publication: Updated since publication · 4 changes
Bold Custom Pricing is no longer listed on the Shopify App Store
The listing for Bold's Custom Pricing: Wholesale B2B app, which this guide named as a B2B add-on from $29/mo, now reads "This app is not currently available on the Shopify App Store" (checked October 11, 2026). We removed it from the app table below; Wholesale Gorilla and Regios remain, with pricing re-read on the same day.
Shopify added discounts to Rollouts: a new offer can go to a portion of online store traffic first, or be tested against your existing offers before a wider launch. The KPI section now covers where that fits next to your own promo post-mortem.
Same-item product-discount stacking arrived — but only for Shopify Plus
On July 15, 2026 Shopify started allowing multiple product discounts on the same item — including a discount code on top of an automatic product discount — grouped and matched through discount tags. The changelog names no plan boundary, but Shopify's discount-combinations guide does: same-item product stacking is Shopify Plus only. On other plans the rule this guide originally described still holds, with product discounts combining only across separate items. The stacking section below now covers both lanes.
Discounts can now be assigned directly to a market
Shopify added an eligibility selector that assigns any code-based or automatic discount to specific markets. Stores on the Basic plan and above using the new version of Markets can now restrict a discount to a country or region, B2B, or retail market (channel markets excluded) natively, without a separate Function app to gate it. The percentage itself still stays universal across markets — Markets varies price and currency, not the discount rate.
On Shopify, a discount is any rule that reduces what a customer pays at checkout — either on a product, the cart total, or shipping. The Shopify Admin treats discounts as a first-class object: each one has a type, eligibility, schedule, and combinability flags. Total and per-customer usage limits belong to discount codes only: a code can cap its total uses or allow one use per customer, while an automatic discount has neither option. Public App Store apps containing Functions can extend the type on any plan; only Plus stores can use custom apps containing Shopify Function APIs.
That uniformity matters because it means you don't need an app to do most of what merchants think requires one. Native Shopify covers automatic discounts, codes, BOGO, free shipping, and, since April 2, 2026, B2B catalogs on Basic, Grow, Advanced, and Plus. Public App Store apps that contain Discount Functions can extend any plan; building your own custom app with Function APIs requires Plus.
These seven are what Shopify ships natively. Read them as a menu: pick the one whose strengths match the goal you actually have, not the one that's most fashionable that quarter.
Automatic discounts
No code required
Apply automatically at checkout when conditions are met (cart total, product set, customer segment). Best for site-wide sales, Black Friday, or always-on customer-tier discounts. Note: a store can have at most 25 active automatic discounts, and that total includes app-based discounts (the app-based limit was raised from 5 in November 2024).
Discount codes
Acquisition & influencer
Manually entered at checkout, where codes aren't case sensitive. Best for influencer codes, email pop-ups, retargeting, and abandoned-cart recovery. Cheap to issue, easy to track per-channel — but the most diluted to your brand.
Buy X get Y (BOGO)
AOV uplift
Buy two get one free, buy a shirt get socks free, etc. Native in Shopify with both code-based and automatic variants. Strongest mechanic for raising AOV without straight discounting the lead product.
Volume / quantity breaks
Bulk & B2B-ready
Tiered pricing per quantity (e.g. 10% off at 5 units, 20% off at 10). Native via catalog volume pricing and quantity rules (B2B); for B2C a native discount can require a minimum quantity of items, and discount apps add multi-tier ladders. Margin-friendly because the discount unlocks at scale, not at first unit.
Free shipping
Highest lift per margin point
Threshold-based or unconditional. Consistently the cheapest way to lift conversion in DTC, because extra costs at checkout — shipping, tax and fees — are the top reason US shoppers give for abandoning a cart in Baymard's survey once 'just browsing' is set aside. Configure once, A/B-test the threshold.
B2B price lists & catalogs
Basic, Grow, Advanced & Plus
Since April 2, 2026, catalogs with tailored pricing, volume discounts, and quantity rules are included on Basic, Grow, Advanced, and Plus — up to three active catalogs across all your B2B markets, or unlimited catalogs with direct company/location assignment on Plus. To use B2B catalog features on the Basic, Grow, or Advanced plans, your store must be using new Shopify Markets.
Gift cards
Cash equivalent, deferred revenue
Native on every Shopify plan. Sold as a product or issued manually; redeemed at checkout like cash. Useful for refunds-without-cash, loyalty rewards, and influencer seeding. Note: gift cards are deferred revenue, not a discount cost — track them separately in the P&L.
Mechanism vs Goal Map
Key takeaway
No mechanism wins on every axis. The radar below scores each one against six common merchant goals — use it as a fast filter before you pick the tool.
Native vs Apps vs Shopify Functions
Key takeaway
The decision tree below is the one I run with every store: start native, add a public Function app only for a specific gap, and consider a custom Function app only on Plus when a vendor app is too rigid or expensive at scale. Inverting that order is how stores pay for behaviour Shopify already includes.
Use Case → Right Tool
Use case
Native Shopify
App
Functions
Site-wide % off (BFCM)
Automatic discount
—
—
Influencer / email codes
Discount codes
—
—
Tiered cart total (spend $X get Y%)
Automatic discount
—
Custom logic if combined
BOGO / Buy X get Y
Buy X get Y discount
—
—
Free shipping over threshold
Shipping discount
—
—
Wholesale price lists by B2B market
B2B catalogs (Plus, or Basic/Grow/Advanced with new Shopify Markets)
Optional for extra workflows
—
Competitor-based dynamic pricing
—
Prisync, Dealavo
—
Custom stacking rules across products
Combinable settings (limited)
Promo apps
Discount Functions
Geo or market-based pricing
Markets pricing
Regios, Geo apps
Discount Functions
Hide discounted price from select customers
—
Limited
Discount Functions
Gift card issuance & redemption
Gift cards (all plans)
Rise.ai for advanced gifting
—
Loyalty points & tier discounts
—
Smile, LoyaltyLion, Yotpo
Functions for redemption rules
Abandoned-cart recovery code
Discount codes (manual)
Klaviyo, Shopify Messaging automations
—
Editorial mapping based on current Shopify capabilities. Confirm app fit against your specific stack before installing.
Native vs Apps vs Functions — Choose by Constraint
Stay native
Goal fits one of the seven native mechanisms
Under 25 active automatic discounts (app-based included)
No per-customer dynamic pricing
No bespoke stacking rules required
B2B fits within three active catalogs across all markets
Reach for apps or Functions
More than three active B2B market catalogs
Competitor-based or AI repricing
Geo-pricing without using Markets
Custom stacking native settings can't express
Direct company/location catalog assignment (Plus)
Editorial decision frame; revisit annually as Shopify ships new native discount types.
Which Path Fits Your Store? (Quiz)
Five questions. The result tells you whether to stay native, add one public app, or — on Plus — invest in a custom Functions app. Be honest about engineering capacity; getting that wrong is the most common reason a discount programme stalls.
Discount Path PickerFind the lightest setup that solves your goal mix.
Discount Path PickerFind the lightest setup that solves your goal mix.
Question 1 of 5
What's the primary goal of the next promo you're planning?
The Discount Math: Margin Before Mechanic
Key takeaway
Most discount programmes fail at this step — not at setup, not at execution. The maths are not glamorous, but they are decisive: a discount of d off a product whose contribution margin is m requires extra sales of d / (m − d) just to keep the same gross profit. So a 20% promo at 35% margin needs 133% more orders to break even, and a 30% promo at 35% margin needs 600% more orders. At a 30% margin a 10% discount already needs 50% more orders to hold gross profit, and the requirement climbs steeply below that.
Break-Even Uplift by Discount %
Key takeaway
The single rule that prevents most discount disasters
Cap the discount at margin minus 5–10 percentage points. Those 5–10 points are your minimum acceptable contribution per order, not a safety rating on the discount itself: at a 35% contribution margin, a 25% discount still needs 250% more orders to hold gross profit, and a 30% discount needs 600%. Compute (margin − discount) — only when that goes negative, past 35% in this example, are you paying customers to take product. Make this floor a hard config in your promo planning sheet, not a vibe.
Discount ROI Calculator
Key takeaway
Plug in your AOV, baseline orders, contribution margin, the discount you're considering, and the uplift you expect. The calculator returns net profit before and after, the absolute and percentage profit delta, and — most importantly — the minimum uplift required to keep last month's profit. If your honest forecast is below that number, the promo loses money before any creative is shipped.
Discount ROI Calculator
Model gross profit before, during, and after a promotion. The break-even number tells you the minimum uplift you need just to keep last month's profit.
Baseline revenue
$40,000
Profit $16,000
Promo revenue
$47,600
Profit $14,000
Profit delta
$-2,000
-12.5% vs baseline
Break-even uplift
60%
Minimum extra orders, as a % of your baseline orders, just to match baseline profit
Below break-even — needs more uplift
* Model assumes COGS scales linearly with units and ignores fixed costs, ad spend, and refunds. Use it for directional decisions, not P&L.
Conversion Lift vs Margin Hit by Promo Type
Key takeaway
Different mechanics buy conversion at very different prices. On this chart's numbers, free shipping buys the most conversion per margin point (8.0 pp of lift for 2.5 pp of margin), followed by tiered spend thresholds (3.0 for 2.0); 10% sitewide and loyalty/VIP perks buy the least (4.5 for 7.0 and 2.5 for 3.0). First-order codes bring the biggest lift (9.5 pp) and the biggest margin hit (8.5 pp).
Step-by-Step Setup in Shopify Admin
Key takeaway
The Shopify Admin makes creating a discount almost suspiciously easy: Discounts → Create discount → pick type → set rules → save. Which is exactly why so many merchants ship promos that are technically fine and economically wrong. The seven steps below put guardrails around that flow.
1
Define the single goal
Acquisition, AOV uplift, retention, clearance, or B2B segmentation. One goal per promo. Mixing two is the #1 reason promos look 'meh' in reporting — you can't tell which lever moved.
2
Check the margin floor
Compute (margin − discount). If it goes negative, you're paying customers to take product. Cap the discount at margin minus your minimum acceptable contribution per order — usually 5–10 percentage points.
3
Pick the mechanism
Match the goal to one mechanic from the table above. Acquisition → code; AOV → BOGO/volume; retention → automatic with customer tag; B2B → catalog price list. Resist combining mechanics until iteration #2.
4
Build it in Shopify Admin
Discounts → Create discount → choose type. For automatic discounts, pick eligibility (all customers, specific customers, customer segments, or markets). Set start/end dates explicitly — open-ended promos almost always run too long.
5
Configure combinations carefully
Decide whether the new discount can stack with order, product, or shipping discounts. The default is usually 'no' — open it only when you've modelled the worst-case stacked margin.
6
QA on a draft order
Create a draft order with the conditions, apply the discount, and verify the final price matches your model. Bad discount logic is invisible in the admin and very visible on a $0 order in reporting.
7
Measure margin, not just revenue
Track gross profit, refund rate, and AOV by promo (not just total revenue). 'Revenue uplift' on a discount is meaningless without the margin number — that's how merchants 'grow' themselves bankrupt.
Method, value, eligibility and minimums sit on one form, with a running summary of the rules on the right.
Video: Automatic Discounts in Admin
Key takeaway
A short walkthrough from Shopify Help Center on building an automatic discount end-to-end in the admin — useful as a reference if you're configuring your first one.
How to Create Automatic Discounts — Shopify Help CenterOfficial Shopify Academy walkthrough of building an automatic discount in the admin.
Use-Case Playbooks
Key takeaway
Most stores need fewer playbooks than they think — and most of those playbooks are variations on six recurring patterns. Each one below pairs a goal with a mechanic, an opening cap, and the channel/app stack that ships it without bloat.
1
Welcome / first-order popup (10–15% code)
Trigger an email-capture popup after 10–20 seconds or 30% scroll. Issue a single-use code (e.g. WELCOME10) with 14-day expiry, valid on first order only, excluding sale items. Apps: Klaviyo, Privy, or native Shopify Forms + Shopify Messaging. Cap at 15% — anything deeper trains discount-hunting from day one.
2
Abandoned-cart recovery (small recovery code)
Send a 3-email sequence: 1h (no discount), 24h (free shipping), 72h (5–10% code, single-use). Use Shopify Messaging automations or Klaviyo. Never lead with the discount — we found no benchmark that compares recovery rates with and without one, so hold the margin back for the last email instead of spending it on customers who would have returned anyway.
3
Loyalty / VIP tier discounts
Use customer tags + automatic discount eligible to a segment (Bronze/Silver/Gold). For points-based loyalty (earn → redeem), install Smile, LoyaltyLion, or Yotpo Loyalty. Keep tier perks small (5–10%) but compounding (free shipping + early access).
Plan ≤6 sitewide promo windows per year: BFCM (5 days), Boxing/Year-end (7 days), Valentine's, Mother's/Father's Day, Back-to-School, brand birthday. Each with hard end date, fixed % cap, and category exclusions defined 30 days in advance. Predictable beats deep — fatigue kills margin faster than depth.
Issue unique codes (CREATOR10) per partner so each creator's sales and commission are tracked — natively in Shopify Collabs (free to install, though Shopify adds a processing fee to every automatic commission payment — see the tooling notes below) or in a third-party affiliate app. Price the code and the commission together, so the discount plus the payout still clears your margin floor.
6
Win-back for lapsed customers (90+ days)
Identify customers with no order in 90/180 days via customer segments. Send a one-time, time-limited code (15% / 7 days). Track repeat-purchase rate vs control.
Tooling notes for the playbooks above: the loyalty pattern usually ships with Smile or LoyaltyLion — for the full points-economics breakdown, see our Shopify loyalty program guide; abandoned-cart and welcome flows run cleanly on Klaviyo or native Shopify Messaging — and whether the cart flow is worth paying for at all, against Shopify's free built-in recovery, is exactly what our abandoned cart recovery guide prices out. For the full setup, see our Klaviyo on Shopify guide.
Don't roll out three playbooks the same quarter — you won't be able to attribute lift to any single mechanic. Ship one, measure for 30–60 days, lock its config, then add the next.
Combining & Stacking Discounts
Key takeaway
Shopify groups discounts into three categories — Order, Product, and Shipping — and every combination must be explicitly allowed: each discount's own settings say what it combines with (official rules). Multiple discounts apply only when the setting on each discount allows it. The same guide also gates two pairings by eligibility — product discounts with order discounts, and order discounts with other order discounts, are each marked "available only to eligible merchants".
The ceiling moved on July 15, 2026: Shopify Plus stores can now tag discounts into groups and stack several product discounts on the same item — a discount code on top of an automatic product discount included. On every other plan the old rule stands, with product discounts combining only across separate items. That opt-in design is a feature: most accidental 35–40% discounts come from someone toggling a promo as combinable without checking what else is live.
1
Know the combination rules
Shopify groups discounts as Order, Product, and Shipping, and combinations happen only where every applied discount is marked combinable. Since July 15, 2026 Shopify Plus stores can also stack tagged product discounts on the same item; on other plans product discounts pair only across separate items.
2
Default to non-combinable
Combinability is opt-in. Toggle 'Combines with other discounts' only after you've calculated the worst case (lowest-margin product × highest stacked discount).
3
Cap with minimum prices
Use price floors per product through a public Function app, or on Plus through a custom Function app, so no combination drops below your hard margin floor. Easier than reasoning about every possible stacked combo.
4
Test the stack live
Build a test cart with every active promo applied. If the cart total is uncomfortable, the rules are wrong — not the cart.
The 'worst basket' test
Before publishing a combinable discount, build the worst possible cart: lowest-margin product, highest stacked discount, free shipping, smallest qualifying quantity. If that basket's gross margin makes you wince, the combinability flag is wrong — not the promo.
Discounts for B2B & Wholesale
Key takeaway
Since April 2, 2026, native B2B is no longer a Plus exclusive. Basic, Grow, Advanced, and Plus all include company profiles and catalogs with tailored pricing, volume discounts, quantity rules, net payment terms, ACH payments (United States only), and vaulted credit cards.
One prerequisite applies to the catalogs on the first three plans: Shopify states that to use B2B catalog features on Basic, Grow, or Advanced, your store must be using new Shopify Markets. A catalog is assigned through a B2B market, and that assignment is what keeps wholesale pricing off your DTC product pages without a public code.
That barrier runs one way only: since June 23, 2026 Shopify switches discounts for B2B on automatically for new B2B stores and existing ones carrying no active or scheduled discounts, so on those stores a retail code left eligible for All customers also reaches wholesale buyers by default.
1
Catalog → markets → companies
Since April 2, 2026, Basic, Grow, Advanced, and Plus stores can create company profiles and B2B catalogs. Basic/Grow/Advanced assign up to three active catalogs across all B2B markets, and on those three plans catalog features require your store to be using new Shopify Markets; Plus adds unlimited catalogs and direct assignment to a specific company or location.
2
Quantity rules per SKU
Use quantity rules (min, max, increment) per product or variant to enforce case packs and bulk minimums. Combine with tiered prices for true volume discounting.
3
Volume pricing tiers
Each catalog supports volume pricing — e.g. 5% off at 24 units, 10% at 100. Cleanest way to do B2B discounts without public codes leaking to DTC customers.
4
Net payment terms (optional)
Pair catalog pricing with net payment terms, vaulted credit cards, or ACH payments (United States only) on Basic, Grow, Advanced, and Plus. Plus is required for deposit requirements, partial payments, and payment requests per fulfillment.
Shopify Plus becomes the relevant upgrade when you need unlimited catalogs, direct catalog assignment to a specific company or location, deposit requirements, partial payments, or payment requests per fulfillment. Contextual checkout and storefront with Shopify Markets require Advanced or Plus. See our B2B wholesale guide for the complete plan boundary.
Advanced: Shopify Functions & Apps
Key takeaway
Shopify Scripts were the legacy Plus-only tool; editing and publishing stopped on April 15, 2026, and every published Script was deactivated on June 30, 2026. Shopify Functions are the replacement.
Stores on any plan can install public App Store apps containing Functions, while only Plus stores can use custom apps containing Shopify Function APIs. Discount functions run concurrently and have no knowledge of one another; their outputs combine according to the discount node's combination rules.
“Stores on any plan can use public apps that are distributed through the Shopify App Store and contain functions. Only stores on a Shopify Plus plan can use custom apps that contain Shopify Function APIs.”
Flowchart rule builder on Shopify Functions; 7-day trial, no free tier
Pricing as listed on the public Shopify App Store on October 11, 2026. Always verify the current tier on the live listing.
Edge Cases & Operations
Key takeaway
These are the questions that surface in week three of running real promos at scale — none of them are dealbreakers, but each one creates an avoidable fire when discovered live. Configure them upfront and they vanish from your roadmap.
Discount + tax interaction
Pre-tax by default
Shopify applies discounts to the order subtotal before tax — so a 20% discount also reduces the tax owed. EU/UK merchants on inclusive-tax pricing should test how the discount displays on storefront vs invoice; mismatches confuse customers and accountants.
Shopify Markets & multi-currency
Per-market pricing
Markets supports per-country price adjustments and currency rounding, but discount % stays universal — a 20% code is 20% in every market. Since May 7, 2026, stores on the Basic plan and above that use the new version of Markets can assign a discount to specific country or region, B2B, or retail markets (not channel markets), so only customers in those markets can use it — see how to limit a discount code to one country. To vary the amount per market within one code, use a public Function app, or on Plus a custom Function app.
POS discounts
In-person & omnichannel
Fixed-value and percentage codes from your admin also work at POS checkout, with or without POS Pro, and can't be kept online-only; staff can also add custom line-item and cart discounts, which you limit through POS staff permissions. Automatic discounts apply at POS only on POS Pro locations, through Apply on POS Pro locations or a retail market, and discounts created by third-party apps can't be limited to one channel. Our answer on using a discount code in Shopify POS covers the Apply discount codes permission and the exchange exception.
Refunds on discounted orders
Refund the paid price
Shopify lets you refund an order in part, up to the total available to refund — the original amount of the order — and you can edit the refund amount manually. Decide in your return policy how a Buy X get Y return is handled — for example, the free item comes back too or its value is deducted — and rehearse it on a test order. Write that rule down before the promo starts, or watch refund margin spiral.
Hitting the 25 automatic-discount cap
Consolidate or restructure
Shopify allows a maximum of 25 active automatic discounts per store, and that total includes app-based discounts, so native admin-created automatic discounts count toward the same cap. When you hit it: (1) retire expired or zero-uplift promos, (2) consolidate narrow rules into one segment-targeted discount, or (3) ask the public app vendor — or your Plus custom-app team — to merge logic into fewer discounts.
Bulk / unique-code generation
Per-recipient codes
Generate unique codes in bulk with an app like Dyno, which can also import codes via CSV — the Shopify admin exports discounts to CSV but can't import them — within a store's cumulative ceiling of 20,000,000 unique discount codes. Useful for influencer drops, gift-card alternatives, or anti-leak campaigns where you want to revoke individual codes if they leak to coupon sites.
For brick-and-mortar and omnichannel merchants, behaviour at the till is documented in Shopify POS; for refund mechanics on discounted orders, the safest test is a draft order rehearsal before the campaign goes live.
Industry Benchmarks: What Looks "Normal"
Key takeaway
Discount norms vary widely by vertical — what looks aggressive in electronics is restrained in apparel. The table below is an editorial view of typical and peak discount depths observed on Shopify stores per category, useful as a sanity check against your own promo plan.
Typical Discount Depth by Vertical
Vertical
Typical year-round
Peak event
Note
Apparel & fashion
15–25%
30–40% (BFCM, end-of-season)
Highest discount-cadence vertical; manage with hard end dates
Beauty & cosmetics
10–20%
25–30% (BFCM, holiday)
Free shipping outperforms % off in lift-per-margin
Consumer electronics
5–10%
15–20% (BFCM, back-to-school)
Margin floors tight; bundle discounts beat % off
Food & CPG (subscription)
20–40% first order
50% trial only
First-order deep, LTV-positive only with auto-ship
Home & furniture
10–20%
25–30% (Memorial, Labor, Boxing)
Free shipping is the killer mechanic given freight costs
Health & supplements
10–15%
20% (BFCM, New Year)
Subscribe-and-save (10–15%) beats one-off codes
B2B wholesale
Tiered: 5 / 10 / 15%
Quote-based per account
Volume tiers + Net 30 terms beat % off discounts
Editorial benchmarks based on patterns across Shopify merchants — not official Shopify data. Use as a sanity check, not a target.
Compliance, Trust & Brand
Key takeaway
Two compliance regimes can apply to a Shopify merchant running discounts. The EU's Price Indication Directive (Omnibus) requires that a price reduction announced to customers in the European Economic Area show the lowest price applied in at least the prior 30 days as the reference — Shopify's guide notes it might not apply to personalized reductions such as loyalty discounts or an individual discount code — and each member state sets its own penalties. In the US, supplier MAP (Minimum Advertised Price) agreements forbid advertising below an agreed floor; violating MAP usually loses you the brand, not a fine.
Both are easy to respect with discipline, and both need to be configured into your promo planning sheet, not just remembered.
The trust ledger
Track share of revenue sold at discount as a quarterly KPI. When it crosses ~30%, the discount is effectively the price — you're not running promos any more, you've just relabelled your sticker. The fix isn't deeper promos; it's repricing or a clearance event followed by a discount fast.
KPIs to Track Each Promo
Key takeaway
The default Shopify Analytics "sales by discount" report is a starting point, not a verdict. Build a single sheet (or a Lightspeed/BI dashboard) that joins net revenue, discount cost, refunds, and gross profit per campaign. The six KPIs below are the minimum viable set for telling a winning promo from a vanity-metric one.
A sheet still compares a promo against last month, not against a control. Since October 2, 2026, Shopify's Rollouts can include discounts: a new offer can go to a portion of online store traffic first, or a discount change can be compared against your existing offers on conversion before it goes wider. Rollouts isn't on every plan in the same form — which plans get a true split test, and when a paid testing app still earns its fee, is what our Shopify Rollouts vs paid A/B testing app comparison sets out.
Promo KPIs — What to Watch
KPI
Why it matters
Target
Net revenue per promo
Revenue after discount cost and refunds — what the bank sees
Vs same-period baseline
Gross margin %
The only number that tells you if the promo paid for itself
≥ baseline margin − 5pp
Discount cost / revenue
Cost of the promo expressed as % of net revenue
Under 12% for healthy DTC
Order uplift vs baseline
Is the promo actually generating extra sales — or just shifting them?
≥ break-even uplift
AOV change
BOGO, threshold, and volume promos should lift AOV
+5% min, +10% target
Refund rate
Shows whether the promo pulled in orders that come back — compare against your baseline
Within +1pp of baseline
Common Pitfalls
Key takeaway
These are the four post-mortem patterns I see again and again. None require an engineer to fix; all require the founder to design the guardrails before the campaign goes live.
Always-on '20% off' becomes the price
If a code never expires, customers learn the new price is 80% of the sticker. Set hard end dates and rotate the mechanic.
Stacking that nobody modelled
Two combinable discounts plus a free-shipping rule can take 35–40% off without anyone approving that math. Default to non-combinable; open combinations one promo at a time.
Hidden segment discounts
Customer-tag discounts feel safe — until a screenshot shows the same SKU at two prices on social media. Make sure every segment-only discount has a clear, defensible rationale.
Reporting on revenue, not margin
BFCM 'breaks records' every year because revenue ignores discount cost and refunds. Build a single sheet that joins net revenue, discount cost, and gross profit per campaign.
DIY vs Hire Help
Key takeaway
The line is usually clearer than founders expect. Native discounts and native B2B catalogs are well within in-house capacity. A custom app containing Function APIs, integrations beyond three active B2B market catalogs, direct company/location pricing workflows, or stacking that requires a price-floor function are agency or in-house engineering work. When you cross that line, our guides on hiring a Shopify developer and custom Shopify development cover scoping, costs, and how to vet partners.
When to Stay DIY vs When to Hire
Stay DIY
Native discounts + one app cover all goals
Under 25 active automatic discounts (app-based included)
B2B fits within three active market catalogs
Promo reporting fits in a single sheet
Founder/CMO can model margin in their head
Hire help
Custom Function app logic on Plus
Custom automation around direct company catalogs
Price-floor enforcement across stacked promos
BI/dashboard integration for promo P&L
Price Indication Directive compliance across EEA markets
Editorial assessment of where in-house DIY ends and engineering or agency work begins.
The Bottom Line
Key takeaway
The platform supports more discount flexibility than most stores use, and far more than most stores should use. The merchants who win with discounting share three habits: they pick one mechanism per campaign, they check the margin floor before they pick the % off, and they measure gross profit — not revenue. The stores that lose at discounting tend to deploy three mechanics simultaneously, optimise to revenue, and discover the damage in the quarterly P&L. The difference is not creative; it's discipline.
Strong brands run fewer, sharper, better-measured promos. The platform makes it trivial to ship a discount in twenty minutes — your job is to make sure the twenty minutes upstream of that have already happened.
Pick the lightest mechanism that hits the goal, model the worst-case basket, then ship with a hard end date. Native first, then a public app, then — on Plus — custom Functions, and only when the margin floor allows.
Your Next Step by Stage
AuditList every active discount in your admin. Mark each with goal, margin floor, end date, and combinability — kill anything missing all four.Open Shopify Discounts docs
ModelRun your next planned promo through the ROI calculator above. If the break-even uplift looks unreachable, change the discount %, not the forecast.See dynamic pricing strategy
MeasureBuild the six-KPI promo sheet. Run it after every campaign and treat anything below the margin floor as a learning, not a failure.Browse Shopify App Store
Test your next promo on a free trial
Spin up a Shopify trial, build the discount in the admin, and validate the maths in the calculator above before shipping to live traffic.
Shopify allows a maximum of 25 active automatic discounts per store, including app-based ones. Discount codes sit outside that cap — up to 20,000,000 unique codes per store — but a customer can use at most 5 product or order codes and 1 shipping code per order. Combinability then decides what stacks at checkout.
Automatic discounts apply at checkout when conditions are met — no customer action required. Discount codes must be entered manually. Use automatic for site-wide sales, segment-only pricing, and BOGO. Use codes for influencer attribution, email campaigns, abandoned cart, and any time you need per-channel tracking. Both can be set up natively from Discounts in the Shopify admin.
Yes, when each discount's 'Combines with' settings allow it; a custom discount applied manually to a POS cart or draft order always applies. Discounts are Order, Product or Shipping. Since July 15, 2026, Plus stores can stack product discounts on one item; other plans combine them only across separate items, and on those plans Buy X get Y items take no further product discounts.
Shopify gift cards are native on every plan and behave like cash at checkout — not as a discount. Use them as a refund alternative, loyalty reward, or influencer-seeding tool. Track them as deferred revenue, not promo cost: redemption hits the P&L only when the card is used, and unredeemed balance accrues until expiry. They sit outside the discount engine entirely, so they never compete with your active discount cap.
Since April 2, 2026, B2B catalog volume pricing and quantity rules are included on Basic, Grow, Advanced (new Markets required), and Plus. For DTC, a native amount off discount — code or automatic — can require a minimum quantity of items, so 'buy 3, get 10% off' needs no app; public App Store apps, or custom Function apps on Plus, add multi-tier ladders.
Before. Shopify subtracts the discount from the order subtotal first, then calculates tax on the reduced amount — so a 20% off promo also reduces the tax owed. EU/UK merchants on tax-inclusive pricing should preview the storefront and invoice display side-by-side, since the discount can render differently across cart, checkout, and order confirmation depending on theme and locale settings.
The EU Price Indication Directive (Omnibus) applies when you announce a price reduction to customers in the European Economic Area: show the lowest price you charged in the last 30 days or more; national law can require longer. Shopify's guide has you enter it in the Compare-at price field or display it with metafields. Each member state sets its own penalties.
Yes — predictable, always-on discounts retrain customers to wait for promos and erode the perceived value of the full price. The healthier pattern is fewer, sharper promos with hard end dates, paired with non-discount value (free shipping, loyalty perks, bundles). Track the share of revenue sold at discount; once it crosses ~30%, the discount is effectively the price.
Track gross margin, not revenue. The break-even formula is uplift% = d / (m − d), where d is the discount and m is the contribution margin. A 20% discount at 35% margin needs 133% more orders just to keep the same profit. The Discount ROI Calculator above models this for any combination of AOV, orders, margin, discount, and uplift.
Yes. Since April 2, 2026, Basic, Grow, Advanced, and Plus can use company profiles and B2B catalogs alongside DTC. Basic/Grow/Advanced assign up to three active catalogs across all B2B markets, and on those three plans catalog features require your store to be using new Shopify Markets; Plus adds unlimited catalogs and direct company/location assignment. Because a catalog is assigned through a B2B market, wholesale pricing stays off your DTC storefront without any public discount code. Coexistence does not mean separation in both directions, though: since June 23, 2026 Shopify activates discounts for B2B automatically on new B2B stores and existing ones with no active or scheduled discounts, and on those stores a code left eligible for All customers reaches wholesale buyers unless you assign specific markets to it.
Front-end developer specializing in Shopify since 2017. Experienced in building custom Liquid themes, optimizing storefront performance, and integrating third-party apps. Directs the editorial process behind Ecom Store Pro: sets its topics and the rules every AI-written page must pass before publication.
This page was written by AI. Separate AI agents that did not write it check its figures and claims against official sources and test its links and interactive tools. A human editor sets the site's editorial direction, topics and rules and checks that pages are complete and display correctly, but does not check their facts or edit their text. Details may change — always confirm critical data at shopify.com.
Some links in this article are affiliate links. If you sign up for a Shopify store through these links, we may earn a commission at no extra cost to you. Read our full advertising policy.