# Form Trigger

> Start an automation when someone fills in and submits a hosted Glow form at a shareable link.

The **Form Trigger** (`formTrigger`) gives your automation a hosted web form at a shareable link. Each accepted submission starts a run with the visitor's answers under `formData`.

 }}, {{ 1.submittedAt }}"
  instead="Webhook Trigger (when posting from an external form service like Typeform or Tally)"
  verifiedAt="Oct 29, 2026"
/>

Use it for intake requests, bug reports, onboarding questionnaires, and file uploads when you want Glow to host the form directly.

> Explore the interactive 4-step trigger walkthrough on the [web version of this page](https://docs.getglow.ai/build/triggers/form-trigger).

**Form Trigger** (Starts a new run)

- Lives under Tools → Start and gives the Step its own shareable form link.
- Every submission starts a new automation run with {{ N.formData.fieldName }}.
- Works in Draft for signed-in workspace members and opens to visitors once Live.

**Wait (On form submitted)** (Resumes a paused run)

- Lives under Tools → Flow and pauses an already-running automation mid-flow.
- Generates a single-use formUrl for that specific execution.
- Continues down Resumed or Expired once the form is submitted.

## Setting it up

### Add the Form Trigger

Open **Tools** in the dock and select **Form Trigger** under **Start**.

### Write the title and questions

Enter an optional **Form title**, **Form description**, and **Submit button label** (`formSubmitButtonLabel`, defaults to `"Submit"`). Add at least one question under **Form Fields**:

| Field property                       | What it controls                                                                                                                          |
| :----------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------- |
| **Field name** (`name`)              | The key used in `{{ N.formData.<name> }}` (the builder shows the exact reference below each question).                                    |
| **Label** (`label`)                  | The question text shown to the person filling in the form.                                                                                |
| **Type** (`type`)                    | **Short text**, **Long text**, **Number**, **Date**, **Dropdown**, **Multi-select**, **Checkbox**, **Radio buttons**, or **File upload**. |
| **Required** (`required`)            | Refuses submission when the question is left blank.                                                                                       |
| **Placeholder** & **Help text**      | Optional hint inside the input and supporting caption below the label.                                                                    |
| **Choices (comma separated)**        | Options offered for **Dropdown**, **Multi-select**, and **Radio buttons**.                                                                |
| **Allow several files** (`multiple`) | Available on **File upload** fields; returns a list of file references instead of a single file reference.                                |

### Choose who may submit

Set **Authentication** (`formAuthentication`) for when the automation is **Live**:

- **None** (default): Anyone with the link can submit, subject to the per-visitor rate limit.
- **Basic Auth**: Prompts the visitor for **Basic auth username** and **Basic auth password**.
- **Glow User Auth**: Requires signing in as a member of the workspace (Viewers cannot submit). Records their identity in `{{ N.responder }}`.

### Choose what happens after submitting

Set **After submitting** (`formCompletionMode`):

- **Show a message** (default): Shows **Thank-you title** (defaults to `"Thanks, your response was submitted."`) and optional **Thank-you message**.
- **Go to a web address**: Redirects the visitor's browser to **Redirect URL** (`https://` or `http://`).
- **Show the workflow's result**: Waits up to **60 seconds** for the run to finish. Displays the last Step's text output (up to **8,000 characters**) under **Thank-you title**.

### Test in Draft, then go Live

The **Form link** panel at the top of **Setup** shows the shareable URL (`https://app.getglow.ai/forms/<token>`):

- **In Draft or Paused:** Only signed-in workspace members can submit, and each submission runs the draft as a test.
- **In Live:** Switch the automation to **Live** so visitors can submit according to your **Authentication** setting.

The link belongs to this Step. Click **Generate new URL** in the **Form link** panel to rotate the link and invalidate the previous URL immediately. A copied Step or a restored version gets a new link.

## What it passes on

If the Form Trigger is Step 1, downstream Steps read its output without a `result.` prefix:

| Reference                      | Type               | What it holds                                                                                                                                                   |
| :----------------------------- | :----------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `{{ 1.formData.<fieldName> }}` | Matches field type | The answer for `<fieldName>`. Optional fields left blank are `null` (or `[]` for **Multi-select** and multi-file **File upload** fields; `false` for Checkbox). |
| `{{ 1.submittedAt }}`          | Text (ISO 8601)    | UTC timestamp when the submission was accepted.                                                                                                                 |
| `{{ 1.responder.userId }}`     | Text               | Workspace user ID of the submitter (present when **Authentication** is **Glow User Auth**).                                                                     |
| `{{ 1.responder.email }}`      | Text               | Email address of the submitter (present when **Authentication** is **Glow User Auth**).                                                                         |
| `{{ 1.responder.name }}`       | Text               | Display name of the submitter (present when **Authentication** is **Glow User Auth**).                                                                          |

How specific field types are formatted inside `formData`:

- **Date:** Midnight UTC of the chosen day in ISO 8601 format (such as `"2026-10-27T00:00:00.000Z"`).
- **File upload:** A file reference object `{ id, name, contentType, size }` (or a list of file references when **Allow several files** is on). Map it directly into downstream file inputs.

## Limits

| Resource                                | Limit                                                                                                  |
| :-------------------------------------- | :----------------------------------------------------------------------------------------------------- |
| **Submissions per visitor per minute**  | Configurable from `1` to `60` (defaults to `10` per minute).                                           |
| **File uploads per visitor per minute** | Up to **30** file uploads per minute per form.                                                         |
| **Daily form upload volume**            | **500 MiB** per automation per rolling 24-hour window (unsubmitted uploads expire after **24 hours**). |
| **Show the workflow's result reply**    | Waits up to **60 seconds** for the run to complete and displays up to **8,000 characters**.            |

## Examples to copy

  

**Customer intake with file attachment**

    Collect a prospect's details and a PDF brief, then summarize with AI and post to Slack:

    1. Add **Form Trigger** at Step 1 with fields `company` (**Short text**, required), `budget` (**Number**, required), and `brief` (**File upload**, required).
    2. Add an [AI Prompt](https://docs.getglow.ai/build/ai-features/ai-prompt) Step at Step 2 referencing `{{ 1.formData.company }}`, `{{ 1.formData.budget }}`, and `{{ 1.formData.brief }}`.
    3. Send the summary to Slack in Step 3.

  

  

**Internal IT request (Glow User Auth)**

    Let teammates submit an internal request and see the ticket link on the completion screen:

    1. Set **Authentication** to **Glow User Auth** and **After submitting** to **Show the workflow's result**.
    2. Add questions `system` (**Dropdown** with choices `GitHub, Jira, Okta`) and `justification` (**Long text**, required).
    3. Read the requester's email from `{{ 1.responder.email }}`, create the ticket, and finish with a Step that outputs the confirmation text.

  

 }} along with {{ 1.submittedAt }}."
/>

## What's Next?

- Pause a running automation for a mid-run form or approval with [Wait](https://docs.getglow.ai/build/action-steps/delay#on-form-submitted) or [Human Review](https://docs.getglow.ai/build/action-steps/user-approval).
- Build a conversational hosted page with the [Chat Trigger](https://docs.getglow.ai/build/triggers/chat).
- Expose selected Step configuration fields to workspace runners with [Form Templates](https://docs.getglow.ai/getting-started/templates/form-templates).
