---
title: "Financing on a CPQ quote: a rate table, a lookup query and a price rule"
description: A pattern for showing a monthly financing payment on a Salesforce CPQ quote, and the three configuration mistakes that stop the price rule firing.
image: https://orbitalobjectives.com/hubfs/oo-social-share.png
---

[Skip to content](https://orbitalobjectives.com/insights/financing-on-a-cpq-quote-a-rate-table-a-lookup-query-and-a-price-rule#main)

[rbital bjectives](https://orbitalobjectives.com/)

- [Services](https://orbitalobjectives.com/services)
- [Our Work](https://orbitalobjectives.com/work)
- [About](https://orbitalobjectives.com/about)
- [Insights](https://orbitalobjectives.com/insights)

[Discuss Your Project](https://orbitalobjectives.com/contact)

1. [Insights](https://orbitalobjectives.com/insights)
2. Nov 12, 2026, 9:42:37 AM

# Financing on a CPQ quote: a rate table, a lookup query and a price rule

A pattern for showing a monthly financing payment on a Salesforce CPQ quote, and the three configuration mistakes that stop the price rule firing.

By Orbital Objectives

A lender hands you a rate sheet: cost tiers down the side, payment terms across the top, a factor in every cell. Sales wants the monthly payment on the quote. The pattern below handles it without code.

## The pattern

1. A custom object with one record per cell of the rate sheet: tier minimum, tier maximum, term and rate factor.
2. A term picklist on the quote, a number field to hold the stamped factor, and a formula field for the monthly payment.
3. A lookup query that finds the rate record where the quote’s net amount falls inside the tier and the term matches.
4. A price rule whose action copies the factor from the lookup result onto the quote.
5. A template section that prints the financing summary only when a factor is present.

## Three ways it silently fails

CPQ does not raise an error when a lookup returns nothing. The rule simply does not fire, and the same rule with a hard-coded value works, which sends you looking in the wrong place.

- Inverted range operators. The amount must be at or above the tier minimum and at or below the tier maximum. Set the other way round, no record can ever match.
- An unwired action. The price action needs its source set to the lookup field. Without it the rule has matched a record and has nothing to stamp.
- A type mismatch. A picklist stores the term as text. If the rate object stores it as a number, the comparison fails. Pick one type for both sides.

## Questions to settle before building

- What happens to a deal above the top tier?
- Which amount decides the tier: list, net, or net before freight and tax?
- Can a rep choose any term, or does the deal size limit the choice?

Rate sheets change. Keeping the rates as records means an admin updates them with a data load when the lender issues a new sheet, and nobody touches the rule.

[All articles →](https://orbitalobjectives.com/insights)

Next step

## Tell me what is stuck.

A first conversation is 30 minutes with the person who would do the work. You will leave knowing whether I am the right fit and roughly what it would take.

[Discuss Your Project →](https://orbitalobjectives.com/contact)[Explore Our Work](https://orbitalobjectives.com/work)

[rbital bjectives](https://orbitalobjectives.com/)

Everything orbits your objective

Independent Salesforce, HubSpot and Odoo consulting. Massachusetts.

#### Services

- [Consulting & Development](https://orbitalobjectives.com/services#salesforce-consulting-development)
- [CPQ & Revenue Operations](https://orbitalobjectives.com/services#salesforce-cpq-revenue-operations)
- [Service Cloud & Automation](https://orbitalobjectives.com/services#service-cloud-automation)
- [Experience Cloud & Partner Portals](https://orbitalobjectives.com/services#experience-cloud-partner-portals)
- [Integrations & Data Migration](https://orbitalobjectives.com/services#salesforce-integrations-data-migration)
- [All services](https://orbitalobjectives.com/services)

#### Practice

- [Our Work](https://orbitalobjectives.com/work)
- [About](https://orbitalobjectives.com/about)
- [Insights](https://orbitalobjectives.com/insights)
- [Contact](https://orbitalobjectives.com/contact)

#### Contact

- [info@orbitalobjectives.com](mailto:info@orbitalobjectives.com)
- [Discuss Your Project](https://orbitalobjectives.com/contact)

© 2026 Orbital Objectives LLCSalesforce and Odoo are trademarks of their respective owners.

```json
{
  "@context" : "https://schema.org",
  "@type" : "BlogPosting",
  "author" : {
    "@id" : "https://orbitalobjectives.com/#organization"
  },
  "dateModified" : "2026-11-12",
  "datePublished" : "2026-11-12",
  "description" : "A pattern for showing a monthly financing payment on a Salesforce CPQ quote, and the three configuration mistakes that stop the price rule firing.",
  "headline" : "<span id=\"hs_cos_wrapper_name\" class=\"hs_cos_wrapper hs_cos_wrapper_meta_field hs_cos_wrapper_type_text\" style=\"\" data-hs-cos-general-type=\"meta_field\" data-hs-cos-type=\"text\" >Financing on a CPQ quote: a rate table, a lookup query and a price rule</span>",
  "publisher" : {
    "@id" : "https://orbitalobjectives.com/#organization"
  },
  "url" : "https://orbitalobjectives.com/insights/financing-on-a-cpq-quote-a-rate-table-a-lookup-query-and-a-price-rule"
}
```

```json
{
  "@context" : "https://schema.org",
  "@type" : "BreadcrumbList",
  "itemListElement" : [ {
    "@type" : "ListItem",
    "item" : "https://orbitalobjectives.com/",
    "name" : "Home",
    "position" : 1
  }, {
    "@type" : "ListItem",
    "item" : "https://orbitalobjectives.com/insights",
    "name" : "Insights",
    "position" : 2
  }, {
    "@type" : "ListItem",
    "item" : "https://orbitalobjectives.com/insights/financing-on-a-cpq-quote-a-rate-table-a-lookup-query-and-a-price-rule",
    "name" : "<span id=\"hs_cos_wrapper_name\" class=\"hs_cos_wrapper hs_cos_wrapper_meta_field hs_cos_wrapper_type_text\" style=\"\" data-hs-cos-general-type=\"meta_field\" data-hs-cos-type=\"text\" >Financing on a CPQ quote: a rate table, a lookup query and a price rule</span>",
    "position" : 3
  } ]
}
```