# Typeform

Read and delete Typeform responses, create and change forms, and manage workspaces and images.

## Connect Typeform

1. In the sidebar, open **Connections** and press **Add connection**.
2. Type `typeform` and choose **Typeform**.
3. Choose **Sign in with Typeform**.
4. Press **Sign in with Typeform** at the bottom of the sheet, then choose your account in Typeform’s window and allow access.

Or choose **Paste your personal access token**, paste it, and press **Test and save**. It stays until someone deletes it.

Sign in with Typeform, or paste a personal access token (Typeform → your avatar → Your settings → Personal tokens → Generate a new token; give it the scopes the steps need). Accounts whose responses are kept in the EU data center set Region.

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

Signing in with Typeform needs a Typeform app on this installation, and it has none yet. Until it is set up, **Paste your personal access token** works without it.

**On Cloud:** The sheet says “It’s set up once for everyone who uses this service, not by an organization.”

**Self-hosted:** An admin of the installation sees **Set up Typeform sign-in** instead, and sets it up once for everyone. Everyone else sees who to ask.

1. Create an app in Typeform’s developer settings ([Typeform’s guide](https://www.typeform.com/developers/get-started/personal-access-token/)).
2. In GoRunner, copy the **Redirect address to add in Typeform’s developer settings**, and add it to the app.
3. Paste the **Client ID** and **Client secret**, then press **Save and sign in**.

[Set up a sign-in app](https://docs.gorunner.io/self-host/oauth-apps#other-providers)

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

Yes. In the sheet, open **Use your own Typeform app** and paste its **Client ID** and **Client secret**. Add the redirect address it shows 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 **Typeform**. The trigger uses the same connection as the steps.

### On New Response

Starts a run as soon as someone submits the form. Publishing the workflow adds a webhook to the form in Typeform (with a signing secret kept encrypted); unpublishing removes it. Every delivery's Typeform-Signature is checked and an unsigned or wrongly signed one is refused; a delivery Typeform sends again (the same event_id) starts no second run. The sign-in or token needs the webhooks scopes.

- **Form · Required**: The form whose responses start a run.

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

### On New Response (checked every minute)

Checks the form about once a minute and starts a run for each completed response since the check before, oldest first (at most 100 a minute; the rest follow). Use it where a webhook cannot be added to the form; the webhook trigger is faster. Typeform lists a response up to about 30 minutes after it is submitted, so a run can start that late. The first check after publishing only takes note of what is there (it starts nothing); changing the trigger starts over the same way.

- **Form · Required**: The form to watch.

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

## Do things in Typeform

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

- [Response](https://docs.gorunner.io/apps/typeform#fields-f-response): Get Many · Delete
- [Form](https://docs.gorunner.io/apps/typeform#fields-f-form): Create · Get · Get Many · Update · Delete
- [Workspace](https://docs.gorunner.io/apps/typeform#fields-f-workspace): Create · Get · Get Many · Rename · Delete
- [Image](https://docs.gorunner.io/apps/typeform#fields-f-image): Upload · Get · Get Many · Delete
- [Account](https://docs.gorunner.io/apps/typeform#fields-f-user): Get Me

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 Typeform 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 Typeform 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, Typeform is `pieceId: "typeform"` with `actionId: "typeform"`, set by `resource` and an `operation_…` field, such as `operation_form`. Its trigger is `typeformtrigger` / `typeform_response`, `typeformtrigger` / `typeform_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).

### Typeform › Response

### Get Many

- **Form · Required**: The form whose responses to read or delete.
- **Responses · Optional**: Completed (submitted) responses, partial ones (answered part of the form), or both. Options: Completed, Partial, Completed and partial. Default: Completed.
- **Since · Optional**: Only responses submitted at or after this time (ISO 8601, UTC).
- **Until · Optional**: Only responses submitted at or before this time (ISO 8601, UTC).
- **Search Text · Optional**: Only responses whose answers, hidden fields or variables contain this exact phrase.
- **Simplify Answers · Optional**: Add the answers as plain values by question title (values). Reads the form once more to know the titles. On by default.
- **Return All · Optional**: Read every response, page by page (at most 2000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many responses to return (1–2000). Default: 50. Shows when **Return All** is off.

### Delete

- **Form · Required**: The form whose responses to read or delete.
- **Response IDs · Required**: The ids (tokens) of the responses to delete, separated by commas; at most 1,000. Typeform deletes them shortly after it accepts the request.

### Typeform › Form

### Create

- **Title · Required**: The form's title.
- **Workspace · Optional**: The workspace the form goes in (Create), or moves to (Update). Empty: the account's default workspace (Create), or where it is (Update).
- **Form Definition · Optional**: The rest of the form as Typeform's Create API takes it, such as {"fields": [{"title": "Your email", "type": "email", "validations": {"required": true}}], "settings": {"language": "en"}}. Title and Workspace above win over the same keys here.

### Get and Delete

- **Form · Required**: The form to read, change or delete.

### Get Many

- **Search Text · Optional**: Only forms whose title contains this text.
- **Workspace · Optional**: Only forms in this workspace. Empty lists every form.
- **Order · Optional**: How to order the forms. Options: Typeform's order, Created, newest first, Created, oldest first, Last changed, newest first, Last changed, oldest first. Default: Typeform's order.
- **Return All · Optional**: Read every form, page by page (at most 2000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many forms to return (1–2000). Default: 50. Shows when **Return All** is off.

### Update

- **Form · Required**: The form to read, change or delete.
- **New Title · Optional**: A new title. Empty leaves it as it is.
- **Workspace · Optional**: The workspace the form goes in (Create), or moves to (Update). Empty: the account's default workspace (Create), or where it is (Update).
- **Accepting Responses · Optional**: Whether the form is public (takes responses). Unchanged leaves it as it is. Options: Unchanged, Yes, public, No, closed. Default: Unchanged.

### Typeform › Workspace

### Create

- **Name · Required**: The workspace's name.

### Get and Delete

- **Workspace · Required**: The workspace to read, rename or delete.

### Get Many

- **Search Text · Optional**: Only workspaces whose name contains this text.
- **Return All · Optional**: Read every workspace, page by page (at most 2000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many workspaces to return (1–2000). Default: 50. Shows when **Return All** is off.

### Rename

- **Workspace · Required**: The workspace to read, rename or delete.
- **Name · Required**: The workspace's name.

### Typeform › Image

### Upload

- **File Name · Required**: The image's file name in Typeform.
- **Image URL · Optional**: A public link Typeform fetches the image from. Set this or Image Data.
- **Image Data · Optional**: The image as base64 (no data: prefix), such as a file from an earlier step. Set this or Image URL.

### Get and Delete

- **Image ID · Required**: The image's id (Get Many lists them).

### Get Many

- **Return All · Optional**: Read every image, page by page (at most 2000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many images to return (1–2000). Default: 50. Shows when **Return All** is off.

### Typeform › Account

### Get Me

Nothing to fill in.

Source: https://docs.gorunner.io/apps/typeform
