# Price lists

URL: https://docs.sparklayer.io/help/pricing/managing-pricing

Create automatic or manual B2B price lists in SparkLayer, upload or override prices, and assign each list to the customer groups that should see it.

> **Quick summary**
>
> - A price list is a set of B2B prices matched to your product SKUs, in one currency. Create and manage them at **Pricing > Price lists** in the SparkLayer Dashboard ([open](https://app.sparklayer.io/pricing/lists)), or **SparkLayer Wholesale > Pricing > Price lists** in the Shopify app.
> - A price list can be **automatic** (a percentage off or on your Shopify prices, or another list), **manual** (exact prices you upload by CSV) or both. On the Pro and Enterprise plans, prices can also come from another system through the API.
> - Customers see a price list once it's assigned to their [customer group](https://docs.sparklayer.io/help/customers/customer-groups.md), or to them individually with [customer pricing](https://docs.sparklayer.io/help/pricing/customer-pricing.md). If a group has several lists, the first one that contains the product wins: see [Which price list wins](#price-list-order).
> - The free Basic plan includes 3 price lists; Starter and above have unlimited price lists.

## How it works

You create price lists, then assign them to customers through [customer groups](https://docs.sparklayer.io/help/customers/customer-groups.md). When customers sign in to your store, they see the prices you've set for them.

From pricing source to customer:

1. **Pricing source**: Your store's prices, a CSV file or another system
2. **Price list**: A rule such as 50% off, or exact prices per SKU
3. **Customer group**: Assign one or more price lists
4. **Customer**: Signs in and sees their prices

| Type | How it works | Best for |
| --- | --- | --- |
| **Automatic** | You choose a pricing source, such as your Shopify prices, and apply a percentage decrease or increase, such as 50% off. | A simple B2B pricing structure based on percentage discounts |
| **Manual** | You upload exact prices for your product SKUs by CSV, or edit them in the [Price editor](https://docs.sparklayer.io/help/pricing/price-editor.md). | Precise pricing, where you need control over every price a customer sees |
| **Integration** | A backend system such as an ERP, PIM or CRM sends price data to SparkLayer automatically. | Prices that are already managed in another system |

You can combine them: an automatic list at 50% off retail can also hold exact prices for a few products.

Prices are always shown **net** (excluding tax), and tax is added at checkout. To show prices with tax included, see [tax-inclusive price display](https://docs.sparklayer.io/help/pricing/pricing-display.md#show-tax-inclusive-prices). If your store's own prices include tax, see [If your store's prices include tax](#tax-inclusive-prices) before you set up automatic pricing.

## Create a price list

Start with an empty price list, then add its prices. Before you start, check that:

- Every product you sell to B2B customers has a **unique SKU** in your store. Prices are matched to products by SKU.
- Those products are **active** in your store, not drafts. SparkLayer only imports prices for active products.
- You know the **currency** of the prices. You need one price list per currency.

To create a price list:

1. Go to **Pricing > Price lists** in the SparkLayer Dashboard ([open](https://app.sparklayer.io/pricing/lists)), or **SparkLayer Wholesale > Pricing > Price lists** in the Shopify app and click **Create price list**.
2. Under **Details**, enter a **Name**, such as "Wholesale GBP".
3. Check the **Handle**. It's filled in from the name. You can change it now, but not later.
4. Choose a **Currency**. You can't change it later either.
5. Choose how the list gets its prices. Tick **Enable automatic pricing** for a percentage off your store's prices (see [Set up automatic pricing](#set-up-automatic-pricing)), **Enable manual pricing** to upload exact prices, or both.
6. Click **Save** in the save bar at the top of the page.

**More detail**

- Not sure which to choose? Automatic pricing is quickest if your B2B prices are a set percentage off your retail prices. Choose manual if you already have a spreadsheet of trade prices. You can upload exact prices to an automatic list later, so ticking both keeps your options open.
- If you've connected a backend system such as an ERP to SparkLayer, only create price lists by hand if they aren't imported from that system.

The new price list appears on the **Price lists** screen. Next:

1. Add its prices: [set up automatic pricing](#set-up-automatic-pricing), or [upload prices by CSV](https://docs.sparklayer.io/help/pricing/csv-upload.md).
2. [Assign the price list to a customer group](#assign-a-price-list-to-customers), so customers see it.

### Price list settings

The price list form has 3 cards: **Details**, **Automatic pricing** and **Manual pricing**.

**Every setting on the form**

| Setting | What it does |
| --- | --- |
| **Name** | The name shown in SparkLayer, for example "Wholesale pricing". It must be unique. You use it to assign the price list to a customer group. |
| **Handle** | The list's unique ID, for example `wholesale-pricing`. It's used in [bulk CSV uploads](https://docs.sparklayer.io/help/pricing/csv-upload.md#upload-prices-to-several-price-lists-at-once), [customer pricing](https://docs.sparklayer.io/help/pricing/customer-pricing.md) and the API. It can't be changed once the list is created. |
| **Currency** | The currency of the prices in the list, for example GBP. It can't be changed once the list is created. |
| **Enable automatic pricing** | Works out prices from a pricing source and your percentage, for example 50% off Shopify prices. |
| **Enable manual pricing** | Lets you set specific prices for each product by uploading a CSV file. Once a list is created, this card shows "Manual pricing is managed by uploading a CSV file on the price lists page." instead. |

### If you're on the Basic plan

Basic includes 3 price lists. If you save a 4th, you'll see **Basic includes 3 price lists**. Click **Try Starter free** to start a 14-day Starter trial with unlimited price lists, or click **Not now** and delete a list you don't use. See [Your plan and usage](https://docs.sparklayer.io/help/dashboard/plan-and-features.md).

## Set up automatic pricing

An automatic price list works out its prices from a **pricing source** and a percentage, so you don't set each price yourself. It's the quickest setup when your B2B prices are a set percentage off retail.

1. Create or edit a price list and tick **Enable automatic pricing**.
2. Choose a **Pricing source**: **Shopify Price**, or one of your other price lists.
3. Leave **Apply a percentage variation** ticked.
4. Choose **Decrease** or **Increase**, and enter the percentage. For example, to take 50% off, choose **Decrease** and enter `50`.
5. Click **Save** in the save bar.

**More detail**

- **Shopify Price** is the **Price** field on a product in the Shopify admin: the price your regular customers see on your store. When you change a price in Shopify, your automatic price lists update too.
- A decrease can be between 0% and 99%, and an increase between 0% and 500%.
- If the price list is in a different currency from its pricing source, set a [currency conversion](#set-a-currency-conversion). If your store's prices include tax, [adjust the percentage for tax](#tax-inclusive-prices).
- On other platforms, the pricing source is that platform's product price.

> **An automatic price list covers every product**
>
> An automatic price list always applies its percentage to all your products. You can't limit it to some SKUs, a brand or a collection. To price only some products, use a manual price list: upload a CSV with a `sku` and a `price` for just those products, or set them in the [Price editor](https://docs.sparklayer.io/help/pricing/price-editor.md). To add more SKUs later, upload a CSV with only the new ones. If a group has both kinds of list, the [order of its lists](#price-list-order) decides which price wins. For discounts by brand, see [Move brand discounts from another wholesale app](https://docs.sparklayer.io/help/guides/migrate-brand-discounts.md).

To set an exact price for a few products on an automatic list, upload them by CSV, or use **Override for this SKU** in the [Price editor](https://docs.sparklayer.io/help/pricing/price-editor.md#override-an-automatic-price-for-one-sku). The **Type** column then shows how many, for example **Automatic + 12 SKU**.

### Set a currency conversion

If the price list is in a different currency from its pricing source, you can set a fixed exchange rate. For example, if your pricing source is in USD and the price list is in EUR:

1. Tick **Currency conversion** ("Use a manual exchange rate").
2. Enter the rate, for example `1 USD = 1.1 EUR`.

If the price list is in the same currency as the pricing source, you can't set a currency conversion.

### If your store's prices include tax

SparkLayer treats the prices in a price list as **net** (excluding tax), and adds tax at checkout. An automatic price list takes its percentage off your store's own prices. So if your store's prices include tax, the result still contains tax, and tax is then added again at checkout. SparkLayer has no button to correct this for you: work out the percentage by hand, and enter that instead.

To find the percentage to enter as a **Decrease**:

1. Take your discount from 100. For 20% off: 100 − 20 = 80.
2. Divide that by 1 plus your tax rate. With 20% VAT: 80 ÷ 1.2 = 66.67.
3. Take the result from 100: 100 − 66.67 = 33.33. Enter `33.33` as the **Decrease**.

**Worked example: 20% off, with 20% VAT**

| Price | Amount |
| --- | --- |
| Your store's price, including 20% VAT | £120.00 |
| Net price (excluding VAT) | £100.00 |
| What you want trade customers to pay: 20% off the net price | £80.00 + VAT |
| With a **Decrease** of `20`, the price list price | £96.00 + VAT (20% off £120, treated as net) |
| With a **Decrease** of `33.33`, the price list price | £80.00 + VAT |

For trade prices with no discount, only the tax taken out, the decrease is 100 − (100 ÷ 1.2) = 16.67%.

On Shopify, your prices include tax when **Include sales tax in product price and shipping rate** is turned on at **Settings > Taxes and duties** ([open in the Shopify admin](https://admin.shopify.com/settings/taxes)). If it's off, your prices are already net and you can enter the percentage you want as it is. If your Shopify store uses line item tax (specific tax rates per SKU), automatic price lists don't take this into account.

On other platforms, the same applies whenever your platform's product prices include tax.

## Add manual prices

A manual price list holds the exact prices you set for each SKU. Choose the tool that fits the job:

| To | Use |
| --- | --- |
| **Add or update prices in bulk** | Click **Upload** next to the price list at **Pricing > Price lists** in the SparkLayer Dashboard ([open](https://app.sparklayer.io/pricing/lists)), or **SparkLayer Wholesale > Pricing > Price lists** in the Shopify app. See [Upload prices by CSV](https://docs.sparklayer.io/help/pricing/csv-upload.md). |
| **Change a few prices** | The [Price editor](https://docs.sparklayer.io/help/pricing/price-editor.md). |
| **Set price breaks by quantity** (for example buy 1 for $10.00, buy 5 for $8.00) | See [Quantity pricing](https://docs.sparklayer.io/help/pricing/quantity-pricing.md). |

You can add exact prices to an automatic price list too. That way you automate most of your pricing and still set specific prices for some products.

## Send prices from another system

If your prices are managed in a backend system such as an ERP, it can send them to SparkLayer automatically through the [SparkLayer API](https://docs.sparklayer.io/developers/api.md). This is available on the Pro and Enterprise plans, and is usually set up by your developer or integration partner. Some systems have a ready-made [integration](https://docs.sparklayer.io/help/integrations.md) that does this for you.

## Assign a price list to customers

A price list takes effect once you assign it to a [customer group](https://docs.sparklayer.io/help/customers/customer-groups.md). This is how you decide which customers see which prices when they sign in.

1. Go to **Customers > Groups** in the SparkLayer Dashboard ([open](https://app.sparklayer.io/customers/groups)), or **SparkLayer Wholesale > Customers > Customer groups** in the Shopify app and click the group's name. To set prices for every B2B customer, click **Edit** on the **Base customer group** card instead.
2. Find **Price lists**. If it's under **Inherited rules**, click **+ Override** next to it (on the base group, **+ Customize**) to move it up to **Customized rules**.
3. Choose a price list. To add another, click **Add price list**.
4. Click **Save** in the save bar.

**More detail**

- You can also choose a price list when you create a group, in the **Create customer group** window.
- **Reset** next to a customized rule hands it back to the base customer group.
- See [Customer groups](https://docs.sparklayer.io/help/customers/customer-groups.md) for everything else a group controls.

### Which price list wins

A customer group can have several price lists, numbered in the order you add them. When a product is in more than one of them, the first list wins. As the group page puts it: "If a SKU is in more than one list, SparkLayer uses the first list it's in." So the order of the lists is their priority.

For example, if `ABC-123` is $10 in price list 1, $8 in price list 2 and $12 in price list 3, customers in the group see $10. A product that's only in list 3 gets its price from list 3.

- **Put the most specific list first**, such as a key account's prices or a clearance list, and a broad list like "Wholesale 30% off" last. A broad automatic list prices every product, so lists after it only count for products it can't price.
- **The order is the one shown in the group's Price lists rule**, at **Customers > Groups** in the SparkLayer Dashboard ([open](https://app.sparklayer.io/customers/groups)), or **SparkLayer Wholesale > Customers > Customer groups** in the Shopify app.
- **Prices from outside the group come first.** A customer's own price lists, set with [customer pricing](https://docs.sparklayer.io/help/pricing/customer-pricing.md), replace the group's. See [What overrides what](https://docs.sparklayer.io/help/customers.md#who-sets-what).

If a customer sees the wrong price, check the price list order on their group first. See [A customer gets prices from the wrong price list](https://docs.sparklayer.io/help/troubleshooting.md#a-customer-gets-prices-from-the-wrong-price-list).

### Prices for one customer

Customer groups set the prices for most buyers. When one business or person needs something different, set their prices at a lower level:

| For | Do this |
| --- | --- |
| **One customer** | Give them their own price lists, or an extra percentage discount, on their record in your store (on Shopify, in the Shopify admin). See [Prices for one customer](https://docs.sparklayer.io/help/pricing/customer-pricing.md). |

For the whole job, step by step, follow [Give a key account their own prices](https://docs.sparklayer.io/help/guides/key-account-prices.md).

Once your price lists are set up and assigned, you manage them from the **Price lists** screen.

## The Price lists screen

**Pricing > Price lists** in the SparkLayer Dashboard ([open](https://app.sparklayer.io/pricing/lists)), or **SparkLayer Wholesale > Pricing > Price lists** in the Shopify app is where you manage every price list. It lists them in a table, with **Bulk upload** and **Create price list** at the top.

| Column | What it shows |
| --- | --- |
| **Name** | The price list's name, with its handle underneath (for example "Handle: trade-20"). Click it to edit the list. |
| **Currency** | The list's currency, such as USD. |
| **Type** | **Manual (n)**: a manual list with n SKU prices. **Automatic + n SKU**: an automatic list with n SKUs set by hand. **Automatic**: an automatic list with no SKUs set by hand. |

Each row has an **Upload** button, for [uploading prices by CSV](https://docs.sparklayer.io/help/pricing/csv-upload.md), and a **⋯** menu.

**The ⋯ menu**

| Menu item | What it does |
| --- | --- |
| **Upload CSV** | Uploads prices to this list. See [Upload prices by CSV](https://docs.sparklayer.io/help/pricing/csv-upload.md). |
| **Download CSV** | Downloads the list's SKU prices as a CSV file. It's unavailable for an automatic list with no SKUs set by hand. |
| **Edit** | Opens the list's settings. |
| **Clear** | Removes every SKU price uploaded to the list. See [Clear or delete a price list](#clear-or-delete-a-price-list). |
| **Delete** | Deletes the list. See [Clear or delete a price list](#clear-or-delete-a-price-list). |

**Tips and shortcuts on the screen**

- A tip banner appears at the top of the screen when something needs attention, for example "Trade has no price list, so those buyers see retail prices." or "Trade 20% isn't used by any customer group yet."
- The **Common tasks** card links to the usual jobs: create a price list, change prices on a list, set the price of one product, choose who sees a price list, and upload prices from a spreadsheet.

## Edit a price list

1. Go to **Pricing > Price lists** in the SparkLayer Dashboard ([open](https://app.sparklayer.io/pricing/lists)), or **SparkLayer Wholesale > Pricing > Price lists** in the Shopify app and click the list's name (or **Edit** in its **⋯** menu).
2. Change the **Name** or the automatic pricing. The **Handle** and **Currency** are read-only.
3. Click **Save** in the save bar.

The **More actions** menu at the top of the page has **Download CSV**, **Clear** and **Delete**.

## Clear or delete a price list

Clearing empties a list but keeps it; deleting removes it.

| Action | What happens |
| --- | --- |
| **Clear** | Removes every SKU price uploaded to the list. On an automatic list, the automatic rule stays. Confirm with **Clear prices**. |
| **Delete** | Deletes the list. Customer groups using it go back to your base pricing. This can't be undone. Confirm with **Delete price list**. |

Both are in the list's **⋯** menu at **Pricing > Price lists** in the SparkLayer Dashboard ([open](https://app.sparklayer.io/pricing/lists)), or **SparkLayer Wholesale > Pricing > Price lists** in the Shopify app, and in **More actions** when you're editing the list.

## Tax and discounts

For how tax is calculated on B2B orders, see [Tax and shipping](https://docs.sparklayer.io/help/ordering/tax-and-shipping.md).

To add promotions on top of price lists, use [Discounts](https://docs.sparklayer.io/help/pricing/discounts.md) (Growth plan). They apply automatically or with a coupon code, for all customers or specific customer groups. They include an amount off an order, and volume tiers (more off as the quantity goes up).

## Show "price on application"

To show "Price on application" instead of a price, so customers contact you for one:

1. **Leave the product out of the customer's price lists.** With no B2B price, it shows **Unavailable** instead of a price and quantity box, and can't be added to the order. This needs manual price lists, because an automatic list covers every product. To do it for one group whatever its price lists, make the variant un-sellable for that group instead: see [Hide variants or make them unavailable](https://docs.sparklayer.io/help/storefront/product-display.md#hide-variants-or-make-them-unavailable).
2. **Rename "Unavailable".** At **Storefront > Options > Translation overrides** in the SparkLayer Dashboard ([open](https://app.sparklayer.io/storefront/options)), or **SparkLayer Wholesale > Storefront > Options > Translation overrides** in the Shopify app, add overrides for `pdp.messaging.un-sellable` (product pages) and `product-card.messaging.un-sellable` (product cards), for example `Price on application`. See [Change the "Unavailable" message](https://docs.sparklayer.io/help/pricing/pricing-display.md#change-the-unavailable-message).

**More detail**

- The new text shows wherever a product has no price, including products missing from a price list by mistake. Check your other products have prices first: see [Why a product shows Unavailable](#unavailable).
- To let customers ask for a price, use the [Quoting Engine](https://docs.sparklayer.io/help/ordering/quoting.md): your sales agents can add price on application (POA) products to a quote and set the price.

## Troubleshooting

**Diagnose: Product missing, no B2B price or “Unavailable”?** Find out whether it’s the product, the price list or your theme.

1. **What’s happening?** Sign in as a B2B customer, then pick the closest match.
   - The product says “Unavailable”, or shows the retail price: go to question 2
   - The product is missing completely: go to question 3
   - The product shows, but SparkLayer’s buttons or price are missing: go to question 4
2. **Search for the SKU in the Price editor. Does it find the product?** “No product was found for SKU” means SparkLayer doesn’t have it. Where to look: Pricing > Price editor (SparkLayer).
   - Yes: go to question 5
   - No product was found: go to question 3
3. **Does every variant of the product have a SKU?** Check each variant, not just the product. A barcode doesn’t count as a SKU. Where to look: Products > select the product (Shopify admin).
   - Yes: go to question 6
   - No: go to fix A (Add a SKU to every variant)
4. **Are SparkLayer’s buttons missing on every product, or just some?** Check a few products while signed in as a B2B customer.
   - Every product: go to fix B (This looks like a tags or theme issue)
   - Just some: go to question 7
5. **Does the product have a price in a price list on the customer’s group?** Without a B2B price, a product shows as Unavailable, or at your store’s own price. Where to look: Pricing > Price editor (SparkLayer).
   - Yes: go to question 8
   - No: go to question 9
6. **Is each SKU unique across your store?** If two variants share a SKU, SparkLayer can’t tell them apart. Where to look: Products (Shopify admin).
   - Yes: go to question 10
   - No / not sure: go to fix C (Make each SKU unique)
7. **Where are they missing?** Product pages and collection pages use different parts of your theme.
   - On the product page: go to question 11
   - On collection or search results pages: go to question 12
   - In a wishlist, quick view or other app: go to fix D (Other apps show your retail price)
8. **Is the customer trying to add fewer than the lowest tier in a tiered price list?** With tiered pricing, the lowest tier also sets the smallest quantity a customer can buy.
   - Yes: go to fix E (Add a tier for smaller quantities)
   - No: go to question 13
9. **Which type of price list should give it a price?** Manual lists are uploaded by CSV or set in the Price editor. Automatic lists work prices out from a pricing source, such as your Shopify prices. Where to look: Pricing > Price lists (SparkLayer).
   - Automatic: go to question 14
   - Manual (CSV): go to question 15
10. **Is the product’s status Active?** SparkLayer only imports active products, not Draft ones. Where to look: Products > select the product (Shopify admin).
   - Yes: go to question 16
   - No: go to fix F (Set the product to Active)
11. **Does this product use a different product template from the ones that work?** Check the Theme template setting on the product. Each template needs SparkLayer’s product widget. Where to look: Products > select the product (Shopify admin).
   - Yes: go to fix G (Add SparkLayer to this product template)
   - No / not sure: go to question 2
12. **Are you using a filter or search app on that page?** Filter and search apps often use their own product card, which needs SparkLayer added separately.
   - Yes: go to fix H (Add SparkLayer to the app’s product card)
   - No / not sure: go to fix I (Add SparkLayer to your product card)
13. **Does the variant’s `sparklayer.settings` metafield set `"sell": false` for this group?** That makes a variant visible but un-sellable on purpose. Where to look: Products > select a variant > Metafields (Shopify admin).
   - Yes: go to fix J (The variant is set not to be sold)
   - No / no metafield: go to fix K (Everything checks out)
14. **Does this variant have a value in the list’s pricing source?** For example, a list based on compare-at price needs a compare-at price on every variant. An empty field means there’s no B2B price. Where to look: Products > select the product (Shopify admin).
   - Yes: go to fix K (Everything checks out)
   - No: go to fix L (Fill in the pricing source)
15. **Did the SKUs change in Shopify after you uploaded the list?** Prices are matched by SKU, so a renamed SKU no longer matches its old row.
   - Yes: go to fix M (Update the price list with the new SKUs)
   - No / not sure: go to question 17
16. **Is the product published to the SparkLayer Wholesale sales channel?** Open the product and check its sales channels. Products from Shopify’s own Bundles app can’t be added to it. Where to look: Products > select the product (Shopify admin).
   - Yes: go to question 18
   - No: go to fix N (Add the product to the SparkLayer Wholesale sales channel)
   - I can’t select it (a bundle): go to fix O (Shopify’s own Bundles app isn’t supported)
17. **Do the SKUs in your CSV match Shopify exactly, with no spaces before or after?** Spreadsheet exports often add spaces. The upload succeeds, but nothing matches.
   - Yes: go to fix P (Add a price for this product)
   - No / not sure: go to fix Q (Trim the SKUs and upload again)
18. **Could the product be hidden on purpose, by B2B Catalogs or a visibility setting?** For example a `b2c-only` tag, or `"display": false` for the customer’s group.
   - Yes / not sure: go to fix R (Check what’s hiding it)
   - No: go to fix K (Everything checks out)

**Fixes**

- **A. Add a SKU to every variant** SparkLayer matches B2B prices to SKUs, so variants without one won’t show. Add a SKU and the product will appear after it syncs. Where: Products > select the product (Shopify admin).
- **B. This looks like a tags or theme issue** When SparkLayer’s buttons are missing on every product, the cause is usually the customer’s tags or your theme. Next: SparkLayer not showing or looking wrong?
- **C. Make each SKU unique** Rename duplicate SKUs so every variant has its own. Then update any price lists that use the old SKUs. Where: Products (Shopify admin).
- **D. Other apps show your retail price** Wishlist, quick view and search apps show Shopify’s own price and don’t know about B2B prices. A SparkLayer widget can be added to the app’s template instead. Ask us, or see the guide. See [Prices in other apps](https://docs.sparklayer.io/help/pricing/pricing-display.md).
- **E. Add a tier for smaller quantities** If the first tier starts at, say, 50, customers can’t buy fewer than 50. Add a price for a quantity of 1 if smaller orders should be allowed. Where: Pricing > Price editor (SparkLayer). See [Quantity pricing](https://docs.sparklayer.io/help/pricing/quantity-pricing.md).
- **F. Set the product to Active** Draft products don’t sync to SparkLayer. Set it to Active and allow a few minutes for it to sync. Where: Products > select the product (Shopify admin).
- **G. Add SparkLayer to this product template** Each product template needs SparkLayer’s product widget. Switch the product to your main template, or send us the template name and we’ll add it. Where: Products > select the product (Shopify admin).
- **H. Add SparkLayer to the app’s product card** Tell us which filter or search app you use and we’ll add SparkLayer’s product card widget to it.
- **I. Add SparkLayer to your product card** Your theme’s product card is missing SparkLayer’s widget, which often happens after a theme update. Send us a link to the page and we’ll add it.
- **J. The variant is set not to be sold** Remove `"sell": false` for this group, or change it to true, if customers in it should be able to buy it. Where: Products > select a variant > Metafields (Shopify admin). See [Product settings](https://docs.sparklayer.io/help/storefront/product-settings.md).
- **K. Everything checks out** Your setup looks right, so we'll take it from here. Send us your answers with the product link and the customer’s email.
- **L. Fill in the pricing source** The automatic list has nothing to calculate from, so the variant has no B2B price. Add the value, for example a compare-at price, and allow a few minutes for it to sync. Where: Products > select the product (Shopify admin). See [Automatic price lists](https://docs.sparklayer.io/help/pricing/managing-pricing.md).
- **M. Update the price list with the new SKUs** Rows for the old SKUs don’t match anything now. Upload the prices again with the new SKUs, or set them in the Price editor. Where: Pricing > Price lists (SparkLayer).
- **N. Add the product to the SparkLayer Wholesale sales channel** SparkLayer only imports products published to its sales channel. Where: Products > select the product (Shopify admin).
- **O. Shopify’s own Bundles app isn’t supported** Its bundle products can’t be published to the SparkLayer sales channel, so they get no B2B price or buttons. Use a bundle app that creates a regular product with its own SKU. See [Bundles and SparkLayer](https://docs.sparklayer.io/help/platforms/shopify/faqs.md#do-bundles-from-other-apps-get-b2b-prices).
- **P. Add a price for this product** Add the SKU to a price list on the customer’s group, or set it in the Price editor. If you don’t want B2B customers to buy it, hide it from them instead. Where: Pricing > Price editor (SparkLayer).
- **Q. Trim the SKUs and upload again** Clear the price list, remove spaces from the SKU column, save the CSV and upload it again. SKUs must match Shopify exactly. Where: Pricing > Price lists (SparkLayer). See [Upload prices by CSV](https://docs.sparklayer.io/help/pricing/csv-upload.md).
- **R. Check what’s hiding it** B2B Catalogs tags and the visibility metafield can hide products on purpose. Next: Product showing to the wrong customers?

### Why a product shows Unavailable

B2B customers see **Unavailable** instead of a price and quantity box when SparkLayer has no price it can use for them.

| Cause | Fix |
| --- | --- |
| **No B2B price for the SKU** on the customer's price lists. This is the most common cause. | Add a price for the SKU, by [CSV](https://docs.sparklayer.io/help/pricing/csv-upload.md) or in the [Price editor](https://docs.sparklayer.io/help/pricing/price-editor.md). If B2B customers shouldn't buy it, hide it from them with the free [B2B Catalogs](https://docs.sparklayer.io/help/storefront/b2b-catalogs/configuring-your-catalogs.md#make-a-product-b2b-only-or-b2c-only) app and the `b2c-only` tag. |
| **The automatic list's pricing source is empty** for that variant. For example, the list is based on the compare-at price and the variant has no compare-at price, so there's nothing to take the percentage from. | Fill in the field in your store, then wait a few minutes for it to sync. |
| **The SKU in the price list doesn't match the product**, because of spaces in the CSV or a SKU that's changed. | See [If prices show as Unavailable after an upload](#if-prices-show-as-unavailable-after-an-upload). |
| **The product isn't in SparkLayer.** The Price editor says no product was found. | Publish the product to the **SparkLayer Wholesale** sales channel, and check it's **Active**. See [Add prices for a product that isn't found](https://docs.sparklayer.io/help/pricing/price-editor.md#product-not-found). |
| **The variant has been made un-sellable** on purpose, with `sell: false` in its `sparklayer.settings` metafield. | Remove the setting if customers should be able to order it. See [Hide variants or make them unavailable](https://docs.sparklayer.io/help/storefront/product-display.md#hide-variants-or-make-them-unavailable). |

### If prices show as Unavailable after an upload

An upload can look successful and still match nothing. Two things cause this:

- **Spaces before or after a SKU.** `ABC-123 ` (with a space) doesn't match `ABC-123`. Clear the price list (**⋯** > **Clear**), trim the spaces from the SKU column, then upload the file again. In Excel or Google Sheets, the `TRIM` function removes them.
- **SKUs changed in your store after the upload.** The price list still holds prices for the old SKUs, so the products with new SKUs have no price. Upload the prices again against the new SKUs. See [Upload prices by CSV](https://docs.sparklayer.io/help/pricing/csv-upload.md).

## FAQs

**How quickly does an automatic price list update when I change a price in my store?**

Straight away. Price changes in your platform update automatic price lists in SparkLayer instantly.

**Can I override some prices in an automatic price list?**

Yes. Upload a CSV file to the automatic price list with only the SKUs and prices you want to set (see [Upload prices by CSV](https://docs.sparklayer.io/help/pricing/csv-upload.md)), or use **Override for this SKU** in the [Price editor](https://docs.sparklayer.io/help/pricing/price-editor.md).

**Can I change a price list's currency or handle?**

No. The handle and currency can't be changed once a price list has been created. Create a new price list instead.

**Where can I find more answers?**

See [Pricing FAQs](https://docs.sparklayer.io/help/pricing/faqs.md) for common questions about price lists, and the [troubleshooting guide](https://docs.sparklayer.io/help/troubleshooting.md) for ways to solve common issues.

## Next steps

- [Set up wholesale prices](https://docs.sparklayer.io/help/guides/set-up-wholesale-prices.md): The whole setup in one guide: a price list, a customer group and your first buyers
- [Upload prices by CSV](https://docs.sparklayer.io/help/pricing/csv-upload.md): Add exact prices to a price list from a spreadsheet
- [Customer groups](https://docs.sparklayer.io/help/customers/customer-groups.md): Assign the price list to a group, then add customers to it
