---
title: "Choosing the right trigger"
description: "Match the right Shopify Flow trigger to the job for orders, products, variants, inventory, discounts, customers, B2B, collections, metafields and storefront content."
canonical: "https://docs.workflow-trigger-extensions.app/choosing-the-right-trigger"
---

# Choosing the right trigger

The single most important decision in a Shopify Flow workflow is the trigger you start
with. This guide matches real trigger names to the jobs merchants actually automate.

> [!TIP]
> **The rule that matters most: pick the narrowest trigger that covers your case.** If you
> only care about SKU edits, start with **Product Variant SKU Changed**, not
> **Product Update**. A narrow trigger means fewer workflow runs, less quota consumed, and
> far less filtering inside the workflow.

## Before you build

1. Grant the permission for the data involved, on the app's **Permissions** page.
2. In Shopify Flow, create a workflow and pick the trigger. Triggers from this app are
   labelled **Workflow Trigger Extensions** in the picker.
3. Add your conditions and actions, then turn the workflow on. That switches the trigger
   on in the app and starts its baseline sync automatically.

## Orders

Use these when you need to react to changes *after* an order exists.

| You want to react to | Use |
| --- | --- |
| Any edit to the order | **Order Update** |
| Items, quantities, prices, or variants changing | **Order Line Items Changed** |
| Fulfillment progress, including partial, complete, cancelled, tracking | **Order Fulfillment Changed** |
| Payment state, for example pending to paid, or refunded | **Order Financial Status Changed** |
| Display fulfillment status, including on hold from POS | **Order Display Status Changed** |
| A note being added, edited, or cleared | **Order Note Changed** |
| Cart or note attributes changing | **Order Attributes Changed** |
| Tags being added, or removed, as separate events | **Order Tags Added** / **Order Tags Removed** |
| The shipping address being corrected | **Order Shipping Address Changed** |

**Typical workflows:** notify operations when line items change after checkout; start a
follow-up process when fulfillment completes; alert finance when an order is refunded;
re-validate shipping when an address is corrected.

## Products and variants

| You want to react to | Use |
| --- | --- |
| Any catalog edit | **Product Update** |
| Price or compare-at price | **Product Variant Price Changed** |
| SKU added, changed, or removed | **Product Variant SKU Changed** |
| Barcode (EAN/UPC) changes | **Product Variant Barcode Changed** |
| Unit price per measurement | **Product Variant Unit Price Changed** |
| Cost per item changing | **Product Variant Cost Changed** |
| Going live or being archived | **Product Status Changed** |
| The URL handle changing | **Product Handle Changed** |
| Title, description, vendor, or type | the matching **Product ... Changed** trigger |
| Tags added or removed | **Product Tags Added** / **Product Tags Removed** |
| Publishing to or removing from a sales channel | **Product Published to Channel** / **Product Unpublished from Channel** |

**Typical workflows:** alert merchandising on a price change; create a URL redirect when
a handle changes; sync an external catalog only when SKU data changes; recalculate margin
when cost changes.

## Inventory

| You want to react to | Use |
| --- | --- |
| Stock hitting zero at a specific location | **Out of Stock at Location** |
| Stock returning at a specific location | **Back in Stock at Location** |
| Any stock movement, with the delta | **Inventory Level Changed at Location** |

**Typical workflows:** unpublish a product when it goes out of stock at your only
fulfillment location; notify the buying team on a back-in-stock event; trigger a transfer
when one location runs low while another has surplus.

> [!NOTE]
> Shopify's native inventory triggers are variant-aggregate and carry no location. These
> carry the location plus the old, new, and delta quantities, which is what makes
> per-location logic possible.

## Discounts

| You want to react to | Use |
| --- | --- |
| A new automatic or code discount | **Discount Created** |
| Value, conditions, or dates changing | **Discount Updated** |
| A campaign reaching its end date | **Discount Expired** |
| Permanent deletion | **Discount Deleted** |
| A redeem code being added or removed | **Discount Code Added** / **Discount Code Removed** |

**Typical workflows:** remove a promotion banner when a campaign expires; post new
discounts to Slack for approval; produce an impact report when a leaked code is removed.

> [!NOTE]
> **Discount Expired** has no Shopify equivalent. Shopify never reports that a discount has
> lapsed, so the app detects it by polling.

## Customers and B2B

| You want to react to | Use |
| --- | --- |
| Any customer record change | **Customer Update** |
| Tags added or removed | **Customer Tags Added** / **Customer Tags Removed** |
| The note field changing | **Customer Note Changed** |
| Account state, for example invited to enabled | **Customer State Changed** |
| Email or SMS marketing consent | **Customer Email/SMS Marketing Consent Changed** |
| Name, email, phone, or address (protected data) | the matching **Customer ... Changed** trigger |
| A B2B company or one of its locations changing | **Company Update** / **Company Location Update** |
| Tax exemptions on a company location | **Company Location Tax Exemptions Changed** |
| A contact being updated or removed from a company | **Company Contact Updated** / **Customer Removed from Company** |

**Typical workflows:** sync consent changes to your ESP; flag account edits for review;
re-run a tax validation when a B2B location's exemptions change.

## Draft orders

Full lifecycle coverage: **Draft Order Update**, **Status Changed**, **Line Items
Changed**, **Tags Added** / **Removed**, **Note Changed**, **Attributes Changed**, **Email
Changed**, **Shipping Address Changed**, and **Billing Address Changed**.

**Typical workflows:** notify sales when a quote moves to invoice sent; re-price when
line items change during negotiation; validate an address before invoicing.

## Collections, markets and locations

- **Collection Update** for rule changes or product membership; **Collection Handle /
  Title / Description Changed** for the individual fields.
- **Market Created / Updated / Deleted / Status Changed** for international and B2B
  selling.
- **Location Created / Updated / Deleted / Activated / Deactivated** for warehouses,
  stores, and pickup points.

## Custom data

- **Metafield Update** when a monitored metafield changes on any of 10 owner types.
- **Order / Product / Customer Metafield Update** when you also want the resource itself
  as a native Flow reference, so Flow's own actions can act on it without a lookup.
- **Metaobject entry updated** when the changed record is a metaobject entry.

See [Metafield triggers](https://docs.workflow-trigger-extensions.app/metafield-triggers.md) and [Metaobject triggers](https://docs.workflow-trigger-extensions.app/metaobject-triggers.md).

## Storefront content

**Blog Update**, **Blog Post Update**, and **Page Update**. Native Flow covers none of
these.

**Typical workflows:** notify the content team when a published post is edited; alert
support when the returns policy page changes; log content edits for audit.

## Choosing between similar triggers

| If you are torn between | Choose |
| --- | --- |
| Order Update vs Order Line Items Changed | **Order Update** for notes, tags, addresses. **Order Line Items Changed** when only items matter. |
| Product Update vs Product Variant Price Changed | **Product Update** for general edits. **Price Changed** when only pricing matters. |
| Discount Updated vs Discount Code Added | **Updated** for configuration changes. **Code Added** for new redeem codes specifically. |
| Metafield Update vs Metaobject entry updated | **Metafield Update** for a field on a resource. **Metaobject** when the record itself is a metaobject. |
| Inventory Level Changed vs Out of Stock | **Level Changed** for any movement. **Out of Stock** for the zero crossing only. |

## Best practices

- Use the most specific trigger available; it reduces workflow runs and quota use.
- Split large processes into several focused workflows rather than one broad workflow
  with many conditions.
- Name each workflow after the trigger it uses, so it stays identifiable later.
- Review discount and content workflows during busy campaign periods, when those records
  change most.

> [!WARNING]
> **A workflow firing too often almost always means the trigger is too broad.** Moving from
> **Order Update** or **Product Update** to a specific trigger usually fixes it outright,
> and you can suppress the broad trigger on **Settings > Trigger Settings** so it stops
> consuming quota.

Full list of all 82 triggers: [Complete trigger reference](https://docs.workflow-trigger-extensions.app/trigger-reference.md).
