The workflow
Trigger at the top, then every step in order. Branch conditions are on the arrows.
Scroll sideways to see the whole diagram.
flowchart TD
t1(["New website enquiry submitted · Typeform"])
a1["Clean, validate and de-duplicate · n8n"]
a2["Find or create the contact · HubSpot"]
ai1{{"Score the lead and summarise needs · OpenAI"}}
d1{"Score 70 or higher? · n8n IF node"}
a3["Alert sales with the summary · Slack"]
a4["Email a call booking link · Gmail + Calendly"]
a5["Enrol in nurture sequence · HubSpot"]
o1[["Log the lead for reporting · Google Sheets"]]
t1 --> a1
a1 --> a2
a2 --> ai1
ai1 --> d1
d1 -->|"Yes"| a3
a3 --> a4
d1 -->|"No"| a5
a4 --> o1
a5 --> o1Recommended platform: n8n
Handles branching, retries and AI calls in one visual workflow, has native HubSpot, Slack, Gmail and Google Sheets nodes, and stays affordable as volume grows. Self-hosting later can cut the cost further.
Tools for each step
What each tool does in this workflow and why it was picked.
n8n
Visual builder with branching, error workflows and retries built in; native nodes for every app used here.
Typeform
Clean, mobile-friendly form with hidden fields for the UTM source; sends each response to n8n instantly.
HubSpot CRM
The free CRM covers contacts and deals; sequences for the nurture emails need a paid Sales Hub seat.
OpenAI API
A small model reads the message, budget and company size and returns a 0–100 score with a two-line summary as JSON.
Slack
Hot leads appear in #sales with the summary and a link to the HubSpot record, so someone replies within minutes.
Gmail + Calendly
A personal-looking email from the sales rep with their Calendly link converts better than a generic auto-reply.
Google Sheets
One row per lead with source, score and route makes weekly reporting and auditing simple.
Step-by-step build
Follow these in order. Each step lists the data it receives and passes on.
Connect the form to n8n
Typeform + n8n
- In n8n, add a Typeform Trigger node and connect your Typeform account.
- Select the enquiry form and map the fields: name, email, company, budget, message, plus hidden fields utm_source and utm_campaign.
- Submit a test response and check it arrives in n8n.
Data inForm responseData outname, email, company, budget, message, utm_sourceClean and validate the data
n8n Code + IF nodes
- Trim spaces, lowercase the email and title-case the name in a Code node.
- Drop obvious spam: empty message, disposable email domains or a filled honeypot field.
- Check the Google Sheet for the same email in the last 24 hours to stop duplicates.
Data inRaw form fieldsData outClean lead recordFind or create the HubSpot contact
HubSpot node
- Use the HubSpot node with "Create or Update" contact, keyed on email.
- Map company, budget and source to contact properties (create custom properties for budget and source first).
- Save the returned contact ID for later steps.
Data inClean lead recordData outhubspot_contact_id + lead recordScore the lead with AI
OpenAI node
- Send the message, budget and company to a small, low-cost model with a fixed scoring rubric (budget fit, urgency, fit with your services).
- Ask for JSON only: {"score": 0-100, "summary": "two lines", "reason": "one line"}.
- Parse the JSON; if parsing fails, set the score to 0 and the summary to "Needs manual review".
Data inLead recordData outscore, summary, reasonRoute hot and cold leads
n8n IF node
- Add an IF node: score is greater than or equal to 70.
- The true branch goes to Slack and the booking email; the false branch goes to the nurture sequence.
- Write the score and summary back to the HubSpot contact on both branches.
Data inscore + lead recordData outRoute: hot or nurtureAlert sales and send the booking link
Slack + Gmail
- Post to #sales: name, company, score, summary and the HubSpot record link.
- Send a short Gmail message from the sales rep with their Calendly link, personalised with the first name and the summary.
- Create a HubSpot task "Follow up within 24 hours" for the rep.
Data inHot leadData outSlack message ID, email sentEnrol cold leads in nurture
HubSpot
- Enrol the contact in your nurture sequence through the HubSpot API (a Sales Hub seat is needed).
- Set the lifecycle stage to "Lead".
Data inCold leadData outSequence enrolment statusLog every lead
Google Sheets node
- Append a row: date, name, email, company, source, score, route, HubSpot link.
- Use this sheet for a weekly summary or a Looker Studio dashboard.
Data inLead record + routeData outSheet row
Error handling
What can go wrong and how the workflow should deal with it.
Before you start
- n8n cloud account (or a self-hosted instance)
- Typeform account with the enquiry form
- HubSpot account with custom properties for budget and source
- OpenAI API key with a monthly spend limit set
- Slack workspace with a #sales channel
- A Google Sheet with the column headers above
Test it before going live
- Submit 5 test enquiries covering hot, cold, spam and duplicate cases
- Temporarily break the HubSpot credentials to check the error workflow emails you
- Check the Google Sheet and HubSpot records match
Monthly cost estimate
£35 to £120 a month in tool subscriptions and usage.
Mostly the n8n cloud plan and the Typeform plan; AI scoring costs pennies per lead at around 300 enquiries a month. These are estimates: tool prices and plans change, so check each provider's pricing page before you commit.
Assumptions
- Around 300 enquiries a month
- One sales rep receives hot leads
- Leads are businesses with a company name