What Shopify Order Routing Actually Does with Multiple Warehouses
Shopify order routing uses a ranked list, not proximity. Here is what actually happens when you add a second warehouse, and what to do about it.

There is a Shopify Community thread that first went up in April 2019. A merchant running warehouses in three regions asked why Shopify would not send orders to the closest one. It got a partial answer, then a workaround, then years of followups from other merchants asking the same question in 2020, 2023, and 2024. That thread lives rent-free in my head, because I keep meeting merchants who found the answer the hard way.
The short version: Shopify order routing is a ranked list, not a map. If you have three warehouses and rank them A, B, C, every online order goes to A until A runs out of stock, at which point the whole order flips to B. The customer's city does not enter the calculation. Neither does the shipping cost, the fulfillment SLA, or which warehouse would need the smaller box. I have watched merchants spend a full afternoon on the "Use Ranked Locations" toggle before realising they were solving the wrong problem.
What merchants think Smart Order Routing does
When Shopify announced Smart Order Routing in July 2023, the language read like proximity optimization. The blurb was "automatically prioritize the best fulfillment location for an order." Fair enough. But "best" here means "highest in your ranked list with stock available." The distance to the customer does not enter the picture.
I had to explain this three times last month to merchants who had turned on Smart Order Routing expecting Shopify to route the Denver order to the Colorado warehouse. Shopify did not do that. Shopify sent every online order to whichever warehouse was ranked first, and only fell back to warehouse two when warehouse one showed zero available stock. The Denver customer got a package from New Jersey. The label cost a few dollars more than it needed to. Nobody at Shopify was going to notify the merchant of the pattern.
What the 2023 update actually changed
Two things, and it is worth being specific about them. First, Smart Order Routing added the "prevent split orders" preference. Before this, if an order had three items and location A held two of them, Shopify could split the fulfillment across locations. Now you can tell Shopify to prefer a single location that holds the whole order, even if that means going further down the ranked list. That is genuinely useful. Second, Shopify unified the routing controls across the online store and several sales channels, which used to have their own logic in some cases.
That is the shape of the improvement. The July 2023 release did not add proximity optimization, did not add cost optimization, and did not add per-line-item routing. If a merchant reads the announcement and expects any of those, the actual Shopify order routing behavior will surprise them. The words in the announcement are technically true. The impression a reasonable person forms from those words, though, does not match the code.
What I always check first when the wrong warehouse is shipping
The complaint I hear most often sounds like this: "Every order goes to warehouse A, even for our West Coast customers, and warehouse B is right there." My first move is not to touch the routing rules. I open Settings, then Shipping and delivery, then Manage locations, and check the priority list. Nine times out of ten, warehouse A is at the top, warehouse B is at the bottom, and nobody remembers ranking them. Shopify's default is the order in which the locations were added.
The second thing I check is whether both locations are actually flagged as fulfilling online orders. A location without the online orders checkbox turned on cannot receive an assignment even if the customer lives across the street from it. This is the failure mode a Reddit merchant walked into last year, where location B had been added for POS purposes only and nobody had ever toggled the online orders permission back on.
The third thing I check is one that surprised me the first time I ran into it. Shopify reserves inventory at the moment the order is created, not at the moment the fulfillment leaves. If your 3PL routes to a different warehouse than Shopify's priority list would predict, Shopify still deducts stock from the higher-ranked location on its side. Reconciliation drifts. Merchants notice this months later, when the inventory report and the 3PL's numbers stop matching. If you are seeing a persistent skew and your 3PL swears the warehouse assignments are correct, look at the Shopify order routing configuration first; the stock ledger straightens out once the routing does.
The rate calculation gap that trips people up
There is a related failure mode I want to name explicitly, because it comes up in three or four merchant conversations a month and nobody warns you about it before you buy the second location. Shopify calculates shipping rates at checkout before it picks a fulfillment location. That means you cannot show one shipping speed for items sold from warehouse A and a different shipping speed for items sold from warehouse B. Shopify does not do this natively; delivery profiles cannot carry the location forward into the rate calculation, and shipping zones only see the customer address.
If you are an Irish merchant with a domestic warehouse and an international one, and you want to show a 1-2 day rate on the domestic items and a 7-10 day rate on the international ones, the first 15 minutes with a help1 expert are free, and I will usually walk merchants through the three real options in that call. The short version: conditional rate apps like Advanced Shipping Rules can approximate the effect on the storefront, but they do not truly integrate with the fulfillment location that Shopify picks after the rate is shown. It is a workaround. If the merchant needs true warehouse-aware rate display, the honest answer is that they need either a Shopify Plus custom app using Shopify Functions or a separate store per market.
I do not love saying that last part. I would rather have a native answer. But six years into this discussion in the Shopify Community, the native answer is still missing, and pretending otherwise is how merchants end up building the wrong workaround.
What actually fixes routing
For proximity-style routing, three third-party apps come up over and over in the threads I read. Order Automator is the one I recommend first for merchants who need country-based routing ("ship US orders from the US warehouse, ship EU orders from the EU warehouse"), because it is inexpensive, has been around for years, and the developer answers questions in the community threads. Order Fulfillment Guru handles shipping-address-based routing and gets recommended for merchants who need finer granularity. Duoplane is the one I have seen agencies deploy on the larger side, when the routing decision has to consider more than just location.
None of these gives you true zip-code-to-warehouse distance routing without configuration work. Order Automator's country-conditional model is the most reliable form that this class of app delivers, and even that is a proxy for real proximity. Sub-national routing, say an East Coast warehouse and a West Coast warehouse both inside the US, can be made to work if you set it up carefully.
For per-line-item routing, which is the case where you have ten units at the internal warehouse and one hundred at the 3PL and an order for twenty-five arrives and Shopify sends the whole order to the 3PL, the honest answer is that no app fully solves this on a standard plan. The documented path is a custom middleware app that listens to the orders/create webhook and uses the FulfillmentOrder GraphQL API (specifically fulfillmentOrderMove and fulfillmentOrderHold) to reassign line items after Shopify's initial assignment. That means a developer, ongoing maintenance, and enough order volume to justify both. On Shopify Plus, Shopify Functions can implement the logic at checkout time. On a standard plan, the practical answer for most merchants I speak with is to accept the split-to-one-location behavior for now and revisit at higher volume.
I have not tested every third-party app in this space. I have tested the three named above and one that I no longer recommend because its support turned over and the replies got slow. My mileage is not necessarily your mileage; a merchant with a specific combination of 3PL and geography may find something else that works better. What I try to communicate on these calls is the shape of the Shopify order routing problem, so the merchant asks the right question when they demo an app.
Where merchants usually give up
The pattern I see: merchants fix the wrong thing. They spend two weeks tuning shipping zones because Shopify Support gently pointed them at delivery profiles, and delivery profiles do not fix routing. Or they install a conditional rate app and think it is now doing warehouse-aware routing when it is only doing rate display. Or they build a workaround around country-conditional logic and only realise six months later that all their US traffic is going to the East Coast warehouse.
If you have added a second location in the last quarter and you have not yet checked whether every online order is being routed to the same place, it is worth twenty minutes to look. Filter your orders by fulfillment location. If the split does not match your customer distribution, you are looking at the Shopify order routing pattern I have been describing this whole post. Fix the routing side first, before you build any of the workarounds on top of it. The related field notes on where UK merchants tend to lose rate accuracy live at /blog/what-i-find-in-every-uk-shopify-shipping-setup/, and a lot of the same instincts carry across.
Shipping is one of those parts of Shopify that looks obvious right up until the second location.
Still stuck? Talk to an expert.
Our vetted Shopify experts can fix this issue for you in a live session. $39 per session. Your first 15 minutes are free.