Salesforce CPQ Discounting Tools | All You Need to Know

Today we're going to take a look at CPQ Discounting Tools. As the name implies, this tool allows automatically applying discounts to the price of products in Quote.

Before we delve deeper into the specifics of each Discounting methods, let's take a look at the prices CPQ operates on. This is a set of fields on the Quote Line object that determine the product's price for the consumer; just in case: Quote Line is a Junction object between Quote and Product.


These prices work top-down and it’s called a waterfall. For example, if Special Price is already calculated, then Regular Price will be calculated as Special Price minus volume-based discount.

CPQ has the following Discounting methods:


Optional Discount

This method is applied to a product, sold as part of a Product Bundle. In this case, it should be cheaper than the same product sold separately.

Let's see how to do it. We have a Product Bundle - Security Console. And we would like another product - Interior Badge Reader - to receive a 10% discount when sold as part of this Product Bundle. We go to the main Security Console product in the Related tab and select the Product Option we need - Interior Badge Reader.


Click Edit and enter the required value in the Discount(%) field. In our case, it’s 10%. Then save.

Now let's add our Product Bundle to Quote. After adding and saving the Quote, we can see what price the Interior Badge Reader displays in the Quote.


As we can see, in the Original Price field, the price is 65 Euros, which corresponds to the price in the Price Book, while the Special Price is 58.5 Euros, which corresponds to a 10% discount. Also, this price is displayed near this product in Quote.

It should also be noted that in the Special Price field, CPQ can record different prices - Cost plus markup price, contracted price, or option discount. What if we use the pricing method Cost plus markup price and set an option discount? CPQ has a hierarchy for this field:

  1. Cost plus markup price
  2. Сontracted price
  3. Оptional discount

dont miss out iconDon't forget to check out: Ensuring a Seamless Customer Experience with Option Constraints | Salesforce CPQ

Manual Discount

Sometimes sales managers need to set discounts manually. Fortunately, CPQ has Manual Discount in a set of Discounting tools.

The result of the Manual Discount calculation is recorded in the Customer Price, while the base price from which the discount is calculated is the Regular Price (see Price Waterfall above). Also, the Manual Discount setting can be blocked. To do this, check the Non Discountable field on the Product.

Manual Discount can be set in % or money amount.


But you can extend this functionality by adding Unit and Total values to the picklist. The Unit allows the manager to set the desired price, and CPQ will calculate the necessary discount automatically. Total is used when the quantity of the product is  more than 1 and the manager doesn’t want to calculate a discount per unit of the product, but knows that the total quantity should cost, let’s say, 299 Euros. Sales manager enters this amount, and then CPQ calculates the discount.

For example, the manager selected Unit and entered 75 Euros when the base cost of the product is 100 Euros. After saving the Quote, a 25 Euro discount will be displayed.

How to add Unit and Total values to picklist?

We go to the Quote Line object and create a new field of picklist type with the name AdditionalDiscountUnit and the values shown below.


Now we can choose additional values.


Previously we set a discount for certain products in Quote. But also we can set a Manual Discount for the whole Quote. To do this, enter the discount value in the Additional Discount field on the Quote.


This discount will be applied to all products in Quote that don’t have an individual Manual Discount set.

We can also set a discount only for the main product of the Product Bundle, and this discount will be applied to all Product Options in the Product Bundle. To do this, check the Discounted by Package field on the Product Option, and then the discount of the main product will be applied to the Product Option.


It should be noted that this functionality only works if Additional Discount is selected on the main product by %.

Partner and Distributor Discount

As the name implies, this method is used when we want to give an additional partner discount to the client. The values for these discounts are displayed in the Distributor Discount and Net Unit Price fields on the Quote Line object. They are calculated by the following formulas:

Partner Price = Customer Price - Partner Discount

Net Price = Partner Price - Distributor Discount

Note, that the Quote level has the Partner Discount and Distributor Discount fields. As well as for Additional Discount, if they are not empty, then the discount values there are applied to all Products in the Quote that don’t have the corresponding discounts set.

Let's see how the Partner Discount is calculated. There are two options: Standard and Off List. The difference is in the price from which the discount amount is calculated. In the case of Standard, the discount amount is calculated from the Customer Price - the price before the Partner Price. In the case of Off List, the discount amount is calculated from the List Price.


To switch calculation modes, create the ChannelDiscountsOffList__c field on the Quote object. A 0 value for this field means using the Standard model, and 1 means using the Off List model.

If we look at the Price Waterfall at the beginning of the article, we can see that the Partner Discount is one of the last to be applied. This can be changed. To do this, create the ApplyPartnerDiscountFirst__c field on the Quote object. A 1 value for this field will cause the Partner Discount to be applied before the Regular Price.

Volume-Based Discount Schedule

Volume-Based Discount Schedule is the largest and most popular discount tool in CPQ. This Discount method allows us to provide a discount depending on the purchase volume.

The discounts are described in the following table:


To use such a system in CPQ, you need to perform several settings.

The first one

Go to the Discount Schedules tab and create a new one, indicating only the name. Now we need product purchase ranges to get discounts. So now click Edit Tiers


and indicate the ranges you need. Added the required number with the + button at the right.


The second one

Now we need to connect the created Discount Schedule to the Product for which we want to set discounts depending on the purchase volume. We go to Product, and in the Discount Schedule field, we choose the Discount Schedule we created.


Volume discounts will now be automatically applied when adding this product to Quote.


As you can see, when adding a product with a quantity of 1, the discount is not applied: List Price = Regular Price. Now we increase the quantity to 120 and click Calculate.


When Discount Schedule is applied to a Product, a special sign "$" is displayed next to it.


Clicking on it allows seeing discount ranges.


IMPORTANT! Discount Schedule can be applied not only to the only product, but to different ones.

In the previous example, we connected the Discount Schedule to the Product. In this case, the discount will be applied each time when the Product is included in the Quote. But if we want this discount to be applied only within a specific bundle, we need to disable the Discount Schedule from the Product and add it to the Discount Schedule field directly on the Product Option.


In general, Discount Schedule can be connected to various objects in CPQ.


Suppose it happens that different Discount Schedules affect the same Product (one Discount Schedule is connected to the Product, and another one - to the Product Option). In that case, CPQ chooses to use the Discount Schedule connected to the object with the highest priority. In this case, the Discount Schedule connected to the Product Option will be chosen.

By default, the Discount Schedule is applied to any Price Book connected to Quote, but sometimes we need to exclude the use of discounts for a certain Price Book. To do this, in the Excluded Pricebook IDs field on the Discount Schedule entry, add Id Price Books for which we do not want to use discounts.


IMPORTANT! We connected discounts using the Discount Schedule field on the Product above. It is also possible to connect discounts using the Product and Price Book fields on the Discount Schedule record. In this case, the discount is applied only if this Product is connected to Quote using Price Book from the Price Book field.

We have learned how to create and connect Discount Schedule. Now let's look at how CPQ counts the quantity of Product to provide a discount.

For example, we decided that the customer will receive a 10% discount when buying 150 items of Product. What happens if this Product is included in Quote not by one Quote Line, but by two of 75 items each? What if this Product is marked bundled, and it does not require payment? All of this is regulated by the Discount Schedule settings - the value set in the Aggregation Scope field.


Let's look at an example to understand how it works.



It is also possible that one Quote includes one Product both as a Product Option and as a separate Product. And Discount Schedule is connected to Product Option, but not to Product. In this case, even if Aggregation Scope = Quote, only the quantities indicated in the Product Option will be considered to determine the discount amount. In order to take into account the quantities of a separate Product, we need to connect the Discount Schedule to it.

Suppose you need to take into account the quantities of the product included in the bundle and marked as Bundled (its cost is not taken into account in the total Quote amount). In that case, you need to check the Include Bundled Quantities field on the Discount Schedule.


Let's say we have two similar Products in Quote - RFID Key Cards and RFID Key Fobs. And we want them both to count towards the discount in the same Quote. To do this, check the Cross Products field on the Discount Schedule. And then, all quantities of all products connected to one Discount Schedule are counted together. This function only works if Aggregation Scope = Quote or Group.

It is also possible to take into account previously purchased quantities of Product to calculate the discount. To do this, check the Cross Orders field on the Discount Schedule entry. After that, CPQ will calculate the quantities of this Product purchased earlier (according to the Asset records related to this Account) and calculate the discount in the current Quote. At the same time, CPQ takes into account all Assets related to Account for the entire period.

dont miss out iconCheck out another amazing blog by Spakrybit here: What is Salesforce CPQ? | Features and Benefits of Salesforce CPQ

What if we want only Assets for the last 365 days to be taken into account? We need to create the Purchase Date field on the Asset object and write down the sale date. On the same object, we create a field of the Purchased This Year formula type, which returns a checkbox, and it is equal to True if the sale took place less than a year ago. Next, on the Quote object, we also create a field of the Purchased This Year formula type (it is important that the field names were on Asset and Quote) return text - the formula returns “true”. Now, on the Discount Schedule object, add the Purchased_This_Year__c value to the Constraint Field picklist (it is important to use the Name API).

Now it remains to check Cross Orders on the desired record of the Discount Schedule object and select the Purchased_This_Year__c value in the Constraint Field. That’s how we tell CPQ which Asset records to use for counting.

Usually, Discount Schedule is used with a % discount. By connecting one Discount Schedule to different products, we get the desired % discount for different products. But sometimes we might need to provide a fixed discount. To do this, you need to set the Discount Unit = Amount field on the Discount Schedule record.


This will allow us to set the discount for different ranges in $ (or other currency), not in % - Discount ($).


We may need to allow managers to change the size and range of discounts. For this task, the Discount Schedule entry has an Override Behavior field. The field can take on the following values:



And the last one, which can be done on the Discount Schedule. Earlier, when we determined the ranges for discounts, we found that with a quantity of 200 pcs. And more a 20% discount will be applied. So, if we have 250 items, then a 20% discount will be applied. This behaviour is determined by the Type field, or rather its Range value. This is the default value for this field. If we select the Slab value for this field, then the behaviour will change. Let's say we have the following ranges for discounts:

If Type = Slab and the quantity is 250, then CPQ will divide this quantity into slabs in this way:

1 slab - 100

2 slab - 100

3 slab - 50

1 slab does not receive a discount

2 slab gets 10% discount

3rd slab gets 20% discount


Sparkybit, Salesforce consulting and development company. We make Salesforce perform at its best by fitting it to Clients’ custom business needs. 9 years of sharpened expertise, 25+ successful long-term projects globally.
[email protected]

Copyright belongs to Sparkybit GmbH, Im Dörener Feld 3, 33100, Paderborn, Germany.
2023 © Sparkybit. All rights reserved.


Popular Salesforce Blogs