Promotions and discounts

StoreConnect's Promotions V2 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.

How the V2 engine works

A promotion in V2 has three parts:

  • Conditions — rules that determine when the promotion applies (order value, quantity, custom Liquid logic, or always)
  • Rewards — what the customer receives (discount on subtotal, discount on products, free shipping, free product, fixed price for N items)
  • Promotion2Condition links — pairs that connect a condition to a reward with a priority order; a single promotion can have multiple condition–reward pairs

This architecture enables tiered and stacked promotions without needing separate promotion records for each tier.

Condition types

Condition type How it works
Always applies No threshold — eligible if all scoping rules pass
Total value Cart subtotal (of eligible items) meets or exceeds a set amount
Total quantity Total quantity of all cart items meets or exceeds a set number
Product count Number of unique products in the cart meets or exceeds a set number
Liquid condition Custom Liquid expression evaluated against cart data; separate templates for web and POS

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.

Reward types

Reward type What happens
Discount on subtotal Percentage or fixed amount off the order subtotal
Discount on products Percentage or fixed amount off matched or specified products
Discounted shipping Percentage or fixed amount off the shipping cost
Free product A specified product is added to the cart at no charge
Fixed price for N products A set price applies to any N qualifying items (e.g., any 2 for $50)

Discount on products options:

  • Apply to matched products (those meeting the product scope) or to a specified product list
  • Apply to the most expensive or least expensive eligible items first
  • Limit the reward to a maximum number of items (max_eligible)
  • Exclude items that are already discounted or already free

Frequency: rewards can apply once per use, or with no_limit — repeating for every matching multiple (e.g., $5 off for every $50 spent).

Tiered promotions

A tiered promotion has multiple condition–reward pairs evaluated in priority order. Only the first matching condition's reward applies.

Example: 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.

Priority is set per condition–reward pair. Lower numbers are evaluated first.

Stacked promotions

A stacked promotion has multiple condition–reward pairs where all matching conditions apply their rewards together.

Example: 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.

Stackability between promotions

Independent of how rewards are applied within a promotion, each promotion can be configured to stack with other active promotions or not.

  • Stackable (default): this promotion combines with any other promotions in the cart
  • 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)
  • Stop after this promotion: prevents any further promotions from being applied after this one

Trigger types

  • Automatic: applies without customer action if conditions and scoping are satisfied
  • Code-based: requires the customer to enter a coupon code at checkout; codes are case-insensitive

Scheduling

  • Start and end dates: promotions can have a defined active window; end date is optional
  • Start and end times: refine the active window to a specific time on the first and last day
  • Daily time window: run a promotion only between two times each day (e.g., a happy-hour promotion from 4 PM to 7 PM)
  • Days of week: restrict a promotion to specific days (e.g., weekends only)
  • Weekly frequency: run every week, every other week, or at any interval
  • Timezone: all time calculations use a configured timezone (defaults to the store's timezone)

Usage limits

  • Total usage limit: maximum number of times the promotion can be used across all customers; once reached, the promotion is no longer available
  • Per-customer usage limit: maximum number of times a single customer can use the promotion

Scoping

Product scope

Promotions 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.

  • Include: only products matching these criteria are eligible for the condition or reward
  • Exclude: these products are removed from eligibility even if they would otherwise match

Channel scope

Restrict a promotion to a specific store. If no channel scope is set, the promotion applies across all channels.

Customer scope

Restrict 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.

Set this up