> ## Documentation Index
> Fetch the complete documentation index at: https://help.kivaro.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Free Shipping Rules

> Configure checkout free shipping using rules for order value, location, cart line items, cart weight, and stacking with other discounts

export const supportEmail = "support@kivaro.io";

export const appName = "AusPost MyPost Business";

## Overview

Free shipping rules let you offer **automatic free shipping at checkout** when a customer's cart matches conditions you define. When enabled, {appName} creates a **Shopify automatic shipping discount for each enabled rule** (shown in **Shopify Admin → Discounts** as titles like **Kivaro Free Shipping · …**). Eligible customers see your custom checkout message and selected delivery methods become free.

This guide covers setup, rule options (including combining with other discounts), all available conditions, and practical examples.

<Note>
  Free shipping rules are available on the **Scale** and **Pro** plans. If you don't see the feature, upgrade your plan or contact [support](mailto:\{supportEmail}).
</Note>

## Before you start

<Steps>
  <Step title="Confirm your Shopify shipping setup">
    Make sure your store has **shipping rates** and **delivery methods** configured in Shopify (for example Standard and Express). Free shipping applies to delivery options at checkout.
  </Step>

  <Step title="Set variant weights (for cart weight rules)">
    Cart weight conditions use **variant weight** from Shopify. Enter weights on product variants in **Products → \[product] → Variants**. If a variant has no weight (or weight is zero), it contributes **0 g** unless you enable **Don't apply when product weight is missing**.
  </Step>

  <Step title="Open Checkout shipping settings">
    In {appName}, go to **Settings** and open the **Checkout shipping** tab.
  </Step>
</Steps>

<img src="https://mintcdn.com/kivaro/nEg_B8IoXrXmtfZL/images/free_shipping_settings_overview.png?fit=max&auto=format&n=nEg_B8IoXrXmtfZL&q=85&s=be026d681ecdf8e8b31d8c0ee13f1f50" alt="Checkout shipping settings tab showing the Free shipping rules section with Enable free shipping rules turned on" width="1978" height="1154" data-path="images/free_shipping_settings_overview.png" />

## Enable free shipping

<Steps>
  <Step title="Turn on free shipping rules">
    On the **Checkout shipping** tab, enable **Enable free shipping rules**.
  </Step>

  <Step title="Add at least one rule">
    Click **Add free shipping rule**, configure conditions, set a checkout message, and save the rule in the editor.
  </Step>

  <Step title="Save settings">
    Click **Save** on the settings page. This syncs your enabled rules to Shopify and activates the automatic shipping discount(s).
  </Step>
</Steps>

<Warning>
  Saving with free shipping enabled creates one automatic discount per **enabled** rule in Shopify. If you delete those **Kivaro Free Shipping · …** discounts under **Discounts**, rules won't apply at checkout until you save settings in the app again.
</Warning>

<img src="https://mintcdn.com/kivaro/nEg_B8IoXrXmtfZL/images/free_shipping_rules_list.png?fit=max&auto=format&n=nEg_B8IoXrXmtfZL&q=85&s=eb5db3fa61cee1e7ac736480fbdb7b85" alt="Free shipping rules list with multiple enabled rules" width="2028" height="1202" data-path="images/free_shipping_rules_list.png" />

## How rules work at checkout

* **Rules** are evaluated when a customer reaches checkout shipping.
* You can create up to **50 rules**. Each rule has up to **10 conditions**.
* Within a rule, conditions are combined with **AND** (every condition must match) or **OR** (any one condition is enough), using **Match conditions using** / **Combine with previous** in the rule editor.
* Each **enabled** rule syncs as its **own** Shopify shipping discount and is evaluated independently. Free shipping applies when **any** matching rule’s discount is applied (for example different postcode zones with different thresholds).
* **Delivery methods** on a rule limit which shipping options become free. The method names must match a delivery option title at checkout (comparison is case-insensitive). Leave empty to apply free shipping to **all** shipping methods in the delivery group. If you select methods that are not available for that cart’s delivery group, that rule does not match.
* **Checkout message** is shown to the customer when the rule applies (max 255 characters).

## Rule settings

When you add or edit a rule, these options appear near the top of the rule editor:

| Setting                            | What it does                                                                                                                            |
| ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| **Status**                         | **Enabled** rules are evaluated at checkout and synced to Shopify. **Disabled** rules are ignored and are not kept as active discounts. |
| **Combine with order discounts**   | When on (default), this free shipping discount may combine with **order** discount codes and automatic order discounts.                 |
| **Combine with product discounts** | When on (default), this free shipping discount may combine with **product** discount codes and automatic product discounts.             |

New rules default both combination checkboxes **on**. Existing rules that never set these options are also treated as **on**.

***

## Combining with other discounts

Shopify only stacks discounts when **both sides** allow it.

1. In {appName}, leave **Combine with order discounts** and/or **Combine with product discounts** enabled on the free shipping rule (defaults are on), then **Save** settings so Shopify syncs.
2. The **other** discount (for example a discount code) must also allow combining with **shipping** discounts.

{appName} does **not** set free shipping discounts to combine with other **shipping** discounts.

### What customers see

| Situation                                                             | Typical result                                       |
| --------------------------------------------------------------------- | ---------------------------------------------------- |
| Cart matches a free shipping rule, no promo code                      | Free shipping applies                                |
| Same cart + order/product code, and **both** discounts allow stacking | Free shipping **and** the code apply                 |
| Same cart + code, but the code does **not** allow shipping discounts  | Free shipping does not apply together with that code |

### Codes created outside Shopify Admin

Discount codes from apps such as **Klaviyo** may not appear as editable discounts in **Shopify Admin → Discounts**, or may only appear under app-created discounts. Combination with shipping is usually configured in that app’s coupon / Shopify discount settings. If free shipping vanishes only when a code is applied, check that the code (or its template) allows combining with **shipping discounts**.

<Tip>
  After changing combination settings in {appName}, click **Save** on the settings page so Shopify discounts sync. You do not need to reopen every rule unless you want to change a checkbox for that rule only.
</Tip>

***

## Condition types

| Condition           | What it checks at checkout                                        |
| ------------------- | ----------------------------------------------------------------- |
| Minimum subtotal    | Merchandise value (before or after product discounts)             |
| Shipping zone       | Domestic or international (shipping country vs your shop country) |
| Postcode            | Exact postcodes or ranges on the shipping address                 |
| State / territory   | Australian states and territories                                 |
| Country             | Shipping country                                                  |
| **Cart line items** | Products in the cart by title, SKU, variant, and quantity         |
| **Cart weight**     | Total weight of shippable cart lines in **grams**                 |

***

## Minimum subtotal

Require a minimum merchandise total before free shipping applies.

### Configuration options

* **Minimum order subtotal** — compared against **merchandise only** (shipping and taxes are excluded)
* **Order value basis**
  * **Before product discounts** (default) — uses each cart line’s subtotal before line discounts
  * **After product discounts** — uses each cart line’s total after line discounts

<Note>
  Basis uses cart **line** merchandise amounts from Shopify. Cart-wide order discount codes or other stacked automatic discounts may not be reflected in the after-discount total, because Shopify can evaluate discounts in parallel.
</Note>

### Example

| Field             | Value                               |
| ----------------- | ----------------------------------- |
| Minimum subtotal  | `$100`                              |
| Order value basis | Before product discounts            |
| Checkout message  | `Free shipping on orders over $100` |

***

## Location conditions

### Shipping zone

Choose **Domestic**, **International**, or both.

* **Domestic** — shipping country matches your shop’s country
* **International** — shipping country is different from your shop’s country

Both the shipping address country and shop country must be available for this condition to match.

### Postcode

Match the shipping address postcode using:

* **Exact postcodes** — comma-separated, e.g. `2000, 2010`
* **Postcode ranges** — comma-separated ranges where start is less than end, e.g. `2000-2010, 3000-3099`

You can use exact values and ranges together. Matching uses the numeric part of the postcode (Australian-style codes such as `2000`–`9999`). Enter at least one valid exact postcode or range.

### State / territory

Select one or more **Australian** states or territories from the list. The shipping address province/state code must match a selected value.

### Country

Search and select shipping countries. Free shipping applies when the customer’s shipping country matches one of your selections.

***

## Cart line items

Match products in the **customer's cart at checkout** using product title, SKU, variant title, and optional quantity rules.

<Tip>
  This is similar to **Fulfillment order line items** in [Shipping Rules](/shipping-rules), but it runs at **checkout** against the live cart—not when you create a shipping label.
</Tip>

### Configuration options

* **Match mode**
  * **All of line items** — every shippable line in the cart must match your filters
  * **At least one of line items** — any shippable line can match

* **Product title, SKU, variant**
  * **Operators**: Equals, Not equals, Starts with, Ends with, Contains
  * Product title and variant matching are **case-insensitive**
  * SKU matching is **case-sensitive**
  * Enter **at least one** of product title, SKU, or variant for the condition to be valid
  * SKU max **40** characters; variant title max **255** characters

* **Quantity**
  * **Any** — line matches regardless of quantity (default)
  * **Equals** — the line quantity must equal the number you enter (exact match, not “or more”)

* **Non-shippable items** (items that don't require shipping) are ignored.

### Example configurations

**Free shipping when the cart contains a gift box**

| Field            | Value                          |
| ---------------- | ------------------------------ |
| Match mode       | At least one of line items     |
| SKU              | Equals `GIFT-BOX`              |
| Quantity         | Any                            |
| Checkout message | `Free shipping on gift boxes!` |

**Free shipping for a line of exactly 12 units of a tea product**

| Field            | Value                              |
| ---------------- | ---------------------------------- |
| Match mode       | At least one of line items         |
| Product title    | Contains `Tea`                     |
| Quantity         | Equals `12`                        |
| Checkout message | `Free shipping on bulk tea orders` |

**Free shipping only when the entire cart is VIP catalogue items**

| Field            | Value                        |
| ---------------- | ---------------------------- |
| Match mode       | All of line items            |
| SKU              | Starts with `VIP-`           |
| Quantity         | Any                          |
| Checkout message | `Complimentary VIP shipping` |

***

## Cart weight

Compare the **total cart weight in grams** against a threshold using standard comparison operators.

### Configuration options

* **Operators**: Less than or equal to, Less than, Greater than, Greater than or equal to, Equals
* **Unit**: Enter weight in **grams** (e.g. `500` for 500 g, `5000` for 5 kg)
* **Weight source**: Shopify **variant weight** on each shippable cart line, converted to grams (kilograms, pounds, and ounces are converted automatically)
* **Non-shippable lines** are excluded from the total
* **Items without a positive variant weight** contribute **0 g** by default

### Don't apply when product weight is missing

Enable **Don't apply when product weight is missing** when you want the condition to **fail** if any shippable item in the cart has no positive variant weight in Shopify. Use this when you only want free shipping for carts where every product has a known weight.

| Setting                 | Behavior                                                                       |
| ----------------------- | ------------------------------------------------------------------------------ |
| **Unchecked** (default) | Missing or zero weights contribute 0 g; lightweight carts may still qualify    |
| **Checked**             | Condition does not match if any shippable line lacks a positive variant weight |

### Example configurations

**Free standard shipping for parcels up to 500 g**

| Field                                      | Value                                          |
| ------------------------------------------ | ---------------------------------------------- |
| Operator                                   | Less than or equal to                          |
| Cart weight                                | `500`                                          |
| Don't apply when product weight is missing | Unchecked                                      |
| Delivery methods                           | Standard Shipping only                         |
| Checkout message                           | `Free standard shipping on orders under 500 g` |

**Free shipping for orders between 2 kg and 5 kg**

| Field       | Value                    |
| ----------- | ------------------------ |
| Operator    | Greater than or equal to |
| Cart weight | `2000`                   |

Add a second condition with **AND**:

| Field       | Value                 |
| ----------- | --------------------- |
| Type        | Cart weight           |
| Operator    | Less than or equal to |
| Cart weight | `5000`                |

**Free shipping only when all products have weights and cart is under 10 kg**

| Field                                      | Value                 |
| ------------------------------------------ | --------------------- |
| Operator                                   | Less than or equal to |
| Cart weight                                | `10000`               |
| Don't apply when product weight is missing | **Checked**           |

***

## Combined rule examples

These examples mix conditions merchants commonly use alongside cart line items and cart weight.

### Sydney metro — spend \$75+

| Setting                        | Value                                              |
| ------------------------------ | -------------------------------------------------- |
| Rule name                      | `Sydney metro free shipping`                       |
| Match conditions using         | **AND**                                            |
| Combine with order discounts   | On                                                 |
| Combine with product discounts | On                                                 |
| Condition 1                    | Minimum subtotal — `$75` (after product discounts) |
| Condition 2                    | Postcode ranges — `2000-2234`                      |
| Checkout message               | `Free shipping to Sydney metro on orders over $75` |

### Free express when cart has fragile SKU and is under 3 kg

| Setting                | Value                                                                               |
| ---------------------- | ----------------------------------------------------------------------------------- |
| Match conditions using | **AND**                                                                             |
| Condition 1            | Cart line items — SKU **Equals** `FRAGILE-001`, match **At least one**, qty **Any** |
| Condition 2            | Cart weight — **Less than or equal to** `3000`                                      |
| Delivery methods       | Express Shipping                                                                    |
| Checkout message       | `Free express shipping on fragile items under 3 kg`                                 |

### Victorian orders over \$100, or carts containing a subscription box

Use **two rules** (each becomes its own discount). Free shipping applies if either rule matches:

**Rule 1**

| Setting                | Value                   |
| ---------------------- | ----------------------- |
| Match conditions using | **AND**                 |
| Condition 1            | Minimum subtotal `$100` |
| Condition 2            | State **VIC**           |

**Rule 2**

| Setting     | Value                                              |
| ----------- | -------------------------------------------------- |
| Condition 1 | Cart line items — SKU **Equals** `SUB-BOX-MONTHLY` |

<Tip>
  A single rule uses one operator for **all** of its conditions (**AND** or **OR**). For **(A AND B) OR C**, use two separate rules as above.
</Tip>

### Domestic lightweight catalogue orders

| Setting                                    | Value                                          |
| ------------------------------------------ | ---------------------------------------------- |
| Match conditions using                     | **AND**                                        |
| Condition 1                                | Shipping zone — **Domestic**                   |
| Condition 2                                | Cart weight — **Less than or equal to** `2000` |
| Don't apply when product weight is missing | Checked                                        |
| Checkout message                           | `Free shipping on lightweight domestic orders` |

***

## Checkout result

When a rule matches, customers see your message and eligible delivery methods show **\$0** shipping.

You can verify the underlying discounts in **Shopify Admin → Discounts** (one **Kivaro Free Shipping · …** entry per enabled rule). Open a discount to confirm it combines with **product** and/or **order** discounts according to your rule settings.

***

## Tips and troubleshooting

<AccordionGroup>
  <Accordion title="Free shipping isn't showing at checkout">
    * Confirm **Enable free shipping rules** is on and you clicked **Save** in app settings.
    * Check that **Kivaro Free Shipping · …** discounts still exist under **Shopify Admin → Discounts** (one per enabled rule).
    * Verify the rule is **enabled** and at least one condition actually matches the test cart.
    * If you limited **Delivery methods**, make sure a selected method title matches a delivery option shown at checkout.
  </Accordion>

  <Accordion title="Free shipping disappears when a discount code is applied">
    * In the free shipping rule, confirm **Combine with order discounts** and/or **Combine with product discounts** is on, then **Save** settings in the app.
    * Shopify also requires the **code** to allow combining with **shipping**. Check the code in Shopify Admin, or in the tool that created it (for example Klaviyo).
    * Quick check: remove the code — if free shipping returns, the rule matched and stacking settings are the cause.
  </Accordion>

  <Accordion title="Minimum subtotal seems wrong with discounts">
    * Choose **Before product discounts** or **After product discounts** to match how you want the threshold to work.
    * Cart-wide order codes may not always reduce the after-discount line totals used at evaluation time.
  </Accordion>

  <Accordion title="Cart weight seems wrong">
    * Weights come from **variant weight** in Shopify, not package dimensions in the app.
    * Products without a positive weight contribute **0 g** unless you enabled **Don't apply when product weight is missing**.
    * Only **shippable** lines are included in the total.
  </Accordion>

  <Accordion title="Cart line items condition never matches">
    * Enter at least one of **product title**, **SKU**, or **variant**.
    * Check **match mode**: **All** requires every shippable line to match; **At least one** is usually easier for promotional SKUs.
    * Product title and variant are case-insensitive; **SKU is case-sensitive**.
    * Quantity **Equals** means exact quantity on that line, not a minimum.
  </Accordion>

  <Accordion title="Difference from Shipping Rules line items">
    [Shipping Rules](/shipping-rules) **Fulfillment order line items** run when you fulfill orders and create labels. **Cart line items** here run at **checkout** against the live cart. Use shipping rules for label automation; use free shipping rules for customer-facing checkout discounts.
  </Accordion>
</AccordionGroup>

***

## Related guides

* [Shipping Rules Configuration](/shipping-rules) — automate packages and services at fulfillment time
* [Complete Setup Guide](/getting-started) — full app configuration overview

Need help? Email [support](mailto:\{supportEmail}).
