Google Sheets + Slack: faster lead follow up
Your contact form works. The problem is what happens after. Leads land in an inbox, someone “will get to it,” and by the time you reply, the prospect already booked with someone else.
This lead follow up automation hits marketing managers first, but sales reps and small business owners feel it too. You get every inquiry logged in Google Sheets and a Slack alert sent immediately, so responding stays consistent even on busy days.
Below, you’ll see exactly how the workflow moves a new submission from form to spreadsheet to Slack, plus what you need to customize it for your team.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Google Sheets + Slack: faster lead follow up
flowchart LR
subgraph sg0["On form submission Flow"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/form.svg' width='40' height='40' /></div><br/>On form submission"]
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Send a message"]
n2@{ icon: "mdi:database", form: "rounded", label: "Append row in inquiry list", pos: "b", h: 48 }
n3@{ icon: "mdi:swap-vertical", form: "rounded", label: "Config", pos: "b", h: 48 }
n4["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>NewRecord"]
n7["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/form.svg' width='40' height='40' /></div><br/>Form ending"]
n3 --> n4
n4 --> n2
n1 --> n7
n0 --> n3
n2 --> n1
end
subgraph sg1["Flow 2"]
direction LR
n5["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>EmailContent"]
n6@{ icon: "mdi:message-outline", form: "rounded", label: "Send a email", pos: "b", h: 48 }
n8["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>ContactWebhook"]
n5 --> n6
n8 --> n5
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0 trigger
class n2 database
class n8 api
class n4,n5 code
classDef customIcon fill:none,stroke:none
class n0,n1,n4,n7,n5,n8 customIcon
The Problem: Lead follow-up happens too late
Most teams don’t lose leads because the form is broken. They lose them because follow-up is inconsistent. One inquiry gets a reply in 10 minutes, the next sits for half a day because it landed during a meeting, after hours, or in the wrong inbox. Then you’re chasing context: What did they ask? Who owns it? Did we respond already? It’s a messy mix of tabs, Slack pings, and “just checking if you saw this” messages that make you feel busy without actually moving revenue.
The friction compounds. Here’s where it breaks down in real life.
- Leads arrive in email, but nobody sees them fast enough when the inbox gets noisy.
- Copy-pasting form fields into a spreadsheet takes a few minutes each time, and the errors are easy to miss.
- Ownership is unclear, so two people reply (or worse, nobody does).
- Without a clean log in Google Sheets, reporting turns into a weekly scavenger hunt.
The Solution: Capture, log, and alert the moment a lead arrives
This workflow starts the second a contact form submission comes in. n8n maps the submitted fields (name, email, company, message, and any custom questions), composes a clean record, and appends it to a Google Sheet that becomes your single source of truth. Then it pushes an instant Slack notification to the right channel so someone can take action right away. In many teams, that’s the difference between “We’ll follow up tomorrow” and “We replied while they were still on the site.”
The flow is simple on purpose. A form trigger kicks things off, the data is cleaned and formatted in the middle, then Google Sheets stores the log while Slack handles speed. If you also use the included webhook and Gmail pieces, you can route replies and prepare email data so follow-up stays consistent, not improvised.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you get 15 contact form leads a week. Manually, a common routine is: open the email (1 minute), copy fields into a sheet (4 minutes), then write a Slack message with context (2 minutes). That’s about 7 minutes per lead, or close to 2 hours weekly. With this workflow, you submit nothing manually: the form triggers the automation instantly, Google Sheets is updated in seconds, and Slack gets the alert right away. You’re basically down to the time it takes to respond.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets for your lead log and tracking.
- Slack to notify the right channel immediately.
- Gmail to send follow-up emails (optional path).
- Slack App credentials (create in your Slack API console).
- Webhook basic auth (set inside the ContactWebhook node).
Skill level: Beginner. You’ll connect accounts, paste a webhook URL, and edit a message template.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A contact form submission triggers the workflow. As soon as the form is submitted, n8n receives the fields from the Form Submission Trigger and passes them into a mapping step.
The lead data is cleaned and organized. A “Map Contact Fields” step standardizes the inputs, then the workflow composes a record so your spreadsheet rows stay consistent even if the form changes later.
Google Sheets becomes the system of record. The workflow appends the lead into your chosen sheet, so every inquiry is stored in one place for tracking, filtering, and assignment.
Slack alerts your team instantly. After the sheet entry is created, a Slack message posts the key details so someone can reply fast, assign it, or ask a clarifying question in the thread.
You can easily modify the Slack message content to match your intake questions and routing needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Form Trigger
Set up the intake form that starts the workflow and captures contact details.
- Add the Form Submission Trigger node and set Form Title to
Inquiry Form. - Set Form Description to
Thanks for visiting! You can contact me here.. - Under Form Fields, add fields for Name (required), Email address (required), and Meesage as a textarea with placeholder
request for me. - Connect Form Submission Trigger to Map Contact Fields.
Meesage (spelled as shown), because downstream expressions reference $json.Meesage.Step 2: Connect Google Sheets
Store incoming submissions in a Google Sheet for tracking and follow-up.
- Add the Append Sheet Entry node and connect it to Compose Record.
- Credential Required: Connect your googleSheetsOAuth2Api credentials.
- Set Operation to
append. - Set Document to
[YOUR_ID]and Sheet Name togid=0. - Leave Columns in
autoMapInputDatamode with columns includingEmail address,Meesage,submittedAt, andformMode.
[YOUR_ID] with your actual Google Sheet ID or the append will fail.Step 3: Set Up Processing Nodes
Transform the form payload into structured data used by downstream actions.
- In Map Contact Fields, add these assignments:
name ={{ $json['Name'] }}, emailAddress ={{ $json['Email address'] }}, message ={{ $json.Meesage }}. - Set slackMessage to
:envelope: New Inquiry Received ``` Name: {{ $json['Name'] }} Email address: {{ $json['Email address'] }} Message: {{ $json.Meesage }} ```. - Set contactWebhookUrl to
https://[YOUR_ID].n8n.cloud/webhook/[YOUR_ID]. - In Compose Record, keep the JavaScript as provided to output
name,emailAddress, andmessage. - Connect Map Contact Fields → Compose Record → Append Sheet Entry.
[YOUR_ID] in contactWebhookUrl to your real n8n domain and webhook path.Step 4: Configure Output Actions
Send Slack alerts, email replies, and a completion screen based on the execution flow.
- In Post Slack Alert, set Message Type to
blockand paste the existing Blocks JSON with expressions like{{ $('Map Contact Fields').item.json.slackMessage.replaceAll('\n', '\\n') }}. - Credential Required: Connect your slackApi credentials and set Channel to the correct channel ID (replace
Please change here). - Connect Append Sheet Entry → Post Slack Alert → Form Completion Screen.
- In Form Completion Screen, set Completion Title to
Thank you for contacting us.and Completion Message toWe have received your message and will get back to you shortly.. - In Incoming Contact Webhook, set Path to
0b9182aa-4014-4044-a9c2-3c993e69d643and Authentication tobasicAuth. - Credential Required: Connect your httpBasicAuth credentials for Incoming Contact Webhook.
- In Prepare Email Data, keep the JavaScript that extracts
nameandemailAddressfromraw.query, and connect Incoming Contact Webhook → Prepare Email Data → Dispatch Email Reply. - In Dispatch Email Reply, set Send To to
{{ $json.emailAddress }}, Subject toWe received your message, and Message to the provided text template. - Credential Required: Connect your gmailOAuth2 credentials.
Step 5: Test and Activate Your Workflow
Verify that each path works end-to-end before enabling the automation.
- Use Form Submission Trigger’s test URL to submit a sample inquiry and confirm data flows to Append Sheet Entry and a Slack message posts in Post Slack Alert.
- Click the Slack Contact button and verify that Incoming Contact Webhook receives the request and Dispatch Email Reply sends an email.
- Check the Google Sheet to confirm a new row is appended with the correct fields.
- When everything works, toggle the workflow to Active for production use.
Common Gotchas
- Slack credentials can expire or the app may lack permission to post in a private channel. If things break, check your Slack App scopes and the n8n Slack credential first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Google Sheets often fails quietly when the target sheet/tab name changes. Confirm the spreadsheet ID and worksheet name in the “Append Sheet Entry” node before debugging anything else.
Frequently Asked Questions
About 30 minutes if your Slack and Google credentials are ready.
No. You’ll mainly connect accounts and edit a few text fields for your Slack message and sheet columns.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in any optional AI Agent usage costs if you enable it.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and it’s a common tweak. Update the Slack node to post to the channel you want, then adjust the message template in the Config step so it includes the fields your team actually uses (lead source, budget, timeframe, and so on). Many teams also add an “owner” column in Google Sheets and route high-intent leads to a separate Slack channel.
Usually it’s permissions or an expired token. Check your Slack App scopes (posting to channels, chat:write) and confirm the app is installed in the workspace. If you’re posting to a private channel, make sure the app was invited to that channel. Also verify the n8n credential selected inside the “Post Slack Alert” node is the one you updated.
On n8n Cloud Starter, you can handle a few thousand workflow executions per month, which is plenty for most small teams. If you self-host, there’s no fixed execution cap, so capacity mainly depends on your server and how many other automations are running. This workflow is lightweight since it’s mostly Google Sheets and Slack calls, so it typically keeps up with normal contact-form volume easily.
Sometimes. If all you need is “form to Sheets to Slack,” Zapier or Make can be quicker to click together. n8n becomes the better fit when you want logic branching (for example, VIP leads go to a different channel), richer formatting, or an optional Gmail reply path without paying more every time you add complexity. Self-hosting is also a real advantage if your volume grows and you don’t want per-task pricing. If you’re on the fence, Talk to an automation expert and you’ll get a straight recommendation for your setup.
This is the kind of workflow you set up once and then stop thinking about. Your leads get logged, your team gets notified, and follow-up becomes a habit instead of a scramble.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.