Configure advanced promotions
On this page
This guide walks through how to configure Advanced Promotions (using the Promotion v2 engine) in Salesforce. It covers how the records fit together, the fields each record needs, and worked examples of the most common scenarios.
For a high-level overview of what Advanced Promotions can do compared with standard Promotions, see About advanced promotions.
How it works
A working Advanced Promotion requires three records — Condition, Reward, and Promotion v2 — joined by a fourth: the Promotion 2 Condition link record. If you skip the link record, the promotion will never fire. For a full breakdown of what each record does, see About advanced promotions.
A single Promotion v2 can have multiple Promotion 2 Condition records, which is how tiered offers work (one tier per link record). Conditions and Rewards can be reused across multiple promotions.
An optional fifth record, Promotion 2 Product Scope, attaches to a Condition or Reward to limit it to specific products, categories, brands, or shipping zones. The worked examples below note when you need one.
Configuration steps
The order of creation matters because each step references the previous one. Build the Reward first, then the Condition, then the Promotion 2 header, then the Promotion 2 Condition link.
Step 1: Create the Reward
Navigate to the Rewards tab (or Rewards in the App Launcher) and click New.
| Field | Required | Notes |
|---|---|---|
| Display Name | Yes | Internal name shown to admins |
| Identifier | Yes | A unique key (e.g. members-free-shipping) |
| Type | Yes | Pick from: Free Product, Discounted Shipping, Discount on Subtotal, Discount on Products, Fixed Price for N Products |
| Discount Type | When applicable | Percentage or Fixed Amount. Required for the discount-type rewards. |
| Discount Percentage | When Discount Type is Percentage | The % to apply (e.g. 10 for 10%, 100 for full free shipping) |
| Discount Amount | When Discount Type is Fixed Amount | The dollar amount to discount |
| Quantity | When Type is Free Product or Fixed Price for N Products | The N value |
| Frequency | No | Once (default) applies the reward one time per cart. No Limit lets it repeat per qualifying group (useful for “every 3 items get 10% off”). |
| Apply to | No | For product-level rewards. Matched Products uses the Condition’s scope; Specified Products uses the Reward’s own scope. |
| Apply first to | No | Most Expensive or Least Expensive — controls which items are discounted first when only some qualify. |
Step 2: Create the Condition
Navigate to the Conditions tab and click New.
| Field | Required | Notes |
|---|---|---|
| Name | Yes | Internal name |
| Type | Yes | Pick from: Always Applies, Total Value, Total Quantity, Product Count, Liquid Condition |
| Amount | Required for Total Value, Total Quantity, Product Count | The threshold (e.g. 500 for “cart total reaches $500”, 3 for “buy 3 items”) |
| Currency | No | Restricts the condition to carts in a specific currency. Leave blank to apply to all currencies. |
Choosing a Type:
- Always Applies — the Condition itself does not impose a cart requirement. Use this when the only restriction you want is on the Promotion v2 itself (such as Customer Scope Membership for “members get free shipping”).
- Total Value — qualifies when the cart’s eligible value reaches the Amount.
- Total Quantity — qualifies when the eligible item count reaches the Amount (e.g. buy 3 of any qualifying product).
- Product Count — qualifies when the count of distinct eligible products reaches the Amount.
- Liquid Condition — for custom rules written in Liquid (advanced use, rarely needed).
Step 3: Create the Promotion
Navigate to the Promotions v2 tab and click New.
| Field | Required | Notes |
|---|---|---|
| Display Name | Yes | Shown internally and may appear in the cart when the promotion applies |
| Store | Yes | The store this promotion applies to |
| Start Date | Yes | The date the promotion becomes active |
| End Date | No | Leave blank to run indefinitely |
| Start Time / End Time | No | Time-of-day on the start/end dates |
| From Time / To Time | No | Daily window (e.g. only between 5pm and 7pm each day) |
| Days of Week | No | Restrict to specific days |
| Reward Strategy | Defaults to Tiered | Tiered = best single matching condition applies. Stacked = all matching conditions apply. |
| Stacking Behaviour | Defaults to Stackable | Stackable = can combine with other promotions. Not Stackable = conflicts with other non-stackable promotions. |
| Coupon Code | No | Leave blank for automatic application. Populate to require the customer to enter a code at checkout. |
| Customer Scope Contact | No | Restrict to a single contact |
| Customer Scope Account | No | Restrict to a single account |
| Customer Scope Membership | No | Restrict to contacts with a specific active membership |
| Channel Scope Store | No | Restrict to a specific store |
| Channel Scope Outlet | No | Restrict to a specific outlet (POS) |
| Total Usage Limit | No | Max uses across all customers. Blank = unlimited. |
| Per Customer Usage Limit | No | Max uses per customer. Blank = unlimited. |
| Stop After This Promo | No | When true, stops evaluating further promotions once this one applies |
Note: Customer Scope fields are mutually exclusive — set one of Contact, Account, or Membership, not multiple. Channel Scope Store and Channel Scope Outlet are also mutually exclusive.
Step 4: Create the Promotion v2 Condition link
This is the record that wires the three pieces together. If you skip this step, the promotion will never fire.
From the Promotion v2 record you just created, scroll to the Promotion v2 Conditions related list and click New.
| Field | Required | Notes |
|---|---|---|
| Promotion v2 | Yes (auto-filled from the related list) | The promotion header |
| Condition | Yes | The Condition record from Step 2 |
| Reward | Yes | The Reward record from Step 1 |
| Priority | Yes | Evaluation order within the promotion. Lower numbers run first. Use 1 for a single-tier promo; use 1, 2, 3, … for tiered promos (lowest priority = highest threshold). |
Step 5: Test in an incognito browser
- Open an incognito or private browser window.
- Sign in as a contact who matches the Customer Scope (if you set one).
- Add a product, go to checkout, and progress through the steps until the cart totals are recalculated.
- The discount should appear in the cart totals automatically (or after entering the coupon code, if you set one).
Important: A Salesforce support login as the customer does not always trigger member-based scopes correctly. Always test with a real customer login or with the customer’s actual credentials in incognito.
Worked examples
Example 1: Free shipping when cart reaches $200
Goal: Cart total of $200 or more = free shipping, automatically applied, no coupon code.
Step 1 — Reward
| Field | Value |
|---|---|
| Display Name | Free Shipping at $200 |
| Identifier | free-shipping-over-200 |
| Type | Discounted Shipping |
| Discount Type | Percentage |
| Discount Percentage | 100 |
| Frequency | Once |
Step 2 — Condition
| Field | Value |
|---|---|
| Name | Cart Total $200 |
| Type | Total Value |
| Amount | 200 |
Step 3 — Promotion v2
| Field | Value |
|---|---|
| Display Name | Free Shipping over $200 |
| Store | (your store) |
| Start Date | Today |
| Reward Strategy | Tiered |
| Stacking Behaviour | Stackable |
| Coupon Code | (blank) |
Step 4 — Promotion v2 Condition
| Field | Value |
|---|---|
| Condition | Cart Total $200 |
| Reward | Free Shipping at $200 |
| Priority | 1 |
Example 2: Discounted shipping (50% off) when cart reaches $100
Goal: Cart total of $100 or more = half-price shipping, automatically applied.
Step 1 — Reward
| Field | Value |
|---|---|
| Display Name | Half-Price Shipping at $100 |
| Identifier | half-price-shipping-over-100 |
| Type | Discounted Shipping |
| Discount Type | Percentage |
| Discount Percentage | 50 |
| Frequency | Once |
Step 2 — Condition
| Field | Value |
|---|---|
| Name | Cart Total $100 |
| Type | Total Value |
| Amount | 100 |
Step 3 — Promotion v2
| Field | Value |
|---|---|
| Display Name | Half-Price Shipping over $100 |
| Store | (your store) |
| Start Date | Today |
| Reward Strategy | Tiered |
| Coupon Code | (blank) |
Step 4 — Promotion v2 Condition
| Field | Value |
|---|---|
| Condition | Cart Total $100 |
| Reward | Half-Price Shipping at $100 |
| Priority | 1 |
Example 3: 10% off the entire cart when over $150
Goal: Spend $150 or more and get 10% off the cart subtotal, automatically applied.
Step 1 — Reward
| Field | Value |
|---|---|
| Display Name | 10% Off Subtotal |
| Identifier | ten-percent-off-subtotal |
| Type | Discount on Subtotal |
| Discount Type | Percentage |
| Discount Percentage | 10 |
| Frequency | Once |
Step 2 — Condition
| Field | Value |
|---|---|
| Name | Cart Total $150 |
| Type | Total Value |
| Amount | 150 |
Step 3 — Promotion v2
| Field | Value |
|---|---|
| Display Name | 10% Off When Over $150 |
| Store | (your store) |
| Start Date | Today |
| Reward Strategy | Tiered |
| Coupon Code | (blank) |
Step 4 — Promotion v2 Condition
| Field | Value |
|---|---|
| Condition | Cart Total $150 |
| Reward | 10% Off Subtotal |
| Priority | 1 |
Example 4: Tiered spend-and-save (10% / 20% / 30%)
Goal: Spend more, save more. $500 = 10% off, $1000 = 20% off, $1500 = 30% off. Only the best matching tier applies. Automatic, no coupon code.
This is the canonical use case for Reward Strategy = Tiered. You will create three Rewards, three Conditions, and three Promotion v2 Condition link records under a single Promotion v2.
Step 1 — Create three Rewards
| Reward | Type | Discount Percentage |
|---|---|---|
| 10% Off Subtotal | Discount on Subtotal | 10 |
| 20% Off Subtotal | Discount on Subtotal | 20 |
| 30% Off Subtotal | Discount on Subtotal | 30 |
Step 2 — Create three Conditions
| Condition | Type | Amount |
|---|---|---|
| Cart Total $500 | Total Value | 500 |
| Cart Total $1000 | Total Value | 1000 |
| Cart Total $1500 | Total Value | 1500 |
Step 3 — Create one Promotion v2
| Field | Value |
|---|---|
| Display Name | Spend and Save |
| Store | (your store) |
| Start Date | Today |
| Reward Strategy | Tiered (important — gives the best single match) |
| Stacking Behaviour | Stackable |
| Coupon Code | (blank) |
Step 4 — Create three Promotion v2 Conditions under that Promotion v2
| Condition | Reward | Priority |
|---|---|---|
| Cart Total $1500 | 30% Off Subtotal | 1 |
| Cart Total $1000 | 20% Off Subtotal | 2 |
| Cart Total $500 | 10% Off Subtotal | 3 |
Why this order? With Tiered strategy, only one Promotion v2 Condition applies per cart. Putting the highest threshold at Priority 1 ensures big-spending carts get the largest discount instead of stopping at the first match.
Result: A $600 cart gets 10% off. A $1200 cart gets 20% off. A $1600 cart gets 30% off.
Choosing between automatic and coupon-based promotions
- Leave Coupon Code blank for an automatic promotion that applies as soon as the cart meets the conditions. No customer input is required, and the discount shows up in the cart totals automatically.
- Populate Coupon Code when you want the customer to enter the code at checkout to activate the discount.
Coupon codes are case-insensitive. The store variable promotions.max_coupon_codes_per_cart controls how many coupon codes a single cart can accept.
Common mistakes and how to fix them
| Symptom | Likely cause | Fix |
|---|---|---|
| Promotion never fires | Missing Promotion v2 Condition link record | Create the Promotion v2 Condition that links the Promotion to a Condition and a Reward |
| Promotion applies to everyone, not just members | Customer Scope Membership not set on the Promotion v2 | Set Customer Scope Membership on the Promotion v2 header |
| Discount is wrong amount | Wrong Reward Type, or Discount Percentage / Discount Amount field not populated | Confirm Reward Type matches the intent, and the matching amount field has a value |
| Two tiers stacked when only the best should apply | Reward Strategy set to Stacked instead of Tiered | Change Reward Strategy to Tiered |
| Promotion not applying despite cart being over the threshold | Start Date is in the future, or Currency on the Condition does not match cart currency | Set Start Date to today or earlier, and either set the Currency to match the cart or clear it |
| Free shipping works for one customer but not another | Membership on the customer’s account is missing or expired | Open the customer’s account and check the related Memberships list |
Where to go next
- About advanced promotions for the feature overview and capability comparison with standard Promotions
- Promotions for the standard (legacy) promotion engine, still supported alongside Advanced Promotions
- Discounts for the simpler product-level discount mechanism, often the right choice for “free shipping for members” or other membership-only price changes without cart-level conditions
Was this article helpful?
Thanks for your feedback! It helps us improve our docs.