Guides

Send a Slack Message When a Google Form Is Submitted

Build a beginner-friendly n8n workflow that monitors Google Form responses via Google Sheets and posts real-time notifications to Slack.

GuideBeginner5 min read

Nodes used: Google Sheets Trigger, Slack


What you'll build

A workflow that watches a Google Form's response spreadsheet for new submissions and posts a formatted summary to a Slack channel within seconds. Every time someone fills out your form, your team gets an instant notification without anyone checking the responses spreadsheet.

Why this is useful

Google Forms is a common tool for collecting feedback, requests, and survey responses, but there is no built-in way to push those responses to Slack in real time. This workflow eliminates manual checking and ensures your team can act on submissions immediately.

How it works

Google Forms automatically writes every response to a linked Google Sheets spreadsheet. This workflow uses the Google Sheets Trigger node to detect new rows in that spreadsheet. When a new row appears (meaning someone submitted the form), the workflow reads the response data and sends it to Slack.

Prerequisites

  • An n8n instance (Cloud or self-hosted)
  • A Google account with at least one Google Form created
  • The Google Form must be linked to a response spreadsheet (this is the default -- Forms creates one automatically)
  • A Slack workspace where you have permission to post messages
  • Credentials configured in n8n for both Google (OAuth2) and Slack (OAuth2)

Tip: Set up credentials first

In n8n, go to Settings > Credentials and create your Google OAuth2 and Slack OAuth2 credentials before starting. The Google credential needs the Sheets and Drive scopes enabled.

Info: Check your form's response spreadsheet

Open your Google Form, click the Responses tab, then click the green Sheets icon to open (or create) the linked spreadsheet. Note the column headers -- they match your form's question titles and are the field names you'll use in expressions.


Steps

1. Create a new workflow

Open n8n and click Add workflow. Give it a descriptive name such as "Google Form to Slack Alert."

2. Add the Google Sheets Trigger node

Click Add first step and search for Google Sheets Trigger. Select it and configure the following:

  • Credential: Select your Google OAuth2 credential.
  • Document: Choose the response spreadsheet linked to your Google Form. It is usually named the same as your form (e.g., "Customer Feedback (Responses)").
  • Sheet: Select the sheet containing responses (typically "Form Responses 1").
  • Event: Select Row Added to trigger on new form submissions.

Info: How the trigger works

The Google Sheets Trigger uses polling to check for new rows at a regular interval. When you activate the workflow, n8n polls the spreadsheet and processes any new rows since the last check. Each new form submission adds a row, which triggers the workflow.

3. Add the Slack node

Click the + button on the Google Sheets Trigger output and search for Slack. Select it and configure:

  • Credential: Select your Slack OAuth2 credential.
  • Resource: Message
  • Operation: Send
  • Channel: Choose the target channel (e.g., #form-responses).

4. Compose the message with expressions

In the Message Text field, build a message using n8n expressions to pull in form data. Click the expression editor (the = icon) and enter something like:

New form submission received:

Name: {{ $json["Full Name"] }}
Email: {{ $json["Email Address"] }}
Feedback: {{ $json["Your Feedback"] }}

The field names in $json correspond to the column headers in your Google Sheets response spreadsheet, which are the question titles from your form.

Warning: Match your column headers exactly

The field names must match your spreadsheet column headers exactly, including spaces and capitalization. Click Test step on the trigger first to inspect the actual JSON output and see the exact field names available.

5. Connect the nodes

The nodes should already be connected from step 3. Verify that an arrow runs from Google Sheets Trigger to Slack. If not, drag a connection from the trigger's output to the Slack node's input.

6. Test the workflow

  1. Click Test workflow in the top bar.
  2. Open your Google Form in another tab and submit a test response.
  3. Wait for n8n to pick up the new row (this may take a moment during testing as the trigger polls at intervals).
  4. Check your Slack channel for the message.

Tip: Speed up testing

During testing, you can also add a row directly to the response spreadsheet instead of submitting the form. The trigger watches for any new row, regardless of how it was added.

7. Activate the workflow

Once the test succeeds, toggle the Active switch in the top-right corner to turn the workflow on. It will now run automatically in the background.

n8n Cloud

No additional configuration is needed. n8n Cloud handles polling infrastructure for you, and your workflow begins running on activation.

Self-hosted

Ensure your n8n instance is running continuously (e.g., via a process manager like PM2 or a Docker container with a restart policy). Polling triggers only work while the instance is up.


Test it

Submit two or three varied responses to your Google Form and confirm each one appears in Slack with the correct field values. If a message is missing or malformed, open the workflow's Executions tab to inspect the run data and identify which expression needs adjustment.


Take it further

  • Add conditional routing. Insert an IF node between the trigger and Slack to only notify on specific answers (e.g., "Urgent" priority).
  • Post to multiple channels. Duplicate the Slack node and point each copy at a different channel based on form responses.
  • Log to a database. Add a PostgreSQL or Airtable node in parallel to archive every submission alongside the Slack notification.
  • Format with Block Kit. Switch the Slack node to use Block Kit JSON for richer, more structured messages with sections, dividers, and buttons.
  • Add a timestamp. The response spreadsheet includes a "Timestamp" column automatically -- include {{ $json["Timestamp"] }} in your Slack message to show when the form was submitted.

Troubleshooting

Issue: The workflow never triggers after activation. The Google Sheets Trigger uses polling, so there is a delay equal to the poll interval. Confirm the trigger is configured to watch the correct spreadsheet and sheet tab. Also verify that your Google OAuth2 credential has the Sheets and Drive scopes enabled -- missing scopes cause silent failures.

Issue: Slack message shows undefined for field values. The field names in your expression must match the column headers in the response spreadsheet exactly, including spaces and capitalization. Open the trigger node output and inspect the JSON keys to find the correct field names. For example, {{ $json["Full Name"] }} will not work if the column header is "Full name" (lowercase "n").

Issue: Slack node fails with channel_not_found or not_in_channel. The Slack bot must be a member of the target channel. Invite it by typing /invite @YourBotName in the channel. Also confirm you are using the channel name (e.g., #form-responses) or the channel ID, not a display name.

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.