Hi, we’re building an integration for one of our clients, and we’re running into issues with how order routing assigns locations.
For context, we have two inventory locations:
-
An internal location, where the client keeps their own stock
-
An external location, where an external provider has stock available if the internal location runs out
We have multiple external providers, but each product can only belong to one external provider. So, for each product, there will be a maximum of two stock sources: internal and external.
What we want is simple:
Always fulfill from the internal location first, and only when that stock runs out, move to the external provider (even if that means splitting fulfillment across both locations).
Example:
Product A → 10 internal stock, 100 external stock
If a customer orders 25 units of Product A, we want Shopify to use the 10 internal units first, and then take the remaining 15 from the external provider.
This is important because we have a webhook that automatically tags new orders when they require an external provider (internal stock runs out, and external stock is used).
We tried using an order routing rule with ranked locations, giving the internal location the highest priority and the external one the second priority. But this hasn’t worked consistently.
For example:
-
Product A → 10 internal, 100 external
-
Product B → 10 internal, 100 external
If someone orders more than 10 units of each product, Shopify should ideally assign 10 from internal and the rest from external for each product.
But instead, Shopify assigns the entire order to the external location.
We reached out to support, and they told us this is expected behavior because the rule is applied at the order level, not the line-item level. So Shopify logic seems to be:
-
Try assigning the entire order to the internal location → fails
-
Try assigning the entire order to the external location → succeeds
-
Route everything to external
Is there any way to configure Shopify to follow the logic we want?
Or does anyone know of an app that can handle this type of partial, split-by-availability routing?
Thanks in advance to anyone that sees this