# Sell a B2B-only version of a product

URL: https://docs.sparklayer.io/help/guides/sell-b2b-only-versions
Applies to: Shopify

Sell a trade-only version of a retail product, such as a case of 12: duplicate it in Shopify, give it new SKUs, tag it b2b-only, price it and test it.

> **Quick summary**
>
> - You'll end up with a separate product, such as "Olive Oil, Case of 12", that only signed-in B2B customers can see and buy, at their trade price. Retail shoppers keep seeing the original.
> - It has to be its own product: Shopify can't hide a single variant from retail shoppers, and the `b2b-only` tag works on whole products.
> - Allow about 15 minutes a product. It needs [B2B Catalogs](https://docs.sparklayer.io/help/storefront/b2b-catalogs.md), a free app on every SparkLayer plan, and is for Shopify.

The `b2b-only` tag hides a whole product from retail shoppers. That works when a product is only ever sold to trade customers. When you sell the same item to both, in a different pack size or format for trade, the trade version needs its own product, with its own SKUs, so it can be tagged and priced on its own.

## Pick the right route

Not every B2B-only product needs a duplicate. Choose by what you want to do:

| You want to | Do this |
| --- | --- |
| **Show a whole existing product to B2B customers only** | No duplicate: tag the product `b2b-only`, then check [steps 5 and 6](#check-b2b-catalogs) below. See [Make a product B2B-only or B2C-only](https://docs.sparklayer.io/help/storefront/b2b-catalogs/configuring-your-catalogs.md#make-a-product-b2b-only-or-b2c-only) |
| **Sell a B2B version of a retail product**, such as a case of 12 alongside single bottles | Follow every step on this page |
| **Show a range to one customer group only**, such as VIP trade customers | No duplicate: hide it from the other groups with the `sparklayer.settings` metafield. See [Catalogs per customer group](https://docs.sparklayer.io/help/storefront/b2b-catalogs/configuring-advanced-catalogs.md) |

## Before you start

- **B2B Catalogs installed**, and enabled on the theme you'll test on. See [Install and enable B2B Catalogs](https://docs.sparklayer.io/help/storefront/b2b-catalogs.md#install-and-enable-b2b-catalogs).
- **A B2B customer to test with**, tagged `b2b`, and a retail customer account. See [Assign customers to a customer group](https://docs.sparklayer.io/help/customers/add-customers-to-a-group.md#assign-customers-to-a-customer-group).
- **The trade price** for the new version, or the rule your price list uses for it.

## Create the B2B-only version

### Step 1. Duplicate the original product

In your Shopify admin, open the original product at **Products** ([open in the Shopify admin](https://admin.shopify.com/products)), then click **More actions** > **Duplicate**. Name the copy after the original plus its pack size or format, such as "Olive Oil, Case of 12", and copy the images. Set its status to **Draft**.

**More detail**

Keep it as a draft until it's tagged `b2b-only` in step 3. A product that goes live untagged shows to everyone, retail shoppers included.

### Step 2. Give every variant a new SKU

Open each variant of the copy and replace its SKU, so none is left the same as the original's. A simple pattern is the original SKU plus a suffix: `OIL-500` becomes `OIL-500-CASE12`. Then, under **Search engine listing**, remove `-copy` from the URL handle.

**More detail**

SparkLayer matches prices to products by SKU, so every variant needs a SKU of its own. If the copy shares a SKU with the original, the trade price lands on the wrong product or doesn't show at all. See [Do I need product SKUs when uploading pricing?](https://docs.sparklayer.io/help/pricing/faqs.md#do-i-need-product-skus-when-uploading-pricing)

### Step 3. Tag it b2b-only and make it active

Add the tag `b2b-only` in the product's **Tags** field. Change its status to **Active** and click **Save**.

Should B2B customers still see the retail version too? If not, tag the original `b2c-only`, so they only see the trade version.

### Step 4. Price it for your B2B customers

Do this once the product is **Active**: SparkLayer only syncs active products, so it can't price a draft. How depends on your price list:

| Price list | What to do |
| --- | --- |
| **Automatic** (for example 30% off your Shopify prices) | Nothing to add: it prices every product, including the new one. Check the price looks right |
| **Manual** (exact prices) | Add a price for each new SKU, with the [Price editor](https://docs.sparklayer.io/help/pricing/price-editor.md#add-a-price) or a [CSV upload](https://docs.sparklayer.io/help/pricing/csv-upload.md), in every price list your B2B customer groups use |

Then check the new SKUs' prices at **Pricing > Price editor** in the SparkLayer Dashboard ([open](https://app.sparklayer.io/pricing/editor)), or **SparkLayer Wholesale > Pricing > Price editor** in the Shopify app.

### Step 5. Check B2B Catalogs is on your live theme

Open B2B Catalogs in your Shopify admin, and check your live theme shows as **Enabled**. Without it, the `b2b-only` tag does nothing: it's the most common reason a product still shows to retail shoppers.

**More detail**

If B2B Catalogs isn't installed yet, install it from the [Shopify App Store](https://apps.shopify.com/sparklayer-b2b-catalogs) and enable it on an unpublished copy of your theme first, to check it. See [Install and enable B2B Catalogs](https://docs.sparklayer.io/help/storefront/b2b-catalogs.md#install-and-enable-b2b-catalogs).

### Step 6. Test it as three kinds of visitor

Check the product as each of these. All three must pass.

| Test as | Sees the product? | What you should see |
| --- | --- | --- |
| **A signed-out visitor**, in a private browser window | No | It's missing from collections and search. Its URL shows the [access denied page](https://docs.sparklayer.io/help/storefront/b2b-catalogs/configuring-access-denied-view.md) |
| **A signed-in retail customer** | No | The same as a signed-out visitor |
| **A signed-in B2B customer** | Yes | It's in collections and search, at the trade price from their price list |

## Common mistakes

**The trade price shows on the wrong product, or not at all**

A variant still has the SKU it was copied with. Check every variant of the copy, not just the first, and give each one its own SKU. See [step 2](#new-skus).

**The new product has no trade price**

Prices were added while the product was a draft, or it's on a manual price list without its new SKUs. Check the product is **Active**, then check its SKUs at **Pricing > Price editor** in the SparkLayer Dashboard ([open](https://app.sparklayer.io/pricing/editor)), or **SparkLayer Wholesale > Pricing > Price editor** in the Shopify app. See [step 4](#price).

**Retail shoppers can still see the product**

Check the product is tagged `b2b-only`, and that B2B Catalogs is enabled on your live theme. See [step 5](#check-b2b-catalogs) and [Why don't my b2b-only and b2c-only tags do anything?](https://docs.sparklayer.io/help/storefront/b2b-catalogs.md#tags-not-working).

**Can I tag just one variant b2b-only?**

No. Tags work on whole products, and Shopify can't hide a single variant from retail shoppers. If only one pack size is for trade customers, make it its own product, as on this page. See [Variants and retail shoppers](https://docs.sparklayer.io/help/storefront/b2b-catalogs/limitations.md#variants-and-retail-shoppers).

**What about stock?**

The new SKUs have their own inventory in Shopify. If the trade version comes from the same physical stock as the original, decide how you'll keep both counts right, for example by adjusting them when you restock.

## Good to know

- **Collection pages can show gaps.** A hidden product can still take a place in a collection grid, and count towards product and filter totals. Keeping B2B-only products in their own collections avoids it. See [Collection grids, search and filter counts](https://docs.sparklayer.io/help/storefront/b2b-catalogs/limitations.md#grids-search-and-filter-counts).
- **Hiding doesn't empty carts.** A product already in someone's cart stays there, and add-to-cart links still work. See [Hidden products in a cart](https://docs.sparklayer.io/help/storefront/b2b-catalogs/limitations.md#hidden-product-add-to-cart-caveats).

## Next steps

- [Keep wholesale hidden from retail shoppers](https://docs.sparklayer.io/help/guides/hide-wholesale-from-retail.md): Hide B2B products and prices from everyone but your trade customers
- [Catalogs per customer group](https://docs.sparklayer.io/help/storefront/b2b-catalogs/configuring-advanced-catalogs.md): Show a range to some customer groups only
- [Upload prices by CSV](https://docs.sparklayer.io/help/pricing/csv-upload.md): Add trade prices for many SKUs at once
