# Create a Workflow (/how-to/workflows/create-a-workflow)



Workflows automate tasks by connecting a trigger event to one or more actions, optionally gated by conditions. This guide walks you through creating a workflow from scratch.

Before you begin [#before-you-begin]

* You need **Dashboard access** with permission to manage workflows for your location.
* Decide what event should trigger the workflow and what actions should happen in response. For example: "When a booking is created and the booking value is greater than $200, send a confirmation email and assign a facilitator."

Steps [#steps]

1\. Open the workflow builder [#1-open-the-workflow-builder]

1. In the sidebar, navigate to **Marketing > Workflows**.
2. Click **Create Workflow**.
3. Enter a **name** (required) and an optional **description**.
4. The visual workflow editor opens with an empty canvas.

2\. Add an event node (trigger) [#2-add-an-event-node-trigger]

Every workflow starts with exactly one event node. This defines what triggers the workflow.

1. The editor starts with an event node on the canvas. Click on it to configure it.
2. Select an **event type** from the dropdown. See [Configure Workflow Triggers](/how-to/workflows/configure-workflow-triggers) for the full list of available events.
3. The event node turns blue and displays the selected trigger.

3\. Add condition nodes (optional) [#3-add-condition-nodes-optional]

Conditions let you branch the workflow based on data from the triggering event, the booking, the customer, or the current time.

1. Drag a connection from the event node's output handle to create a new node, or click the **Add Condition** button.
2. Configure the condition:
   * **Condition type**: What property to check (e.g., `booking_value`, `customer_count`, `activity_type`).
   * **Operator**: How to compare (e.g., `equals`, `greater_than`, `contains`).
   * **Value**: The value to compare against.
3. The condition node has two output paths:
   * **True path** (default edge): Followed when the condition evaluates to true.
   * **False path** (edge with type `false`): Followed when the condition evaluates to false.
4. You can chain multiple conditions in sequence or branch into parallel paths.

4\. Add action nodes [#4-add-action-nodes]

Actions perform the actual work of the workflow.

1. Drag a connection from a condition output (or directly from the event node) to create an action node.
2. Select an **action type** and fill in its configuration. See [Configure Workflow Triggers](/how-to/workflows/configure-workflow-triggers) for the full list of actions and their settings.
3. You can chain multiple actions in sequence. Each action node has an output handle that connects to the next node.

5\. Save and enable [#5-save-and-enable]

1. Click **Save** to store the workflow. The workflow graph (nodes and edges with their positions and configuration) is saved as a JSON document.
2. Toggle the **Enabled** switch to activate the workflow. Only enabled workflows are evaluated when events occur.
3. To edit later, return to **Marketing > Workflows**, click the workflow name, and modify the graph.

Example: Send confirmation email for high-value bookings [#example-send-confirmation-email-for-high-value-bookings]

Here is a simple workflow that sends a branded confirmation email when a booking over $200 is created:

1. **Event node**: `booking_created`
2. **Condition node**: `booking_value` / `greater_than` / `200`
3. **Action node (true path)**: `send_template` with your confirmation email template, recipient type `customer`

If the booking value is $200 or less, the false path has no connected node, so the workflow ends without taking action.

Graph structure [#graph-structure]

Behind the scenes, a workflow is stored as a directed graph with two arrays:

* **Nodes**: Each has an `id`, `type` (event, condition, or action), `position` (x/y coordinates on the canvas), and `data` (configuration specific to the node type).
* **Edges**: Each has an `id`, `source` node, `target` node, and optional `type` (used for condition branching, where `false` indicates the false path).

The execution engine walks the graph starting from the event node, evaluating conditions and executing actions in order. Cycle detection prevents infinite loops -- each node can only be visited once per execution.

Tips [#tips]

* **Start simple.** Begin with a single event, one condition, and one action. Add complexity once you have verified the basic flow works.
* **Use the delay action for timed follow-ups.** For example, send a survey email 24 hours after the booking ends by adding a `wait` action before the `send_survey_email` action.
* **Name workflows descriptively.** Use names like "Post-booking survey (kayak rentals)" rather than "Workflow 1".
* **Disable before major edits.** Toggle the workflow off while you restructure it to prevent partial executions on live events.
* **Maximum 100 nodes per execution.** The engine caps execution at 100 node visits as a safety limit.
