# Automate with Shopify Flow

> Run a workflow when a schedule starts, ends, fails or finds an edit, and start, end or create schedules from Flow.

Guides · 2 min read · Updated November 4, 2026

Metascheduler adds triggers and actions to [Shopify Flow](https://apps.shopify.com/flow). Triggers are on every plan. Actions are on Extra and Unlimited. You'll find both in **Settings > Flow**, with **Open Flow**.

## Triggers

Every trigger gives your workflow the **Schedule ID**, **Schedule name**, **Timing** (`AT`, `WINDOW`, `RECURRING` or `ROLLOUT`), the **Rollout ID** (or nothing) and the **Resources** it changed. Long lists are cut to fit Flow's size limit.

| Trigger | Runs when | Extra fields |
| --- | --- | --- |
| **Schedule started** | A schedule makes its changes. |   |
| **Schedule ended** | A schedule's changes end or are changed back. |   |
| **Change failed** | A change couldn't be made on some items. | **Target**, **Error message** |
| **Drift detected** | Someone changed an item after Metascheduler did, so it wasn't changed back. | **Target**, **Resource ID** |

**Target** is the change type's key, like `variant.price` or `product.status` (see [Change types](https://metascheduler.app/help/change-types.md)).

*A workflow that emails the team when a price change fails.*

## Actions

| Action | What it does | Fields |
| --- | --- | --- |
| **Start schedule now** | Makes a schedule's changes now. | **Schedule ID** |
| **End schedule now** | Ends a live schedule now and changes its items back. | **Schedule ID** |
| **Create schedule from template** | Creates a scheduled schedule for the items you pass. | **Template**, **Resource IDs**, **Start time**, **End time**, **Schedule name** |

A Metascheduler trigger gives you the **Schedule ID** to pass to an action.

### Create schedule from template

**Template** is one of:

| Template | Changes | Resource IDs are |
| --- | --- | --- |
| `product-active` | Product status to Active | Product IDs |
| `product-draft` | Product status to Draft | Product IDs |
| `product-unlisted` | Product status to Unlisted | Product IDs |
| `metaobject-active` | Metaobject status to Active | Metaobject entry IDs |
| `metaobject-draft` | Metaobject status to Draft | Metaobject entry IDs |

**Resource IDs** are Shopify IDs, one per line or separated by commas. **Start time** is an ISO 8601 date and time with its offset. Leave **End time** empty to keep the change, or set it to revert then.

```text
Template:      product-active
Resource IDs:  gid://shopify/Product/8123456789
               gid://shopify/Product/8123456790
Start time:    2026-11-27T09:00:00+01:00
End time:      2026-11-30T23:59:00+01:00
Schedule name: Black Friday drop
```

Plan limits apply to schedules made from Flow, the same as in the app. If an action fails, the reason shows in the workflow's run log.

## Ideas

- **Change failed** → send an internal email or a Slack message to the person who runs the sale.
- **Drift detected** → add a note to the product, or ping the team that edited it.
- **Schedule started** with a `ROLLOUT` timing → post in your launch channel.
- A product is tagged `pre-order` → **Create schedule from template** with `product-active` at the launch date.

> **The legacy trigger**
>
> **Schedule executed (legacy)** fires only for schedules moved over from the old version of Metascheduler. For new workflows, use **Schedule started**.

## Related articles

- [Resolve what needs you](https://metascheduler.app/help/needs-you.md): Needs you lists the decisions only you can make, like an edit made during a schedule or a change that failed. Here's what each one means and what to do.
- [Plans and limits](https://metascheduler.app/help/plans-and-limits.md): What each plan includes, what counts toward its limits, and what happens when you change plans.
- [Example: launch a product at a set time](https://metascheduler.app/help/product-launch.md): Publish a new collection at 9:00 sharp and add it to the menu, or run a weekend-only drop that comes back every Saturday.
