# Start from a form

Collect answers on a web form GoRunner hosts, and start a run with each one.

## Add the form

1. In a new workflow, press **Add a trigger**, type `form` and choose **Form**.
2. Set **Form Title**, and a **Description** if you like.
3. Under **Fields**, press **Add Field** for each question. Give it a label and a type, and tick **Required** if it must be filled in.
4. Add your steps, then press **Publish**.

![The Form trigger: Form Title, Description, and two fields, Name and Email.](https://docs.gorunner.io/img/build/fw-2-light.jpg)

You should see under each field, the expression that holds its answer, such as `{{trigger.body.email}}`.

## Field types

- **Text, Long text**: A line, or a box for a paragraph.
- **Number, Whole number**: Any number, or one without decimals.
- **Email**: Must look like an email address.
- **Date**: A date picker.
- **Dropdown, Radio**: One choice from your options, typed comma-separated.
- **Checkbox**: Yes or no.
- **Password**: Typed out of sight.
- **Hidden**: Not shown. It sends a fixed value, such as `{{trigger.query.utm_source}}` from the form’s address.

GoRunner checks required fields, emails, numbers and choices when the form is sent, and shows the form again with the answers kept.

## Share the form

1. Select the **On Form Submission** card.
2. Copy the **Form URL (public)** and send it to the people who should fill it in.

The address looks like `https://api.gorunner.io/api/webhooks/…`. *Self-hosted only:* It starts with your installation’s address. *Embed only:* It starts with the address of the product you use. It serves the form only once the workflow is published.

![The published form, Join the list, with Name and Email filled in.](https://docs.gorunner.io/img/build/fw-8-light.jpg)

## After someone sends it

- **Response Message**: What the person sees after sending. `Sent.` unless you change it.
- **Redirect URL**: Send them to a page of yours instead, such as a thank-you page.
- **Submit Button Text**: The key’s label. `Submit` unless you change it.

**What if someone sends the same form twice?**

A refresh or Back after sending doesn’t start a second run. Filling it in again does.

**What if it says “This form is busy”?**

The workflow is at its limit of runs at once and refuses new ones, or too many runs wait in line. [Limit runs at once](https://docs.gorunner.io/build/runs-at-once) explains both. If the run fails within 30 seconds, the person sees **Your answers weren’t sent**. A run still going by then counts as sent.

## Check it worked

Fill in the form and press **Submit**. In **Runs**, the new run shows Worked.

## For developers

The form shares the workflow’s webhook address: `GET` serves the page and `POST` takes an answer, as a form or as JSON. Each field arrives as `{{trigger.body.<name>}}`, where the name is the label in lower case, with `_` in place of spaces and signs. The time it was sent is `{{trigger.submittedAt}}`.

## Related

- [Build your first workflow](https://docs.gorunner.io/build/first-workflow): A form that adds each answer to a Google Sheet · 10 min
- [Use data from earlier steps](https://docs.gorunner.io/build/use-data-from-earlier-steps): Put a form answer into an email · 5 min
- [Form](https://docs.gorunner.io/apps/form): Every field of the trigger

Source: https://docs.gorunner.io/build/start-from-a-form
