# Shipping rules

URL: https://docs.sparklayer.io/help/ordering/shipping-rules

Use your store's shipping rates or SparkLayer's own B2B shipping methods, with bands by order total or weight for each customer group, and pre-select a method.

> **Quick summary**
>
> - By default, B2B customers see your eCommerce platform's shipping methods at checkout in the [My Cart](https://docs.sparklayer.io/help/storefront/interfaces/my-cart.md).
> - To create B2B-only methods priced by customer group, order total or weight, tick **Use SparkLayer shipping rates** at **Settings > Shipping** in the SparkLayer Dashboard ([open](https://app.sparklayer.io/configuration/shipping)), or **SparkLayer Wholesale > Settings > Shipping** in the Shopify app. On Shopify, **Automatic shipping selection** there sets the pre-selected method.
> - SparkLayer shipping rates need the Starter plan or above (see [Plans and features](https://docs.sparklayer.io/help/plans-and-features.md)). On BigCommerce, they only work with card payment turned off. On Wix, also turn on SparkLayer Shipping in your Wix dashboard.

> **Shopify shipping or SparkLayer shipping: pick one**
>
> B2B customers get one or the other, never both. **Use SparkLayer shipping rates** at **Settings > Shipping** in the SparkLayer Dashboard ([open](https://app.sparklayer.io/configuration/shipping)), or **SparkLayer Wholesale > Settings > Shipping** in the Shopify app decides: unticked, they see your store's shipping (on Shopify, Shopify shipping); ticked, they only see your SparkLayer shipping methods.
>
> | Choose                  | You get                                                                                            | Keep in mind                                                                                                                                                                                                                              |
> | ----------------------- | -------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
> | **Shopify shipping**    | Live (calculated) carrier rates and Shopify shipping apps pass through to the SparkLayer checkout. | B2B customers see the same rates as retail. For different automated rates for wholesale, use a shipping app that sets rates by customer tag. See [Show B2B-only shipping methods on Shopify](#show-b2b-only-shipping-methods-on-shopify). |
> | **SparkLayer shipping** | B2B-only methods for each country and customer group, priced by order value or weight.             | One cost per band (the weight or value only picks the band), with no live carrier rates and no rules by product or tag. See [What SparkLayer shipping rules can do](#what-sparklayer-shipping-rules-can-do).                              |

## How it works

How a customer gets a shipping cost:

1. **Add products**: The customer builds their order in the cart.
2. **Choose an address**: On the Details step, they pick a shipping address.
3. **Choose a method**: On Review & Pay, they see the methods for their country (and customer group, with SparkLayer rules).
4. **See the total**: The shipping cost and tax are added to the order total.

Shipping methods come from one of two places:

| Option | Best for | Limits |
| --- | --- | --- |
| **Your store's shipping methods** (default) | Keeping shipping in your platform's admin, and complex rules such as country or state-level rates. Works with third-party shipping apps. | Your platform may need an app for B2B-only shipping methods. |
| **SparkLayer shipping rates** | Different B2B rates for each customer group, especially when retail (DTC) and B2B share one store. Rates by order value or weight. | Basic shipping types only. Managed in SparkLayer, not your platform's shipping admin. |

## Use your store's shipping methods

SparkLayer shows your eCommerce platform's shipping methods and rates out of the box, with nothing to configure.

**Shopify only:**

On Shopify, live shipping rates and shipping rule apps also work: SparkLayer pulls their rates through. **Shopify shipping settings** at **Settings > Shipping** in the SparkLayer Dashboard ([open](https://app.sparklayer.io/configuration/shipping)), or **SparkLayer Wholesale > Settings > Shipping** in the Shopify app opens Shopify's **Shipping and delivery** settings. For help, see Shopify's [guide to setting up shipping](https://help.shopify.com/en/manual/shipping/setting-up-and-managing-your-shipping) or contact Shopify support.

### Show B2B-only shipping methods on Shopify

**Shopify only:**

Shopify can't show different shipping methods to different types of customer on its own. Use a shipping app that sets rates by customer tag, such as [Intuitive Shipping](https://docs.sparklayer.io/help/integrations/customer-experience/intuitive-shipping.md), or [SparkLayer shipping rates](#set-up-sparklayer-shipping-rules), which are B2B-only by design.

![Intuitive Shipping logo](https://docs.sparklayer.io/images/help/ordering/shipping-rules/shipping-rules-3c0a2b.webp)

With Intuitive Shipping, you set rates and rules by customer tag, so a signed-in B2B customer (tagged `b2b`) gets their B2B shipping methods. For its full rates to load in SparkLayer, [contact us](https://docs.sparklayer.io/help/support.md) to turn on a setting. See [Features we turn on for you](https://docs.sparklayer.io/help/dashboard/features-on-request.md).

Some other shipping apps also need a setting turned on by our team, and some lower-cost apps don't work with the SparkLayer checkout. Before you buy a shipping app, [ask our support team](https://docs.sparklayer.io/help/support.md) whether it's compatible.

### Choose which method is pre-selected (Shopify)

**Shopify only:**

SparkLayer pre-selects one of your Shopify shipping methods at checkout. Customers can pick another, and their choice is never overridden. To choose which one:

1. Go to **Settings > Shipping > Automatic shipping selection** in the SparkLayer Dashboard ([open](https://app.sparklayer.io/configuration/shipping)), or **SparkLayer Wholesale > Settings > Shipping > Automatic shipping selection** in the Shopify app.
2. Choose an option, then click **Save**.

| Option | What's pre-selected |
| --- | --- |
| **First available method (default)** | Whichever method Shopify returns first, whatever its price. If a free rate comes back first, free shipping is the default. |
| **Prefer cheapest paid method** | The lowest-priced method that isn't free, so a free rate doesn't become the default. If every method is free, the first one is used. |

### Change shipping costs after an order is placed on Shopify

**Shopify only:**

Draft orders let customers pick a standard Shopify shipping method while you adjust the cost before completing the order. **Pay on Account** and **Pay by Invoice** orders arrive as drafts unless you [complete drafts automatically](https://docs.sparklayer.io/help/ordering/automation-and-workflows.md).

1. In the Shopify admin, open the draft order and edit its shipping.
2. In **Edit shipping**, choose another rate, or choose **Custom** and enter a **Rate name** and **Price**.
3. Click **Done**.

See Shopify's guide to [adding shipping to an order](https://help.shopify.com/en/manual/orders/create-orders#add-shipping).

### Offer local pickup on Shopify

**Shopify only:**

SparkLayer doesn't support Shopify's **Local pickup** delivery option. Instead, create a normal shipping method called "Local pickup", for example with a zero rate, in **Settings > Shipping and delivery** ([open in the Shopify admin](https://admin.shopify.com/settings/shipping)). It then appears in the SparkLayer checkout.

This method also shows to retail (DTC) customers in the Shopify checkout, unless an app hides it. To show it only to B2B customers, create it as a [SparkLayer shipping method](#set-up-sparklayer-shipping-rules) instead.

## Set up SparkLayer shipping rules

SparkLayer shipping rates have two parts:

| Part | What it is |
| --- | --- |
| **Shipping method** | What the customer sees and picks at checkout, such as "Standard Shipping". Each method applies to chosen countries and customer groups. |
| **Shipping band** | A cost rule inside a method. For example, orders under £100 cost £20 to ship, and orders over £100 ship free. A method without a band doesn't show at checkout. |

Copy the rates from your eCommerce platform or backend system, so customers see the same costs everywhere. For example, if UK customers get free shipping over £100, set up the same rule here.

### What SparkLayer shipping rules can do

SparkLayer shipping rules can:

- Offer B2B-only methods in chosen countries (and, for some countries, states or regions) to chosen customer groups.
- Pick a band by the order's net total or its weight.
- Charge each band's cost: free, a fixed price, a percentage of the net total, or a message instead of a cost.

They can't:

- Charge by the kilogram. A band's price is fixed for the band, and the order's weight only picks the band. For example, a £10 band from 0 to 5,000 g costs £10 for a 1 kg order and for a 5 kg order.
- Set rates by product, product tag or collection.
- Fetch live carrier rates.

For any of these, use your store's shipping with a shipping app instead. See [Show B2B-only shipping methods on Shopify](#show-b2b-only-shipping-methods-on-shopify).

### Turn on SparkLayer shipping rates

1. Go to **Settings > Shipping** in the SparkLayer Dashboard ([open](https://app.sparklayer.io/configuration/shipping)), or **SparkLayer Wholesale > Settings > Shipping** in the Shopify app.
2. Under **Shipping rates**, tick **Use SparkLayer shipping rates** ("Set B2B-only shipping methods, priced by customer group, order total or weight").
3. Click **Save**.

The **Shipping methods** card appears, listing each method's **Countries**, **Customer groups** ("All groups" when none are chosen), number of **Bands** and **Priority**. To go back to your store's own rates, untick the box.

Some platforms need an extra step:

| Platform | What to do |
| --- | --- |
| **Wix** | In your Wix dashboard, go to **Settings > Shipping, Delivery & Fulfillment**. Make sure you have at least one shipping region, click **Manage Your Apps** below it, and turn on **SparkLayer Shipping**. See [Install SparkLayer on Wix](https://docs.sparklayer.io/help/platforms/wix/install.md#enabling-sparklayer-shipping-methods). |
| **BigCommerce** | Turn off card payment (**Card at checkout** in your customer groups). BigCommerce overwrites the shipping method on orders paid by card in its checkout. See [BigCommerce limitations](https://docs.sparklayer.io/help/platforms/bigcommerce/limitations.md). |
| **Shopify, WooCommerce, Magento** | Nothing extra. |

#### If you set up shipping during a trial

Shipping methods and bands you set up during a trial can stay live at checkout after you move to the free plan, while their settings become locked so you can't change them. To switch them off, [contact our support team](https://docs.sparklayer.io/help/support.md).

### Create a shipping method

1. At **Settings > Shipping** in the SparkLayer Dashboard ([open](https://app.sparklayer.io/configuration/shipping)), or **SparkLayer Wholesale > Settings > Shipping** in the Shopify app, click **Create shipping method**.
2. Fill in the fields below, then click **Save**. Add bands once the method is saved.

| Field | What it does |
| --- | --- |
| **Method name** | The name customers see at checkout, such as "Standard Shipping" or "Next Day". Make it clear. |
| **Shipping SKU** | A unique ID for the method, such as `standard-shipping`, filled in from the name. If you use the SparkLayer API, it must match the shipping SKU in your backend system, such as your ERP. |
| **Priority order** | The order methods are shown in. 1 shows first at checkout. Set this on every method. |
| **Available countries** | The countries where the method is offered at checkout. Choose at least one. |
| **States or regions (optional)** | For the United States, Canada and Australia, limit the method to states or regions, for example "California, New York". Leave it empty for the whole country. |
| **Customer groups** | The B2B customer groups that see the method. Leave every group unticked to offer it to all B2B customers. |

To delete a method, open it and choose **More actions** > **Delete method**. It disappears from checkout; orders already placed keep their shipping.

### Add shipping bands

Shipping bands set a method's cost, by **Order total (net)** or **Order weight (grams)**. Weight bands always use grams, so convert from oz or lb if your products use them.

1. Open the shipping method and, under **Shipping bands**, click **Add band**.
2. Fill in the fields below, then click **Add band**.
3. Add more bands to cover the rest of your order values or weights.

| Field | What it does |
| --- | --- |
| **Band name** | A name such as "Orders under £99". Customers don't see it, except in a custom message key. |
| **Shipping SKU (optional)** | A shipping SKU for the band, if your backend system supports band SKUs. If you leave it blank, the method's SKU is used. |
| **Cost type** | **Free**, **Fixed price**, **Percentage of the net total**, or **Custom message** (see [Show a message instead of a cost](#show-a-message-instead-of-a-cost)). |
| **Cost** | The price, or the percentage for a percentage band. Ignored for free and custom message bands. |
| **Applies based on** | **Order total (net)** or **Order weight (grams)**. |
| **From** and **Up to (optional)** | The range the band covers. Leave **Up to** empty for "and over". To apply a band to every order, set **From** to 0 and leave **Up to** empty. |

Band order sets each band's priority. At checkout, the first band the order matches sets the cost, so a free shipping band only applies if no band above it also matches the order. Make sure the bands cover every order value or weight with no gaps: an order whose weight falls in a gap gets no rate from this method.

**Example: £20 under £99, free above**

Add a band with **Cost type** **Fixed price**, **Cost** 20, **Applies based on** **Order total (net)**, **From** 0 and **Up to** 98.99. Then add a **Free** band from 99 with no **Up to**.

To change a band, click **Edit** next to it. **Remove** deletes it: orders it covered fall to the next matching band, or the method won't show for them.

### Show a message instead of a cost

Use the **Custom message** cost type when you can't confirm the cost yet. At checkout, the method shows a message such as "To be confirmed" instead of a cost. The order's shipping cost is set to 0.00, so you can edit it afterwards.

1. Add or edit a band and set **Cost type** to **Custom message**, then save it.
2. In the **Shipping bands** table, the band's **Cost** shows its key, `shipping.custom-message.` followed by the band's name in lowercase with dashes, for example `shipping.custom-message.orders-under-250`. Copy it.
3. Go to **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, click **Add override**, choose the key and enter your message, such as "To be confirmed".
4. Click **Save and publish**.

For more on translation overrides, see [Change checkout text](https://docs.sparklayer.io/help/ordering/cart-and-checkout.md#change-checkout-text).

**Core Script code for your developer**

A developer can set the message in your [Core Script](https://docs.sparklayer.io/help/storefront/storefront-options.md#add-a-core-script-setting) translations instead (see [Languages and international](https://docs.sparklayer.io/help/storefront/languages-and-international.md)):

```javascript title="Core Script"
/* Replace orders-under-250 with your band's key */
translations: {
  en: {
    "shipping.custom-message.orders-under-250": "To be confirmed",
  }
},
```

### Test your shipping rates

Your methods show in the [My Cart](https://docs.sparklayer.io/help/storefront/interfaces/my-cart.md) and on **Review & Pay**, such as **Standard Shipping** £20.00 and **Express Shipping** £50.00. Try different countries, customer groups, order values and weights to check the right methods and costs show.

## Set a custom shipping rate as a sales agent

With [Sales agent ordering](https://docs.sparklayer.io/help/sales-ordering.md), a sales agent whose [role](https://docs.sparklayer.io/help/sales-reps/roles.md) has the **Change shipping** permission, such as the built-in **Sales administrator**, can set a custom shipping rate at checkout. It overrides your shipping rules.

## Troubleshooting

**Diagnose: Shipping not working as expected?** Check which shipping your B2B customers use.

1. **Is “Use SparkLayer shipping rates” ticked?** For B2B customers it’s either your Shopify shipping or SparkLayer’s shipping rules, never both. Where to look: Settings > Shipping (SparkLayer).
   - Yes, SparkLayer shipping: go to question 2
   - No, Shopify shipping: go to question 3
2. **What’s wrong?** Pick the closest match.
   - I want live carrier rates: go to fix A (Live rates come from Shopify shipping)
   - Rates should depend on the products: go to fix B (Product-based rates need a shipping app)
   - Free shipping isn’t applied: go to question 4
   - “No shipping methods available” at checkout: go to fix C (Cover the customer’s country and group)
   - I can’t edit my rates after a trial: go to fix D (Ask us to switch them off)
3. **What’s wrong?** Pick the closest match.
   - B2B customers see the same rates as retail: go to fix E (Use a shipping app that sets rates by customer tag)
   - I want to hide free shipping from B2B: go to fix E (Use a shipping app that sets rates by customer tag)
   - B2B customers see wrong or missing rates: go to fix F (Check the customer’s setup)
4. **Is the free shipping a SparkLayer discount?** Free shipping can come from a shipping band or from a discount. Where to look: Pricing > Discounts (SparkLayer).
   - Yes, a discount: go to fix G (Select every shipping method the customer can see)
   - No, a shipping band: go to fix H (Check the band order)

**Fixes**

- **A. Live rates come from Shopify shipping** SparkLayer’s rules charge per band, chosen by order value or weight. For live or calculated carrier rates, untick “Use SparkLayer shipping rates” so B2B customers get your Shopify rates, including shipping apps. Where: Settings > Shipping (SparkLayer). See [Shipping rules](https://docs.sparklayer.io/help/ordering/shipping-rules.md).
- **B. Product-based rates need a shipping app** SparkLayer’s rules work on order value or weight only, not on products or tags. Use Shopify shipping with an app that sets rates by product or customer tag, such as Intuitive Shipping. See [Intuitive Shipping](https://docs.sparklayer.io/help/integrations/customer-experience/intuitive-shipping.md).
- **C. Cover the customer’s country and group** No band matches this customer. Check your shipping rules cover their country, their customer group and the order’s value or weight. Where: Settings > Shipping (SparkLayer).
- **D. Ask us to switch them off** Shipping rules set up during a trial can stay live after a downgrade while the settings are locked. Tell us and we’ll switch SparkLayer shipping off, so your Shopify rates apply.
- **E. Use a shipping app that sets rates by customer tag** Shopify can’t show different rates to different customers on its own. A shipping app that uses customer tags, such as Intuitive Shipping, can. Some apps, including Intuitive Shipping, also need a SparkLayer setting: follow the app’s guide, or tell us which app you use. See [Intuitive Shipping](https://docs.sparklayer.io/help/integrations/customer-experience/intuitive-shipping.md).
- **F. Check the customer’s setup** If one customer sees the wrong rates, check their tags and group. Next: Wrong prices, payment methods or shipping for a customer?
- **G. Select every shipping method the customer can see** A free shipping discount only applies to the shipping methods it names. If you have methods per region, select each one, or make a discount per region. Also check the customer’s group is eligible and the threshold is in their price list’s currency. Where: Pricing > Discounts (SparkLayer). See [Discounts](https://docs.sparklayer.io/help/pricing/discounts.md).
- **H. Check the band order** The first band an order matches sets its cost, so a free band only applies if no band above it also matches. Put the free band first, or make the bands cover separate ranges. Where: Settings > Shipping (SparkLayer). See [Free shipping isn’t applied](https://docs.sparklayer.io/help/ordering/shipping-rules.md#free-shipping-isnt-applied).

**Free shipping isn't applied, or the wrong rate shows**

Change your bands so the free shipping band is the first one the order matches. At checkout, the first band the order matches sets the cost. If a paid band higher up also covers the order, its rate wins, even when the order qualifies for free shipping.

1. Open the shipping method at **Settings > Shipping** in the SparkLayer Dashboard ([open](https://app.sparklayer.io/configuration/shipping)), or **SparkLayer Wholesale > Settings > Shipping** in the Shopify app.
2. Check the order of the bands, and which ones cover the order's total or weight.
3. Edit the ranges so they don't overlap, or reorder the bands so the free band comes first.

Then [test your shipping rates](#test-your-shipping-rates) with an order that should ship free.

**Local pickup not displaying**

**Shopify only:**

SparkLayer doesn't support Shopify's Local pickup option. Create a free "Local pickup" shipping method in Shopify or SparkLayer, whichever you use (see [Offer local pickup on Shopify](#offer-local-pickup-on-shopify)), and check it's available for the region you're testing.

**Shipping costs don't match the shipping bands**

- **The expected condition:** the bands use weight or order value as you expect.
- **Product data:** all products have a valid weight and price, so the bands can be calculated.

If the costs at checkout still differ from the bands at **Settings > Shipping** in the SparkLayer Dashboard ([open](https://app.sparklayer.io/configuration/shipping)), or **SparkLayer Wholesale > Settings > Shipping** in the Shopify app, [contact our support team](https://docs.sparklayer.io/help/support.md).

**Having technical issues?**

If you see error messages or can't set this up, see [Troubleshooting](https://docs.sparklayer.io/help/troubleshooting.md) or [contact our support team](https://docs.sparklayer.io/help/support.md).
