Webhooks Not Triggering on Inventory Transfers — Request for Resolution

Topic summary

A developer of the Duplicate SKU Sync app reports that Shopify’s inventory-related webhooks (inventory_levels/update and inventory_items/update) are not triggering during inventory transfers between locations, preventing their app from synchronizing stock levels across products with matching SKUs.

Key Questions Raised:

  • Should Shopify trigger inventory webhooks during location transfers?
  • Are there alternative mechanisms to detect transfers in near real-time?
  • Is this a known limitation with planned improvements?

Shopify Staff Response:
A Shopify representative initially confirmed that the inventory_levels/update webhook should trigger during transfers, noting that limitations only affected legacy movements. The new Transfers system (recently released to all shops) reportedly sends webhooks as expected.

Current Status:
The developer tested the new transfer method but webhooks still did not trigger. Shopify Support has confirmed this as a known limitation and the developer has submitted a feature request. The issue remains unresolved with no confirmed workaround or timeline for implementation.

Summarized with AI on October 27. AI used: claude-sonnet-4-5-20250929.

Hi,

We are the developers of a Shopify app called Duplicate SKU Sync, which helps merchants automatically synchronize stock levels across products and variants that share the same SKU.

We are currently facing an issue related to webhook delivery that is affecting the core functionality of our app.

Our app relies on Shopify’s inventory-related webhooks, such as inventory_levels/update and inventory_items/update, to detect stock level changes triggered by various events, including inventory transfers between locations. However, we’ve observed that Shopify does not consistently trigger or deliver webhooks when an inventory transfer occurs, even though the inventory values update correctly within the Shopify admin.

To verify this, we conducted multiple test transfers between active locations in a controlled environment. In each case, no relevant webhook was sent to our app endpoint, which prevents us from updating duplicate SKUs as expected.

Could you please clarify:

  1. Is Shopify expected to trigger any inventory-related webhooks during inventory transfers between locations?

  2. If not, is there an alternative mechanism or webhook we can rely on to detect inventory transfers in near real-time?

  3. If this is a known limitation, is there a recommended workaround or any planned improvements regarding webhook coverage for inventory transfers?

This issue is impacting our ability to provide accurate inventory syncing for merchants, and we’d appreciate your guidance on how best to proceed.

1 Like

Hi @Ankit6 , thanks for your post! Yes, you can expect Shopify to trigger inventory level webhooks during inventory transfers between locations, specifically the inventory_levels/update webhook.

It’s worth noting that any limitations were associated with legacy movements. However, the new version of Transfers (recently released for all shops) does send the webhooks as expected.

If you encounter any additional issues with this or similar webhooks, we’re more than happy to investigate further and address them as needed. Thank you!

Hi,

Thanks for the update! We tried the method of transferring inventory between locations, but unfortunately, it did not trigger the inventory_levels/update webhook in our tests.

We’ve also confirmed with Shopify Support that this is currently a known limitation — inventory transfers between locations do not trigger inventory webhooks as expected. I’ve already asked the support team to log this as a feature request, as supporting webhooks for such transfers would be a valuable enhancement for developers relying on real-time inventory updates across locations.

While there’s no guarantee of implementation, we’re hopeful this will be considered in future updates. Thanks again for the response, and happy to collaborate further if anyone has a workaround in the meantime.