In short
Shopify can price bulky goods — it just can’t merge those rates or charge by distance. A dedicated shipping profile assigns the right rate to a sofa or a pallet, and that part works. But as soon as a second item from another profile lands in the cart, checkout adds both rates together: Shopify states plainly that weight-based, carrier-calculated and app rates are combined into a single merged rate. And the dimension freight carriers actually bill on — distance, or a zone built from postcode areas — is something Shopify’s shipping zones don’t know at all.
The problem, in merchants’ words
A UK merchant describes it precisely: “I am pulling my hair out trying to work out the shipping policies.” With profiles set up by weight and size, a mug at £3.99 postage plus a keyring at £2.50 produced two separate shipping charges at checkout — almost £6.50 for one parcel. “If someone were to order other products from my shop they would also be charged shipping for these and the cost would go through the roof.” Other platforms, he notes, let him set a base rate plus a smaller amount per additional item.
The same thread pattern repeats for heavier goods: stores that carry both a small accessory line and a furniture line find that profiles keep the products apart but push the rates together at checkout.
The native way in Shopify
Create a shipping profile for bulky items: Settings › Shipping and delivery › create a custom profile and assign the products. Up to 99 custom profiles are possible. Each gets its own zones and rates — this is where a freight or oversized rate goes.
Weight-based rates: Within a zone, rates can be tiered by weight. That covers the case where heavier goods cost more, as long as the surcharge really does track weight.
For a single bulky item in the cart this setup works. The problems start when several items or several profiles meet.
Where Shopify stops
- The rates add up. Shopify describes it itself: weight-based, carrier-calculated and app rates are combined into a merged rate. Two items from two profiles mean two rates in the checkout total — regardless of whether they would travel together. Only flat rates within the same location group are charged once.
- The rate’s name matters. Rates with identical names are added together and shown as one option, even across profiles. If the names differ, only the cheapest options are added and shown as “Shipping”. This rule is little known and explains a lot of surprising checkout totals.
- Package weight is added per product. Shopify adds the default package weight to each individual product weight before deciding the weight tier. An item just under a boundary tips into the next tier.
- Bulk isn’t only weight. Carriers class consignments as oversized on shape and packaging as well: not cuboid, protruding parts, an unstable base, certain materials. A weight-based rate can’t express that, because it only knows weight.
- No “freight only” condition. A product can be assigned a freight rate, but it can’t be pinned to one shipping method.
- No distance. Shipping zones distinguish country and state or region — not kilometres, not postcode areas.
What freight carriers actually bill on
This is where the real gap sits. Freight carriers price by zones built from postcode areas and distinguish local, regional and long-distance haulage — in groupage often in distance bands. On top come surcharges for islands and hard-to-reach areas, which run far steeper for freight than for parcels.
Both of those — distance band and postcode zone — are dimensions Shopify’s shipping zones don’t know. A furniture retailer who wants to quote honestly needs them exactly where the customer types their address.
The rates themselves belong in your freight contract rather than in a guide: surcharges are negotiated per carrier, many hauliers state explicitly that they can’t be flat-rated, and published figures go stale quickly. The structure holds regardless — distance and postcode drive the price, weight alone doesn’t.
How a distance or postcode app solves it
An app that supplies its own rates through Shopify’s Carrier Service API determines the rate for the whole cart — and can factor in distance or postcode zone:
| Goal | Rule |
|---|---|
| One freight price, however many small items join it | A single rate for the cart instead of a sum across profiles |
| Price by freight zone | Postcode prefix zones, each with its own price |
| Price that grows with distance | Base price plus an amount per kilometre or mile, with a cap |
| Island or special zone | Its own zone with a longer, more specific postcode prefix |
Technically the app registers a Carrier Service: on every rate request at checkout, Shopify hands over the delivery address and the cart, the app calculates a rate and returns it. Because it sees the entire cart, it isn’t bound by the combination across shipping profiles.
Things to watch
- Third-party carrier-calculated shipping is a requirement. Without it no app may return its own rates at checkout. Which plans cover it is in the guide on plan limits — Shopify Plus isn’t needed. Also note that a plan downgrade deactivates the carrier service association.
- Check your rate names. Before reaching for an app, look at the existing profiles: inconsistent rate names produce checkout results you didn’t intend, and that’s fixable without any app.
- Confirm oversize criteria with your carrier. Whether a consignment counts as oversized is the carrier’s call, based on dimensions, shape and packaging. Clarify the criteria for your items before you set prices — costing by weight alone regularly misses for bulky goods.
- Two-person delivery and timed slots are separate services. They don’t depend on distance but on the product and the contract. If you offer them, they belong in checkout as their own shipping method, not inside a distance rate.
If you deliver bulky goods yourself in Germany or nearby countries, the app from this business shows how to price your own deliveries by distance or postcode zone with an app — in kilometres and for numeric postcodes, not UK ones.
Frequently asked questions
Why does Shopify add up the shipping for a bulky item and a small one?
Because that's how it's designed. Shopify's documentation states that weight-based, carrier-calculated and app rates are combined into a single merged rate. If the cart holds products from different shipping profiles, checkout sums their rates — even when both items would genuinely travel in one consignment.
Can I stop two shipping rates from being added together?
Natively only in narrow cases. A flat rate within the same location group is charged once. As soon as weight-based or carrier-calculated rates are involved, the combination applies. To charge one rate for a consignment that spans several profiles, you need an app that determines the rate for the whole cart itself.
What does the name of a shipping rate have to do with it?
More than most people expect. Shopify's documentation is explicit: rates with the same name are added together and shown as one option, even across shipping profiles. If the names differ, only the cheapest options are added together and shown at checkout simply as „Shipping". A typo in a rate name changes what the customer sees.
Does Shopify include packaging weight?
Yes, and per product. Shopify adds your store's default package weight to each individual product's weight before working out which weight tier applies. An item just under a tier boundary can tip into the next one — which matters most for heavy, well-packed goods.
Is bulk a question of weight?
Not only, and that's the crux. Carriers class a consignment as oversized because of its shape or packaging too — not cuboid, protruding parts, an unstable base, certain packaging materials. A weight-based rate in Shopify can't detect any of that, because it only knows kilograms and pounds.
Can I offer a product by freight only?
Not as a condition of its own. You can assign the item a freight rate through its own shipping profile, but Shopify has no rule saying „this product ships only by this method". A commonly suggested detour is quote requests instead of a cart, which gives up the normal checkout.
Do freight costs depend on distance?
In practice yes. Freight carriers price by zones built from postcode areas and distinguish local, regional and long-distance haulage, often in distance bands. Remote areas and islands come on top as their own surcharge, which is far steeper for freight than for parcels. That dimension — distance, or postcode zone — is precisely what Shopify's shipping zones don't know.
Do I need Shopify Plus for freight rates?
No, but the shop needs third-party carrier-calculated shipping before an app may return its own rates at checkout. Which plans cover that is in the guide on plan limits — Plus isn't the requirement. Note that a plan downgrade deactivates the carrier service association.
Sources
- Shopify Help Center: Calculating shipping rates from different shipping profiles (combination, rate names, package weight)
- Shopify Help Center: Shipping profiles
- Shopify Help Center: Setting up packages (package weight is added on)
- shopify.dev: Carrier Service API (plan requirements for apps, behaviour on downgrade)
- Shopify Community: "Shipping costs for multiple items & how do price this without charging separately for each item"
- Shopify Community: "Pickup-only product next to a shippable item — checkout stalls"
- Shopify App Store: KM Distance Shipping (distance tiers, postcode zones with prefix logic)