Feature Request: Selective Metafield Update Support in productSet Mutation

Hey Shopify team,

I’d like to submit a key critical Enterprise & B2B feature request related to the productSet mutation in the new product model.

Currently, the productSet mutation appears to overwrite the entire list of metafields on a product. Any metafields not explicitly included in the metafields input array are deleted.

This behavior presents challenges in integration workflows:

  • If a user or app adds or modifies a metafield in Shopify, and a productSet mutation is later run without that metafield, it will be wiped out.
  • If additional metafields are added over time—either manually or by other systems—they can be silently deleted unless explicitly accounted for in all future mutations.
  • It forces developers to always make a separate GraphQL query to fetch and preserve the complete list of existing metafields before any update, just to avoid data loss.

This makes productSet difficult to use safely in real-world sync scenarios, especially when dealing with ERP, PIM, or composable architecture use cases, where systems are often only responsible for subsets of product data.

Feature Request:
It would be incredibly helpful to have an optional input flag (e.g. mode: "append" or mode: "partial") that tells Shopify to:

  • Update only the metafields explicitly listed in the mutation
  • Leave all other existing metafields untouched

This would align far better with common integration patterns and reduce the risk of unintentional data loss. It would also support the ERP sync guidance shared in your docs:

Thanks for considering this request. I’d love to hear if this kind of improvement is on the roadmap, or if you have guidance for safely updating metafields without a full read-modify-write pattern.

Thanks,
Aaron

2 Likes

I can see what you are trying to do, the productSet method does state it is an upsert endpoint so would need all the values as thats expected behaviour.
If you want to only update specific properties there are more specific product methods such as productUpdate etc you can use.

You could use this method to only update the metafields you need, as it works as you expect :slight_smile:

+1 to this request.

Currently to update a product’s title, and the default variant’s price and a variant metafield needs to use multiple calls:

  • productUpdate to update the title
  • productVariantsBulkUpdate to update the variant price and variant metafield

productSet can do both in a single call, except that it wipes all other variant metafields, which means it’s not entirely fit for purpose to “Create or update a product in a single request.”

@JordanFinners You’re correct that productSet functions as an upsert and expects a complete payload—that’s consistent with the documentation. However, in practice, ERP integration workflows often require selective/delta updates, especially for things like metafields. The fact that productSet only has the capability to overwrite all metafields makes setting even one single metafield there impractical.

For somewhat of a comparison, within the productSet mutation, Shopify’s media APIs offer a duplicateResolutionMode attribute, enabling developers to choose between REPLACE and APPEND behaviors. A similar mechanism for metafields within productSet would close an important gap.

While productUpdate allows for targeted field modifications, it does not support identifying products via a custom metafield—something productSet uniquely offers. In addition, developers are forced to run two distinct operations: (1) query for the product or run the productSet mutation using the metafield to obtain its ID, and then (2) perform a productUpdate. This adds unnecessary complexity and inefficiency.

Furthermore, since products often gain new metafields over time, the current approach limits productSet’s usefulness in ERP sync scenarios where incremental enrichment is the norm. Enabling selective metafield updates within productSet would better support these real-world use cases and align with existing Shopify API patterns.

Hi @brill

Thanks for flagging this - have connected with the relevant product team to share your suggested improvement.

1 Like