---
title: "Manual runs and Start another workflow"
description: "Run a workflow by hand with Run now, or split work across workflows with the Started by another workflow trigger and the Start another workflow step."
canonical: "https://docs.workflow-suite.app/manual-runs-and-started-by-another-workflow"
---

# Manual runs and workflows started by another workflow

Two triggers do not react to your store at all: **Run manually** starts when you say so, and **Started by another workflow** starts when one of your other workflows calls it. This page also covers the step on the calling side, **Start another workflow**.

## Run manually

Use it for jobs you start by hand, for example tagging all products of a vendor.

1. Choose the trigger **Run manually**.
2. Build the steps, save, and select **Turn on**.
3. Select **Run now** in the toolbar above the canvas. The button is shown while the workflow is on and has no unsaved changes.

A run started with **Run now** is a real run: it changes your store, counts against your plan and alerts you when it fails. To try the workflow without changes, use **Test** instead. See [Test, preview and debug](https://docs.workflow-suite.app/test-preview-and-debug.md).

**Run now** is available for every trigger, not only this one. With an event trigger it uses the trigger's sample event.

## Started by another workflow

Use it to share steps between workflows, or to continue work later without keeping the first run waiting.

### In the workflow that is started

1. Choose the trigger **Started by another workflow**.
2. Build the steps. They read what the caller sent as `event.payload`.
3. Save and turn it on. A Start step fails while the workflow it names is off.

### In the workflow that starts it

1. Add the step **Start another workflow**.
2. Pick the **Workflow**. The list holds your workflows with the trigger Started by another workflow.
3. Optional: fill in **Payload (JSON)**, what the started workflow reads as `event.payload`. Leave it empty to pass on the event of this run. Add the `json` filter to text values.
4. Optional: set **Start in (minutes)** to start it later, up to 90 days. Leave it empty to start it now. A run that waits to start is listed as Waiting in the run history.

```liquid
{ "order_id": {{ event.payload.admin_graphql_api_id | json }}, "reason": "late" }
```

### How the two runs relate

- The step starts the other workflow and goes on at once. It does not wait for that run and cannot read its result.
- The started run is a real run. It counts against your plan and shows in the run history of that workflow. The run detail shows the chain of workflows that led to it.
- The started workflow's trigger filter still applies. When it does not match, nothing starts and the step reports `started: false`.
- A workflow cannot start itself, directly or through other workflows. Such a start is refused and the step fails. See [Loop protection](https://docs.workflow-suite.app/loop-protection.md).
- Secrets cannot be passed in the payload, because the payload is kept in the run history. The started workflow reads its secrets itself.
- In a preview the other workflow is not started.

Later steps of the calling workflow can read `started`, `runId`, `workflowName` and `startsAt` from the step's result.

> [!NOTE]
> **Wait or start later?**
> A **Wait** step pauses one run and continues it with the same data. **Start in (minutes)** ends the first run now and begins a fresh one later. Use Wait when the later steps need the results of the earlier ones; use a delayed start when the second part stands on its own, or when several workflows share it.

## Related

- [Wait, Log and Fail the run](https://docs.workflow-suite.app/wait-log-and-fail.md)
- [How a workflow runs: triggers, steps and runs](https://docs.workflow-suite.app/how-a-workflow-runs.md)
