BigCommerce

Background

Spresso Price Optimization is a plug and play solution to provide dynamic pricing functionality to every item in your catalog. Using our proprietary AI, we can fine tune pricing on a per-SKU basis to maximize gross margin OR conversion rates based on your priorities.


How it works

You can get up and running with Spresso in 3 easy steps:

  1. Send us your current catalog. The preferred method of delivery is a nightly SFTP upload - just like you would to any other ad / affiliate network.
  2. Install our SDK in your website’s frontend code and configure your storefront to send us event data. We feed information about product impressions and conversions to our AI models so that they can select the best price for your items.
  3. Wherever pricing is displayed on your platform, replace your static prices with the AI-driven pricing generated by Spresso. Our system continually monitors the performance of every item in your catalog and adjusts prices accordingly.

Technical Details

Catalog Intake

Timely and up to data catalog information is a core component of fueling Spresso's AI model.

👉

Refer to catalog guide here for details and methods.

Event SDK

Event data is needed in order to provide enough information to our systems - these are very standard, and follow the same patterns as most other e-commerce conversion tracking tooling.

👉

Refer to Event SDK guide here for details and methods.

Displaying Dynamic Pricing:

All pricing in Spresso is personalized to a particular device. The way our system works is the event SDK generates a cookie, named spressoDeviceId that is stored on the browser and used to uniquely identify every device**.

*If you have users that frequently switch between channels while adding items to their cart please contact our support team so that we can talk about setting up user-specific, rather than device-specific pricing models.

Whenever a product, or list of products, is requested, your server code should pass that cookie along with the SKUs to our SDK and we will return a device-specific price that you can use to replace the price field in your product JSON before sending it back to the browser. That way, with no changes to your front end, you will be able to inject Spresso-pricing for display.

📘

Implementation details

The safest and easiest way to implement Spresso dynamic pricing is using our Node SDK.

Common integration questions

1. How do I authenticate the SDK?

Obtain a client ID and secret for your organization from our console. Pass these values to our SDK during initialization. The secret you receive must be stored securely on your servers and never deployed or released to your frontend code.

2. I use BigCommerce’s GraphQL Storefront API to query product data, NOT my own backend, what do I do?

Install our spresso-insights app onto your BigCommerce domain. Once products are loaded into your frontend, you should be able to use that as a proxy for fetching prices without needing to store our client ID and secret in the frontend code.

3. How do I handle pricing exclusions and rules?

Besides a SKU and a deviceID, our API also accepts 2 additional parameters that enable you to incorporate a wide variety of use cases:

defaultPrice (number, mandatory). This is a price that you have to provide in the API call, which will be used in case of network errors OR bot traffic etc.
overrideToDefaultPrice (boolean, defaults to false). When set to true, our API will always return the defaultPrice above.

Using these parameters for various business logic:

  • If you have pre-negotiated prices for a given user or set of users, set the defaultPrice to the pre-negotiated pricing, and enable the overrideToDefaultPrice flag.
  • If you have special promotional pricing for a given variant/SKU, set the defaultPrice to the promo price and enable the overrideToDefaultPrice flag.
  • To show strikethrough pricing - set the defaultPrice to your sale price, enable the overrideToDefaultPrice flag and keep the MSRP in your catalog the same as always. This will show every user the sale price, with the strikethrough indicator showing the discount off MSRP as well. Alternatively, you can set the overrideToDefaultPrice to false, and ensure that MSRP is always higher than the maximum dynamic price allowed - this will allow you to maintain a strikethrough UI even while optimized prices are displayed.
  • If you have affiliate / ad networks where a fixed pricing is displayed, you can detect the particular UTM parameter(s) in the URL and whenever they are present, set the defaultPrice to the catalog price and enable the overrideToDefaultPrice flag. This will ensure any click-through users will see the same price on your website as they did in your ads.
  • If you have a loyalty program that mandates a certain price for a group of users, set the defaultPrice to the loyalty program price, and enable the overrideToDefaultPrice flag.

4. Do I have to call Spresso’s API for every price shown on my website?

Short answer, no - you definitely do not have to. We have an API that returns a list of SKUs which are being dynamically priced, you can choose to only request pricing for those.

Long answer - we’ve found that most of our customers find it easier to inject Spresso prices throughout their systems, even for SKUs whose prices are not being optimized. This frees the merchandizing team to quickly iterate on pricing without any engineering effort. Our latency and reliability are tuned to support this use case (see below).

5. How do I ensure that prices on my website are consistent?

Our AI models run frequently and re-allocate a particular deviceId to a different price. So successive API calls to Spresso with the same device ID and SKU do not have to return the same price. Using our SDK you can completely control how prices work on your website.

  • If you want the most optimum pricing, never cache any price information from Spresso, and prices displayed to users will always be dynamic. Set the cacheTTL to 0 when using our SDK.
  • If you want prices to stay consistent across a user’s browsing session, implement the SessionCache interface and pass along an instance of that to our SDK. A combination of that and the cacheTTL will ensure that prices stay consistent across your website for as long as the TTL dictates.
  • As a third alternative, our Node SDK provides an in-memory cache you can use. This is the simplest way to get started and is a good balance between optimal pricing and complete consistency.

:warning: Note: using a TTL of more than one day will adversely affect the performance of our AI.

6. What are the latency implications of using Spresso?

Every call to Spresso’s API will add a little latency to your system. We work very hard to minimize this latency. Our current p50 latency is 7ms and p90 is 9ms. Additionally, rather than obtaining pricing individually per SKU, you can call our batch API to price up to 500 SKUs at a time.

If you are worried about latency, you can always use the SessionCache described above for an additional performance boost.

7. What are the reliability implications of using Spresso?

At Spresso reliability and uptime are at the core of our offering. In the 30 day period to date, we have responded to 12M pricing requests, with 0 errors or timeouts.

That said, If you use our SDK, we take care of all error handling for you, ensuring that no matter what happens to our systems, you will still get a price to show to users. The way this works is if our SDK catches an error from our API, we simply return the defaultPrice to the caller - this way your systems will always have that failsafe mechanism in event of network or other errors on the Spresso servers.

8. How do I handle server-side rendering?

If your website uses server-side rendering, the first request for prices will be needed BEFORE a spressoDeviceId can be generated. In this scenario, our system will return the defaultPrice for each item. Subsequent page views WILL have a deviceId and will display the personalized pricing. If you are worried about the consistency of this experience please contact our support team. Our implementation engineers will work with you to develop a custom solution for the initial page load based on your system architecture.

Using Dynamic Pricing when adding to Cart:

Once you’ve displayed the dynamic prices to the user, you have to ensure that BigCommerce does not fall back to using the catalog price when a user adds an item to their cart.

When making the request to create a cart or add a line item, use the list_price field in BigCommerce’s API to send in the price you obtain for Spresso for that SKU. Once you do that, the backend should automatically switch to using Spresso pricing with no further effort. Below are a few common implementation questions that users often ask:

1. I use BigCommerce’s GraphQL Storefront API to add to cart, NOT my own backend, what do I do?
The storefront API does not allow per line-item price modifications. If you use this, then install the spresso-insights app onto your BigCommerce domain and we will handle that step for you.