When you create products and prices in Salesforce, they don’t sync to Stripe immediately. Instead, the products and prices sync to Stripe when they’re used in an activated order. You don’t need to manually create this information in Stripe.
Salesforce is the primary source for product and pricing information. This means all pricing, product descriptions, SKUs, and more sync from Salesforce to Stripe. Any updates you make to this information in Stripe won’t update the related products and prices in Salesforce. In addition, any updated product or pricing information in Salesforce that you use for a new activated order overwrites any changes you make in Stripe.
Pricing data can come from either the Salesforce
OrderItem or the linked
PricebookEntry. When creating the Stripe price, the connector checks for differences between these Salesforce objects and decides which one to use. If the
PricebookEntry data differs from the
OrderItem data, the connector uses the
OrderItem to create the Stripe price. Otherwise, the connector uses the
Reuse Stripe prices
The Stripe Billing Connector for Salesforce CPQ reuses prices that are created from a
PricebookEntry that was previously synced through the connector. For prices generated using the
OrderItem, the connector creates a new price. You can’t reuse order items because they’re unique, but you can reuse pricebook entries across multiple order items. In both cases, the corresponding Stripe price ID is written back to the Salesforce object.
Field mappings for products
The Stripe Billing Connector for Salesforce CPQ creates a product in Stripe even if there isn’t relevant data in Salesforce. All product fields are optional.
Field mappings for prices
The connector supports the following price types in Stripe.
- Licensed prices – If the Billing Type (
SBQQ_BillingType_c) field in Salesforce is either none or advanced, the connector creates a licensed price in Stripe.
- Metered or usage prices – If the Billing Type (
SBQQ_BillingType_c) field in Salesforce is arrears, the connector creates a metered or usage price.
- Decimal prices – If the decimal value of your price has more precision than 12 decimal places, the connector rounds your price to 12 decimals.
- One-time and recurring prices – The connector treats any product with populated subscription fields as a recurring price. Metered prices must be recurring, but you can have tiered one-time prices. If you want to create a one-time price, don’t set the following fields on the Salesforce product:
- Subscription Pricing (
- Subscription Type (
- Subscription Term (
- Billing Frequency (
- Subscription Pricing (
|Salesforce field (PriceBookEntry object)||Stripe price||Notes||Required|
|Product||Product||Maps the Stripe |
|Unit price||Unit amount decimal||Represents the amount billed to the customer at the frequency specified in the Billing Frequency field.|
|Billing frequency||Recurring, interval count||Required for recurring prices only. Supported values include monthly, quarterly, semi annual, and annual. These values map to the integer-equivalent.|
|Billing type||Recurring, usage type||Required for recurring prices only. An arrears value maps to metered. An advanced value maps to licensed.|
|CPQ global term unit setting||Recurring, interval||Required for recurring prices only. This is chosen during setup and isn’t a field-level mapping.|
|Currency||Currency||If your Salesforce organization has multi-currency enabled, we map the |
Tiered pricing using consumption schedules
You can configure tiered pricing in Stripe by setting up a Salesforce Consumption Schedule–and associated rates–for products in Salesforce. Stripe uses the consumption schedule to associate tiered pricing with the line items billed using metered or licensed billing. You can use only one consumption schedule per order line.
Stripe Billing requires an unbounded tier to exist, which means a consumption rate with no value for the upper bound. The connector doesn’t use the processing order on a consumption rate, or the billing term and billing term unit on the consumption schedule associated with the order product. The connector uses the billing frequency and subscription term on the order line instead.
For tiered pricing, the connector maps data from the following Salesforce objects:
OrderLine– If the
OrderLinedata differs from the corresponding
PriceBookEntry, the connector uses the
OrderLinedata and creates a new
Priceobject in Stripe.
PricebookEntry– The connector uses this value if the pricing data matches the
OrderLineand the consumption schedule and rate data aren’t customized on a per-customer basis.
Consumption Schedule– Although Salesforce allows you to associate multiple consumption schedules with a product, the connector supports only one consumption schedule per order line.
Consumption Rate– The connector uses the rate associated with a consumption schedule to define each tier entry in the Stripe price. You can have multiple rates for a consumption schedule.
You can’t customize the field mapping to generate the tiered pricing configuration in Stripe, or use custom fields for price or tier boundaries.
If you customize the consumption schedule and consumption rate data on a per-customer basis, Stripe creates a new
Price object to represent the customized pricing. The new price appears in the Stripe ID field on the
Order Line object in Salesforce.
To define a mapping for tiered pricing, add the following
PriceBookEntry to your prices field mapping. These fields are required.
|Salesforce field (PriceBookEntry object)||Stripe price||Notes|
|Billing scheme||Set to tiered when an order line in Salesforce has a consumption schedule associated with it.|
|Salesforce consumption schedule||Stripe price||Notes|
|Type||Tiers mode||A slab type uses graduated. A range type uses volume.|
Each consumption rate that’s associated with a consumption schedule results in an additional tiers entry on the Stripe
Price object. These fields are required.
|Salesforce consumption rate||Stripe price||Notes|
|Upper bound||Tiers, Up to||Stripe doesn’t have a lower bound and assumes the lower bound value of the first tier is zero. If this value is empty in Salesforce, Stripe uses the inf value to indicate there isn’t a limit for the upper bound.|
|Pricing method||A per unit value instructs the connector to use the |
|Price||Tiers, Flat amount decimal or Unit amount decimal||The pricing type used depends on the Pricing Method field.|
Manually sync products and prices
When testing in a Salesforce sandbox environment, you can manually sync your entire product catalog for inspection in your Stripe test account. The manual sync respects any product and price filters you set.
Use the following buttons in the Settings section of the connector:
Sync all products – Syncs all products (but not prices) to your Stripe test account, regardless of when they were last updated. This operation occurs in the background and can take a couple minutes to complete. If you delete any products in Salesforce, they aren’t deleted or archived in Stripe.
Sync all pricebooks – Syncs all products and prices to your Stripe test account, regardless of when they were last updated. This operation occurs in the background. If you delete any products or prices in Salesforce, they aren’t deleted or archived in Stripe. After you create a price and set a recurring billing schedule in Stripe, you can’t update these parameters and sync them from Salesforce. Attempting to do so results in sync errors.
If you already synced a product or price to your Stripe account and want a new sync, you can delete the contents of the Stripe ID field on the Salesforce object in your Salesforce account. Then sync again to create a new resource in Stripe.
Customize product pricing on orders
In the Salesforce CPQ, you can optionally customize the unit price of a product on a quote. If you customize the price, this causes the information to differ from the price that’s linked to the product on the activated order. In this case, the connector creates a unique price in Stripe to represent the customized price. The Stripe price ID appears on the Stripe ID field for the order.
When you create a data mapping with a customized price for an order, the price appears on the
Order Line level and not the Salesforce
Pricebook Entry level. Pricing is considered customized if any of the related fields (for example, recurring fields, amount, or currency) differ between the price book entry price and the order line price.
If your Salesforce organization has multi-currency enabled, the connector maps the
CurrencyIsoCode on the
PriceBookEntry to the equivalent Stripe currency during Stripe price creation. This ensures subsequent invoices are billed in the proper currency.
When billing in multiple currencies, consider the following.
Multiple currencies per Stripe customer
Stripe supports one active currency per customer. This means each Stripe customer can’t have multiple active subscriptions that use different currencies. For example, if a customer has an active subscription that’s billed in USD, you must wait until that subscription ends before creating a new subscription in a different currency, such as GBP.
All Salesforce order amendments must use the same currency as the original order. Orders and order amendments can’t have a mix of currencies among the order items.
The connector doesn’t handle currency conversion. It simply passes through the price and currency pair found on the