Downloads
Download the n8n workflow (JSON)
website-lead-qualifier-n8n-claude.json · n8n workflow · 20 steps · starts with Website form webhook · uses Google Sheets, Anthropic, Gmail, Slack · 40 KB
Import into n8n: Create Workflow, then the menu, then Import from File.
How to import it into n8n
- In n8n, create a new workflow.
- Open the ⋯ menu at the top right and choose Import from File, then pick the downloaded .json. (Or open the file, copy everything and paste it on the canvas.)
- Open each node with a warning and connect your own account: the file carries no passwords or keys.
- Run it once with Test workflow, check the result, then switch it to Active.
What it does
Every enquiry from your website form goes straight to n8n. The visitor sees 'thanks' at once. The details are cleaned up and bots, test entries and link spam are dropped. n8n checks your Leads sheet: someone who enquired in the last 7 days is just marked as a repeat. New leads go to Claude, which scores them hot, warm or cold against your ideal customer, with reasons, and drafts a personal reply. Every lead is logged. Hot leads get a short, fixed email with your booking link within a minute, and you get a Slack ping with their number. Warm leads get Claude's personal reply only after you approve it in Slack. Cold leads go to a nurture list.
Who it is for
Real estate brokers, B2B service firms, coaching institutes, interior designers and clinics that get enquiries through a website form and lose the best ones to slow follow-up.
What you need
- An n8n account (n8n Cloud or self-hosted, reachable from the internet)
- A website form that can POST to a webhook (WordPress with a webhook add-on, Webflow, Wix, Framer or custom code)
- An Anthropic API key for Claude
- A Google Sheet with a Leads tab
- Gmail to send replies
- A booking link (Calendly, Cal.com or a Google Calendar booking page)
- Slack with #hot-leads and #leads channels
How the workflow runs, node by node
The slides show the same steps. Open the workflow in n8n and you will see a sticky note over each one.
Step 1 · Catch the enquiry in seconds
Your website form posts straight to n8n. The visitor sees 'thanks' at once, the details are cleaned up (phone with 91, email in lowercase), and bots, test entries and link-stuffed messages are dropped.
- Website form webhook: Your website form (WordPress, Webflow, Wix or custom) posts every enquiry here as JSON.
- Reply to website: Answers the website at once, so the visitor sees 'thanks' while the rest runs in the background.
- Clean enquiry: Keeps name, email (lowercase), phone (with 91), message, budget, city, page and source. 'website' is a hidden honeypot field that only bots fill in.
- Spam and test guard: Drops bots (honeypot filled), entries with no email or phone, test@ submissions and messages stuffed with links, before any AI cost.
Step 2 · Check if you already know them
n8n looks the person up in your Leads sheet. Someone who enquired in the last 7 days is not scored or emailed again. Their row is updated as a repeat enquiry, so your team sees they came back.
- Seen in last 7 days?: Looks the person up in your Leads tab by email (or phone). Always output data is on, so new people continue with an empty row.
- New lead?: True for someone new, or someone whose last enquiry was more than 7 days ago. Repeats within a week go down the false path.
- Note repeat enquiry: Updates the existing row with the new message and time, so your team sees the person came back, without scoring or emailing them again.
Step 3 · Claude scores hot, warm or cold
Claude reads the message against your ideal customer: need, budget, timeline and location. It returns hot, warm or cold with reasons and drafts a personal reply. Every lead is logged in your sheet.
- Score with Claude: Reads the enquiry against your ideal customer and returns hot, warm or cold with up to 3 reasons, the need, budget, timeline and location, and a personal reply draft.
- Claude: Claude (claude-sonnet-5-5) at temperature 0.2, so answers stay consistent from run to run.
- Lead schema: Forces fixed fields (score, reasons, need, budget, timeline, location, reply_subject, reply_body, confidence).
- Log lead: Writes every new lead to the Leads tab, keyed on Lead ID, with score, reasons, need, budget and timeline.
Step 4 · Hot leads get a call link in a minute
Hot leads get a short email with your booking link within a minute, and you get a Slack ping with their number to call now. If the email fails, the alert gives you the number instead.
- Route by score: Sends hot leads to the instant booking email, warm leads to your approval and cold leads to the nurture list.
- Send booking link: Emails hot leads a fixed, short message with your booking link within a minute. Only the first name and the need change. Its error output goes to the alert.
- Ping owner now: Pings #hot-leads with name, need, budget, timeline, the reasons and a phone number to call now.
- Alert owner: If any lead email fails, tells you in Slack with the phone number, so a hot lead is never left waiting.
Step 5 · Warm leads wait for your OK
Warm leads get Claude's personal reply only after you approve it in Slack. Cold leads go to a nurture list instead of the bin. Every contacted lead is marked in the sheet with the time.
- Approve warm reply: Posts warm leads to #leads with their message, the reasons and Claude's personal reply, and waits up to 12 hours.
- Approved?: True only when you tapped Send reply.
- Send warm reply: Sends Claude's personal reply once you approve it. Its error output goes to the alert.
- Mark contacted: Marks the lead Contacted with the time, for both the instant booking email and approved warm replies.
- Mark as nurture: Cold leads are not emailed. Their row is marked Nurture, for your newsletter or a monthly WhatsApp broadcast.
Setup
- In n8n, create a new workflow, open the menu and choose Import from File, then pick the JSON file.
- Activate the workflow and copy the production URL of Website form webhook. Set your website form to POST JSON there with the fields name, email, phone, message, budget, city, page and utm_source.
- Add a hidden field named
websiteto your form (hidden with CSS). Real visitors leave it empty; bots fill it in. - Make a Google Sheet with a
Leadstab: Lead ID, Last enquiry, Name, Email, Phone, Source, Message, Score, Why, Need, Budget, Timeline, Status, Contacted at, Repeat note. Paste its URL in the four sheet nodes. - Create an Anthropic credential on Claude. In Score with Claude, describe your business and your ideal customer in plain words, replacing the
YOUR_...placeholders. - Connect Gmail on Send booking link and Send warm reply, and put your booking link in place of
YOUR_BOOKING_LINK. - Connect Slack on Ping owner now, Alert owner and Approve warm reply.
- Submit three test enquiries (one hot, one vague, one job seeker) and check the scores, the email and the pings.
How to customise it
- Send hot leads a WhatsApp message instead of email with an approved template (they filled a form, so ask for WhatsApp consent on it).
- Add a 'When are you planning to buy?' dropdown to the form and pass it to Claude.
- Create the lead in HubSpot or Zoho CRM after Log lead with the HubSpot node or an HTTP Request.
- Round-robin hot leads between salespeople by adding a Code node that picks the next person and tags them in Slack.
- Add a reminder: if Status is still New after 30 minutes, ping again.
Guardrails
Only the fixed booking-link email goes out on its own. Every personal reply waits for your tap in Slack.
- Only the short, fixed booking-link email goes out on its own. Every personal reply needs your tap in Slack.
- Claude is told never to quote prices, offers or availability that are not in the message.
- Claude judges only what the person wrote, never their name, area or anything else about them.
- Repeat enquiries within 7 days are not emailed again.
- Cold leads are never deleted, only marked Nurture.
Troubleshooting
- The webhook never fires. Use the production URL (not the test URL) and make sure the workflow is active. Check your form plugin sends JSON with a POST.
- Every lead is cold. Your ideal customer description is too narrow or missing. Write 2 or 3 plain sentences about who you serve and what budget fits.
- Real leads get dropped by the guard. Check the hidden 'website' field is really hidden and not auto-filled by the browser (set autocomplete='off').
- Repeat check never matches. Lead ID is the email in lowercase, or the last 10 digits of the phone. Keep that column untouched in the sheet.
- Slack buttons do nothing. Send-and-wait needs n8n to be reachable from the internet and the workflow must be active.
Want the members-only resources too?
A free account unlocks them all, including the ones shared in DMs.

