Shipping Fees & Split Shipments

Hi!

I’m looking for any potential solutions for a problem we’re facing.

We fulfill all orders from our main warehouse and 22 stores. We have lean inventory, so we often have split shipments on our orders (averaging 1.3 shipments per order). We use the Shopify Shipping native functionalities.

We charge a $12 shipping fee for UPS Ground and $40 for 2nd Day Air and $60 for Next Day Air. We have them set as a flat rate so that the customer only gets charged 1 shipping rate, regardless of how many shipments are in their order. This is a customer-facing flat rate, so when we fulfill the order we have to manually select the shipping service. This has room for error because if the person fulfilling the order doesn’t look at the shipping service, they can accidentally select the wrong one (since it’s only a customer-facing fee, Shopify doesn’t default to it because it’s not tied to the actually shipping service). This is especially hard when fulfilling from the POS (which all stores do). It defaults to the cheapest shipping option. It doesn’t even stick to just UPS, it sometimes defaults to USPS or Fedex if it’s cheapest. The POS also doesn’t make it super clear which shipping service was selected so it’s very easy to miss. This means that customers might purchase 2nd day air, and the store fulfills with UPS Ground accidentally because it defaults to that and they don’t see the shipping rate. This happens a lot with our store sales associates.

I know that if we were to instead use the dynamically calculated rates (connecting directly to the specific shipping methods) it would default to the service selected at checkout. However, this means that we can’t charge only 1 label per shipment. It will charge a shipping fee for every label in the order. So if the customer has 2 shipments in the order, it could be $24 for UPS Ground. Sometimes it’s even more than that.

I know that from a business standpoint, it’s ideal to charge a fee for each label in the order. however, given how our business is set up, we have frequent split shipments and it becomes super costly for the customer and hurts conversion. I know that you could argue we should decrease our shipping fee to allow for room for split shipments, but it becomes hard for large orders (hurts AOV if your shipping fee goes up with your order volume).

One workaround I used to do is connect directly to UPS Ground and use Shopify Scripts to set up a maximum shipping fee. So if there were 3 shipments in the order and Shopify tried to charge a $36 shipping fee, the script would run and show it as a “discount” on the shipping fee back to $12. However then we wanted to offer expedited shipping and I couldn’t get the script to read the different shipping services and set different maximum amounts. Also, now Shopify Scripts is being retired.

I know that there are some apps that allow you to fix this, but the problem is that all of the ones I have found require you to use your own UPS account and our fees are significantly higher than Shopify’s shipping rates.

Here is our ideal outcome: leverage Shopify shipping rates (or close to them), offer 3 services at different rates (UPS Ground $12, UPS 2nd Day Air $40, and UPS Next Day Air $60), charge 1 shipping label per order, but have this shipping service default at fulfillment. I would also be fine with having dynamically calculated rates but just defaulting to the most expensive of the shipments in the order–it doesn’t have to be a flat rate, but just something reasonable. So if it were a 2 shipment order and I set a dynamically calculated UPS Ground rate, one label was calculated at $10 and one was calculated at $11, it would charge the $11 fee. Something like that could work.

Is there any workaround out there? Any apps that allow for this? Or customizations?

Thanks!

The part that usually slips is the fulfillment handoff, not the checkout rate itself. The customer may have paid the $40 expedited rate, but once the order splits across the warehouse and POS fulfillment, one location can still default to the cheapest label unless someone catches it manually.

The solution is so standardize the shipping and the fulfillment process so there are no mismatches between checkout and delivery staff shoulf follow clear SOPsto ensure they never use POS default options and always matched the customer selected shipping method during fulfillment .
In the long term implimenting automation or a custom setup to lock the shipping method is fulfillment is the best approach to eliminate human errors

From what you described, the issue is that Shopify’s native split-shipment calculation is applying the shipping rate per fulfillment/shipment, while your business rule is more like:

  • show UPS Ground, 2nd Day Air, and Next Day Air at checkout

  • cap or consolidate the customer-facing shipping charge to one amount per order

  • still make the selected service clear enough for fulfillment staff to use the correct service

A custom carrier-service rate app or custom shipping-rate logic is probably the right direction here. Instead of using Shopify’s dynamically calculated rate exactly as returned for each split shipment, the logic can return a controlled customer-facing rate such as:

  • UPS Ground → $12

  • UPS 2nd Day Air → $40

  • UPS Next Day Air → $60

or, alternatively, calculate the UPS rates across the split shipments and return only the highest shipment cost rather than the sum of all shipment costs.

The important distinction is that this solves the checkout rate shown to the customer. The fulfillment-side default label selection may still depend on how Shopify/POS interprets the selected shipping line, so I would test that carefully before relying on it operationally. At minimum, the selected shipping method can be made much clearer on the order, and some stores also add tags/order notes/automation to reduce fulfillment mistakes.

Full disclosure: I’m the developer of JsRates, which is built for custom Shopify shipping-rate logic like this. I don’t want to overstate it without testing your exact POS/fulfillment workflow, but the rate logic you described - flat capped rates per service, or “return the highest calculated shipment rate instead of the total” - is the kind of scenario JsRates is designed to handle.

Hi! @lucymaloney
What you’re trying to do lies somewhere between Shopify’s flat-rate and carrier-calculated pricing models, and neither really accommodates split shipments in a way that’s exactly like what you outlined.

One solution is a shipping rules app that aggregates rates across fulfillment locations and displays one consolidated checkout rate, while tagging the chosen carrier on the order. Some merchants also leverage Shopify Flow to display prominent fulfillment instructions so the staff can instantly know what service was purchased. For full control over the rate calculations and shipping defaults, a custom carrier service app is typically the best approach, especially with multi-location fulfillment and regular split shipments.

This sounds like a multi-location fulfillment issue, not just a shipping-rate issue. If orders are often split between your main warehouse and stores, you may need clearer rules for which location ships first, when to split, and when to hold items together.

Hey Lucy! Fellow merchant here - I deal with multi-location routing too so this caught my eye.

For the routing logic you described in your follow-up, Order Routing Plus can help with that side of things:

  • minimizing split shipments - it can look for a single location that covers as much of the order as possible before splitting it up
  • location priority - you can set Kemble Street as the first place it checks before moving on to stores
  • inventory-based routing - it can factor in which locations actually have the stock to cover remaining items

A couple of honest caveats though:

  • Order Routing Plus works after the order is placed, so it has no effect on what gets charged at checkout - the flat rate vs. per-label question is a checkout-level thing that’s out of scope for any routing app
  • For the shipping service defaulting issue at fulfillment (staff accidentally picking UPS Ground instead of 2nd Day Air), I’d suggest reaching out to the Order Routing Plus team directly to ask if that’s something they can help with - I wouldn’t want to guess on that specific piece

Hope that helps narrow things down a bit!