Shopify Incoming Inventory API Issues

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

Hey @Horse,

Thank you so much for sharing this! I’m going to dive it to make sure I fully understand.

Can I ask a few more questions to make sure I’m not missing anything here?

  • You seem to have a grasp of the current limitations. Is your post here primarily to report a bug, or is this more of a feature request/product gap that you’d like us to address?
  • Does this happen with incoming inventory to merchant managed locations or app managed locations?
  • Does our upcoming inventory transfers API’s resolve any of this? New GraphQL APIs for Inventory Transfers Management - Shopify developer changelog
  1. I need a solution. Users are complaining because Horse can’t zero itself out.
  2. Both
  3. If used exclusively then it might. I haven’t tested it yet. But I am hopeful that if an app did use it exclusively then it could resolve the issues. However, it doesn’t help everyone else that still uses the existing API. As long as the existing API exists, then apps will still get into trouble with no way out.

I’ve added your questions 2 and 3 to the website.

If you found this helpful, please contact Natalie (manager), Paul (Shopify Technical Merchant Support), Matt (Plus Technical Merchant Support), and Chloe M (Shopify Technical Merchant Support) who continue to misunderstand the issue. They keep misunderstanding the issue and providing unhelpful solutions to different unrelated problems. They are VERY confused and could really benefit from speaking with someone that understands the issue.

Thanks Marc,

I’ve been replicating this on my end to be sure I understand. This is what I’ve done and what I’ve found. Please let me know what I’m missing because it seems to work for me as expected and doesn’t get stuck, even after app uninstallation.

  1. Spun up a custom app and used the adjustInventoryQuantities mutation to add incoming inventory to a newly created product

  2. Uninstalled the app and checked the inventory.

  3. Used a separate custom app that has full permissions and the inventoryMoveQuantities mutation to move from incoming to available and the inventory looks to have moved.


There is absolutely a limitation on what merchants can do here though. The only places in the admin to adjust incoming inventory are through purchase orders and inventory transfers, but app managed inventory can only be managed by an app.