Merchants should not be able to activate inventory at a fulfillment service

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.

  1. Create a store with a 3rd-party fulfillment service & location.

  2. Create a new product. Give the variant a SKU and a non-zero inventory at the default shop location.

  3. 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.

  4. 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:

  1. 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.

  2. 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.

  3. 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.

Great well detailed feedback with scenarios Aaron. I see how these could be better.

We’ll take these into account and see what we can do to improve this.

Hey Mike -

Thanks for the reply!

Just to clarify, is it Shopify’s expectation that a fulfillment service will manage inventory and accept orders for variants that have been merchant-activated at the fulfillment service location?

Given what is available today via the 2024-10 API, how should a fulfillment service deactivate inventory in cases where it can’t/won’t manage inventory or accept orders for these kinds of items? If orders are placed for those items, how should the merchant reassign the fulfillment to another location?

Aaron

Hi @arad,

expectation that a fulfillment service will manage inventory and accept orders for variants that have been merchant-activated at the fulfillment service location?

This is a good question. We have had use cases where both merchants and fulfillment services would want this as well as those that wouldn’t. I don’t have a hard answer this moment for you.

how should the merchant reassign the fulfillment to another location?

This is possible today in the admin UI (or via API although unlikely merchants would use API).

how should a fulfillment service deactivate inventory in cases where it can’t/won’t manage inventory or accept orders for these kinds of items

You can use inventoryBulkToggleActivation and set activate to false to deactivate which removes an inventory item’s quantities from that location, and turns off inventory at that location.

Thanks, Holmes!

These are additional characters to satisfy the 20 character limit.