Dynamic complexity cost for `productSet` mutation

Shopify Updates: 

The productSet mutation mutation now uses dynamic complexity costing that more accurately reflects the actual computational cost of operations.

What's changing

Instead of a fixed cost of 50 points for all productSet operations, the mutation now calculates complexity based on the actual work being performed:

  • Base cost: 10 points
  • Per variant: 0.2 points
  • Per variant file: 0.6 points
  • Per variant metafield: 0.4 points
  • Per product metafield: 0.4 points
  • Per product file: 1.9 points

The total complexity is calculated as: 10 + (variants × 0.2) + (variant_files × 0.6) + (variant_metafields × 0.4) (product_metafields × 0.4) (product_files × 1.9)

Benefits for your apps

Lower costs for most operations: More than 99.5% of existing productSet operations will cost less than the previous fixed cost of 50 points. Simple product updates that previously cost 50 points now cost as little as 10-20 points.

Support for larger products: The mutation now supports products with up to 2,048 variants for merchants on all plans, a significant increase from the previous limit of 100 variants. This enables apps to manage more complex products and support merchants with diverse business needs.

Examples

Simple product update (1 variant, no files or metafields): - Previous cost: 50 points - New cost: 10 points (80% reduction)

Medium complexity (20 variants, 5 product metafields): - Previous cost: 50 points
- New cost: 16 points (68% reduction)

Complex product (200 variants, 10 files, 20 metafields): - Previous cost: 50 points - New cost: 77 points (reflects actual resource usage)

Migration guidance

For most apps, no changes are required. Your existing productSet operations will automatically benefit from lower complexity costs.

For apps working with high-complexity products exceeding the 1000-point single query limit: - Consider using bulk mutations for very large operations - Split complex operations into separate calls: use productSet for core product data, then use metafieldsSet and fileCreate for additional data

Back to blog