Charging extra postage for one awkward product

Shopify can charge more to post one product, and it needs no app: give it its own shipping profile. What nobody warns you about is what happens to the rest of your rates when a basket mixes profiles, and it turns on something as small as whether two rates share a name.

Give the product its own shipping profile. That is the whole native answer: a profile is "a set of shipping rules for specific products and locations", you can have up to 99 of them, and anything not in a custom profile falls back to your general rates. Put the awkward item in a profile of its own, price its postage at what it actually costs you, and you are done in a few minutes.

And here is the part that catches people, because it decides what the customer sees. When a basket contains products from two profiles, Shopify combines the rates — and how it combines them depends on their names.

"Shipping rates with the same name are added together and displayed to your customer at checkout, even those in different shipping profiles."

Shopify's own example: a shirt profile charging $3 and a trousers profile charging $5 produce one $8 rate when both are in the basket. That is usually exactly what you want from a surcharge.

But:

"If all of your rates have different names, then the cheapest options are added together and displayed to your customer at checkout with the name Shipping."

So mismatched names do two things at once. You lose the name your customer recognised, and you lose the choice — the express option and the economy option collapse into a single line called "Shipping". A shop that offered next-day delivery stops offering it, and nothing announces that this happened.

Getting the names right

The rule to work by: every rate a customer might combine should share a name with its counterpart in the other profile.

  • If your general profile offers Standard and Express, the surcharge profile needs Standard and Express too — same spelling, same case.
  • A surcharge profile with a single rate called Heavy item surcharge will not match anything, so it collapses the checkout to one anonymous line.
  • If you want the surcharge on only one of your services, naming it after that service and leaving the other out looks like the move — but Shopify documents only two cases, all names matching and no names matching. A partial match is undocumented, and the likelier outcome is that the unmatched service disappears from the mixed basket rather than surviving without the surcharge. Test it before you rely on it.

Check it with a real basket, in both directions. One of the awkward product alone, and one mixed with something ordinary. The mixed one is where the names show their work.

Surcharge working but the express option vanished? Describe what should show at checkout →

What this cannot do

A profile itself cannot be conditional. It charges what it charges. "€15 extra only outside the capital", "no surcharge when they order three or more", "waive it for trade customers" — none of that lives in a profile. The conditions have to come from the other direction: keep the surcharge in the profile and take it off again at checkout when your condition holds, or hand the whole calculation to a carrier-calculated rate that works the price out for each basket. The first is a rule; the second needs Advanced or Plus.

Two of the awkward product pay the surcharge once. A profile's rate is charged per shipment, not per item — so if your real cost is per unit, the profile undercharges the customer who buys three, which is the opposite of the mistake most merchants brace for. The native answer is a condition inside the profile: a rate can depend on the basket's weight or its price, so the surcharge steps up as the order grows.

And it applies wherever the product goes. The profile covers the product, not the situation — so a surcharge that makes sense for a domestic courier applies to the international order too, unless you build out the zones inside that profile as well.

Which route is yours

What you need Where it comes from
A flat extra charge for one product Native — its own shipping profile
Keeping Standard and Express choices Native — match the rate names exactly
Surcharge only for some destinations Native — zones within that profile
Once per item rather than once per order Native — weight or price conditions on the rate
Surcharge only under a condition of yours A rule that waives it at checkout, or a carrier-calculated rate
Old advice about shipping scripts Shopify Scripts stopped running on 30 June 2026

What Shopivibe does

If a flat surcharge per product is what you need, use the profile — it is free, it is yours to change, and nothing we build beats it.

Where this turns into work is when the charge depends on something: "add the pallet fee once per order no matter how many are in it, unless it is going to a trade account." A profile cannot ask that question, but a rule at checkout can take the fee back off when the answer is yes — the surcharge stays in the profile, and the condition lives outside it. The honest first step is a conversation about which version your customers will actually accept, because the difference is visible to the person buying.

Two things to say plainly. We do not set your shipping rates — profiles stay yours, in your admin, where you can see them. And a conditional surcharge is a build, not a setting: a person here takes it on straight away and has it working in your store within 24 hours, and part of what that person does is tell you when the profile you already have is the better answer.

Shopivibe solves the problem in your store and keeps what it adds maintained, including when Shopify changes something underneath. Shopivibe is free during early access, with 3,500 credits included. Credits beyond the included 3,500 cost $0.06 each.

Know what the awkward one really costs to send? Describe how it should be charged →

Checked against Shopify's documentation and the App Store on 21 September 2026.