# Catalog-scale bulk price editor

Runs very large product-level price updates using Shopify Bulk Operations. Best for large catalogs; updates every variant on matching products.

Canonical URL: https://templates.jsworkflows.com/templates/catalog-scale-bulk-price-editor/

## When to use this template

This template is built for Shopify stores using the JsWorkflows app.

What it does: Runs very large product-level price updates using Shopify Bulk Operations. Best for large catalogs; updates every variant on matching products.

It is designed for Shopify promotion workflows and gives you a production-ready starting point instead of building the automation from scratch.

This workflow uses the scheduled trigger model and starts from the "Catalog-scale price update" trigger. It includes setup fields for merchant-facing values, so you can configure the workflow before installing it.

## Metadata

- Category: Promotions
- Trigger: Catalog-scale price update
- Workflow type: Scheduled
- Complexity: advanced
- Usage class: heavy-operation

## Connected services

- None

## Additional Shopify scopes

- None

## Setup fields

- Price update label (`TASK_LABEL`)
  - Type: text
  - Storage: config
  - Required: yes
  - Description: Human-readable label stored in logs.
- Product search query (`PRODUCT_QUERY`)
  - Type: textarea
  - Storage: config
  - Required: yes
  - Description: Controls which products are included. Every variant on matching products is evaluated. Examples: status:active, tag:clearance, vendor:Acme, product_type:Shoes.
- Dry run only (`DRY_RUN`)
  - Type: checkbox
  - Storage: config
  - Required: no
  - Description: Preview matching products, variants, and calculated prices without updating Shopify.
- Price action (`PRICE_ACTION`)
  - Type: select
  - Storage: config
  - Required: yes
  - Description: How prices should be changed.
- Price value (`PRICE_VALUE`)
  - Type: number
  - Storage: config
  - Required: yes
  - Description: Percentage or amount used by the selected price action.
- Minimum price (`MIN_PRICE`)
  - Type: number
  - Storage: config
  - Required: yes
  - Description: Lowest price the workflow is allowed to set.
- Rounding (`ROUNDING_MODE`)
  - Type: select
  - Storage: config
  - Required: yes
  - Description: How calculated prices should be rounded.
- Compare-at mode (`COMPARE_AT_MODE`)
  - Type: select
  - Storage: config
  - Required: yes
  - Description: How compare-at price should be handled during the price update.

## Setup guide

## Before you start

Use this template for very large product-level price updates. It uses Shopify Bulk Operations to read matching products and run the price update asynchronously, which is more practical for large catalogs than paging through variants one request at a time.

## Difference from Scheduled bulk price editor

- `Scheduled bulk price editor` is best for targeted variant-level campaigns and includes automatic rollback snapshots.
- `Catalog-scale bulk price editor` is best for very large product-level updates. It updates every variant on products matching the product search query and does not include automatic rollback.

## Configure in setup

- `Product search query`: choose which products should be included. Every variant on matching products is evaluated.
- Examples you can copy: `status:active` targets active products, `tag:clearance` targets products with the `clearance` tag, `vendor:Acme` targets one vendor, and `product_type:Shoes` targets one product type.
- You can combine filters with spaces, for example `status:active tag:clearance`. This means products must match both filters.
- To match either of two filters, use `OR`, for example `status:active (tag:summer-sale OR tag:clearance)`.
- `Dry run only`: keep enabled for the first run. The workflow downloads the bulk query result, calculates new prices, and logs a preview without changing Shopify.
- `Price action` and `Price value`: choose percentage or fixed amount adjustments.
- `Compare-at mode`: choose whether compare-at price is set to the original price, preserved when valid, or cleared.

## Safety behavior

- The template is dry-run by default.
- Shopify Bulk Operations handle the large read and write jobs asynchronously.
- The workflow logs product and variant counts after the bulk query result is processed.
- If the generated mutation file would exceed Shopify's bulk mutation file size limit, the workflow stops and asks you to narrow the product query.
- This template updates variant `price` and `compareAtPrice` only. It does not update discounts, markets, price lists, inventory cost, or rollback snapshots.
