> For the complete documentation index, see [llms.txt](https://docs.coupler.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.coupler.io/sources/category/surveys/google-forms.md).

# Google Forms

Export Google Forms survey responses and structure into Google Sheets, BigQuery, or databases with Coupler.io automation.

Google Forms is a free survey and form builder from Google that lets you collect responses, run quizzes, and gather feedback. With Coupler.io, you can pull your form structure and all response data into spreadsheets, databases, or BI tools — automatically and on a schedule.

## Why connect Google Forms to Coupler.io?

* **Centralize response data** — export submissions from one or many forms into a single destination without manual downloads
* **Automate reporting** — keep your dashboards and sheets refreshed with the latest responses without any copy-paste work
* **Combine data from multiple forms** — use Append to merge responses from different forms into one unified dataset
* **Analyze with AI** — send your response data straight to ChatGPT, Claude, Gemini, or other AI destinations for instant summarization and analysis

## Prerequisites

* A Google account with access to the forms you want to export
* The Form IDs for each form you want to connect (see the tip below on where to find these)
* Editor or Owner access on the forms — Viewer access is sufficient for reading responses

{% hint style="success" %}
Your Form ID is in the form's URL. For a URL like `https://docs.google.com/forms/d/1A2B3C4D5E/edit`, the ID is `1A2B3C4D5E` — the string between `/d/` and `/edit`.
{% endhint %}

## Quick start

{% hint style="success" %}
Start with the **Form responses** entity if your goal is to analyze submissions. Add the **Forms** entity to the same data flow if you also want question text and form structure for reference.
{% endhint %}

{% stepper %}
{% step %}
**Connect your Google account.** In Coupler.io, create a new data flow and select Google Forms as the source. Click **Connect** and sign in with the Google account that has access to your forms. Grant the requested permissions.
{% endstep %}

{% step %}
**Enter your Form IDs.** In the **Form IDs** field, paste the ID of each form you want to export — one ID per line. You can add multiple forms in a single source.
{% endstep %}

{% step %}
**Choose an entity.** Select either **Forms** (for form metadata and question structure) or **Form responses** (for individual submissions). To export both, add a second source to the same data flow.
{% endstep %}

{% step %}
**Choose a destination.** Pick where you want your data to go — Google Sheets, Excel, BigQuery, Looker Studio, or an AI destination like ChatGPT or Claude.
{% endstep %}

{% step %}
**Run the data flow.** Click **Run** to execute your first manual sync and confirm everything is working correctly.
{% endstep %}
{% endstepper %}

## Entities overview

| Entity             | Description                                                                       |
| ------------------ | --------------------------------------------------------------------------------- |
| **Forms**          | Form metadata including title, description, questions, and configuration settings |
| **Form responses** | Individual response submissions with answers and response metadata                |

## Google Forms data overview

Coupler.io pulls two types of data from Google Forms: the structure of the form itself and the responses submitted by respondents. Together, these give you a complete picture of both what you asked and what people answered.

## Entities

| Entity             | What it contains                                                                                |
| ------------------ | ----------------------------------------------------------------------------------------------- |
| **Forms**          | Form title, description, question text, question types, answer options, and form-level settings |
| **Form responses** | One row per submission — respondent ID, submission timestamp, and answers to each question      |

## Available fields

#### Forms fields

| Field              | Description                                                                   |
| ------------------ | ----------------------------------------------------------------------------- |
| `form_id`          | Unique identifier for the form                                                |
| `title`            | The title of the form                                                         |
| `description`      | The description shown to respondents                                          |
| `document_title`   | The document title (may differ from the visible form title)                   |
| `is_quiz`          | Whether the form is set up as a quiz                                          |
| `item_id`          | Unique ID for each question or item                                           |
| `item_title`       | The question text                                                             |
| `item_description` | Optional helper text shown under the question                                 |
| `item_type`        | Question type (e.g., multiple choice, short answer, checkboxes, linear scale) |
| `required`         | Whether the question is marked as required                                    |
| `options`          | Available answer choices (for multiple choice and checkbox questions)         |

#### Form responses fields

| Field                 | Description                                                                  |
| --------------------- | ---------------------------------------------------------------------------- |
| `response_id`         | Unique identifier for each submission                                        |
| `form_id`             | The form this response belongs to                                            |
| `create_time`         | Timestamp when the response was submitted                                    |
| `last_submitted_time` | Timestamp of the most recent edit to the response                            |
| `respondent_email`    | Email address of the respondent (only available if the form collects emails) |
| `item_id`             | The question this answer belongs to                                          |
| `item_title`          | The question text at time of submission                                      |
| `answer_value`        | The respondent's answer                                                      |
| `score`               | Score awarded (quiz forms only)                                              |

## Common field combinations

* **Response analysis**: `response_id` + `create_time` + `item_title` + `answer_value` — the core dataset for analyzing what respondents said
* **Response volume tracking**: `form_id` + `create_time` — count submissions over time to track response rates
* **Quiz scoring**: `response_id` + `respondent_email` + `score` — identify how individuals performed
* **Answer distribution**: `item_title` + `answer_value` — group and count answers to see which options are most popular

## Use cases by role

{% tabs %}
{% tab title="Marketers" %}

* Export lead generation form responses into Google Sheets or BigQuery for CRM enrichment
* Track submission volume over time to measure campaign performance
* Merge responses from multiple campaign forms using the **Append** transformation in Coupler.io
* Send open-text feedback to ChatGPT or Claude for sentiment analysis and theme extraction
  {% endtab %}

{% tab title="HR & Operations" %}

* Collect employee survey responses and refresh dashboards in Looker Studio automatically
* Use the **Forms** entity to audit question structure across multiple internal forms
* Join form responses with HR data in BigQuery for deeper workforce analysis
* Export onboarding or feedback forms to Excel for stakeholder reporting
  {% endtab %}

{% tab title="Researchers & Educators" %}

* Pull quiz responses with scores into Google Sheets for grade tracking
* Use the **Aggregate** transformation to calculate average scores or answer frequency
* Export raw responses to a CSV-friendly destination for statistical analysis
* Send open-ended responses to Gemini or Perplexity for qualitative summarization
  {% endtab %}
  {% endtabs %}

## Platform-specific notes

* Google Forms does not provide real-time webhooks — Coupler.io polls the API on your chosen schedule
* The `respondent_email` field is only populated if the form has **Collect email addresses** enabled in settings
* If you edit a question after responses have been collected, the `item_title` in older responses may differ from the current question text
* File upload question types return a Google Drive file URL, not the file itself
* For forms with many questions, each question appears as a separate row in the **Forms** entity — use the **Form responses** entity for a respondent-per-row view
* The API returns a maximum of 5,000 responses per request; Coupler.io handles pagination automatically

## Google Forms common issues

### Connection issues

<details>

<summary>I can't connect my Google account</summary>

Make sure you're signing in with the Google account that owns or has access to the forms you want to export. If you manage multiple Google accounts, double-check that the browser session is using the right one before authorizing. You can revoke and reconnect the integration from your Google account's security settings under **Third-party apps with account access**.

</details>

<details>

<summary>Authorization was successful but no forms are loading</summary>

This usually means the authorized account doesn't have access to the Form IDs you entered. Confirm that the account you connected is either the Owner or has Editor access to those forms. Shared forms from a different Google Workspace domain may also require explicit sharing before they appear.

</details>

### Missing data

<details>

<summary>Some responses are missing from the export</summary>

Check whether the missing responses were submitted before or after you set up the data flow. Coupler.io pulls all available responses each time it runs, so responses submitted before the first run should still appear. If responses are still missing, verify that the form hasn't been moved to trash or had its sharing settings changed.

</details>

<details>

<summary>The respondent_email column is empty</summary>

This field is only populated when the form has **Collect email addresses** enabled. Open the form in Google Forms, go to **Settings → Responses**, and check whether email collection is turned on. Responses submitted before this setting was enabled will not have an email address retroactively.

</details>

<details>

<summary>File upload answers are showing as links, not files</summary>

This is expected behavior. The Google Forms API returns a Google Drive URL for file upload responses, not the file content itself. You'll need to open the link to access the uploaded file.

</details>

### Permission errors

<details>

<summary>I get a "403 Forbidden" or "Access denied" error</summary>

The connected Google account doesn't have sufficient access to the form. You need at least Viewer access to read responses, but Owner or Editor access is recommended. Ask the form owner to share the form with your account and then re-run the data flow.

</details>

<details>

<summary>The data flow runs but returns no rows for a specific Form ID</summary>

Double-check that the Form ID is correct — it should be the string in the form URL between `/d/` and the next `/`. A common mistake is copying the full URL or including extra characters. Also confirm the form has at least one response before expecting rows in the Form responses entity.

</details>

### Data discrepancies

<details>

<summary>Question text in the export doesn't match what's in the form</summary>

If you edited a question after responses were already collected, the `item_title` field in earlier responses reflects the question text at the time of submission, not the current text. The **Forms** entity always shows the current question text. This is a Google Forms API behavior and cannot be changed.

</details>

### Rate limits

<details>

<summary>The data flow fails with a rate limit or quota error</summary>

Google Forms API has per-minute and per-day quotas. If you're syncing a large number of forms or have very frequent schedules across multiple data flows, you may hit these limits. Try reducing the number of forms per data flow, or space out your sync schedules to avoid simultaneous runs.

</details>

## Google Forms FAQ

<details>

<summary>How do I find my Google Form ID?</summary>

Open your form in Google Forms. Look at the URL in your browser — it will look something like `https://docs.google.com/forms/d/1A2B3C4D5E6F/edit`. The Form ID is the long string between `/d/` and the next `/`. Copy just that part and paste it into the Form IDs field in Coupler.io.

</details>

<details>

<summary>Can I pull responses from multiple forms at once?</summary>

Yes. In the Form IDs field, enter each Form ID on a separate line. Coupler.io will pull data from all of them. If you want the responses combined into a single table, use the **Append** transformation. If you want them in separate tables, set up separate sources or data flows.

</details>

<details>

<summary>Will I get all historical responses or only new ones?</summary>

Coupler.io pulls all available responses from the form each time the data flow runs — not just new ones since the last sync. This means your destination always reflects the complete response dataset, not an incremental update.

</details>

<details>

<summary>Can I export responses from a form I don't own?</summary>

Yes, as long as the form has been shared with the Google account you connected to Coupler.io. You need at least Viewer access on the form. If you don't see responses, ask the form owner to verify your sharing permissions.

</details>

<details>

<summary>What happens if I add new questions to a form after setting up the data flow?</summary>

New questions will appear as additional columns or rows in your next sync. The structure of the Forms entity updates automatically. For Form responses, older submissions won't have answers for the new questions — those fields will be empty for pre-existing responses.

</details>

<details>

<summary>Can I analyze open-ended responses automatically?</summary>

Yes. Route your Form responses entity to an AI destination — ChatGPT, Claude, Gemini, Perplexity, or others supported by Coupler.io. These can summarize themes, classify sentiment, or extract key points from free-text answers at scale.

</details>

<details>

<summary>Does Coupler.io support Google Forms quiz scoring?</summary>

Yes. If your form is set up as a quiz, the Form responses entity includes a `score` field with the points awarded per response. You can use this to track scores in Google Sheets or aggregate results in BigQuery.

</details>

{% hint style="info" %}
For a full list of available fields and what each one contains, see the [Data Overview](#google-forms-data-overview) article. For connection errors or missing data, check [Common Issues](#google-forms-common-issues).
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.coupler.io/sources/category/surveys/google-forms.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
