Skip to content

Fixing double shipping charges on Shopify

Date

19 Jun 2026

Category

Build

Platform

Shopify

Client

Steadyrack

Steadyrack sell bike storage across three regions, and in Canada they fulfil from two places at once, their own warehouse and Amazon’s fulfilment network. Shopify prices delivery per location, so an order that pulls one product from each source can get quoted two shipping charges instead of one. The apps that promise to smooth this over come with a monthly fee and one more moving part in the checkout path, so we built it properly instead.

What we did

We built it as a Shopify Function, code that runs inside Shopify’s own checkout, written once and owned by Steadyrack outright. It spots a mixed cart and keeps a single correct shipping charge. Which products count as Amazon-fulfilled is a checkbox on the product, so bringing a new one on board is a tick in the admin rather than a developer ticket. It also fails safe, so if a cart ever looks unusual it leaves the rates alone rather than risk standing between a customer and checkout.

One detail worth passing on, because it catches people out. This kind of customisation can’t be finished in the Shopify admin. Attaching the function dead-ends in the shipping settings no matter what you click, and the last step only exists through Shopify’s API.

The result

Canadian orders now charge shipping once. We checked it across a full matrix of cart combinations, including express checkout, where the wallet correctly showed a single charge across two shipments. No subscription, nobody else on the critical path, and when Steadyrack want it to behave differently, that is a change to their own code rather than a feature request in someone else’s queue.

What to take from it

If you fulfil from more than one place, your own warehouse plus Amazon, a 3PL, a dropship partner, Shopify treats each source as its own delivery and your customer can quietly end up paying the sum. It is a two-minute check. Put one item from each source in a cart and count the shipping lines at checkout. And when a part of your store touches money every day, owning the code that runs it is worth it, because then changing it is your call rather than a vendor’s roadmap.