> ## Documentation Index
> Fetch the complete documentation index at: https://docs.formflows.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Workflows

> Automate what happens after a form submission using triggers, conditions, and actions.

A workflow is a sequence of automated steps that FormFlows.ai runs in response to form events. Instead of manually checking for new submissions and copying data to other tools, you define the logic once and the platform handles execution every time the triggering event occurs.

Workflows connect your forms to your broader tooling — email providers, spreadsheets, Slack channels, internal APIs, and more — without writing any code.

***

## Triggers

Every workflow starts with a trigger: the event that kicks off execution.

<AccordionGroup>
  <Accordion title="New submission">
    Fires whenever a respondent successfully submits a form. This is the most common trigger. You can scope it to a specific form or to all forms in a folder.
  </Accordion>

  <Accordion title="Submission matches condition">
    Fires only when a new submission satisfies a condition you define — for example, when the "Department" field equals "Sales" or when a numeric score exceeds a threshold. Use this trigger to create branching automation paths without building multiple separate workflows.
  </Accordion>

  <Accordion title="Form published">
    Fires when a form transitions from draft to published. Useful for notifying teammates, creating a tracking record, or running a pre-launch checklist.
  </Accordion>

  <Accordion title="Form archived">
    Fires when a form is archived. Use this to send a final summary, close a connected task, or update a status field in an external system.
  </Accordion>

  <Accordion title="Scheduled (time-based)">
    Fires on a recurring schedule — hourly, daily, weekly, or on a custom cron expression. Useful for digest emails, periodic data exports, or reminder campaigns that reference submission data.
  </Accordion>
</AccordionGroup>

<Info>
  A single form can have multiple workflows attached to it. Each workflow runs independently, so a new submission can simultaneously trigger a Slack notification, a Google Sheets update, and a confirmation email.
</Info>

***

## Actions

After a trigger fires, the workflow executes one or more actions in the order you define.

### Notifications and messaging

| Action            | What it does                                                                                                                                     |
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Send email**    | Sends a formatted email to one or more recipients. You can address it to a fixed address, to the respondent's email field, or to a dynamic list. |
| **Post to Slack** | Posts a message to a Slack channel or sends a direct message to a user. Supports field value interpolation so submissions surface inline.        |
| **Send SMS**      | Sends a text message via your connected SMS provider.                                                                                            |

### Data operations

| Action                        | What it does                                                                                         |
| ----------------------------- | ---------------------------------------------------------------------------------------------------- |
| **Add row to Google Sheets**  | Appends a new row to a connected spreadsheet, mapping form fields to columns.                        |
| **Update Google Sheets row**  | Updates an existing row matched by a lookup value, useful for editing records rather than appending. |
| **Create record in Airtable** | Adds a new record to a connected Airtable base.                                                      |
| **Update record in Airtable** | Updates a matched record in Airtable.                                                                |

### Integrations

| Action                            | What it does                                                                                                                                                           |
| --------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Call webhook**                  | Makes an HTTP request (GET, POST, PUT, or PATCH) to any URL, with full control over headers and request body. Use this to connect to any tool not natively integrated. |
| **Trigger Zapier Zap**            | Fires a Zapier webhook trigger, giving you access to thousands of apps through your existing Zapier account.                                                           |
| **Create task in Asana / Trello** | Creates a task or card in a connected project management workspace.                                                                                                    |

### Workflow control

| Action                 | What it does                                                                                                         |
| ---------------------- | -------------------------------------------------------------------------------------------------------------------- |
| **Delay**              | Pauses workflow execution for a set duration (minutes, hours, or days) before continuing to the next step.           |
| **Conditional branch** | Evaluates a condition and routes execution to one of two paths, similar to an if/else statement.                     |
| **Stop**               | Halts the workflow immediately. Useful as the final step of a conditional branch that should take no further action. |

***

## Conditions and branching

You can attach conditions to any action step, not just to the trigger. An action only executes if its condition evaluates to true. This lets you write a single workflow with multiple branches rather than maintaining several near-identical workflows.

**Example:** A contact form workflow that sends a high-priority Slack alert when the "Urgency" field is "Critical", sends a standard email for all other values, and always appends a row to Google Sheets regardless of urgency.

```
Trigger: New submission (Contact Form)
│
├── Action: Add row to Google Sheets          [always]
├── Action: Post to Slack (#support-critical) [if Urgency = "Critical"]
└── Action: Send email (support@team.com)     [if Urgency ≠ "Critical"]
```

***

## Execution order and reliability

Workflow steps execute sequentially in the order you define them. If you add a **Delay** step, subsequent steps are queued and resume automatically after the delay period — you don't need to keep the app open.

<Note>
  Workflow execution is asynchronous. After a respondent submits a form, they see the thank-you screen immediately. Workflow steps run in the background and do not delay the respondent's experience.
</Note>

### Retries

If an action fails — for example, a webhook endpoint returns a 5xx error — FormFlows.ai automatically retries up to three times with exponential back-off. If all retries fail, the workflow logs the error and sends you an email notification.

### Execution history

Every workflow run is logged. In the **Workflow history** panel, you can see:

* The timestamp and trigger event that started each run
* The status of every step (success, failed, skipped)
* The full request and response payload for webhook and API calls
* Any error messages returned by external services

<Tip>
  Use the execution history log to debug integrations. If a webhook call fails, you can inspect the exact payload FormFlows.ai sent and the response your server returned.
</Tip>

***

## Passing data between steps

Each step in a workflow can reference data from the triggering submission or the output of earlier steps. Use the **variable picker** in any text field to insert dynamic values:

* `{{submission.field_id}}` — the value of a specific form field
* `{{submission.submitted_at}}` — the ISO 8601 timestamp of the submission
* `{{submission.id}}` — the unique submission ID
* `{{form.name}}` — the name of the form
* `{{step.N.output}}` — the response body from step N (useful after a webhook call)

***

## Building your first workflow

<Steps>
  <Step title="Open the Workflow Builder">
    From your form's dashboard, click **Workflows**, then **New workflow**.
  </Step>

  <Step title="Choose a trigger">
    Select the event that should start the workflow. For most use cases, start with **New submission**.
  </Step>

  <Step title="Add actions">
    Click **Add step** and choose an action from the panel. Configure each step — select connected accounts, map fields, and write message copy.
  </Step>

  <Step title="Add conditions (optional)">
    Click the condition toggle on any step to restrict when it runs. Build the condition using the field picker and comparison operators.
  </Step>

  <Step title="Test the workflow">
    Use **Test workflow** to simulate a submission with sample data. Review the execution log to confirm each step behaved as expected.
  </Step>

  <Step title="Activate">
    Toggle the workflow to **Active**. It will now run automatically for every matching event.
  </Step>
</Steps>

***

## Next steps

<CardGroup cols={2}>
  <Card title="Workflow Builder guide" icon="diagram-project" href="/guides/workflow-builder">
    Detailed walkthrough of the workflow builder interface.
  </Card>

  <Card title="Triggers reference" icon="bolt" href="/guides/triggers">
    Full reference for every available trigger type and its configuration options.
  </Card>

  <Card title="Integrations" icon="plug" href="/guides/integrations">
    Connect FormFlows.ai to Zapier, Slack, Google Sheets, and more.
  </Card>

  <Card title="Data flows" icon="arrow-right-arrow-left" href="/concepts/data-flows">
    Learn how submission data moves through the system after it is captured.
  </Card>
</CardGroup>
