I’ve spent MONTHS trying to get Shopify to understand that there are 2 fundamental issues with how Shopify manages the incoming inventory quantities from apps.
They are SO BAD at reading and understanding that I created a website for the issues: Shopify Incoming Inventory API Issues Explained
Here a copy though:
1. Incoming Inventory “Stuck” After App Uninstallation
-
When a merchant uninstalls an app, Shopify immediately severs all permissions, preventing the app from making any further changes. Although apps are required to delete their data upon uninstallation, any “incoming” inventory adjustments they created—whether positive or negative—remain on the product.
-
Because the app’s connection is terminated, it has no opportunity to clean up or “zero out” these leftover quantities. This leaves the inventory in a “stuck” state. The merchant is unable to resolve these lingering incoming inventory figures because the app that created them is no longer present to manage them. The only way for a merchant to fix this may be to reinstall the app solely for the purpose of having the app correct the inventory. This problem persists even if an app is behaving perfectly, as it is a limitation of the uninstall process.
2. Inability of Apps to “Zero Out” Their Own Incoming Inventory
The fundamental problem is that an app cannot isolate and remove only its own contribution to a product’s “incoming” inventory, a process referred to as “zeroing out”. This issue stems from the behavior of Shopify’s inventoryAdjustQuantities
API mutation.
The key components of this issue are:
- Net Total vs. App-Specific Inventory: The API only allows an app to see and modify the net total incoming inventory for a product. This net figure is the sum of all incoming sources, including Shopify Purchase Orders (POs) and any adjustments from apps.
- Lack of Visibility: An app has no way to see the specific incoming quantity contributed by Shopify POs or other sources. It also cannot see its own true value stored by Shopify; it can only see the final net total.
- The “Zeroing Out” Paradox:
- When an app attempts to remove its influence, it uses the API to set the incoming quantity to 0.
- However, the API interprets this as a command to set the net total incoming quantity to 0.
- If a product already has incoming stock from a Shopify PO (e.g., +10 units), and the app sets the total to 0, Shopify forces the app’s contribution to become negative (-10 units) to make the math work (10 - 10 = 0).
- Therefore, the act of setting the app’s value to “0” perversely results in it becoming a negative number. The app is then “stuck,” as it cannot know the correct value needed to truly offset its influence without being able to see the quantities from other sources. This behavior puts apps in an impossible situation where they cannot function correctly.