n8n Lead Qualification & Sales Intelligence Workflow (Top of Funnel)
Overview / Purpose
This workflow automatically processes new free-trial / lead sign-ups in real time:
- Catches a webhook from any source (Webflow form, Intercom, custom agent, etc.)
- Filters out personal / disposable / .edu emails → only business emails continue
- Validates the company website is live
- Scrapes the website with Firecrawl to find the official LinkedIn company page
- Enriches the company via AI Agent (Scrapin.io) → pulls name, follower count, headcount, HQ location, industry, and clean description
- Runs a multi-factor scoring engine (Location + Headcount + Industry)
- Sends a beautiful rich Slack notification to the sales team with score, rating, and quick-action buttons
- Segments the lead by score tier (Very High / High / Mid / Low)
- Checks if the lead already exists in Instantly
- Adds qualified leads to the correct Instantly campaign with first/last name extracted from email
Core Flow (Step-by-Step)
- Webhook – Trigger (POST /new-lead)
- Extract Email Root Domain – Pulls
@company.com part
- Blacklist Regex Domains – Blocks all personal, free, and .edu emails
- Check Email Not Null – Safety gate
- Check if Website Exists – HEAD request (continues only on 200-399)
- Firecrawl Scrape – Scrapes homepage looking for LinkedIn URL in footer/links
- Extract LinkedIn Url – Code node that finds and cleans
/company/ URL
- Check LinkedIn Not Null + Is Company Page – Rejects personal profiles
- LinkedIn Agent (AI Agent)
- Uses Scrapin.io enrichment tool
- Structured output: company_name, followers, employee_count, headquarters_location, industry, description
- Audit LI Results – Ensures all key fields returned
- Sanitize Description – Cleans Unicode, newlines, caps length for Slack
- Normalize Country – GPT-4.1-nano turns "Sheridan, US" → "United States"
- Score Country – Code node (0–10 points based on market tier)
- Score Staff Count – Code node (0–10 points based on headcount buckets)
- Industry Scoring – Code node (normalizes raw industry + 0–10 points)
- Algo Score – Final score = weighted average → 0–100 + rating label ("Excellent Fit", "Good Fit", etc.)
- Send to Slack – Rich blocks with:
- Email, Company Name, Location (+score), Staff Count (+score), Followers, Industry (+score)
- Clean description
- Final Score + Rating
- Buttons: Visit LinkedIn + Visit Website
- Score-Based Routing
- Very High (90–100)
- High (70–89)
- Mid (50–69)
- Low (0–49)
- Instantly Checks – For each tier: search if lead already exists
- Extract Name From Email (GPT) – Turns
[email protected] → First/Last Name (or "there")
- Wait nodes (optional delay before adding)
- Add Lead to Campaign – Pushes to Instantly with website custom field
Scoring Logic (Fully Configurable in Code Nodes)
Based on your ICP, narrow down your scoring based on how you want to segment.
What Makes This Workflow Powerful
- Zero manual work after webhook
- Rich, actionable Slack alerts (sales team loves it)
- Smart scoring that matches real ICP
- Built-in deduplication with Instantly
- Fully modular code nodes (easy to tweak scoring without breaking anything)
- Heavy error handling and safety gates
This is a complete, production-ready, public template.
You can import the JSON and it will run immediately after you connect your own:
- Webhook source
- Firecrawl API
- Scrapin.io (or alternative)
- OpenAI
- Slack
- Instantly
Any questions/comments/concerns, please email [email protected]
Built by Brandon Charleson
https://www.youtube.com/@brandoncharleson
https://www.linkedin.com/in/brandon-charleson
https://x.com/brandon_ai