# How to run safer bulk price updates in Shopify

Bulk price changes can affect hundreds or thousands of variants. A workflow can preview changes, update prices in batches, and choose between rollback safety or catalog-scale speed.

Canonical URL: https://blog.jsworkflows.com/articles/run-safer-bulk-price-updates-shopify/

Category: Use cases

Changing prices across a Shopify catalog is one of those jobs that looks simple until it goes wrong.

A small price change might affect a few products. A seasonal campaign, supplier cost adjustment, or catalog-wide correction can affect hundreds or thousands of variants. If the change is applied too broadly, if compare-at prices are wrong, or if there is no rollback plan, the cleanup can take longer than the original update.

That is why bulk price updates are a good fit for a controlled workflow.

## The pain point

Merchants often need to change prices for reasons that are not just "run a sale."

- Supplier costs changed and margins need to be adjusted.
- A product group needs a temporary price change.
- A vendor or collection needs different pricing.
- Compare-at prices need to be set or cleared consistently.
- A large catalog needs a controlled percentage increase or decrease.
- The team wants to preview the effect before changing live prices.
- A temporary change needs to be rolled back later.

The risky part is not the formula. The risky part is the scope.

If the selected products are wrong, the workflow updates the wrong variants. If the update cannot be reviewed, the first real run becomes the test. If rollback is manual, the team has to reconstruct original prices from memory, exports, or backups.

## What a safer price update workflow should do

A practical bulk price workflow should give the merchant control before anything changes.

At minimum, it should:

1. Let the user choose which products or variants are included.
2. Support percentage changes, fixed amount changes, and exact price setting.
3. Apply a minimum price so prices cannot fall below a safe floor.
4. Handle compare-at prices consistently.
5. Run in dry-run mode first.
6. Log what would change before updating Shopify.
7. Process work in batches or bulk operations.
8. Retry transient Shopify API errors safely.
9. Keep enough run history to understand what happened.

For temporary price changes, it should also store the original prices and roll them back automatically.

## Two different workflow patterns

Not every bulk price update has the same priority.

Sometimes safety and rollback matter most. Sometimes speed across a large catalog matters most. JsWorkflows now has two price editor templates because those are different jobs.

## Option 1: targeted price updates with rollback

The [Scheduled bulk price editor](https://templates.jsworkflows.com/templates/scheduled-bulk-sale-price-editor/) is designed for targeted price changes where control matters.

Use it when you want to:

- Select variants using a Shopify variant search query.
- Preview matching variants before applying changes.
- Change prices by a percentage, fixed amount, or exact price.
- Set compare-at price to the original price, preserve it, or clear it.
- Store temporary snapshots of original prices.
- Restore original prices automatically after a configured number of hours.

This is the safer option for temporary campaigns, vendor-specific price changes, product-type adjustments, and controlled price tests.

It is not the fastest approach for very large catalogs because it paginates through variants and updates product groups step by step. That is intentional. The template is built around reviewability and rollback.

## Option 2: catalog-scale price updates with Shopify Bulk Operations

The [Catalog-scale bulk price editor](https://templates.jsworkflows.com/templates/catalog-scale-bulk-price-editor/) is designed for large product-level updates.

Use it when you want to:

- Match products with a Shopify product search query.
- Update every variant on matching products.
- Use Shopify Bulk Operations for faster catalog-scale processing.
- Preview the calculated changes before applying them.
- Handle thousands of variants more efficiently than standard pagination.

This is the better option when the job is large and rollback is not the primary requirement. For example, a store might use it for a broad price increase, catalog maintenance update, or large merchandising adjustment.

Because this workflow is optimized for scale, it does not automatically roll prices back. If rollback is important, use the scheduled rollback template instead.

## Why dry run matters

Dry run is not a nice extra for price updates. It is a safety requirement.

A dry run helps answer the questions that matter before Shopify is changed:

- How many variants match the query?
- Which products are included?
- What will the new prices be?
- Will compare-at prices be set correctly?
- Is the query too broad?
- Is the safety limit too low?

This is especially important when the user does not know the exact number of matching variants. The first run should reveal the scope. The real update should happen only after the scope looks right.

## Why this works well as a workflow

A bulk price update is a batch job, not a one-click edit. It needs a way to select the right products or variants, calculate new prices, preview the result, update Shopify safely, and keep a record of what happened.

JsWorkflows handles that structure while keeping the setup form simple for the merchant. The workflow can run on a schedule, split work into steps, retry transient errors, write clear logs, and use Shopify Bulk Operations when the catalog is large.

For example, the setup form can ask for:

- Product or variant search query.
- Price action.
- Price value.
- Minimum price.
- Compare-at price behavior.
- Dry-run mode.
- Rollback timing, if needed.

The workflow code handles the Shopify API calls, batching, retries, logging, and rollback mechanics.

## When to use each template

Use the scheduled rollback template when the price change is temporary, targeted, or sensitive.

Good examples:

- Change prices for one vendor.
- Adjust a product type for a weekend campaign.
- Test pricing on a specific group of variants.
- Run a temporary price change and restore original prices later.

Use the catalog-scale template when the update is large and speed matters more than automatic rollback.

Good examples:

- Apply a broad price increase.
- Update prices across a very large set of products.
- Run a catalog-wide correction.
- Process thousands of variants using Shopify Bulk Operations.

## A good operating pattern

For price changes, the safest process is:

1. Start with dry run enabled.
2. Use a narrow query first.
3. Review the matching variant count and preview logs.
4. Adjust the query or settings.
5. Run the real update.
6. Check the workflow run history.
7. Use rollback only when the workflow is designed for rollback.

This keeps price changes controlled instead of turning them into a one-way bulk edit.

## Start from a template

If the job is a normal scheduled price change with rollback, start with the [Scheduled bulk price editor](https://templates.jsworkflows.com/templates/scheduled-bulk-sale-price-editor/).

If the job is a large catalog update where speed matters, start with the [Catalog-scale bulk price editor](https://templates.jsworkflows.com/templates/catalog-scale-bulk-price-editor/).

Both templates are available in [JsWorkflows on the Shopify App Store](https://apps.shopify.com/jsworkflows).

