# How scheduling works

> Schedules, timing, changes, windows and runs: the ideas behind Metascheduler, and what happens at each moment.

Documentation · 3 min read · Updated November 4, 2026

## The building blocks

A **schedule** is an entry on your calendar. It has a name, a **timing** and a list of **changes**.

A **change** is one kind of edit to a set of items: "take 20% off these 140 variants", or "swap the main menu for the Black Friday menu". Each change has:

- a **change type**, like Variant prices or Navigation menu ([every type](https://metascheduler.app/help/change-types.md));
- the **items** it changes, like products, entries or a menu;
- what it does at the **start**;
- what happens **at the end**: **Revert**, **Set to something else** or **Keep**.

Changes run in the order they're listed.

## Timing

> **Try it:** [How a schedule runs](https://metascheduler.app/help/how-scheduling-works)

| Timing | Runs | At the end |
| --- | --- | --- |
| **One time** | Once, at a date and time. | Nothing: its changes stay, like a Rollouts Launch. |
| **Window** | At a start, until an end. | Each change follows its end choice, like a Rollouts Event. |
| **Repeat** | A window that happens daily, weekly or monthly. | Each window reverts at its own end. |
| **Follow a rollout** | When a Shopify rollout becomes active. | When the rollout ends, as you chose. |

Each schedule has its own **time zone**. Times are stored exactly, and shown in the schedule's zone.

## Statuses

A schedule moves through these statuses:

1. **Draft**: being set up. It never runs.
2. **Scheduled**: waiting for its start.
3. **Live**: its changes are made now.
4. **Ended**: it ran, and nothing more is due.

You can also **Pause** a schedule (nothing new starts; anything live still reverts at its end) or **Archive** it (it won't run again; anything live still reverts). An ended or archived schedule can't be edited: select **Duplicate** to run it again.

## What happens at the start

For each item, Metascheduler:

1. reads the current value and saves it (the snapshot);
2. writes the new value;
3. saves what it wrote.

If an item already has the value, nothing is written. A percentage is always worked out from the saved value, so a retry never takes 20% off twice.

## What happens at the end

For each item, depending on the change's end choice:

- **Revert**: if the live value is still what Metascheduler wrote, it puts back the saved value. If someone changed it, it leaves it alone and asks you. See [How reverting works](https://metascheduler.app/help/undo-and-drift.md).
- **Set to something else**: writes the end value you chose.
- **Keep**: does nothing.

## Late runs

Metascheduler runs each start and end once, on time. If it can't run on time (say, Shopify was down), it follows these rules:

| Situation | What happens |
| --- | --- |
| A start up to 5 minutes late | Runs as normal. |
| A start later than that, inside its window | Runs, and is marked **Late**. |
| A start whose window has already ended | Skipped, and shown in **Needs you**. Its end is cancelled. |
| An end, however late | Always runs. Putting things back is the safe direction. |
| A one-time change more than a day late | Waits for you in **Needs you**: **Run now** or **Skip**. |

**Run now**, **Retry** and rollout starts aren't held by these rules.

## Retries

When Shopify is busy or unreachable, Metascheduler waits and tries again, up to 5 times, with longer waits each time. A change Shopify refuses (a value that isn't allowed, an item that's gone) isn't retried: that item fails and the rest carry on, and the run shows **Partly done**.

## Conflicts

When two schedules change the same item at overlapping times, the editor lists it under **Conflicts**, and the calendar flags both. It's a warning, not a block: the safe revert rules keep the overlap from clobbering either one.

## Related articles

- [How reverting works](https://metascheduler.app/help/undo-and-drift.md): Metascheduler saves what it replaces and checks before it puts it back, so it never overwrites an edit someone made in the meantime.
- [Schedule your first change](https://metascheduler.app/help/first-schedule.md): Create a schedule with a start and an end, add a change, check the preview, and schedule it.
- [Glossary](https://metascheduler.app/help/glossary.md): The words Metascheduler uses, and the statuses you'll see on schedules, runs and items.
