Issue with inventoryLevels.updatedAt not being updated

There has been a behavioral change in the data returned by the inventoryItems query in relation to inventoryLevels. In the past, if an adjustment was made to an inventory level in Admin (i.e. Safety Stock) the updatedAt date would be updated in inventoryLevels.

Now when an adjustment is made in Admin, the updatedAt is unchanged. This behavioral change happened some time between 2/25/25 and 4/2/25, as I can see an example adjustment that affected the updatedAt on Feb 28th - then a subsequent adjustment on 4/2 which did not change the updatedAt.

Any ideas on why this behavior was changed? This makes it impossible to track when anything changed on an inventoryLevel. See the sample query below of what we are doing to get the updatedAt for a specific inventory level.

{
  inventoryItems(first: 10, query: "id:48802656649521") {
    edges {
      node {
        id
        sku
        countryCodeOfOrigin
        harmonizedSystemCode
        inventoryHistoryUrl
        tracked
        unitCost{amount }
        inventoryLevels(first: 10) {
          edges {
            node {
             updatedAt
             createdAt
             location {id}
             quantities(names: ["available","on_hand","committed","reserved","incoming","damaged","safety_stock","quality_control"]){name, quantity}
             canDeactivate
             deactivationAlert
            }
          }
        }
      }
    }
  }
}
1 Like

Hey @Sam!

Thanks for sharing this change you’ve noticed.

Have you noticed this with all on hand inventory, or are you seeing this limited to specific states like safety stock?

I’m taking a look to see what I can find.

Hi Kyle,

Thanks for the reply!

This happens with all quantities other than available. If we update damaged, quality control, safety stock, other (reserved), or incoming then the quantity.updatedAt is updated but the inventoryLevel.updatedAt is not.

But if we update the available quantity then both the quantity.updatedAt and inventoryLevel.updatedAt are updated as expected.

This is a problem because we now can’t query to determine when any of these amounts have changed, since there is no way we’ve found to query on quantities.updatedAt. Also, the inventory_level webhook payload only includes Available, so this isn’t an option either.

If there is a way that we could get the behavior reverted that would be great.

Hi @KyleG-Shopify,

Any thoughts on this? It is becoming a real problem for our customers.

Please let me know if you need any more information from me. I’d be happy to jump on a quick call if necessary.

Thanks,
Sam

Sorry for the delay here, Sam. I actually had a similar support question last fall (good thing I kept good notes) and the behavior you’re seeing now matches what I found then. The inventoryLevel.updatedAt timestamp is specifically tied to changes in the “available” inventory state only, while other states like safety stock will update their individual quantities.updatedAt values but not the parent inventoryLevel.updatedAt.

I’m curious about the specific example you mentioned where an adjustment on Feb 28th did update the updatedAt field, but a similar adjustment on April 2nd didn’t. Could you share more details about what type of adjustment was made in each case? This would help me understand if there’s something else at play.

In the meantime, here’s a query that shows how to access the individual updatedAt timestamps for each inventory state:

{
  inventoryItem(id: "gid://shopify/InventoryItem/YOUR_INVENTORY_ITEM_ID") {
    id
    inventoryLevels(first: 10) {
      edges {
        node {
          updatedAt
          location { id }
          availableQuantity: quantities(names: "available") {
            name
            quantity
            updatedAt
          }
          safetyStockQuantity: quantities(names: "safety_stock") {
            name
            quantity
            updatedAt
          }
          damagedQuantity: quantities(names: "damaged") {
            name
            quantity
            updatedAt
          }
          onHandQuantity: quantities(names: "on_hand") {
            name
            quantity
            updatedAt
          }
        }
      }
    }
  }
}