Reference > Nodes

Google Forms Trigger Node

Reference for the n8n Google Forms Trigger node -- configuration, response data structure, and common patterns.

ReferenceIntermediate4 min read

The Google Forms Trigger node starts a workflow when a new response is submitted to a Google Form. It polls the Google Forms API at regular intervals to detect new submissions.

Authentication

Google Forms Trigger requires Google OAuth2 credentials with access to Google Forms.

  1. In n8n, select the Google Forms OAuth2 API credential type.
  2. In the Google Cloud Console, create an OAuth2 client ID with the n8n redirect URI.
  3. Enable the Google Forms API and Google Drive API in the same project.
  4. Enter the Client ID and Client Secret in n8n and complete the OAuth connection.

Note

The Google Forms API is separate from the Google Sheets API. Even if your form writes responses to a sheet, this trigger reads directly from the Forms API, not from the linked sheet.

Configuration

Parameter Description
Form Select the Google Form to watch. The dropdown lists all forms accessible to the authenticated account. You can also enter a Form ID directly.
Poll Times How frequently n8n checks for new responses. Set using a cron expression or the simple interval selector. Default is every minute.

Tip

If immediate processing is not critical, set the poll interval to every 5 or 15 minutes to reduce API quota usage.

Response Data Structure

Each form submission arrives as a single n8n item. The data structure includes:

Field Type Description
responseId String Unique identifier for this submission
createTime String ISO 8601 timestamp of when the response was submitted
lastSubmittedTime String ISO 8601 timestamp of the last modification
answers Object Key-value map of question IDs to answer objects

The answers object is keyed by the internal question ID (a hex string like 6f2b3c1a), not the question text. Each answer object contains:

{
  "questionId": "6f2b3c1a",
  "textAnswers": {
    "answers": [
      { "value": "The submitted response text" }
    ]
  }
}

Warning: Question IDs are not human-readable

The raw output uses internal question IDs, not the question titles. You will almost always need a Code node or Set node after this trigger to rename the fields into meaningful keys. To find the mapping between question IDs and question text, run the trigger once and inspect the output data.

Common Patterns

Process form responses into a spreadsheet or database:

Google Forms Trigger --> Code (map fields) --> Google Sheets (Append Row)

The Code node extracts answer values from the nested structure and creates a flat object with readable field names:

const answers = $json.answers;
return {
  json: {
    name: answers['6f2b3c1a'].textAnswers.answers[0].value,
    email: answers['7d4e5f2b'].textAnswers.answers[0].value,
    feedback: answers['8a1c9d3e'].textAnswers.answers[0].value,
    submitted_at: $json.createTime
  }
};

Send a notification on each submission:

Google Forms Trigger --> Code (map fields) --> Slack (Send Message)

Transform the response data and post a formatted message to a Slack channel for each new submission.

Conditional processing by answer value:

Google Forms Trigger --> Code (map) --> Switch (route by answer) --> [different actions]

After mapping the fields, use a Switch or IF node to route submissions based on specific answer values (e.g., department selection, priority level).

Alternative: Google Sheets Trigger

If you only need the response data and your form is linked to a Google Sheet, you can use the Google Sheets Trigger node on the response sheet instead. This approach provides data with readable column names automatically (from the sheet headers), avoiding the question ID mapping step.

Approach Pros Cons
Google Forms Trigger Direct access to form metadata, does not require a linked sheet Question IDs require manual mapping
Google Sheets Trigger Readable column names, simpler data structure Requires a linked response sheet, slight delay

Tips and Gotchas

  • Polling, not real-time. This node polls on an interval. There will be a delay between submission and workflow execution equal to the poll interval.
  • Duplicate detection. The node tracks the last processed response ID. If n8n restarts between polls, it may reprocess recent submissions. Design downstream logic to handle duplicates (e.g., upsert instead of insert).
  • Multiple-choice and checkbox answers. These return multiple values in the textAnswers.answers array. Loop through the array or join values in a Code node.
  • File upload questions. File upload answers contain a file ID, not the file content. You would need a separate Google Drive node to download the file.
  • API quotas. The Google Forms API has usage limits. Polling too frequently across many forms may trigger quota errors. Group related questions into fewer forms where possible.

Common Errors

Google Forms API has not been used in project XXXXX before (403). The Google Forms API is not enabled in your Google Cloud Console project. Go to APIs & Services > Library, search for "Google Forms API", and enable it. Also enable the "Google Drive API" in the same project.

Trigger fires but output data uses internal question IDs instead of question text. This is expected behavior. The Google Forms API returns answers keyed by internal question IDs (hex strings), not the human-readable question titles. Add a Code node or Edit Fields node after the trigger to map question IDs to meaningful field names. Run the trigger once to see the actual IDs in the output.

Quota exceeded for quota metric error after running for some time. The Google Forms API has usage limits. If you are polling frequently across many forms, you may exceed your quota. Increase the poll interval (e.g., from every minute to every 5 or 15 minutes) or consolidate questions into fewer forms.

See Also

Want this running in your stack?

I build production n8n and Cloudflare automation for teams — the same engineering behind HarperFlow. Fixed-price, escrow-protected, US-based.