> For the complete documentation index, see [llms.txt](https://flapjax.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://flapjax.gitbook.io/docs/automations/workflows.md).

# Workflows

{% hint style="info" %}
Tip: reach for workflows on data hygiene routines, periodic reports, system-wide reactions to events, record-level operations, and any automation that works across your data rather than through one person's journey.
{% endhint %}

### How Workflows Work

Every firing creates a **run**. The run travels the flow from trigger to exit, executing each action in order.

No person attaches to the trigger, so person-targeting actions such as Send Email and Update Person stay out of reach by default. To work with people, loop through a set of records or results and reference the person from inside that loop.

That run-level approach separates workflows from [sequences](/docs/automations/sequences.md). Workflows suit operations that span your data, rather than following one individual.

***

### Trigger Types

Workflows take two trigger types. The [Triggers guide](/docs/automations/triggers-and-scheduling.md) covers the full configuration.

#### Rule-Based

The workflow fires whenever a specific event happens. The available events are:

* **Communication events**: an email or SMS delivery status arriving
* **Stack events**: a record created or updated in any stack in your workspace

Workflow stack events cover every stack, with no person-attribute requirement, which is what sequences have. Any stack can start a workflow, so they suit reactions to data changes across your system.

Add custom rules from the rule builder to narrow which events qualify. Segment filtering stays out of workflow triggers.

#### Recurring Schedule

The workflow runs repeatedly on a pattern: hourly, daily, weekly or monthly. Each firing creates a new run and executes the flow. Custom rules control which data joins each run.

***

### No Re-Entry Policy

Workflows carry no re-entry policy. They operate at the run level rather than tracking individual people, so nobody is ever "inside" a workflow. Each trigger event or schedule tick creates a fresh run.

***

### Working with People in Workflows

The People action category stays out of the workflow builder by design. A workflow has no person context from its trigger, so person-targeting actions such as Update Person, Delete Person, Assign Label and Remove Label cannot act implicitly.

Use this pattern to work with people in a workflow:

1. Use Find Records to search a stack for matching records.
2. Use a Loop to iterate through the results.
3. Inside the loop, use actions from other categories that reference people through variables. Enrol in Sequence, for instance, lets you name the person with a variable from the loop.

Delay actions stay out of workflow loops too. For a timed pause, put a delay action at the top level of the flow, before or after your loops.

***

### Statuses

Workflows carry three possible statuses:

* **Active**, live and processing runs. It shows as "Live".
* **Inactive**, off and processing nothing. It shows as "Draft".
* **Paused**, stopped by the system over an issue. An orange warning banner explains what went wrong.

Workflows never take the Scheduled or Fired statuses that sequences use, since no workflow runs at a one-time specific date and time.

***

### Monitoring Runs

Workflows track **runs**, one per execution of the flow. Open the monitoring page from the **Runs** button in the builder toolbar, or from the three-dot menu on any workflow in the list.

The runs table shows each run's ID, its status of successful or failed, and its creation timestamp. Scroll to load more.

Click any row for an activity timeline of every action processed during that run, errors included.

Workflow runs support neither search nor row selection. The table is a straightforward chronological log of executions.

The [Monitoring guide](/docs/automations/monitoring-runs-and-participants.md) covers the page in full.
