Salesforce CPQ – Q in CPQ – Quote process & Document generation

This is the fourth edition of my Salesforce CPQ series which is intended to give an overview of CPQ concepts and how they can be implemented in Salesforce CPQ.

Earlier editions:

Salesforce certified CPQ Specialist resources

Salesforce CPQ – C in CPQ – Configure Products & Bundles

Salesforce CPQ – P in CPQ – Pricing & Discounts

This edition is intended to cover specific features related to quote process and quote document generation using Salesforce CPQ. SteelBrick’s CPQ Knowledge base has a lot of information about the same, intent of this blog is to give a high level overview of what Salesforce CPQ offers.


Quote, in general, is a document which the seller gives to the potential buyer with details about the product sold, prices at which the product is sold, discounts given, possible product specific terms & agreements. Quotes are subject to approval from within the selling organization (depending on discounts given) and also approval of the buyer.

In Salesforce CPQ, Quotes should be tagged to a pricebook to pick the list prices of the products which are required. There can be multiple quotes under an opportunity, however only one of the quotes should be the primary quote. On close winning the opportunity, the opportunity products, contract, subscription & assets are generated based on this primary quote.

Quote templates

Quote templates are used to configure how the quote document should look like. The Quote will also have a Quote Template associated to it based on which the document is generated.

A summary of different kinds of information which will help in generating the document are given below.

Branding Information

Logo, watermarks, fonts, colours, page layouts can be defined for the quote document which will be generated based on this template. For logo and watermark, the document should be uploaded and then the document id should be specified in this field.

Template’s header and footer related sections can be be associated here. This can be done using the Header Content and Footer Content fields. Separate sections need not be created for the same. However two Template Content records will be created. Assume a Template Content is a simple WYSiWYG Editor with some special properties.


Quote Template for B2B Sales

Products list & proposed prices

Line columns shows the columns which need to be shown in the tabular column which gets generated for the products which are proposed in the quote.

Group by a given field to show separate tables. Sub-group by a given field to aggregate and show within one row instead of multiple rows

For bundled products which contain product options defined under a product, Quote Line Visibility at product option can be Editor only, Document only, Both. Depending on the choice here, the product is shown only in UI during the product selection or only in quote document generated or in both the places respectively

The table’s header colour can be defined using the field Shading color at quote template record.

Quote Template Sections

Sections are useful to add additional information like Terms. Sections can also be used to split the quote lines into different sections and then define different fields for different purposes (example, based on kind of products). This can be done using the filter section within the Template Section record.

We can use the After option, Before option fields to define page breaks between sections.

Quote Template Content

Quote Template Content is a set of information which can be plugged and played into the quote document by defining a new section or by setting the Header/Footer Content of the Quote Template.

In addition to be a WYSiWYG Editor, it allows us to refer information from the quote / quote line / linked objects information.

If there is any other information to be defined within the template, it can be done using static text. $Text within {} to be used for static text in doc.

Account information can be shown through the link from Quote object

As a best practice, it is advised to always clone existing templates, make each change, test, and make next change so that if document doesn’t render, it is easy to debug and there is no impact to current running processes.


Translations can be done either out of the box through the Translation Workbench for salesforce capabilities. For those that are defined in Salesforce CPQ (SteelBrick CPQ) the Localisation object is used to translate.

Sample Quote Document


Quote Document Sample

Quote Line TableTermsQuote doc - Signature

Quote processes

  • Process input
  • Process input conditions

Post Sale Information

Subscriptions and Renewals

  • Subscription Prorate Precision is possible and can be done either Day, Monthly, Day + Monthly. This can be set in Configure link on the managed package.
  • Subscription term at Quote level by default is empty. If prorating is required for a given quote, this should be populated.


  • Contract generated on close winning the opportunity
  • Contract generated even when subscription products are not present, if renewal is contract based
  • Contract generated for the primary quote with subscription term populated

Assets Creation

  • Asset created one per product for non subscription products.
  • Asset creation depends on ‘Asset conversion’ field in product.
  • Asset creation possible one per quote line or one per unit

I hope this page helps you in your learning journey. Please feel free to add any of your blogs or point out to any missing / incorrect details in the comments section.


5 thoughts on “Salesforce CPQ – Q in CPQ – Quote process & Document generation

  1. Hi I would like to get a password to read your last posts. Thanks already. Best regards. Jean-Luc Schellens


  2. Hi Rampalli, I am helping a Salesforce California User Group find speakers to talk about CPQ, the talk can be done either virtual or in-person. Would you be interested? Pls. contact me at sz… Thank you.

  3. Account information can be shown through the link from Quote object (Can you please explain some more How I can display the account information in the quote Template, I am having issue with the direct binding of lookup field information from the quote object. e.g. Unable to get Account name with {!})

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s