> ## Documentation Index
> Fetch the complete documentation index at: https://shipmagic-docs.speedysquirrelhq.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create a Basic Shipping Rate

> Build your first rule-based shipping rate and show it at checkout

A **shipping rate** in ShipMagic is a price the app calculates and returns to Shopify at checkout. You group rates inside a **rule** — the rule decides *when* the rates apply, and each rate decides *how much* to charge.

<Note>
  Shipping Rates change **what customers pay**. If you only want to hide, rename, or reorder rates you already have in Shopify, use [Shipping Customizations](/shipping-customizations/basic-shipping-customization) instead.
</Note>

## Before you start

<Steps>
  <Step title="CCS must be enabled on your store">
    Carrier Calculated Shipping is required for any third-party app to return rates at checkout. See the [Installation Guide](/installation-guide#2-ensure-ccs-is-enabled-on-your-store) if you're not sure whether it's on.
  </Step>

  <Step title="ShipMagic must be added as a rate provider">
    It's added to the General profile automatically. For custom profiles, [add it manually](/installation-guide#add-shipmagic-as-a-rate-provider-custom-profiles--zones).
  </Step>

  <Step title="Your shipping zones must be synced">
    Open **Settings** in the app and sync zones. Until you do, the rule editor shows a warning instead of your zones and you won't be able to add rates.
  </Step>
</Steps>

## Create the rule

<Steps>
  <Step title="Open Shipping Rates and click Add Rule">
    From the left navigation panel in the app, open **Shipping Rates**, then click **Add Rule**.
  </Step>

  <Step title="Name the rule">
    Use something you'll recognise later — for example `Heavy products rule`. This name is internal and is never shown to customers.
  </Step>

  <Step title="Set a priority">
    Rules are evaluated in **ascending order of priority**, so priority `1` is checked before priority `2`.

    <Warning>
      **No two rules can share the same priority.** The app will not let you save a second rule with a priority that's already taken, so give each rule its own number.
    </Warning>

    Leaving gaps (10, 20, 30) makes it easy to slot new rules in later without renumbering everything.
  </Step>

  <Step title="Add your conditions">
    Choose whether the rule must match **All conditions** or **Any condition**, then add one or more conditions. Each condition is an attribute, an operator, and a value:

    ```text theme={null}
    Product Tag  <>  Equals  <>  bulky
    ```

    You can build conditions from more than 25 attributes across four groups:

    | Group | Examples |
    | - | - |
    | **Product** | Title, Tag, SKU, Barcode, Vendor, Price, Compare-at Price, Quantity, Type, Weight, Metafield, Line item property, Length / Width / Height / Volume |
    | **Cart** | Cart Quantity, Cart Subtotal, Cart Total after discount, Cart Weight, Cart Volume, Cart Contains, Cart Locale |
    | **Shipping** | Zipcode / Postcode, Province / State Code, Address Line 1, Country Code, Time of Day, Day of the Week, Warehouse Zipcode |
    | **Customer** | Customer Tag, First Name, Last Name |

    See [Cart Conditions](/cart-subtotal), [Product Attributes](/cart), [Customer Attributes](/customer-attributes), and [Customer Location and Address](/customer-location-and-address) for the full reference.

    <Tip>
      Several attributes accept multiple values in one condition. Tags are separated by **commas**, while titles, SKUs and types are separated by **semicolons**. Postcodes support wildcards (`AB14*`) and ranges (`90209-90231`). Specific details for every parameter is shown in the app after you choose the parameter.
    </Tip>

    <Warning>
      Conditions on **Product Tag, Product Type, Product Title, Product Barcode, or Product Compare-at Price** need your products [synced](/core-concepts/syncing-products) first. Shopify doesn't send these to the app at checkout, so ShipMagic reads them from its own copy.
    </Warning>
  </Step>

  <Step title="Add a rate to a shipping zone">
    Scroll to **Shipping zones**. Each synced zone is listed separately — click **Add rate** on the zone you want.

    A zone with no rates shows a warning, and customers in that zone will see no ShipMagic rates at all.

    The rate dialog is covered in [the next section](#adding-a-rate).
  </Step>

  <Step title="Set status and exclusivity, then save">
    **Status** controls whether the rule runs at all. **Exclusivity** controls what happens after it matches:

    * **Inclusive** (default) — lower-priority rules are still evaluated, and their rates are added too.
    * **Exclusive** — if this rule matches, every lower-priority rule is skipped. See [Exclusive Rules](/exclusive-rules).

    **Save** stays disabled until the rule has a name, a priority, and at least one condition.
  </Step>
</Steps>

## Adding a rate

Every rate starts with two fields:

| Field | Notes |
| - | - |
| **Rate name** | Required. This is what the customer sees at checkout. |
| **Description** | Optional, shown under the rate name at checkout. Supports `{{today+3}}`, `{{today+3wd}}` (weekdays), and `{{today+3sd}}` (skipping Sundays) to insert delivery dates dynamically — see [Rate Descriptions](/rate-descriptions). |

Then pick a **Calculation parameter**, which decides how the price is worked out.

### Calculation parameters

| Parameter | What it does |
| - | - |
| **Fixed rate** | One flat price, no calculation. |
| **Number of items** | Price based on how many items are in the cart. |
| **Total price of items** | Price based on cart value. |
| **Total weight of items** | Price based on cart weight. |
| **Percentage of total price** | Charge a percentage of the cart value. See [Percentage of Cart Subtotal](/percentage-of-cart-subtotal). |
| **Product / Variant Metafield** | Use a metafield value as the price itself. See [Rates from Metafields](/rates-from-metafields). |
| **Sum of Product / Variant Metafield** | Total a metafield across the cart and price that total in bands. |
| **Distance** | Price based on distance between warehouse and destination. |
| **Live carrier rate** | Fetch a real rate from USPS, FedEx, Australia Post, ShipStation, Shiprocket, Stallion Express, or Direct Freight Express. |

Not every parameter asks for a **Rate Type**. Three of them set the price directly:

* **Fixed rate** just asks for a price.
* **Percentage of total price** asks for a percentage, with an optional *Round up to nearest integer* checkbox.
* **Product Metafield** and **Variant Metafield** take the price from the metafield, with a default rate for products that have no value.

Everything else — including the **Sum of** metafield parameters — asks for a **Rate Type** and a table of bands.

### Rate types

| Rate type | Fields | Use it for |
| - | - | - |
| **Range** | Range Start, Range End, Price | One price for a band of values. Leave Range End empty for "and above". |
| **Incremental** | Base price, Incremental price, Per each, Start from | A base price plus a top-up for every N units. See [Incremental / Per Item Rates](/incremental-per-item-rates). |
| **Range + Incremental** | Range Start / End, then base + incremental | An incremental rate that only applies inside a band. |
| **Range + Range** | Range Start / End, a second parameter, then its own range and price | Two parameters at once — for example weight *and* cart value. |

<Tip>
  To cover a whole scale, add several **Range** rates with the same rate name and adjoining bands — `0–100`, `100.01–200`, `200.01` and up. Shopify shows the customer whichever one matches their cart. See [Ranged Rates](/ranged-rates).
</Tip>

## A worked example

Charge \$5 below \$100 and free shipping at \$100 or more:

<Steps>
  <Step title="Create the rule">
    ```text theme={null}
    Name: Regular products
    Priority: 10
    Rule must match: All conditions
    Condition 1: Product Tag <> Does Not Equal <> bulky
    ```
  </Step>

  <Step title="Add the first rate">
    ```text theme={null}
    Rate name: Standard Shipping
    Calculation parameter: Total price of items
    Rate Type: Range
    Range Start: 0
    Range End: 100
    Price: 5
    ```
  </Step>

  <Step title="Add the second rate">
    ```text theme={null}
    Rate name: Standard Shipping
    Calculation parameter: Total price of items
    Rate Type: Range
    Range Start: 100.01
    Range End: (leave empty)
    Price: 0
    ```
  </Step>

  <Step title="Save the rule">
    Click **Done** on the rate dialog, then **Save** on the rule.
  </Step>
</Steps>

## Test your rate

Rules take effect immediately, so test before you go live.

1. Open your storefront and add matching products to the cart
2. Proceed to checkout and enter a complete address
3. In test mode, enter `shipmagic` as the **first name**

<Tip>
  Use a fresh, random address each time. Shopify caches shipping rates per address, so reusing one is the most common reason a change appears not to have worked.
</Tip>

Full details in [Testing the App](/core-concepts/testing-the-app). When everything looks right, follow [Going Live](/core-concepts/going-live).

## Next steps

<Columns cols={2}>
  <Card title="Rate conditions" icon="filter" href="/cart-subtotal">
    Every attribute and operator you can build conditions from.
  </Card>

  <Card title="Live carrier rates" icon="truck-bolt" href="/usps">
    Connect your own carrier account and show real-time rates.
  </Card>

  <Card title="Exclusive rules" icon="layer-group" href="/exclusive-rules">
    Control how multiple matching rules combine.
  </Card>

  <Card title="Rate blending" icon="code-merge" href="/rate-blending">
    Add, or take the highest or lowest of, several matching rates.
  </Card>
</Columns>

<Note>
  **Need help?**

  Our founders will personally help with the optimal setup for your brand. [**Book a free onboarding call**](https://cal.com/speedysquirrel/shipmagic-setup) if you'd like us to help.
</Note>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.