Best Practice: Managing License Sales

In the digital era, many business models base on licenses. They allow customers the periodic use or access to a product or service. The licenses' scope is usually governed by a contract.

JustOn supports these business models using subscriptions. They combine all contracted conditions – products, prices, terms, renewals, etc. In this sense, subscriptions make up the billing plans for contracts.

Case Example

Assume the following example: You sell software licenses, and you keep track of your deals using opportunities. Based on your opportunities, you have JustOn automatically generate subscriptions, which are finally invoiced.

When you close a deal with a new customer, the new (or updated) opportunity triggers the creation of a new subscription – covering the contracted service period and, optionally, already including the automatic renewal.

Now this customer orders an additional license of the same type during the service period – which you add as a new opportunity product on a new opportunity. You want this opportunity product to become a new subscription item on the existing subscription. That is, you want to update the subscription while leaving the existing contracted conditions in place.

Workflow Outline

Once set up accordingly, the solution may work as follows:


(1) Opportunity 1 represents the original license sale: one one-year standard license at € 1000, starting on 2021-10-01, to be renewed every year. So this is the starting point for the billing and invoicing chain.

(2) Based on Opportunity 1, you have the subscription builder create a new subscription. The subscription's start date and end date define the service period to be invoiced – one year from 2021-10-01 to 2022-09-30. In addition, it is set up for automatic renewal.

The subscription includes one item. It represents the sold license, setting its price (€ 1000) to be paid once a year, the start date (2021-10-01), and no end date because you have agreed to renew it every year.

(3) Based on this subscription, the invoice run generates the first invoice: one license at € 1000 for the service period from 2021-10-01 to 2022-09-30.

(4) Now the customer requires an additional standard license starting from 2022-04-01. So they buy an additional one-year standard license mid-term.

Opportunity 2 represents this mid-term follow-up order: for the additional license, it includes one "difference" item to cover the rest of the current service period (€ 500 for six months from 2022-04-01 to 2022-09-30) and one additional one-year standard license starting from 2022-10-01 – in sync with the original service period.

(5) Based on Opportunity 2, you have the subscription builder update the subscription. Applying the use case REORDER, it adds the two products to the existing subscription:

  • Item 2 represents the partial license amount (€ 500) for the remaining six months of the running service period, with start date and end date set (2022-04-01 – 2022-09-30)
  • Item 3 represents the (complete) additional license at € 1000, starting with the new service period on 2022-10-01 and without an end date set.

(6) The regular invoice run generates the second invoice exclusively for Item 2, the partial license amount of € 500 with a service period from 2022-04-01 to 2022-09-30.

(7) With the new regular service period, the invoice run will produce an invoice from Item 1 and Item 3 – the two contracted one-year standard licenses – with the amount of € 2000 for the service period from 2022-10-01 to 2023-09-30.

The agreed conditions like license terms and prices remain unaltered, but the subscription shows the updated contract scope.


Depending on your requirements or the customer scenario, other options may apply:

Item merge on subscription renewal
The renewal process can, optionally, merge items where suitable. Once enabled, the two identical items (the original license an the follow-up license) will be merged into one on subscription renewal.
Upgrading the subscription
In an "upsell" scenario, the customer buys a premium (higher-priced) license during the running service period. In this case, you would create a new subscription covering the new item and terms, and set an end to the current subscription. To this end, you apply the subscription builder use case UPGRADE.

Setup Overview

Following this outline, you set up the subscription builder for opportunities and opportunity products, that is, objects in a parent-child relationship, as described in Automatically Building Subscriptions.

  1. Configure the parent object Opportunity.

    The subscription builder requires a number of ON fields on the parent object.

    • ON_Account, usually a Formula (Text) field to specify the Salesforce account ID
    • ON_Subscription, a Lookup field that links to the related subscription
    • ON_SubscriptionBuildError, a Text (255) field that shows the error message in case the subscription creation has failed
    • ON_UseCase, specifies the subscription builder use case – following the example, must be REORDER

      Not explicitly setting the use case if the opportunity has a start date will apply the subscription builder use case UPGRADE.

    For details, see Configuring Parent Object.

  2. Configure the child object Opportunity Product.

    The subscription builder requires a number of ON fields on the child object.

    • ON_OrderNo, usually a Formula (Text) field that holds the key to match source data to a subscription item
    • ON_Price, usually a Formula (Currency) field that holds the net sales price of the item, required if the detail object is defined in the subscription build filter
    • ON_Quantity, usually a Formula (Number) field that holds the quantity of the item to be invoiced, required if the detail object is defined in the subscription build filter
    • ON_Title, usually a Formula (Text) field that holds the name or title of the item, required if the detail object is defined in the subscription build filter

    For details, see Configuring Child Object.

  3. Create a subscription build filter.

    To define which objects and records to include in the subscription build process, you create a new custom filter with the following settings:

    • Name – the filter name, available as an option when triggering the operation
    • Target – the API name of the target object, like Opportunity
    • Child Relation – the relationship name (plural form) of the child object, like OpportunityLineItems
    • Use Case – the filter use case, must be SubscriptionBuilder
    • Condition – an (optional) condition expression (as used in an SOQL WHERE clause) to restrict the set of included records

    For details, see Creating Subscription Build Filter.

  4. Enable the subscription generation.

    Set up the way to invoke the subscription building process according to your requirements:

  5. Set up the invoice run to generate invoices from the subscriptions.

    This may involve