Dear Shopify Product Manager,
As of 29 October 2024, a merchant can create a new or duplicated product and then activate the associated variant inventory at a fulfillment service location. The merchant can take these steps unilaterally and without the fulfillment service’s knowledge. Moreover, the Shopify UI creates an expectation that the fulfillment service has assumed responsibility for managing inventory on Shopify variants the service may not be aware of on products it may not actually manage.
This has already resulted in customers placing orders for products without actual underlying inventory. And since there’s no way to reassign fulfillment locations, it’s not easy to fix either.
Steps to reproduce:
I had some really nice screen shots outlining the above items, but apparently new users cannot embed more than one asset in a post. So you’ll have to use your imagination.
-
Create a store with a 3rd-party fulfillment service & location.
-
Create a new product. Give the variant a SKU and a non-zero inventory at the default shop location.
-
Update the variant so inventory is now stocked at the fulfillment service location. Shopify will transfer the shop inventory count to the fulfillment service location.
-
Buy the product. You’ll see that the associated line item is assigned to the fulfillment service location for fulfillment.
It’s worth noting that the merchant can do all of this without the fulfillment service confirming that it can manage the product’s inventory and fulfill the item. And when the merchant discovers that their orders are not being fulfilled, they are going to be mad at the fulfillment service and not at Shopify.
A quick note about SKUs. They are an extraordinarily unreliable identifiers that are frequently changed, often fat fingered, and are not guaranteed to be unique. When Shopify tells the merchant that the variant SKU must match the SKU in the fulfillment service, it assumes that the fulfillment service uses the SKU as the key for identifying which items need to be fulfilled. It also places a heavy operational and maintenance burden on the merchant as they become the party that needs to validate that the Shopify SKU does indeed match the SKU in the fulfillment service.
Possible fixes:
-
A fulfillment service should be able to tell Shopify that it cannot manage a product’s inventory or accept orders for the item. To support this, Shopify could add a force deactivation flag to the inventoryDeactivate GQL mutation. As of now, you cannot deactivate inventory if it is only stocked at one location. With the force deactivation flag set to true, the inventoryDeactivate mutation would activate the inventory at the shop’s default location. This would allow the fulfillment service to implicitly confirm that it has assumed responsibility for the product and actively reject any products it cannot manage.
-
Only allow inventory activation at a fulfillment service to be done through the API and only by the fulfillment service. This sidesteps all of the SKU-centric assumptions made about how fulfillment services manage products and inventory. It’s also the best way to ensure that the merchant’s expectations about the fulfillment service’s role and responsibilities are met.
-
Create a confirmation mechanism whereby the fulfillment service can confirm that it is assuming the responsibility of managing a fulfilling product. Much like Shopify has done with the mandated GDPR endpoints, you could require fulfillment services to implement a set of API endpoints whereby Shopify could confirm that the fulfillment service is assuming responsibility. If you wanted to stay true-to-form, you could even require that the endpoints be implemented with GraphQL and not REST.