Fashion & Lifestyle RetailRetail / Enterprise9 min read

Enterprise Promotion Architecture for Shopify

How to run many simultaneous promotions across a large catalog when the tools, not a priority list, decide which discount wins

Four layers of promotion architecture, from campaigns down to analyticsLayered promotion architectureCampaignsWhat the customer seesOverlap and conflict rulesWhich offer wins, as the tools decideGuardrailsExclusions, margin checksProfit analyticsRead against a baseline

A fictional Shopify Plus fashion retailer maps twelve conflicting Black Friday requirements to how Discount Prime actually resolves overlaps: no priority setting, one price-changing campaign per variant (the current holder keeps it), the smallest order-level discount wins, and cost floors only on Wholesale, Dropshipping, and Bundles. A per-product margin check and native Shopify features fill the gaps.

At a glance

Challenge
As catalogs and teams grow, overlapping promotions interact in ways nobody wrote down, and the final price is decided by tool behavior rather than the intended priority list.
Approach
Map each requirement to how the app actually behaves, confirmed on test orders: deliberate variant ownership through the conflict resolver, one order-level campaign at a time, a per-product margin check, and native Shopify features where the app has no equivalent.
Discount Prime campaign types used
Multiple campaign typesConflict management

Scenario-based case study: the merchant is fictional and modeled on patterns across Discount Prime stores. Prices, costs and outcome figures are illustrative assumptions for teaching, not measured results from a real store.

Short Answer

When many promotions run at once, write down how your discount tools actually resolve overlaps before you design the campaigns, because the tools decide the final price, not your intended priority list. In Discount Prime there is no campaign priority setting. Each product variant belongs to one price-changing campaign at a time (the campaign that already holds it keeps it until you move it), several qualifying Tiered Spend (order) campaigns resolve to the smallest discount, shipping tiers resolve to the largest, and Discount Prime discounts are set to combine with Shopify's native discounts. Design the calendar around those rules, enforce margin floors yourself where the campaign type has none, and use native Shopify features for what the app does not cover, such as Shopify B2B companies.

Merchant Scenario

NorthPeak Fashion is a fictional Shopify Plus retailer selling apparel and accessories in several European countries, with retail, VIP, employee, and wholesale customers. Two weeks before Black Friday, each team brings a requirement:

#RequirementOwner
125% off most of the catalogMarketing
2No discount on the new Winter CollectionMerchandising
340% off the Outlet collectionOperations
4VIP-only benefitsLoyalty
5Wholesale customers keep their negotiated pricesB2B sales
6Buy two knitwear items, get a scarf freeMerchandising
7Spend $300, get 15% offMarketing
8Free shipping over $400Logistics
9Luxury accessories never discountedBrand
10Employee pricingHR
11Different offers by countryRegional teams
12Gross margin per product stays at or above 42%Finance

Every requirement is reasonable. Several of them conflict, and the conflicts are decided by tool behavior, not by meeting notes.

How Overlaps Are Actually Resolved

SituationNative Shopify behaviorDiscount Prime behavior
Two product discounts on the same itemDepends on each discount's combination settingsOne price-changing campaign per variant: the campaign already holding it keeps it; a later campaign skips it until you move it in the conflict resolver
Several order-level spend campaigns qualifyDepends on combination settingsThe smallest positive discount wins (merchant-favorable)
Several shipping tiers or campaigns qualifyDepends on combination settingsThe largest shipping discount wins
Bundle, cross-sell, gift, or upsell on an item that also has a product discountNot applicablePer campaign: "best" keeps the larger saving, "stack" adds them
App discount plus a native Shopify discountNative discounts follow their own settingsDiscount Prime discounts are set to combine with product, order, and (except shipping codes) shipping discounts. An optional "Prevent Shopify discounts" setting can remove campaign products from native discounts
Explicit priority numbersNot availableNot available

Types that do not compete for a variant: bundles, cross-sell, upsell, shipping, Tiered Spend (order), and Buy X Get Y when it is set to combine with others. Everything else, including Flat Product Discount, Tiered Quantity, Product Spend, Bulk Price Update, and Wholesale / B2B Pricing, claims variants exclusively.

One consequence matters more than any other: the ownership check works per variant, not per customer group. If a wholesale campaign holds a variant, a Black Friday campaign that starts later does not discount that variant for retail shoppers either.

Mapping Each Requirement

#RequirementHow to build itLimits and decisions
125% off most of the catalogFlat Product Discount on the included collectionsExcludes nothing by itself; exclusions are set in the campaign
2Winter Collection not discountedExclude it in every campaign's product exclusions; check native discounts tooOrder-level campaigns still count it (see #7)
3Outlet at 40%Flat Product Discount, or Bulk Price Update if you want the real Shopify price loweredOutlet items held by another campaign are skipped; Bulk Price Update restores activation-time prices on revert and does not add a compare-at price by itself
4VIP benefitsA campaign restricted to a VIP customer segment (for example VIP-only free shipping or a gift)Restricted campaigns need the customer logged in; segment membership syncs to the customer within minutes
5Wholesale contract pricesOn Shopify Plus, consider native Shopify B2B catalogs; or Wholesale / B2B Pricing restricted to a wholesale segmentDiscount Prime does not read Shopify B2B companies. A wholesale campaign holding a variant blocks retail campaigns on that variant (see above)
6Buy two knitwear, scarf freeBuy X Get Y with the reward from another collectionWith "another collection" rewards, the customer must pick the scarf in the app's reward modal; a scarf added directly is not rewarded
7Spend $300, get 15%Tiered Spend Discount (order level)Applies to the whole order subtotal, so excluded and luxury items in the cart count toward the threshold and share the discount. If two order campaigns qualify, the smaller discount wins
8Free shipping over $400Free Shipping & Cart IncentivesThreshold uses prices before or after product discounts depending on the combine setting; only the first delivery group is discounted
9Luxury never discountedExclude from product campaigns; do not run an order-level percentage during the event, or accept that it shares in the order discountNo setting removes a product from order-level discounts
10Employee pricingNative Shopify (staff discount code or B2B catalog) or a campaign restricted to an employee segmentSame per-variant ownership rule as #5
11Country-specific offersIn Discount Prime, only shipping campaigns target markets or countriesProduct and order campaigns cannot be limited by country in the app; test thresholds in each presentment currency, because widgets do not convert currency and some function paths may not either
1242% gross margin floorCalculate the maximum safe discount per product and exclude products that breach itCost floors exist only for Wholesale, Dropshipping, and Bundles; Flat, Tiered, Order, and Buy X Get Y have none

The Margin Floor in Numbers

A discount d off list price keeps a gross margin of (m − d) ÷ (1 − d), where m is the product's gross margin at list price (price minus product cost, divided by price). To stay at or above a floor f, the product needs:

m ≥ d + f × (1 − d)

Illustrative assumptions: floor 42%; product cost only (no shipping, fees, or returns).

Offer on the productEffective discountList-price gross margin needed
25% Black Friday25%56.5% or more
40% Outlet40%65.2% or more
25% plus 15% order discount measured after product discounts1 − 0.75 × 0.85 = 36.25%63.0% or more

Example: a sweater at $100 with $45 cost has a 55% list margin. At 25% off it sells for $75, keeps $30, and its margin is 40%, below the floor. Either exclude it from the 25% campaign, give it a smaller discount, or accept the breach knowingly. Run this check from your cost export before the event; Discount Prime will not block it on these campaign types. Replace 42%, the discounts, and the costs with your own.

Walking One Cart Through

Illustrative cart for a logged-in VIP in Germany: Outlet boots at $180 list (40% off via a Flat campaign, so $108) and a luxury bag at $240 (excluded from product campaigns). List subtotal $420; after product discounts $348.

StepResult
Outlet boots$108
Luxury bag$240 (no product discount)
Spend $300, 15% (order campaign measuring after product discounts)$348 qualifies; 15% of $348 = $52.20 off the order subtotal, shared across both items, including the luxury bag
Free shipping over $400, measured before discounts$420 qualifies: free shipping
Free shipping over $400, measured after product discounts$348 does not qualify
CurrencyIf she pays in euros, test the shipping threshold in EUR; the shipping function is not confirmed to convert currency

The same cart gives different results depending on two settings that most teams never write down. Decide them on purpose, and note that the luxury requirement is broken by the order campaign unless you drop or change it.

A Practical Architecture

  1. Inventory the rules in one table: campaign, type, products, customers, dates, and which setting decides before/after discounts.
  2. Assign variant ownership on purpose. Launch campaigns in the order you want them to hold variants, and use the conflict resolver to move products deliberately. Review the "Products excluded due to conflicts" list after every launch.
  3. Keep contract pricing out of retail campaigns' way. If wholesale or employee pricing would block retail promotions on the same variants, move it to native Shopify B2B catalogs or staff codes, or schedule it around the event.
  4. Limit order-level campaigns to one at a time during the event, or accept the smallest-wins rule.
  5. Run the margin check for every product in a percentage campaign.
  6. Check native discounts and Shopify Markets settings alongside the app.
  7. Know your plan's limits. Campaign types and live-variant limits depend on your plan; check the pricing page before planning a catalog-wide event.

Pre-Launch Tests

Test inputExpected result
Product held by an earlier campaign, added to the Black Friday campaignAppears in "Products excluded due to conflicts"
Winter Collection item, retail customerNo product discount
Cart of $299.99 after product discounts (order campaign measuring after)No 15%
Two order campaigns both qualifyingThe smaller discount applies
Two knitwear items, scarf added without the modalScarf not free
Same cart, scarf picked in the modalScarf free
VIP campaign, customer not logged inVIP offer not applied
Free shipping threshold in EUR and GBPMatches your intended threshold in each currency
Wholesale customer on a product held by the retail campaignPrice matches what you intended for that customer

Measurement

  • Primary: gross profit per order during the event, against the same period last year or a pre-event baseline, adjusted for refunds.
  • Guardrails: share of units sold below the margin floor; discount given as a share of revenue; shipping subsidy per order.
  • Inventory goals: outlet sell-through against its target, measured in units.
  • Confounders: traffic and ad spend, the event calendar, and customer mix all change during Black Friday, so before/after comparisons are not causal on their own.

Common Mistakes

  • Designing a priority ladder the tools cannot enforce.
  • Assuming the newest campaign wins an overlap; the campaign that already holds the variant keeps it.
  • Expecting a wholesale campaign and a retail sale to share the same variants.
  • Running two spend campaigns and expecting the bigger discount to apply.
  • Excluding luxury items from product campaigns but forgetting the order-level discount.
  • Trusting a margin floor that the campaign type does not enforce.
  • Testing thresholds only in the store's base currency.

Frequently asked questions

Can I set campaign priorities in Discount Prime?

No. There is no priority field. For price-changing campaigns, each variant belongs to one campaign at a time: the campaign already holding it keeps it, and a later campaign skips it until you move the product in the conflict resolver. Plan the launch order and review the "Products excluded due to conflicts" list after each launch.

What happens when two spend-based order discounts qualify in the same cart?

In Discount Prime, when several Tiered Spend (order) campaigns qualify, the smallest positive discount applies, which favors the merchant, not the customer. Run one order-level campaign at a time during an event if you want a predictable result. Shipping campaigns behave the other way: the largest shipping discount wins.

Will a Black Friday sale override my wholesale customers' prices?

Not in Discount Prime if the wholesale campaign already holds the variant, but the reverse problem can occur: variant ownership is per variant, not per customer group, so a wholesale campaign that holds a variant also keeps a later retail sale off that variant. Discount Prime does not read Shopify B2B companies; on Shopify Plus, native B2B catalogs can hold contract prices so the retail campaign can own the variants.

How do I keep luxury items out of a store-wide sale?

Exclude them from every product-level campaign and from native Shopify discounts. Note that a Tiered Spend (order) campaign discounts the whole order subtotal, so luxury items in the cart count toward its threshold and share its discount. If they must never be discounted, avoid an order-level percentage during the event or accept that trade-off.

Does Discount Prime stop discounts that break my margin floor?

Only on some types. Cost-based floors exist for Wholesale / B2B Pricing, Dropshipping Pricing, and Product Bundles, using Shopify unit cost. Flat, Tiered, Order, and Buy X Get Y campaigns have none. Check each product yourself: to keep a margin floor f after a discount d, its list-price gross margin must be at least d + f × (1 − d), for example 56.5% for 25% off with a 42% floor.

Go deeper

Run this architecture in your store

Every campaign type in this case study is included in Discount Prime, with profit analytics to verify the margin impact.

More case studies