In modern sales, customers expect pricing that feels fair, transparent, and aligned with the value they receive. Traditional tier or block pricing often creates abrupt price shifts when moving between quantity ranges, which can frustrate buyers and complicate deal negotiations. Curve-Based Pricing in Salesforce Revenue Cloud solves this by applying smooth mathematical formulas that gradually reduce unit prices as volume grows, while ensuring total revenue continues to scale. The result is a more consistent, customer-friendly pricing experience that is easier for sales teams to manage and for businesses to maintain.
What is Curve-Based Pricing?
Curve-based pricing is a dynamic pricing model where the unit price of a product is calculated using a mathematical curve (usually quadratic or polynomial) rather than a flat rate or tiered price.
Why Curve-Based Pricing?
In Salesforce Revenue Cloud, businesses often choose between Block-Based Pricing and Curve-Based Pricing. While both models support tiered discounting, Curve-Based Pricing offers smoother control and flexibility.
Block-Based Pricing
- Prices are defined in discrete tiers (e.g., 1–10 units = $10 each, 11–20 units = $8 each).
- When quantity crosses a tier, the price jumps suddenly.
- Creates sharp changes in pricing that may confuse customers.
- Easier to set up but less flexible for nuanced discounting.
Curve-Based Pricing
- Uses a mathematical formula (quadratic curve) to calculate unit price.
- Price per unit decreases gradually as quantity increases (smooth discount curve).
- Avoids sudden jumps when crossing a tier boundary.
- Gives pricing teams more flexibility by tuning coefficients (A, B, C) instead of redefining multiple tiers.
Executive Summary
The business requirement was to implement a banded curve-based pricing model where:
- Unit Price (PPU) decreases gradually as the purchased quantity increases.
- Line Total (PPU × Quantity) still grows as quantity increases.
- Pricing logic is centralized inside the Pricing Procedure, driven by a Curve Table object and a Decision Table for coefficient selection.
This ensures scalability, reusability, and minimal maintenance, while giving business users control over pricing through metadata.
Now, let’s walk through a real-world example to see how curve-based pricing is applied across different product families.
1) Product Setup
Create three products and assigned them to distinct Product Families:
- Internet Data Plans (GB) — Product Family: Internet Services
- Delivery Pricing by Distance (KM) — Product Family: Logistics
- Consumption (kWh) – Electricity Usage — Product Family: Energy
The Product Family is the key driver for curve selection inside the Pricing Procedure.
2) Curve Table Object
A custom object Curve_Table__c created with the following fields:
- QtyFrom__c (Number) → Lower bound of quantity range
- QtyTo__c (Number) → Upper bound of quantity range
- Coefficient_A__c (Decimal) → Quadratic coefficient (x²)
- Coefficient_B__c (Decimal) → Linear coefficient (x)
- Coefficient_C__c (Decimal) → Constant term
- Product_Family__c (Picklist/Text) → Mapped family
This table allows different families to share the same engine while keeping coefficients configurable.
3) Example Curve Table Records
Example records created for each product family:
Internet Services (Internet Data Plans)
| QtyFrom | QtyTo | Coeff_A | Coeff_B | Coeff_C | Product_Family__c |
|---|---|---|---|---|---|
| 1 | 10 | 0.01 | -0.12 | 7.000 | Internet Services |
| 11 | 50 | 0.0002 | -0.03 | 6.200 | Internet Services |
| 51 | 100 | 0.0001 | -0.025 | 6.153 | Internet Services |
| 101 | 9999999 | 0.0000 | -0.0045 | 5.300 | Internet Services |
Logistics (Delivery by Distance, KM)
| QtyFrom | QtyTo | Coeff_A | Coeff_B | Coeff_C | Product_Family__c |
|---|---|---|---|---|---|
| 1 | 5 | 0.0400 | -1.2000 | 25.000 | Logistics |
| 6 | 20 | 0.0050 | -0.6000 | 20.000 | Logistics |
| 21 | 50 | 0.0005 | -0.1200 | 15.000 | Logistics |
| 51 | 9999999 | 0.0000 | -0.0020 | 10.000 | Logistics |
Energy (Consumption, kWh)
| QtyFrom | QtyTo | Coeff_A | Coeff_B | Coeff_C | Product_Family__c |
|---|---|---|---|---|---|
| 1 | 100 | 0.000200 | -0.070000 | 15.0000 | Energy |
| 101 | 500 | 0.000010 | -0.020000 | 11.9000 | Energy |
| 501 | 1000 | 0.000005 | -0.010000 | 8.1500 | Energy |
| 1001 | 9999999 | 0.000000 | -0.000200 | 3.3500 | Energy |
💡 Tip: Use QtyTo = 9999999 to represent open-ended ranges. Alternatively, leave QtyTo blank and handle NULL in the logic.
4) Decision Table (Coefficient Mapping)
Create Decision Table (Curve Table Entries) to get data on the basis of Product Family and quantity Range in pricing procedure.
- Inputs:
- Product_Family (e.g., Internet Services, Logistics, Energy)
- QtyFrom (Quantity greater than or equal to QuoteLine.Quantity)
- QtyTo (Quantity less than or equal to QuoteLine.Quantity)
- Product_Family (e.g., Internet Services, Logistics, Energy)
- Outputs:
- Coefficient_A
- Coefficient_B
- Coefficient_C
- Coefficient_A
Note: Before Going to use this Lookup Table in Pricing Procedure Modify Pricing Recipes.
5) Pricing Procedure: Curve Logic Integration
Inside the Pricing Procedure:
- List Price Element (Lookup Table)
- Linked to Curve Table Entries (the lookup table).
- Inputs: Product Family, Quantity.
- Outputs: Coefficients A, B, and C.
- Tags were added to store coefficient values for use in later steps.(These coefficients are context nodes not a variable or constant.
- Linked to Curve Table Entries (the lookup table).
- Formula Based Pricing Element
- Logic applied:
| PPU = Coefficient_C + (Coefficient_B * Qty) + (Coefficient_A * Qty ^ 2) |
6) Illustrative Example
When a Quote Line is added, the curve-based pricing formula is applied dynamically based on the entered quantity. Below is an example using the coefficients for the Internet Services product family:
A = 0.001, B = -0.12, C = 7.0.
Example Calculations
- Case 1: Quantity = 1
PPU = 7 + (-0.12 × 1) + (0.001 × 1 × 1) = 6.881
Net Unit Price = 6.881
Line Total = 6.881 × 1 = 6.881 - Case 2: Quantity = 2
PPU = 7 + (-0.12 × 2) + (0.001 × 2 × 2) = 6.762
Net Unit Price = 6.762
Line Total = 6.762 × 2 = 13.524
As you can see from the calculations above, curve-based pricing gradually reduces the unit price as the quantity increases. Even though the price per unit decreases, the overall line total continues to grow — demonstrating the balance between volume discounts and revenue.
Visualizing the Curve with example –
Final Notes
- The curve-based pricing formula ensures smooth price reduction as volume grows, avoiding sudden jumps or negative prices.
- Business users can maintain coefficients through the Curve Table, without modifying the Pricing Procedure.
- This implementation is reusable across multiple product families and scalable for new use cases.
By Prabal Jain
August 23, 2025Hi
Nice post, its very helpfull