Overview

Pricing tables allow your customers to select the plan that that they’d like to subscribe to. Pricing tables can be used on your public pricing page, as well as part of in-app paywalls.

One of the major benefits of leverage Stigg’s pricing table widget, is that any change that you make to your pricing model is auto-magically reflected in the pricing table - no additional coding is required 😎.

Pricing table layout

Pricing tables includes cards that represent each plan that customres can subscribe to.

Each plan includes the following details:

  1. Plan name
  2. CTA button to allow users to select the plan.
  3. Price
  4. Entitlements that the customer will get access to when subscribing to the plan. Entitlement visibility, order and display text can be defined at the plan level.
  5. Available add-ons - available add-ons are defined according to the list of add-ons that are compatible with the plan. Add-on visibility is defined at the add-on level.

Rendering pricing tables

In public pricing pages

Rendering Stigg’s pricing table widget on your public pricing page allows you to present the available pricing to your website’s visitors.

You can leverage the product’s customer journey configuration to control what plan the customer will be provisioned a subscription for once they click on “Get started”.

<Paywall
   onPlanSelected={({ plan, intentionType }) => {  
     switch(intentionType) {
        case SubscribeIntentionType.START_TRIAL:
          // TODO: provision trial subscription
          break;
        case SubscribeIntentionType.REQUEST_CUSTOM_PLAN_ACCESS:
          // TODO: redirect to contact us form
          break;
        case SubscribeIntentionType.UPGRADE_PLAN:
        case SubscribeIntentionType.DOWNGRADE_PLAN:
          // TODO: show checkout experience
          break;
     }
  }}  
/>

In-app paywalls

To render paywalls inside your application, when a customer signs-in or restores their session set the customer ID:

import { StiggProvider } from '@stigg/react-sdk';

export function App() {
  return (
    <StiggProvider apiKey="<STIGG_CLIENT_API_KEY>" customerId="<LOGGED_IN_CUSTOMER_ID>">
      <NestedComponents />
    </StiggProvider>
  );
}

Downgrades and upgrades

Users that are logged in to the application can view the current plan that they’re subscribed to, as well as downgrade and upgrade options.

<Paywall
   onPlanSelected={({ plan, customer, intentionType }) => {  
     switch(intentionType) {
        case SubscribeIntentionType.START_TRIAL:
          // TODO: provision trial subscription
          break;
        case SubscribeIntentionType.REQUEST_CUSTOM_PLAN_ACCESS:
          // TODO: redirect to contact us form
          break;
        case SubscribeIntentionType.CHANGE_UNIT_QUANTITY:
        case SubscribeIntentionType.UPGRADE_PLAN:
        case SubscribeIntentionType.DOWNGRADE_PLAN:
          // TODO: show checkout experience
          break;
        case SubscribeIntentionType.CANCEL_SCHEDULED_UPDATES:
          // TODO: show confirmation dialog
          // once confirmed, cancel the scheduled subscription update
          break;
     }
  }}  
/>

Upgrade only

It’s also possible to only present the upgrade options (and hide lower tier/free plans); thereby, encouraging customers to upsell:

<Paywall
   showOnlyEligiblePlans
   onPlanSelected={({ plan, customer, intentionType }) => {
      switch(intentionType) {
        case SubscribeIntentionType.START_TRIAL:
          // TODO: provision trial subscription
          break;
        case SubscribeIntentionType.REQUEST_CUSTOM_PLAN_ACCESS:
          // TODO: redirect to contact us form
          break;
        case SubscribeIntentionType.CHANGE_UNIT_QUANTITY:
        case SubscribeIntentionType.UPGRADE_PLAN:
        case SubscribeIntentionType.DOWNGRADE_PLAN:
          // TODO: show checkout experience
          break;
        case SubscribeIntentionType.CANCEL_SCHEDULED_UPDATES:
          // TODO: show confirmation dialog
          // once confirmed, cancel the scheduled subscription update
          break;
      }
  }}  
/>

Tiered and volume pricing

When tiered and volume pricing is defined, this is automatically reflected in the Stigg pricing table widget with a numeric up-down picker where customers can choose their desired unit quantity:

Stair-step pricing

When stair-step pricing is defined, this is automatically reflected in the Stigg pricing table widget with a drop-down where customers can choose their desired tier:

Customization

No-code widget designer

The Stigg app offers a no-code widget designer, which allows you to control the widget colors, typography and layout.

Custom CSS

For more advanced customization, custom CSS can be applied using the widget designer of the Stigg app. Alternatively, custom CSS can also be applied using code.

Below you can find a list of the supported CSS classes:

General layout

Class nameDescription
stigg-paywall-layoutStyles applied to the entire paywall page
stigg-paywall-plans-layoutStyles applied to the container of all plans
stigg-starting-at-textStyles applied to the plan price starts at text

Billing period switcher

Class nameDescription
stigg-period-picker-containerStyles applied to the period toggle section
stigg-period-switchStyles applied to the period switch button
stigg-monthly-period-textStyles applied to the monthly period text
stigg-annual-period-textStyles applied to the annual period text
stigg-discount-rate-textStyles applied to the discount rate given to annual billing

Plan card

Class nameDescription
stigg-plan-offering-containerStyles applied to the plan container
stigg-header-wrapperStyles applied to the plan header section
stigg-plan-headerStyles applied to the title of the plan
stigg-price-textStyles applied to the price of the plan
stigg-plan-descriptionStyles applied to the description of the plan
stigg-price-billing-period-textStyles applied to the text stating the billing period of the plan
stigg-plan-header-dividerStyles applied to the divider between the header section and entitlements section
stigg-paywall-plan-button-layoutStyles applied to the button section
stigg-paywall-plan-buttonStyles applied to the button of the plan
stigg-paywall-plan-button-textStyles applied to the text of the button
stigg-highlight-badgeStyles applied to the recommended plan badge
stigg-highlight-badge-textStyles applied to the recommended plan badge text
stigg-trial-days-left-textStyles applied to the text describing how many days are left of the plan’s free trial
stigg-{plan.id}Styles applied to specific plans according to their unique ID

Plan entitlements

Class nameDescription
stigg-plan-entitlements-containerStyles applied to the entire section
stigg-plan-entitlements-titleStyles applied to the title of the section
stigg-entitlement-row-containerStyles applied to the area of each entitlement
stigg-entitlement-nameStyles applied to the text of each entitlement
stigg-entitlement-row-iconStyles applied to the icon of each entitlement

Plan add-ons

Class nameDescription
stigg-compatible-addons-containerStyles applied to the entire section
stigg-compatible-addons-headerStyles applied to the title of the section
stigg-compatible-addons-listStyles applied to the add-on list
stigg-compatible-addon-itemStyles applied to every row in the add-on list
stigg-compatible-addon-{addon.id}Styles applied to a specific add-on row using its add-on ID
stigg-compatible-addon-iconStyles applied to the icon of each add-on
stigg-compatible-addon-contentA wrapper around the add-on name
stigg-compatible-addon-nameStyles applied to the add-on name

Texts

The default widget texts can currently be overridden using code:

const textOverrides = {  
    highlightChip: 'Best value',  
    planCTAButton: {  
        startTrial: (plan: Plan) => `Start trial (${plan.defaultTrialConfig.duration} days)`,  
        upgrade: 'Start now',
        custom: 'Contact us',  
        switchToBillingPeriod: billingPeriod => `Switch to ${billingPeriod.toLowerCase()}`,
        cancelScheduledUpdate: 'Cancel update',
    },  
    price: {  
        custom: 'Contact us',  
    },  
}

<Paywall  
    highlightedPlanId="plan-id"  
    onPlanSelected={({ plan, customer }) => {  
        ...  
    }}  
    textOverrides={textOverrides}  
/>

You can find additional text override options here

Additional resources

Pricing Table Properties

Global Theming Customization