# Manage Product Discounts ## Product Discounts Product Discounts play an important role in the setup of your store as they tell your frontend application what the base price is, the matching special price, and the campaign name. They are also used to display a product's discounted price along with its regular base price on the Product Detail Page (PDP), Product Listing Page (PLP), search, and product cards. This is often shown on a site as the strikethrough price. ![An example product detail page highlighting the use of a strikethrough price](https://docs.commercetools.com/learning-price-and-discount-your-products/../images/product-discounts/strikethrough-price-product-detail-page.png) If you want to show the strikethrough price while using an external search engine, then you must use Product Discounts to calculate and set the new price on the product. This helps you sync the new price with the third-party search engine. Cart Discounts are not viable options to achieve these above use cases, as they only calculate the new price once items are added to a Cart. Product Discounts on the other hand are calculated ahead of time and store the data along with the Price of a Product Variant. Product Discounts can target the same price dimensions for a user that a Product Variant Price can, such as: country, Customer Group, Channel, time period, and currency. This is useful as we can target a promotion (Cart or Product) for a specific customer segment that matches the specified price dimension. Product Discounts are subject to a [limit](/api/limits.md#product-discounts) in a Project. Product Discounts override any existing [Tiered Prices](/learning-price-and-discount-your-products/price-calculation/types-of-prices.md). The remainder of this learning module walks you through common Product Discount scenarios, explaining when and why to use each approach. To explore the below use cases, we are going to work with an imaginary holding company, Stride Synergy. The company owns many brands specializing in footwear, with each brand having its own websites and retail stores. To continue with the examples on this page, you need to set up a Project with the following: - A Product Type named `Shoe` with an Attribute, `Brand` - A Product Variant named `Black shoe suave` - A Product Variant named `Shiny silver heels` that is mapped to a Category named `Heels` - Another Category named `Sale` - Two Channels, `Shoes for Feet` and `Tread Trends`, with their Channel role set as `Product Distribution` To learn how to configure your Project, see [Project Settings](/merchant-center/project-settings.md). To learn how to configure Product Types and Attributes, see [Product Types and Attributes](/merchant-center/product-types.md). ## Use case 1: Product and catalog discounts Product and catalog discounts are commonly used as marketing strategies to attract customers, boost sales, and create a sense of urgency or affordability. They offer a price reduction to customers on specific items or an entire store's inventory. Product-level discounts apply to individual products, while catalog-level discounts apply to categories or the entire product range. A commerce administrator working for Shoes for Feet, one of the brands by Stride Synergy, needs to create the following discounts: - Discount 1: 40% off on men's shoes from last season with a lot of its stock left in inventory - Discount 2: $25 off on any ladies' heels purchase To create a Product Discount matching these conditions, the commerce administrator must make use of Predicates. ### Create the 40% off discount The goal is to clear last season's men's shoe inventory by offering a 40% relative discount on a specific SKU. To create this [Product Discount](/merchant-center/product-discounts.md#create-a-product-discount), use the following configuration: | Field | Value | | --- | --- | | **Product discount name** | `40% off men's black shoe` | | **Product discount description** | `40% off to clear inventory` | | **Product discount key** | `2023-spring-mens-blk-shoe-40` | | **Discount value** | Relative: `40`% | | **Rank (sortOrder)** | `0.5001` | To select a rank value, see [best practices](/learning-price-and-discount-your-products/product-discounts/best-practices.md#rank-discounts). For the discount rule, apply the discount to specific products where all conditions are true, using the following predicate: - **Variant SKU** is `Black shoe suave` ![The predicate that applies the discount when the Variant SKU is Black shoe suave.](https://docs.commercetools.com/learning-price-and-discount-your-products/../images/product-discounts/discount-rule-black-shoe-suave.png) After saving, [activate the Product Discount](/merchant-center/product-discounts.md#activate-a-product-discount) using the **Status** toggle. ![The status toggle is found in the upper right corner of the discount UI.](https://docs.commercetools.com/learning-price-and-discount-your-products/../images/product-discounts/product-discount-status-toggle.png) You can verify that the discount has been applied by checking the **Prices** tab of the Black shoe suave Product Variant. The discounted Price should now be visible. ![The discounted Price can be viewed in the Prices tab.](https://docs.commercetools.com/learning-price-and-discount-your-products/../images/product-discounts/usecase1-productvariant-discounted-price.png) It may take up to 15 minutes for the discount to be applied to the Price record. For more information, see [Product Discounts](/merchant-center/product-discounts.md). ### Create the $25 discount The second discount offers a fixed $25 reduction on all products in the Heels category. To create this [Product Discount](/merchant-center/product-discounts.md#create-a-product-discount), use the following configuration: | Field | Value | | --- | --- | | **Product discount name** | `$25 off ladies heels` | | **Product discount description** | `$25 off ladies heels` | | **Product discount key** | `2023-spring-ladies-heels-25` | | **Discount value** | Absolute: `25` | | **Rank (sortOrder)** | `0.5000` | Rank `0.5000` is lower than the 40% discount above (`0.5001`), so this discount has lower priority. For the discount rule, apply the discount to specific products where all conditions are true, using the following predicate: - **Categories** is `Heels` ![The predicate that applies the discount when the Category is Heels.](https://docs.commercetools.com/learning-price-and-discount-your-products/../images/product-discounts/discount-rule-category-heels.png) After saving and activating the discount, check the Shiny silver heels variant to confirm the discounted Price on the **Prices** tab. ![The discounted Price can be viewed in the Prices tab.](https://docs.commercetools.com/learning-price-and-discount-your-products/../images/product-discounts/usecase1b-productvariant-discounted-price.png) You have now created your first Product Discounts. ## Use case 2: Time window discount This use case covers a discount that is part of a promotion strategy bound by a certain time frame. Two brands of Stride Synergy are involved: Shoes for Feet and Tread Trends. Both brands are managed in one system by the same commerce administrator. The commerce administrator needs to set up a discount for Shoes for Feet that wants to run a Cyber Monday sale offering 15% across their entire range of footwear between 09:00 AM and 11:00 PM AEST on Monday, 27 November, 2023. Some important information to note about these two brands: - Both brands sell shoes. - They also sell some of the same shoes. - Each brand has its own separate website. - They both target the same country and currency. - Shoes for Feet has a slightly higher base price than Tread Trends. - Each brand runs their own unique promotional calendar. Managing two brands from one Project creates some interesting complexity. To allow this setup, each brand is modeled as a [Channel](/api/projects/channels.md) within the Project. These Channels are of [type](/api/projects/channels.md#channelroleenum) `ProductDistribution` to allow each brand (Channel) to have their own base Price and Discounts. Each Channel also has its own [Store](/api/projects/stores.md). Unlike the previous use case, this discount rule requires two conditions to match: a Category AND a distribution Channel. To create this [Product Discount](/merchant-center/product-discounts.md#create-a-product-discount), use the following configuration: | Field | Value | | --- | --- | | **Product discount name** | `2023 Shoes for Feet: Cyber Monday 15%` | | **Product discount description** | `15% off all Shoes for Feet footwear for Cyber Monday` | | **Product discount key** | `2023-cyber-monday-15` | | **Discount value** | Relative: `15`% | | **Rank (sortOrder)** | `0.5002` | | **Valid from** | `27 November, 2023`, `09:00 AM` | | **Valid until** | `27 November, 2023`, `11:00 PM` | Rank `0.5002` is higher than both discounts from use case 1, so this Cyber Monday discount takes priority when a Product matches multiple discounts. The time zone displayed in the Merchant Center is controlled by the setting in your My Profile settings. To adjust the time zone displayed in the Merchant Center, click your user profile and go to **My Profile**. In the **Personal Settings** section, for **Time Zone**, select the respective time zone. For the discount rule, apply the discount to specific products where all conditions are true, using the following predicates: - **Categories branch** is part of the branch `Sale`: this targets the Sale Category and automatically includes all its descendants. - AND **Price - Channel** is one of `Shoes for Feet`: this targets the discount specifically on shoes sold in the Shoes for Feet Channel. Alternatively, you can achieve the same result by using **Categories** as the field identifier and **is one of** as the operator, and manually selecting the Sale category and all of its descendants. The **is one of** operator allows you to select multiple values, unlike **is** which accepts only one value. In the Predicate language, **is** translates to `is only`. ![The predicate that applies the discount when Categories branch is Sale and Price-Channel is Shoes for Feet.](https://docs.commercetools.com/learning-price-and-discount-your-products/../images/product-discounts/discount-rule-cyber-monday.png) After saving and activating the discount, add the Black suave shoe Product Variant to an order. The new discount is applied despite there being two active Product Discounts, because it has the higher rank. ![The discounted Price can be viewed in the Prices tab.](https://docs.commercetools.com/learning-price-and-discount-your-products/../images/product-discounts/usecase2-discount-applied-to-order.png) ## Use case 3: Product discount layering A business may wish to have multiple promotion and discount strategies running at the same time. In such a situation, certain products might be targeted by more than one discount. You might want to ensure that the sale item only gets the lowest available discount, otherwise you could lose too much margin and minimize profit from your promotions. Stride Synergy's brand Tread Trends has decided to run three different promotion campaigns that are not stacked (combined), and wants the lowest discount to be available to the customer: - Discount 1: an end-of-financial year (EOFY) sale offering 5% off all items in the Sale category, which runs from June 30, 2023 to July 7, 2023 - Discount 2: a 15% discount on all AirWave and NeoTech shoes - Discount 3: a 20% discount on all SteadyStride shoes To achieve this, you need three Product Discounts, each with their own Predicate. Because the Sale category discount has the lowest percentage, you want to give it the highest priority through ranking. The higher the ranking value, the higher the priority of a Discount. For tips on how to set this up properly, see [best practices for ranking Discounts](/learning-price-and-discount-your-products/product-discounts/best-practices.md#rank-discounts). ### Discount 1: EOFY 5% sale This discount follows the same pattern as the [time window discount](/learning-price-and-discount-your-products/product-discounts/manage-product-discounts.md#use-case-2-time-window-discount) and targets the Tread Trends Channel. To [create the Product Discount](/merchant-center/product-discounts.md#create-a-product-discount), use the following configuration: | Field | Value | | --- | --- | | **Product discount name** | `EOFY 2023 Tread Trends: 5% off Sale` | | **Discount value** | Relative: `5`% | | **Rank (sortOrder)** | `0.5002` (highest rank, so this discount takes priority) | | **Valid from** | `30 June, 2023` | | **Valid until** | `7 July, 2023` | For the discount rule: - **Categories branch** is part of the branch `Sale` - AND **Price - Channel** is one of `Tread Trends` ### Discount 2: 15% off AirWave and NeoTech To [create the Product Discount](/merchant-center/product-discounts.md#create-a-product-discount), use the following configuration: | Field | Value | | --- | --- | | **Product discount name** | `15% off AirWave and NeoTech` | | **Discount value** | Relative: `15`% | | **Rank (sortOrder)** | `0.5001` | For the discount rule, apply the discount to specific products where all conditions are true: - **Attribute** (Brand) is one of `AirWave`, `NeoTech` - AND **Price - Channel** is one of `Tread Trends` ### Discount 3: 20% off SteadyStride To [create the Product Discount](/merchant-center/product-discounts.md#create-a-product-discount), use the following configuration: | Field | Value | | --- | --- | | **Product discount name** | `20% off SteadyStride` | | **Discount value** | Relative: `20`% | | **Rank (sortOrder)** | `0.5000` (lowest rank) | For the discount rule, apply the discount to specific products where all conditions are true: - **Attribute** (Brand) is one of `SteadyStride` - AND **Price - Channel** is one of `Tread Trends` ![The predicate that applies the discount when Brand Attribute is AirWave and NeoTech, and Price-Channel is Tread Trends.](https://docs.commercetools.com/learning-price-and-discount-your-products/../images/product-discounts/discount-rule-tread-trends.png) ### Verify discount layering On the **Product Discount list** page, you can see that the EOFY 2023 discount has the highest ranking. When you add an item to the Cart that matches multiple discounts, the EOFY 2023 discount (5%) takes priority because of its higher rank. ![The larger discount has a lower rank than the lower discount so that the lower discount is applied to the Cart.](https://docs.commercetools.com/learning-price-and-discount-your-products/../images/product-discounts/usecase3-discount-rankings.png) Checking the Variant's Price record confirms that the 5% discount has been applied. ![The lower discount has been applied to the Variant's Price record.](https://docs.commercetools.com/learning-price-and-discount-your-products/../images/product-discounts/usecase3-discounted-price.png) Well done on this page. You have brought together different skills and knowledge about commercetools and how to operate the Merchant Center. ## Related pages - [Area overview page with navigation](/learning-price-and-discount-your-products.md) - [Previous page: How discounts work](/learning-price-and-discount-your-products/product-discounts/how-discounts-work.md) - [Next page: Best practices](/learning-price-and-discount-your-products/product-discounts/best-practices.md) - [Search documentation and API specs](/search.md)