December 10, 2025

How to Implement Term Discounts in Salesforce Revenue Cloud

Jean-Michel Tremblay

Salesforce Consultant

Term-based discounts were a popular feature in Salesforce CPQ managed package, allowing businesses to offer better pricing for longer subscription commitments. While this functionality isn’t available out-of-the-box in Revenue Cloud core, you can recreate it entirely using point-and-click configuration with decision tables, price adjustment matrices, and formula-based pricing.

In this guide, I’ll walk you through the complete implementation step-by-step.

Term Based Discount - Flow
Term Based Discount – Flow

Use Case

You want to offer discounts based on subscription length:

Term Length Discount
0-12 months 0%
12-24 months 10%
25-36 months 15%
37+ months 20%

The longer the customer commits, the better the discount they receive.

Start Learning Now

Sign up now for the Revenue Cloud Training and Save 10%

Start Learning Revenue Cloud

Prerequisites

Before starting, ensure you have:

  • Salesforce Revenue Cloud enabled in your org
  • An active pricing procedure
  • An active sales transaction context definition
  • System Administrator access or equivalent permissions

Step 1: Create the Term Discounts Custom Object

First, we need a custom object to store our term discount tiers.

Object Configuration

Create a new custom object called Term_Discounts__c with the following settings:

  • Label: Term Discount
  • Plural Label: Term Discounts
  • Name Field: Auto Number (e.g., TD-{0000})
  • Enable: Allow Reports, Track Field History

Custom Fields

Add the following fields to the object:

Field Label API Name Type Description
Lower Bound Lower_Bound__c Number(18,0) Minimum months for this tier
Upper Bound Upper_Bound__c Number(18,0) Maximum months for this tier (optional for last tier)
Discount Discount__c Percent(16,2) Discount percentage to apply
Tier Type Tier_Type__c Picklist Values: Percentage, Amount

Sample Data

Create records for your discount tiers:

Lower Bound Upper Bound Discount Tier Type
12 24 10% Percentage
25 36 15% Percentage
37 (blank) 20% Percentage

Note: Leave Upper Bound blank for the last tier to catch all terms 37 months and above.


Step 2: Create the Quote Line Item Field

We need a field on Quote Line Item to store the calculated number of months.

Create a new field on the Quote Line Item object:

Field Label API Name Type
Number of Months Number_of_Months__c Number(18,0)

This field will be populated by a formula element in the pricing procedure.


Step 3: Create the Decision Table

Decision tables allow the pricing procedure to look up values from your custom object.

Create the Decision Table

  1. Go to SetupDecision Tables
  2. Click New
  3. Configure:
    • Name: Term Discounts
    • Decision Table Type: Standard
  4. Click Save and Next

Configure Source Object

  • Source Object: Term_Discounts__c

Configure Source Fields (Conditions)

Add two condition fields:

Source Field Comparison Optional
Lower_Bound__c Greater or Equal No
Upper_Bound__c Less or Equal Yes

Important: Make Upper Bound optional because the last tier won’t have an upper limit.

Configure Output Fields

Select the fields to return:

  • Discount__c
  • Tier_Type__c

Activate the Decision Table

After saving, click Activate to make the decision table available. This also refreshes the table data.


Step 4: Add Decision Table to Pricing Recipe

  1. Go to SetupPricing Recipes
  2. Edit your active pricing recipe
  3. Find your new Term Discounts decision table
  4. Click the + button to add it
  5. Set Pricing Component Type to Custom Discount
  6. Save

Step 5: Update Context Definition

The context definition maps your custom field so it’s accessible in the pricing procedure.

Add the Attribute

  1. Go to SetupContext Definitions
  2. Edit your Active Sales Transaction Context
  3. Go to Edit Attributes
  4. Under Sales Transaction Item, add a new attribute:
    • Name: Number of Months
    • Type: Input and Output
    • Data Type: Number
  5. Add a Tag for the attribute (e.g., NumberOfMonths)
  6. Save

Map the Field

  1. In the context definition, go to Quote Entities Mapping
  2. Find Number of Months attribute on the left
  3. Map it to Quote Line ItemNumber_of_Months__c on the right
  4. Save and Publish

Step 6: Update the Pricing Procedure

Now we’ll add the formula and price adjustment matrix to the pricing procedure.

Deactivate the Pricing Procedure

Before making changes, deactivate your active pricing procedure.

Add the Formula Element

Number of Month Calculation formula element

Add a Formula element to calculate the number of months:

Output Variable: Number of Months

Formula:

ROUND(MONTHS_BETWEEN({!Effective_To}, {!Effective_From}), 0)

This formula calculates the difference in months between the subscription start and end dates.

Add the Price Adjustment Matrix

Term Based Discount - Price Adjustment Matrix
Term Based Discount – Price Adjustment Matrix
  1. Add a List Container (or use an existing one)
  2. Inside the container, add a Price Adjustment Matrix element
  3. Configure:

Lookup Table: Term Discounts

Input Rule Variables:

Variable Maps To
Lower Bound Number of Months
Upper Bound Number of Months

Input Variables:

Variable Maps To
Quantity Line Item Quantity
Input Unit Price Net Unit Price

Output Variables:

Variable Maps To
Output Net Unit Price
Subtotal Item Net Total Price

Configure the Constants

The price adjustment matrix creates constants for the adjustment type and value. Update these:

  1. Find the constants named after your decision table (e.g., Term_Discounts_Adjustment_Type)
  2. Set Adjustment Type constant to: Tier_Type__c
  3. Set Adjustment Value constant to: Discount__c

Rename the Element

Rename the price adjustment matrix to Term Discount – this name appears in the price waterfall.

Reactivate

Save and reactivate the pricing procedure.


Testing Your Implementation

Term Discount - Price Waterfall
Term Discount – Price Waterfall
  1. Create a new Quote
  2. Add a subscription product to the quote
  3. Set the subscription term:
    • For a 12-month term, expect 0% discount
    • For a 24-month term, expect 10% discount
    • For a 36-month term, expect 15% discount
    • For a 48-month term, expect 20% discount
  4. Check the Price Waterfall on the line item to see the term discount applied

Example

For a product with:

  • List Price: $1,000/month
  • Term: 24 months

You should see:

  • List Price: $1,000
  • Term Discount: -10% (-$100)
  • Net Unit Price: $900
  • Subtotal: $21,600 (24 × $900)

Extending the Solution

This implementation can be customized for more complex scenarios:

Product-Specific Discounts

Add a Product lookup field to your Term_Discounts__c object and update the decision table conditions to filter by product.

Account-Based Discounts

Add an Account lookup to offer different term discounts based on customer tier or segment.

Amount-Based Discounts

Use the Amount tier type instead of Percentage to apply fixed dollar discounts.

Multiple Discount Tiers

Create additional custom objects and decision tables for different discount types that can stack.


Summary

In this guide, we recreated CPQ’s term discount functionality in Revenue Cloud using:

  1. Custom Object – To store discount tier configuration
  2. Decision Table – To look up the appropriate discount
  3. Context Definition – To map our custom field
  4. Formula Element – To calculate subscription duration
  5. Price Adjustment Matrix – To apply the discount

This approach is entirely point-and-click and can be extended to handle complex pricing scenarios.


Watch the full video tutorial: Term Discounts in Revenue Cloud

Questions? Leave a comment below or reach out on LinkedIn.


The Cloud Update | Agentforce Revenue Management

Free Assessment