This workflow corresponds to n8n.io template #13403 — we link there as the canonical source.
This workflow follows the Gmail → Google Sheets recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "4L7TQtSkG0BmP2zn",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Route Typeform responses to Google Sheets, Slack, and Gmail based on answer value",
"tags": [
{
"id": "6PTppW1Ohw2kF9F8",
"name": "Reply Handler Template",
"createdAt": "2026-02-14T18:15:49.051Z",
"updatedAt": "2026-02-14T18:15:49.051Z"
}
],
"nodes": [
{
"id": "9d236ea2-6d18-4c1d-8df0-1f5a50635461",
"name": "Typeform Trigger",
"type": "n8n-nodes-base.typeformTrigger",
"position": [
768,
496
],
"parameters": {
"formId": "<__PLACEHOLDER_VALUE__Your Typeform form ID__>"
},
"typeVersion": 1
},
{
"id": "b9ccb293-d27d-42bd-9a0e-11bdcf4fbdac",
"name": "Set Response Fields",
"type": "n8n-nodes-base.set",
"position": [
992,
496
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "id-1",
"name": "name",
"type": "string",
"value": "={{ $json.What is your name? || $json.Name || '' }}"
},
{
"id": "id-2",
"name": "email",
"type": "string",
"value": "={{ $json.What is your email? || $json.Email || '' }}"
},
{
"id": "id-3",
"name": "interest",
"type": "string",
"value": "={{ $json.What are you interested in? || $json.Interest || '' }}"
},
{
"id": "id-4",
"name": "submitted_at",
"type": "string",
"value": "={{ $json.submittedAt || $now.toISO() }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "b6b5e22d-6c9b-4a63-98e5-a41865e5565e",
"name": "Log to Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
1216,
496
],
"parameters": {
"columns": {
"value": {
"name": "={{ $json.name }}",
"email": "={{ $json.email }}",
"interest": "={{ $json.interest }}",
"submitted_at": "={{ $json.submitted_at }}"
},
"mappingMode": "defineBelow"
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "name",
"value": "Responses"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "<__PLACEHOLDER_VALUE__Google Sheet ID for responses__>"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "d3dbf8a3-9577-4dff-9223-3f782025334e",
"name": "Send Confirmation Email",
"type": "n8n-nodes-base.gmail",
"position": [
1664,
688
],
"parameters": {
"sendTo": "={{ $json.email }}",
"message": "=Hi {{ $json.name }},\n\nThank you for your submission. Our team will review your request and get back to you within 24 hours.\n\nBest regards",
"options": {},
"subject": "Thanks for reaching out!"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "cf6aa911-2346-4e22-8a6a-af0170d27ea8",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
144,
112
],
"parameters": {
"color": 4,
"width": 580,
"height": 500,
"content": "## How it works\n\nThis workflow listens for new Typeform submissions via a webhook. When a response comes in, it extracts the key fields (name, email, interest), logs every submission to a Google Sheets spreadsheet, then routes the response based on what the person is interested in. Pricing inquiries go to your sales Slack channel, support questions go to the support channel, and all other submissions get a default fallback. Every respondent also receives a confirmation email via Gmail.\n\n## Setup steps\n\n1. Connect your Typeform account and set the form ID in the trigger node\n2. Adjust the field mappings in the Set Response Fields node to match your form's question labels\n3. Connect your Google Sheets account and set the spreadsheet ID for logging\n4. Create a sheet called \"Responses\" with columns: name, email, interest, submitted_at\n5. Connect your Slack workspace and set the channel IDs for sales and support\n6. Adjust the Switch node conditions to match your form's answer values\n7. Connect your Gmail account for sending confirmation emails\n8. Activate the workflow"
},
"typeVersion": 1
},
{
"id": "5db41d6a-cc41-4af7-ad65-f3097c58c297",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
768,
352
],
"parameters": {
"color": 7,
"width": 440,
"height": 96,
"content": "## Receive & Log\nTypeform webhook receives submissions, extracts fields, and logs them to Google Sheets."
},
"typeVersion": 1
},
{
"id": "f630f3cd-f9ed-4150-9160-88400ffbf1fb",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1312,
160
],
"parameters": {
"color": 7,
"width": 480,
"height": 96,
"content": "## Route & Notify\nRoutes responses to the right Slack channel based on interest and sends a confirmation email to every respondent."
},
"typeVersion": 1
},
{
"id": "e6b762a0-c9aa-4204-9f54-c025f90f3d81",
"name": "Route by Interest",
"type": "n8n-nodes-base.switch",
"position": [
1440,
480
],
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "or",
"conditions": [
{
"id": "cond-1",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $json.interest }}",
"rightValue": "pricing"
},
{
"id": "cond-2",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $json.interest }}",
"rightValue": "sales"
},
{
"id": "cond-3",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.interest }}",
"rightValue": "Pricing"
}
]
}
},
{
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "or",
"conditions": [
{
"id": "cond-4",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $json.interest }}",
"rightValue": "support"
},
{
"id": "cond-5",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $json.interest }}",
"rightValue": "help"
},
{
"id": "cond-6",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.interest }}",
"rightValue": "Support"
}
]
}
}
]
},
"options": {
"ignoreCase": true,
"fallbackOutput": "extra"
}
},
"typeVersion": 3.3
},
{
"id": "f731d94c-000c-4ba4-8248-935a9121741a",
"name": "Notify Sales Channel",
"type": "n8n-nodes-base.slack",
"position": [
1664,
496
],
"parameters": {
"text": "=New pricing inquiry from {{ $json.name }} ({{ $json.email }}). Interest: {{ $json.interest }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "<__PLACEHOLDER_VALUE__Sales Slack channel ID__>"
},
"otherOptions": {}
},
"typeVersion": 2.3
},
{
"id": "5895cc01-9106-46c9-84ee-f91e3fc68907",
"name": "Notify Support Channel",
"type": "n8n-nodes-base.slack",
"position": [
1664,
304
],
"parameters": {
"text": "=New support request from {{ $json.name }} ({{ $json.email }}). Interest: {{ $json.interest }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "<__PLACEHOLDER_VALUE__Support Slack channel ID__>"
},
"otherOptions": {}
},
"typeVersion": 2.3
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "893f4e6e-3281-45bf-8c87-a5809a6b0c3e",
"connections": {
"Typeform Trigger": {
"main": [
[
{
"node": "Set Response Fields",
"type": "main",
"index": 0
}
]
]
},
"Route by Interest": {
"main": [
[
{
"node": "Notify Sales Channel",
"type": "main",
"index": 0
}
],
[
{
"node": "Notify Support Channel",
"type": "main",
"index": 0
}
],
[
{
"node": "Send Confirmation Email",
"type": "main",
"index": 0
}
]
]
},
"Set Response Fields": {
"main": [
[
{
"node": "Log to Google Sheets",
"type": "main",
"index": 0
}
]
]
},
"Log to Google Sheets": {
"main": [
[
{
"node": "Route by Interest",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
gmailOAuth2googleSheetsOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
How it works Receives form submissions via a webhook endpoint. Extracts the name, email, and message from each submission. Logs every submission to a Google Sheets spreadsheet with a timestamp. Sends a confirmation email to the submitter via Gmail. Returns a JSON success…
Source: https://n8n.io/workflows/13403/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
This workflow automatically detects bounced or invalid email addresses from your Gmail inbox and updates their status in Google Sheets. It fetches bounce notifications, extracts failed email addresses
📘 Description
This workflow automates the tracking and follow-up process for pending payments. It pulls lead payment data from Google Sheets, checks whether the status is “Open,” and then routes actions accordingly
This workflow automatically detects when a new product is created in WooCommerce and instantly notifies internal teams through Slack and email. At the same time, it logs all product details into Googl
Transform your Google Form into an intelligent customer support system that automatically analyzes, prioritizes, and responds to every inquiry with AI-powered personalization.