All segments

Shopify Shipping Rates: Zones, Profiles and Free Shipping

Set up Shopify shipping rates: zones, flat and weight-based pricing, carrier rates, free-shipping thresholds and the profile mistake that breaks checkout.

  • Published
  • Reading time 10 min read
  • Author Nafiul Hasan
Shopify Shipping Rates: Zones, Profiles and Free Shipping. Diagram: the step that changes the price. RUN Shopify Shipping Rates: Zones,Profiles and Free Shipping pointerflow.com

Short answer

Shopify shipping rates are configured in Settings > Shipping and delivery, where a shipping profile groups products, a zone groups destination countries or regions, and each zone carries one or more rates — flat, weight-based, price-based or carrier-calculated. Get the profile-to-product assignment right first: a product left in the general profile by mistake picks up the wrong rates with no warning at checkout, which is the setup mistake operators hit most often.

Shopify shipping rates are set in Settings > Shipping and delivery, where a shipping profile groups the products that ship the same way, each profile holds one or more zones for the destinations it covers, and each zone carries the actual rates — flat, weight-based, price-based or carrier-calculated — that a customer sees at checkout. Most setup guides stop at “add a flat rate to a zone.” A $3M–$30M brand running more than one product type, more than one fulfilment location, or shipping into more than one country needs the profile structure right first, because that decision is what silently breaks checkout when it’s wrong — not the rate math inside a single zone.

What Do You Need Before You Set Up Shopify Shipping Rates?

Three decisions have to be made before opening the settings screen, because each one changes how many profiles, zones and rates you build.

First, decide whether every product in the catalogue genuinely ships the same way. A store selling only small, uniformly-packaged goods from one warehouse can run entirely on the General profile. A store with an oversized-furniture line, a chilled or frozen SKU, or a dropship supplier fulfilling from a separate address needs at least one custom profile per group that ships differently — because a single set of zones and rates sized to fit every product either overcharges the light items or undercharges the heavy ones.

Second, decide the zone groupings you actually need, separately for domestic and international. A US-based brand typically needs at minimum a domestic US zone and one or more international groupings; a UK-based brand typically needs a UK domestic zone plus a separate European Union or rest-of-world zone, since post-Brexit customs and delivery cost differ enough between the two that one shared rate rarely reflects either accurately. Group destination countries by what they actually cost to ship to, not by continent or alphabetically.

Third, decide the rate logic before building it: flat rate, weight-based bands, price-based bands, or a live carrier-calculated quote. Each has a different failure mode if left incomplete, covered in Step 4, so the decision belongs up front rather than discovered after the first customer hits a gap.

How Do You Set Up Shopify Shipping Rates, Step by Step?

Seven steps, in this order, because the profile and zone structure in Steps 1 through 3 has to exist before a rate in Step 4 has anywhere correct to attach to.

Step 1: Decide How Many Shipping Profiles You Actually Need

Open Settings > Shipping and delivery. Shopify starts every store with one General profile, which is where every product lives until it’s explicitly moved. Create a custom profile only for a product group that genuinely needs different zones, rates or an origin location than the General profile — oversized items that can’t use a small-parcel carrier rate, a chilled line needing expedited shipping only, or a supplier drop-shipping from a second location. A store that creates a custom profile for every minor product variation ends up maintaining rate tables in three or four places that all needed the same answer; keep the General profile as the default and add custom profiles sparingly.

Step 2: Assign Every Product to the Right Profile

Inside a custom profile, use Add products or Add collection to move the specific SKUs that belong there. Then go back to the General profile and check its product count against what you expect — this is the check most setup guides skip. A product with no explicit assignment stays in the General profile by default, with no flag, no warning and no error anywhere in the admin. If the oversized-furniture custom profile is missing three SKUs because they were added to the catalogue after the profile was built, those three SKUs quote General’s rates at checkout, which for furniture is usually too low to cover the real freight cost.

Step 3: Build a Zone for Every Destination Group You Ship To

Within a profile, select Create zone and add the countries or regions that should share one rate structure. Split domestic from international at minimum. Within international, split further by real cost tier — a zone covering Canada and Mexico rarely belongs with a zone covering Australia and New Zealand, even though both are “international” — rather than one broad rest-of-world zone that averages a cheap destination against an expensive one.

Zone exampleCountries groupedWhy they’re grouped together
US DomesticUnited StatesShared carrier network, shared delivery-time expectation
UK DomesticUnited KingdomNo customs, fastest and cheapest tier for a UK-based store
Near InternationalCanada, Mexico (from a US store)Land-adjacent, comparable transit time and cost
EUEuropean Union member statesShared customs treatment distinct from UK or rest-of-world
Rest of WorldEverywhere elseHighest cost tier, longest transit, usually fewest orders

A zone with countries assigned but no rate attached is not a harmless placeholder — it’s a dead end. A customer shipping to a country sitting in an empty zone sees no shipping method at checkout and cannot complete the order, with nothing in the storefront telling them why.

Step 4: Add Rates to Each Zone

Inside a zone, select Add rate and choose the type: a flat rate charges one price regardless of cart size; a weight-based rate charges according to bands of total cart weight; a price-based rate charges according to bands of cart subtotal; a carrier-calculated rate (Step 5) pulls a live quote. Name each rate the way a customer reads it — “Standard Shipping (5–7 business days)” rather than an internal label like “Zone 2 Tier B” — since the rate name is what renders at checkout.

For weight-based and price-based rates, the bands must cover the entire possible range with no gap between them. A weight-based rate with bands of 0–2kg and 2–5kg but nothing above 5kg leaves any cart over 5kg with no matching rate in that zone — functionally identical to the empty-zone failure in Step 3, just one level deeper in the configuration.

Step 5: Turn On Carrier-Calculated Rates Where the Plan and Carrier Account Allow It

Carrier-calculated rates quote a live price from a connected carrier account — through Shopify Shipping or a third-party carrier integration — at the moment of checkout, based on the cart’s actual weight and dimensions and the customer’s address. Availability depends on the store’s plan tier and region; a store not natively eligible can add the capability through an app from the Shopify App Store. Confirm eligibility against Shopify’s own current plan documentation rather than assuming a given plan qualifies, since plan-by-plan availability is exactly the kind of detail that changes over time.

Where calculated rates are available, set the handling fee in the dedicated field — as a flat amount, a percentage of the carrier’s quote, or both — rather than editing the returned quote directly. The handling fee is what actually funds packaging materials and the labour of picking and boxing an order; a store that runs carrier rates with no handling fee is passing through the carrier’s raw cost and eating those costs itself.

Step 6: Set a Free-Shipping Rate With a Minimum Order Value

Add a new rate, name it in customer-facing language (“Free Shipping”), set its price to zero, and apply a minimum order value condition under the rate’s advanced options so it only appears once a cart clears the threshold. This rate has to be added separately to every zone where it should show — setting it on the domestic zone doesn’t extend it to an international zone in the same profile, and an international zone can legitimately carry a higher threshold than domestic, since the real delivery cost that the free rate is absorbing is higher there too.

Step 7: Test Every Zone and Profile With a Real Cart Before Going Live

Before publishing a rate change, run a real or draft checkout for a product from each profile, shipping to an address in each zone. Confirm the rate name, price and delivery estimate shown match what was configured — not just that a rate appeared. The two failure modes described in Steps 3 and 4, an empty zone and a gapped weight band, both produce the same symptom: a checkout with no shipping method offered, and neither shows up as an error anywhere in the admin. The only reliable way to catch them is testing every combination, not reviewing the settings screen a second time.

What’s the Step Most Teams Get Wrong Setting Up Shopify Shipping Rates?

Leaving a product out of the custom profile it’s supposed to belong to is the mistake that recurs most, because Shopify never flags it. A product added to the catalogue after a custom profile was built — a new SKU in the oversized-furniture line, a new supplier added to a dropship profile — defaults into the General profile with no notice, no validation error and no checkout warning. The first sign is usually a customer complaint about a shipping charge that’s clearly wrong, or a fulfilment team quietly absorbing the difference between what was charged and what the carrier actually billed, for weeks before anyone traces it back to a product sitting in the wrong profile.

The fix is a recurring check, not a one-time audit: after adding any new product, confirm it landed in the profile it belongs to before the listing goes live, and periodically cross-check the General profile’s product count against what should be there. A catalogue that adds SKUs faster than someone remembers to check shipping-profile assignment is exactly the kind of gap that stays invisible until a customer or a margin report surfaces it.

How Do You Verify Shopify Shipping Rates Are Actually Working?

Verification means checking more than the handful of products someone happened to test at launch. Four checks catch what a narrow spot-check misses. First, pull the full product list for each custom profile and confirm every SKU that’s supposed to be there is there, cross-referenced against the catalogue rather than memory. Second, test a cart at the top and bottom edge of every weight-based or price-based band, not just the middle of the range, since a gap sits exactly at a boundary. Third, if carrier-calculated rates are active, test a cart heavy or large enough to sit near the carrier’s own quoting limits, and confirm a fallback rate exists in that zone in case the live quote doesn’t return. Fourth, test the free-shipping threshold from just under and just over the minimum order value, in every zone it’s supposed to apply to, since a threshold set correctly on the domestic zone tells you nothing about whether it was also set on the international one. Testing every profile-and-zone combination at the edges of each rate band is the only reliable way to catch a gap; reading the settings screen a second time does not surface one.

Shipping-rate accuracy is not a one-time setup task. A catalogue that adds products, a carrier that changes its rate card, or a new market a store starts shipping into all change what “correct” looks like, and none of them trigger a review on their own. A setting that was right when it was built drifts wrong as the business changes around it, with nobody assigned to notice — the same pattern behind most of the manual checks a growing Shopify operation quietly accumulates. Treating shipping-rate accuracy as an ops automation problem — a scheduled check against the product catalogue and the zone-and-rate table, rather than a settings screen nobody revisits — is what keeps it caught before a customer or a margin report catches it first.

Sources

No external figures are quoted; this article is written from how Shopify’s shipping profiles, zones and rate types are configured and operated, without a dollar figure for any Shopify plan or carrier rate.

Frequently asked

What happens at checkout if a product's shipping profile has a zone with no rate defined for the customer's address?

The customer sees no shipping method available for that address, and cannot complete checkout. Shopify does not fall back to a default rate from another zone or profile — a zone with a country but no rate attached is effectively a dead end for any customer shipping there, which is why testing every zone with a real address matters more than reviewing the settings screen.

Can two products in the same order be shipped from different shipping profiles?

Yes. If a cart contains products from two different profiles, Shopify calculates rates for each profile separately and the customer chooses a shipping method per profile group, which can mean two shipping lines on one order. This is expected behaviour for a store running a custom profile for, say, oversized items alongside its general catalogue, not a bug to work around.

Does Shopify's free-shipping rate apply to the whole cart or only to the zone it's set on?

Only to the zone and profile it's configured on. A free-shipping rate with a minimum order value has to be added separately to every zone where it should appear; setting it on a domestic zone does not extend it to an international zone in the same profile unless that zone gets its own free-shipping rate with its own threshold.

Are carrier-calculated shipping rates available on every Shopify plan?

No. Real-time carrier-calculated rates are a feature gated by plan and region — available by default on Shopify's higher plans and to stores using Shopify Shipping with a connected carrier account, with lower plans needing an app from the Shopify App Store to add the capability. Check current plan-by-plan availability on Shopify's own pricing and shipping documentation before assuming a store already qualifies.

What's the difference between a weight-based rate and a price-based rate?

A weight-based rate charges according to the total weight of the items in the cart, in bands you define — for example, 0 to 2kg, 2 to 5kg, 5kg and over. A price-based rate charges according to the cart's subtotal instead, in bands like under $50, $50 to $150. The two are mutually exclusive per rate: pick whichever variable actually drives your real shipping cost, which for most physical goods is weight.

Can I add a handling fee on top of a carrier-calculated rate without it looking like Shopify quoted the wrong price?

Yes — Shopify's calculated-rate setup includes a dedicated handling fee field, entered as a flat amount, a percentage, or both, added visibly to the carrier's quoted rate rather than baked invisibly into it. Customers see one combined shipping charge at checkout; the handling fee is not itself a separate line unless you choose to label it as one.

Does changing a shipping rate affect orders that were already placed?

No. A rate change in Settings > Shipping and delivery applies only to checkouts started after the change is saved. Orders placed under the previous rate structure keep the shipping charge that was calculated at the time, and Shopify does not retroactively adjust or re-bill an existing order when the rate table changes.

Why would I need a separate shipping profile instead of just adding more zones to the General profile?

A profile is the unit Shopify uses to decide which products a given set of zones and rates applies to. If oversized furniture and small accessories both sat in the General profile with the same zones, every zone would need rates wide enough to cover both — usually meaning the accessory buyer overpays or the furniture rate undercharges. A separate profile lets each product group carry rates sized to what it actually costs to ship.

Do Shopify shipping rates automatically account for duties and import taxes on international orders?

Not unless configured separately. Shipping rates and duties are two different settings — duties and import taxes are managed under Settings > Markets or through Shopify's duties and import taxes feature, not inside the shipping profile itself. A store that sets up international zones without also deciding on a duties strategy leaves the customer to pay them on delivery, which is a checkout-experience decision worth making deliberately rather than by default.

How do Shopify UK shipping rates differ in setup from US domestic rates?

The mechanics are identical — profiles, zones and rate types work the same way regardless of market — but a UK-based store typically needs at least two zone groupings where a US-only store needs one: a United Kingdom domestic zone, and a separate European Union or rest-of-world zone, because post-Brexit customs treatment and delivery cost differ sharply between the two. The rate types available (flat, weight-based, price-based, carrier-calculated) and their setup screens are the same product Shopify ships everywhere.

Can I set a different free-shipping threshold for international orders than for domestic ones?

Yes, and this is normal practice rather than an edge case. Because a free rate with its minimum order value is configured per zone, a domestic zone can carry a lower threshold than an international zone, reflecting the real cost difference in fulfilling each — there's no requirement that the same threshold apply everywhere in a profile.

What happens if a customer's cart exceeds the maximum weight a carrier-calculated rate can quote?

The calculated rate can fail to return a quote for that cart, and depending on how the zone is set up, the customer may see no shipping option or only a fallback rate if one was configured. This is the reason weight-based or price-based rates are often kept active alongside a calculated rate on the same zone — to cover the case where the live carrier quote doesn't return.

Does a shipping profile control tax on shipping, or only the shipping charge itself?

Only the shipping charge. Whether shipping itself is taxable, and at what rate, is controlled separately in Settings > Taxes and duties, based on the destination's tax rules — a shipping profile has no tax field of its own. Getting the rate right in the shipping profile and getting the tax treatment right in tax settings are two separate pieces of configuration that both have to be correct for the total charged at checkout to be accurate.

Next step

Is this your ops automation problem, or a symptom of another one?

Bring your numbers — the churn split, the decline rate, whatever your flows are earning — and we will tell you which of them is the expensive one.

Book a call →