Slack + Google Sheets for smarter lead scoring
Leads come in fast, then everything slows down. Someone has to clean the form fields, sanity-check the email, research the company, and decide if Sales should even touch it.
This Slack lead scoring automation hits marketing ops first, but SDRs and agency teams feel it too. You’ll qualify inbound leads consistently, surface the hot ones in Slack, and keep a clean record in Google Sheets without the “who’s working this?” chaos.
Below is the exact workflow logic, what it produces, and how to adapt it to your lead sources and sales process.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Slack + Google Sheets for smarter lead scoring
flowchart LR
subgraph sg0["Lead Capture Form 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/>Lead Capture Form"]
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/webhook.dark.svg' width='40' height='40' /></div><br/>Send Form Response"]
n2@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Business Email?", pos: "b", h: 48 }
n3["<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/>Extract LinkedIn URL"]
n4@{ icon: "mdi:swap-horizontal", form: "rounded", label: "LinkedIn URL Found?", pos: "b", h: 48 }
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/>Merge LinkedIn Data"]
n6["<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/>Skip Enrichment (Fallback)"]
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/slack.svg' width='40' height='40' /></div><br/>Slack Cold Lead Log"]
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/code.svg' width='40' height='40' /></div><br/>Normalize Lead Data1"]
n9@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Valid Lead?1", pos: "b", h: 48 }
n10@{ icon: "mdi:robot", form: "rounded", label: "AI Lead Qualification1", pos: "b", h: 48 }
n11["<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/>Build Qualified Lead Profile1"]
n12@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Hot Lead?1", pos: "b", h: 48 }
n13["<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/>Slack Hot Lead Alert1"]
n14@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Warm Lead?1", pos: "b", h: 48 }
n15@{ icon: "mdi:robot", form: "rounded", label: "AI Generate Personalized Ema..", pos: "b", h: 48 }
n16["<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/hubspot.svg' width='40' height='40' /></div><br/>Create HubSpot Contact1"]
n17["<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/>Slack Warm Lead Notification1"]
n18@{ icon: "mdi:database", form: "rounded", label: "Log to Google Sheets1", pos: "b", h: 48 }
n19["<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/httprequest.dark.svg' width='40' height='40' /></div><br/>Google Search (Find LinkedIn.."]
n20["<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/httprequest.dark.svg' width='40' height='40' /></div><br/>LinkedIn Company Scraper"]
n21@{ icon: "mdi:message-outline", form: "rounded", label: "Send Personalized Email", pos: "b", h: 48 }
n22@{ icon: "mdi:location-exit", form: "rounded", label: "Handle Invalid Lead", pos: "b", h: 48 }
n12 --> n13
n12 --> n15
n12 --> n14
n14 --> n17
n14 --> n7
n9 --> n2
n9 --> n22
n2 --> n19
n2 --> n6
n0 --> n1
n0 --> n8
n4 --> n20
n4 --> n6
n5 --> n10
n3 --> n4
n8 --> n9
n13 --> n16
n10 --> n11
n20 --> n5
n6 --> n10
n11 --> n12
n11 --> n18
n15 --> n21
n19 --> n3
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 n10,n15 ai
class n2,n4,n9,n12,n14 decision
class n18 database
class n1,n19,n20 api
class n3,n5,n6,n8,n11 code
classDef customIcon fill:none,stroke:none
class n0,n1,n3,n5,n6,n7,n8,n11,n13,n16,n17,n19,n20 customIcon
The Problem: Lead qualification is slow and inconsistent
Manual lead qualification sounds simple until you do it every day. You get half-complete form submissions, messy field names from different campaigns, and email addresses that look valid but go nowhere. Then comes the “research” part: find the company, open LinkedIn, guess their size, skim the description, and try to decide if this is a buyer or a time sink. Meanwhile, hot prospects wait. And if your team is busy, they go cold before you even send a first reply.
It adds up fast. Here’s where it usually breaks down.
- Every inbound lead triggers a mini research project, and the cost is hours per week.
- Scoring changes depending on who’s on shift, so “hot” leads get missed.
- Personal emails (Gmail, Yahoo) sneak in, then someone wastes time enriching data that won’t enrich well.
- Follow-up happens in random places, which means next steps are unclear and deals slip.
The Solution: AI-powered enrichment, scoring, and routing
This workflow captures a lead the moment they submit your form, cleans up the data, and rejects obvious junk before it touches your pipeline. If the email looks like a real business address, it automatically searches for the company’s LinkedIn presence and pulls key firmographic details (industry, size, description, specialties). Then an AI model scores the lead from 0 to 100 using the lead plus enriched company context, assigns a tier (Hot, Warm, Cold, or Disqualified), and generates practical notes like buyer persona, talking points, and risk factors. Finally, it routes the result where your team actually works: hot leads alert Slack immediately, warm leads get a different Slack message for nurture, and everything is logged to Google Sheets for reporting and follow-through.
The workflow starts with an embeddable n8n form submission. From there, it standardizes the fields, enriches company data via LinkedIn when it makes sense, and runs AI lead scoring plus outreach drafting. Slack becomes your real-time triage queue, while Google Sheets stays the system of record.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you get 30 inbound leads a week from ads and a webinar. If someone spends about 10 minutes validating details, 10 minutes finding LinkedIn, and 5 minutes writing a quick follow-up note, that’s roughly 25 minutes per lead (around 12 hours weekly). With this workflow, the “human time” becomes closer to 1–2 minutes per lead to glance at the Slack summary and act, while enrichment and scoring run in the background. That’s basically a full workday back every week.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets to log every lead and score.
- Slack for instant Hot/Warm/Cold routing alerts.
- OpenAI API key (get it from your OpenAI dashboard).
Skill level: Intermediate. You’ll connect a few accounts, paste API keys, and tweak prompts and thresholds to match your ICP.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A lead submits your form. The workflow starts with the n8n form trigger and immediately returns a confirmation, so the user isn’t left hanging.
The lead data gets cleaned and checked. It standardizes field names, validates the record, and stops early if something is clearly invalid. Less junk flows downstream, which matters when you start enriching and using AI.
LinkedIn enrichment happens when it’s worth it. A business email passes through a check, then the workflow uses Apify-powered search to locate the company’s LinkedIn listing and fetch company details. If the lead uses a personal email, it takes a bypass path and still scores the lead with what you have.
AI scores and routes the lead. OpenAI generates a 0–100 score, a tier, and practical insights. Hot leads trigger a Slack alert plus an AI-drafted outreach email and optional CRM creation, warm leads get a different Slack message, and all leads are appended to Google Sheets.
You can easily modify the scoring thresholds to match your market (or change what “Hot” means) based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Form Trigger
Set up the public consultation form that starts the workflow and returns an immediate confirmation message.
- Add the Consultation Form Trigger node and set Path to
lead-capture-form. - Set Form Title to
Get a Free Consultationand Form Description toTell us about your project and we'll get back to you within 24 hours.. - Confirm Response Mode is
responseNodeso the form can send a custom acknowledgement. - Configure Return Form Acknowledgement to respond with Respond With set to
textand Response Body set toThanks for your submission! We'll be in touch soon.. - Connect the trigger so Consultation Form Trigger outputs to both Return Form Acknowledgement and Standardize Lead Info in parallel.
Step 2: Set Up Lead Normalization & Validation
Normalize incoming form data and enforce validation rules before enrichment and scoring.
- In Standardize Lead Info, keep the provided JavaScript to normalize and validate email, name, and company fields.
- Configure Validate Lead Record to evaluate isValid with the expression
{{ $json.isValid }}equalstrue. - Set Stop Invalid Lead to halt bad submissions with Error Message set to
=Lead validation failed: {{ $json.validationErrors.join(', ') }}. - In Business Email Check, confirm the condition uses
{{ $json.isBusinessEmail }}equalstrueto route business domains into enrichment.
Step 3: Configure LinkedIn Enrichment via HTTP Requests
Search for the company’s LinkedIn page, parse the URL, and enrich the lead profile using Apify scrapers.
- In Search LinkedIn Listing, set URL to
=https://api.apify.com/v2/acts/mina_safwat~google-search-scraper-ppr/run-sync-get-dataset-itemsand Method toPOST. - Set JSON Body to
={"lang":"en","searchTerm":"provide the linkedin company page url for company - {{ $json.company || $json.emailDomain }}","unique":true,"memory":256}. - Update the Authorization header in Search LinkedIn Listing to replace
Bearer [CONFIGURE_YOUR_TOKEN]with your Apify token. - Use Parse LinkedIn Link to extract the company URL and ensure LinkedIn Link Located checks
{{ $json.linkedInSearchSuccess }}equalstrue. - In Fetch LinkedIn Company, set URL to
=https://api.apify.com/v2/acts/logical_scrapers~linkedin-company-scraper-ppr/run-sync-get-dataset-itemsand JSON Body to={"url":["{{ $json.linkedInUrl }}"]}. - Update the Authorization header in Fetch LinkedIn Company to replace
Bearer [CONFIGURE_YOUR_TOKEN]with your Apify token. - Keep Bypass Enrichment Path as the fallback when enrichment is skipped or fails.
Step 4: Set Up AI Qualification & Lead Profile Assembly
Use OpenAI to score leads and assemble a unified lead profile for downstream routing and logging.
- Open AI Lead Scoring and confirm Model is
gpt-4.1with Temperature set to0.3. - Credential Required: Connect your
openAiApicredentials in AI Lead Scoring. - Keep the system and user messages intact, including references like
{{ $json.fullName }}and{{ $json.enrichedCompany.industry || 'Unknown' }}so the AI can score with full context. - Verify Combine LinkedIn Details and Bypass Enrichment Path both feed into AI Lead Scoring based on the enrichment path.
- In Assemble Lead Profile, keep the merge logic that reads either Combine LinkedIn Details or Bypass Enrichment Path and parses AI JSON output.
- Confirm Assemble Lead Profile outputs to both Hot Lead Decision and Append Sheet Log in parallel.
Step 5: Configure Routing & Output Actions
Route hot, warm, and cold leads to the correct notification, CRM, email, and logging actions.
- In Hot Lead Decision, verify the condition checks
{{ $json.qualification.tier }}equalshot. - Hot Lead Decision outputs to both Post Hot Lead Alert and AI Draft Outreach Email in parallel.
- Credential Required: Connect your
slackOAuth2Apicredentials in Post Hot Lead Alert, Notify Warm Lead, and Post Cold Lead Log. - In AI Draft Outreach Email, keep Model as
gpt-4.1with Temperature set to0.7. - Credential Required: Connect your
openAiApicredentials in AI Draft Outreach Email. - In Send Outreach Email, set Send To to
{{ $('Assemble Lead Profile').first().json.email }}, Subject to{{ $json.message.content.subject }}, and Message to{{ $json.message.content.body }}. - Credential Required: Connect your
gmailOAuth2credentials in Send Outreach Email. - In Create CRM Contact, keep Email set to
{{ $('Assemble Lead Profile').first().json.email }}and review custom properties likelead_scoreandlead_tier. - Credential Required: Connect your
hubspotAppTokencredentials in Create CRM Contact. - In Append Sheet Log, set Document ID to your spreadsheet and Sheet Name to
Sheet1. - Credential Required: Connect your
googleSheetsOAuth2Apicredentials in Append Sheet Log. - Confirm Warm Lead Decision checks
{{ $json.qualification.tier }}equalswarmand routes to Notify Warm Lead, with the fallback path sending to Post Cold Lead Log.
Step 6: Add Error Handling
Ensure invalid or incomplete lead submissions stop cleanly to avoid downstream errors.
- Connect the “false” output of Validate Lead Record to Stop Invalid Lead.
- Confirm Stop Invalid Lead uses the expression
=Lead validation failed: {{ $json.validationErrors.join(', ') }}to log precise error reasons.
Step 7: Test and Activate Your Workflow
Run a full test submission to verify enrichment, scoring, notifications, and logging before activating.
- Click Test Workflow and submit a sample entry through the Consultation Form Trigger form.
- Verify the form response returns
Thanks for your submission! We'll be in touch soon.from Return Form Acknowledgement. - Check that enrichment runs through Search LinkedIn Listing → Parse LinkedIn Link → Fetch LinkedIn Company → Combine LinkedIn Details when a business email is provided.
- Confirm a lead score is produced by AI Lead Scoring and assembled by Assemble Lead Profile.
- Ensure hot leads trigger both Post Hot Lead Alert and AI Draft Outreach Email, then Send Outreach Email and Create CRM Contact.
- Verify every run logs into Append Sheet Log with fields like
Lead Score,Lead Tier, andProcessed At. - Once tests succeed, switch the workflow to Active for production use.
Common Gotchas
- Apify credentials can expire or the token may not have access to the Actors you’re calling. If things break, check your Apify token in Settings → Integrations first, then re-test the HTTP Request nodes.
- If you’re using Wait nodes or external scraping, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- OpenAI prompts ship generic by default, honestly. Add your ICP rules and brand voice in the “AI Lead Scoring” and “AI Draft Outreach Email” prompts early or you will be editing outputs forever.
Frequently Asked Questions
About an hour if your accounts and API keys are ready.
No. You’ll mainly connect accounts and edit a few prompts and thresholds.
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 OpenAI API costs plus Apify enrichment costs (around $0.02-0.03 per enriched lead).
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 you should. Update the prompt in “AI Lead Scoring” to match your ICP signals, then change the tier thresholds in the decision logic that labels Hot (80+), Warm (60–79), Cold (40–59), and Disqualified (<40). Common tweaks include adding a “Book a demo” fast lane for specific form answers, sending warm leads to a nurture Slack channel, and skipping enrichment for certain regions or industries.
Usually it’s an expired Google authorization or the account doesn’t have edit access to the target sheet. Reconnect Google Sheets in n8n credentials, then confirm the spreadsheet and worksheet IDs in the “Append Sheet Log” step are pointing to the right place. If you recently moved the sheet to a shared drive, permissions can change quietly. Also check for blocked writes if the sheet hit limits or has protected ranges.
A lot. On n8n Cloud Starter you’re typically fine for small teams, and higher plans support more executions. If you self-host, there’s no hard execution cap, so throughput mainly depends on your server plus Apify/OpenAI rate limits. Practically, most teams run this comfortably at dozens to a few hundred leads per day, then scale by batching and adding queueing.
Sometimes, yes. This workflow uses branching, conditional enrichment, and multi-step AI outputs, which n8n handles cleanly without turning every path into a paid “task.” Self-hosting is also a big deal if you don’t want usage-based pricing surprises. Zapier or Make can still be a good choice if you only need basic “form → Slack message → sheet row” logic and you want the simplest UI possible. If you’re torn, Talk to an automation expert and get a quick recommendation for your volume and stack.
Your leads already told you they’re interested. This workflow makes sure the right ones get attention first, and the rest still land somewhere organized. Set it up once, then get on with real work.
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.