# Google Forms

Read Google Forms responses with their answers by question, create forms, add or remove questions, and open or close a form to responses.

## Connect Google Forms

1. In the sidebar, open **Connections** and press **Add connection**.
2. Type `google forms` and choose **Google Forms**.
3. Press **Sign in with Google**.
4. Choose your account in Google’s window and allow access.

You should see **Signed in as** and the account’s address.

You can also connect from a step: under **Connection**, press **New**.

**What if it says “Google sign-in isn’t set up here”?**

This installation has no Google app yet. An admin of the installation sees **Set up Google sign-in** instead, and sets it up once for everyone:

1. In Google Cloud, create an OAuth client of type **Web application**, and turn on the API for Google Forms.
2. In GoRunner, copy the **Redirect address to add in Google Cloud**, and add it to the client.
3. Paste the **Client ID** and **Client secret**, then press **Save and sign in**.

Publish the app in Google Cloud. An app left in Testing signs everyone out after 7 days.

Everyone else sees who to ask.

[Set up Google sign-in for connections](https://docs.gorunner.io/self-host/oauth-apps)

**Can I use my own Google app?**

Yes. In the sheet, open **Use your own Google app** and paste its **Client ID** and **Client secret**. Add the **Redirect address to add in Google Cloud** to your app first. The connection then signs in through your app instead of the installation’s.

[Connections](https://docs.gorunner.io/build/connections) says how to sign in again, rename or delete it. In a product that embeds GoRunner, **Add connection** can be missing: then [your provider makes connections](https://docs.gorunner.io/embed/customer-connections) for you.

## Start a workflow

Add a trigger and choose **Google Forms**. The trigger uses the same connection as the steps.

### On New Response

Checks a Google Form about once a minute and starts a run for each response submitted since the check before, oldest first. The first check after publishing only takes note of what is there (it starts nothing); changing the trigger starts over the same way. A response edited later does not start another run. At most 100 runs start per check; the rest follow on the next one.

- **Form · Required**: The form's edit link or id (the part after /forms/d/). The link people fill in (/forms/d/e/…) does not work here.
- **Trigger on · Required**: Which changes start a run. Options: New response. Default: New response.

A later step can use its data, such as `{{trigger.answers}}`, `{{trigger.change_type}}`, `{{trigger.createTime}}` and 5 more. See [Use data from earlier steps](https://docs.gorunner.io/build/use-data-from-earlier-steps).

## Do things in Google Forms

Add a **Google Forms** step, choose a **Resource**, then an **Operation**. Choose a row to see its fields.

- [Response](https://docs.gorunner.io/apps/google-forms#fields-f-response): Get · Get Many
- [Form](https://docs.gorunner.io/apps/google-forms#fields-f-form): Create · Get · Update Title and Description · Publish Settings · Send Requests
- [Question](https://docs.gorunner.io/apps/google-forms#fields-f-question): Add · Delete

Later steps read a step’s output by its name: see [Use data from earlier steps](https://docs.gorunner.io/build/use-data-from-earlier-steps).

## Limits

- A reply from Google Forms can be up to 16 MB (a file download can have its own limit). A larger one fails the step; it is never cut short.
- When Google Forms says to slow down (429), the step waits as long as it asks, if the step’s time allows. Otherwise it fails and says when to try again.

Not in your list? See [When an app isn’t here](https://docs.gorunner.io/apps/when-an-app-isnt-here#q-not-in-list).

## For developers

In the API, which calls apps pieces, Google Forms is `pieceId: "googleforms"` with `actionId: "googleforms"`, set by `resource` and an `operation_…` field, such as `operation_form`. Its trigger is `googleformstrigger` / `googleforms_poll`. [Get an app](https://docs.gorunner.io/api/apps/get-app) returns every field.

It can change something outside the run (`writes_external`). See [How versions and side effects work](https://docs.gorunner.io/apps#q-versions).

### Google Forms › Response

### Get

- **Form · Required**: The form's edit link or id (the part after /forms/d/). The link people fill in (/forms/d/e/…) does not work here.
- **Response ID · Required**: The response's id (responseId).

### Get Many

- **Form · Required**: The form's edit link or id (the part after /forms/d/). The link people fill in (/forms/d/e/…) does not work here.
- **Submitted Since · Optional**: Only responses submitted (or last edited) at or after this time. Empty lists them all.
- **Return All · Optional**: Read every response, page by page (at most 5000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many responses to return (1–5000). Default: 50. Shows when **Return All** is off.

### Google Forms › Form

### Create

- **Title · Optional**: The title people see at the top of the form. Required to create one.
- **File Name · Optional**: The form's name in Google Drive. Empty uses the title. It cannot be changed through the API later.
- **Published · Optional**: Publish the new form so it takes responses. Off creates a draft only its editors see. On by default.

### Get

- **Form · Required**: The form's edit link or id (the part after /forms/d/). The link people fill in (/forms/d/e/…) does not work here.

### Update Title and Description

- **Form · Required**: The form's edit link or id (the part after /forms/d/). The link people fill in (/forms/d/e/…) does not work here.
- **Title · Optional**: The title people see at the top of the form. Required to create one.
- **Description · Optional**: The text under the title.

### Publish Settings

- **Form · Required**: The form's edit link or id (the part after /forms/d/). The link people fill in (/forms/d/e/…) does not work here.
- **Published · Optional**: Whether the form is published (people with the link can see it). On by default.
- **Accepting Responses · Optional**: Whether a published form takes new responses. Off keeps it visible but closed. On by default.

### Send Requests

- **Form · Required**: The form's edit link or id (the part after /forms/d/). The link people fill in (/forms/d/e/…) does not work here.
- **Requests · Required**: Forms API requests, applied together, such as [{"updateSettings": {"settings": {"quizSettings": {"isQuiz": true}}, "updateMask": "quizSettings.isQuiz"}}].
- **Only If Revision Is · Optional**: A revision id from Get: the change fails if the form was edited since.

### Google Forms › Question

### Add

- **Form · Required**: The form's edit link or id (the part after /forms/d/). The link people fill in (/forms/d/e/…) does not work here.
- **Question · Required**: The question as people read it.
- **Help Text · Optional**: A line under the question.
- **Type · Required**: What kind of answer it takes. Options: Short answer, Paragraph, Multiple choice, Checkboxes, Dropdown, Linear scale, Date, Date and time, Time, Duration. Default: Short answer.
- **From · Optional**: The scale's low end: 0 or 1. Default: 1. Shows when **Type** is **Linear scale**.
- **Options · Required**: The choices, one per line. Shows when **Type** is **Multiple choice**, **Checkboxes** or **Dropdown**.
- **To · Optional**: The scale's high end: 2 to 10. Default: 5. Shows when **Type** is **Linear scale**.
- **Low Label · Optional**: Shows when **Type** is **Linear scale**.
- **High Label · Optional**: Shows when **Type** is **Linear scale**.
- **Required · Optional**: People must answer it to submit. Off by default.
- **Position · Optional**: Where it goes: 1 is first. Empty adds it at the end.

### Delete

- **Form · Required**: The form's edit link or id (the part after /forms/d/). The link people fill in (/forms/d/e/…) does not work here.
- **Item ID · Required**: The question's item id (itemId in Get Form's items).

Source: https://docs.gorunner.io/apps/google-forms
