{"title":"Promotions and discounts","slug":"promotions-discounts-features","url":"https://support.storeconnect.com/articles/promotions-discounts-features","url_markdown":"https://support.storeconnect.com/articles/promotions-discounts-features.md","subtitle":null,"summary":"StoreConnect\u0026#39;s promotions engine supports tiered and stackable promotions with separate conditions and rewards, Liquid-based conditions, scheduling with daily and weekly recurrence, and scoping by store, product, category, brand, membership, and account.","type":"Help_Documentation","video_url":"","keywords":"promotions, discounts, tiered, stackable, coupon, conditions, rewards, Liquid","last_modified":"2026-08-21T07:12:35+0000","body_markdown":"StoreConnect's promotions engine separates the *when* (conditions) from the *what* (rewards), allowing a single promotion to apply different rewards at different thresholds, stack multiple rewards together, and express complex eligibility logic in Liquid without custom code.\n\n## How the promotions engine works\n\nA promotion has three parts:\n\n- **Conditions** — rules that determine when the promotion applies (order value, quantity, custom Liquid logic, or always)\n- **Rewards** — what the customer receives (discount on subtotal, discount on products, free shipping, free product, fixed price for N items)\n- **Promotion2Condition links** — pairs that connect a condition to a reward with a priority order; a single promotion can have multiple condition–reward pairs\n\nThis architecture enables tiered and stacked promotions without needing separate promotion records for each tier.\n\n## Condition types\n\n| Condition type | How it works |\n|---|---|\n| **Always applies** | No threshold — eligible if all scoping rules pass |\n| **Total value** | Cart subtotal (of eligible items) meets or exceeds a set amount |\n| **Total quantity** | Total quantity of all cart items meets or exceeds a set number |\n| **Product count** | Number of unique products in the cart meets or exceeds a set number |\n| **Liquid condition** | Custom Liquid expression evaluated against cart data; separate templates for web and POS |\n\n**Liquid condition variables**: `cart` (full cart object including shipping address and currency), `cart_items` (eligible items after product scoping). Conditions can reference any cart attribute, customer membership, delivery zone, or other accessible data.\n\n## Reward types\n\n| Reward type | What happens |\n|---|---|\n| **Discount on subtotal** | Percentage or fixed amount off the order subtotal |\n| **Discount on products** | Percentage or fixed amount off matched or specified products |\n| **Discounted shipping** | Percentage or fixed amount off the shipping cost |\n| **Free product** | A specified product is added to the cart at no charge |\n| **Fixed price for N products** | A set price applies to any N qualifying items (e.g., any 2 for $50) |\n\n**Discount on products** options:\n- Apply to matched products (those meeting the product scope) or to a specified product list\n- Apply to the most expensive or least expensive eligible items first\n- Limit the reward to a maximum number of items (`max_eligible`)\n- Exclude items that are already discounted or already free\n\n**Frequency**: rewards can apply `once` per use, or with `no_limit` — repeating for every matching multiple (e.g., $5 off for every $50 spent).\n\n## Tiered promotions\n\nA tiered promotion has multiple condition–reward pairs evaluated in priority order. Only the first matching condition's reward applies.\n\nExample: a \"Spend and save\" promotion with three tiers — spend $50 for $5 off, spend $100 for $15 off, spend $200 for $40 off. Conditions are checked from highest to lowest threshold; a customer spending $120 receives $15 off, not $5.\n\nPriority is set per condition–reward pair. Lower numbers are evaluated first.\n\n## Stacked promotions\n\nA stacked promotion has multiple condition–reward pairs where all matching conditions apply their rewards together.\n\nExample: a \"combo deal\" where spending $80 earns 5% off the subtotal and buying two or more products earns a $5 product discount — both rewards apply when both conditions are met.\n\n## Stackability between promotions\n\nIndependent of how rewards are applied within a promotion, each promotion can be configured to stack with other active promotions or not.\n\n- **Stackable** (default): this promotion combines with any other promotions in the cart\n- **Not stackable**: this promotion does not combine with others; if another promotion is already applied, this one is skipped (`existing_promotions`) or this one replaces it if it gives a bigger reward (`biggest_reward`)\n- **Stop after this promotion**: prevents any further promotions from being applied after this one\n\n## Trigger types\n\n- **Automatic**: applies without customer action if conditions and scoping are satisfied\n- **Code-based**: requires the customer to enter a coupon code at checkout; codes are case-insensitive\n\n## Scheduling\n\n- **Start and end dates**: promotions can have a defined active window; end date is optional\n- **Start and end times**: refine the active window to a specific time on the first and last day\n- **Daily time window**: run a promotion only between two times each day (e.g., a happy-hour promotion from 4 PM to 7 PM)\n- **Days of week**: restrict a promotion to specific days (e.g., weekends only)\n- **Weekly frequency**: run every week, every other week, or at any interval\n- **Timezone**: all time calculations use a configured timezone (defaults to the store's timezone)\n\n## Usage limits\n\n- **Total usage limit**: maximum number of times the promotion can be used across all customers; once reached, the promotion is no longer available\n- **Per-customer usage limit**: maximum number of times a single customer can use the promotion\n\n## Scoping\n\n### Product scope\nPromotions can be scoped to include or exclude specific products, categories, brands, or shipping zones. If no include scope is set, all products are eligible subject to any exclusions.\n\n- **Include**: only products matching these criteria are eligible for the condition or reward\n- **Exclude**: these products are removed from eligibility even if they would otherwise match\n\n### Channel scope\nRestrict a promotion to a specific store. If no channel scope is set, the promotion applies across all channels.\n\n### Customer scope\nRestrict a promotion to a specific contact, a specific account, or all contacts with a given membership. If no customer scope is set, the promotion is available to all customers.\n\n## Set this up\n\n- [Configure promotions](promotions)\n- [Create promotion codes](promotions)"}