Typeform to HubSpot, leads captured and qualified
Leads come in, and then the messy part starts. Someone has to copy fields out of Typeform, create a HubSpot contact, and decide if the lead is even worth a follow-up.
This Typeform HubSpot automation hits marketing managers first (because speed matters). But agency owners and small teams running sales out of a shared inbox feel it too. The outcome is simple: your CRM stays clean, qualified leads get an email fast, and you stop losing good requests in the shuffle.
You’ll see exactly how the workflow captures a Typeform submission, creates the HubSpot contact, checks intent, and sends the right Gmail follow-up automatically.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Typeform to HubSpot, leads captured and qualified
flowchart LR
subgraph sg0["Typeform Intake 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/typeform.dark.svg' width='40' height='40' /></div><br/>Typeform Intake Trigger"]
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map Form Fields", pos: "b", h: 48 }
n2["<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/>Generate HubSpot Contact"]
n3@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Interest Validation", 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/hubspot.svg' width='40' height='40' /></div><br/>Modify Lead Stage"]
n5@{ icon: "mdi:message-outline", form: "rounded", label: "Dispatch Intro Email", pos: "b", h: 48 }
n6@{ icon: "mdi:cog", form: "rounded", label: "Idle Branch", pos: "b", h: 48 }
n1 --> n2
n3 --> n4
n3 --> n6
n0 --> n1
n4 --> n5
n2 --> 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 n3 decision
classDef customIcon fill:none,stroke:none
class n0,n2,n4 customIcon
The Problem: Leads Get Captured, Then They Get Lost
Typeform is great at collecting inquiries. The problem is everything after the form submission. Someone has to open the response, interpret what the person meant, then build a HubSpot contact that’s consistent enough to be useful later. If your team is busy, follow-ups drift from “today” to “tomorrow,” and by the time you respond the lead has already booked a call with someone else. Even worse, bad-fit submissions end up polluting HubSpot, which makes reporting unreliable and future outreach awkward.
It adds up fast. Here’s where it usually breaks down in real teams.
- Copying form fields into HubSpot takes about 10 minutes per submission, and it’s easy to miss a phone number or company name.
- “Is this a real opportunity?” becomes a daily debate, so follow-ups happen late or not at all.
- Contacts get created with inconsistent properties, which means your lists and lifecycle stages stop reflecting reality.
- Good leads don’t get the promised info email quickly, so the first impression feels sloppy.
The Solution: Auto-Create Contacts, Qualify Interest, Follow Up
This n8n workflow turns each Typeform submission into a clean, qualified HubSpot record and a timely Gmail follow-up. It starts the moment a form is submitted, then maps the raw Typeform answers into the exact fields you want in HubSpot (so you’re not stuck with messy naming or half-empty properties). Next, it creates the HubSpot contact automatically, checks whether the person signaled interest in your business services, and only then moves them forward. If they qualify, the workflow updates their stage to “opportunity” and sends a helpful intro email from Gmail. If they don’t qualify, the workflow simply does nothing, which keeps your CRM from filling up with noise.
The workflow begins with a Typeform trigger and a quick field-mapping step. Then HubSpot handles contact creation and stage updates, while an IF check decides who gets a Gmail email versus who gets skipped. Simple logic, big impact.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say your Typeform brings in about 30 submissions a week. Manually, if it takes roughly 10 minutes to create the HubSpot contact and another 5 minutes to decide whether to follow up and send an email, that’s about 7 hours of busywork weekly. With this workflow, the “human time” becomes closer to 1 minute per lead to review the HubSpot record (the trigger and processing run in the background). You get most of that day back, and qualified leads get an email the same hour instead of days later.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Typeform to collect lead submissions
- HubSpot for contact creation and lifecycle stages
- Gmail to send automated intro emails
Skill level: Beginner. You’ll connect accounts, map a few fields, and edit the qualifying rule.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
Typeform submission triggers the workflow. The moment someone submits your intake form, n8n pulls the response data in, including the fields you’ll want in HubSpot.
Form fields are cleaned up and mapped. A field-mapping step translates Typeform’s raw answers into consistent properties (name, email, company, and whatever else your team relies on). This is where you prevent “CRM spaghetti.”
HubSpot creates the contact, then qualification runs. The workflow generates the contact record first, then checks a clear rule: did the person express interest in business services? If yes, it updates their stage to opportunity.
Qualified leads get a Gmail follow-up automatically. n8n sends your pre-written intro email with informational material, while unqualified leads quietly go down an idle branch and don’t clutter your pipeline.
You can easily modify the qualification rule to match your own intake questions based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Typeform Trigger
Set up the intake form trigger so new Typeform submissions start the workflow.
- Add and open Typeform Intake Trigger.
- Set Form ID to
[YOUR_ID]. - Credential Required: Connect your typeformApi credentials.
- Ensure Typeform Intake Trigger connects to Map Form Fields.
Step 2: Connect HubSpot
Configure HubSpot access for contact creation and lifecycle updates.
- Open Generate HubSpot Contact and confirm Resource is set to
contact. - Set Email to
={{$json["form_email"]}}. - In Additional Fields, set industry to
={{$json["form_department"]}}, lastName to={{$json["form_lastname"]}}, firstName to={{$json["form_firstname"]}}, and companyName to={{$json["form_companyname"]}}. - Credential Required: Connect your hubspotApi credentials in Generate HubSpot Contact.
- Open Modify Lead Stage and set Email to
={{$node["Generate HubSpot Contact"].json["properties"]["email"]["value"]}}. - Set Additional Fields → lifeCycleStage to
opportunityand connect hubspotApi credentials.
Step 3: Set Up Field Mapping and Interest Logic
Normalize Typeform data and route based on interest response.
- Open Map Form Fields and enable Keep Only Set.
- Add string fields: form_firstname =
={{$json["First up, what's your name?"]}}, form_lastname =={{$json["And your surname, [field:fda1954c-f7a3-4fd3-a8dc-dcad5160bab5]?"]}}, form_department =={{$json["And in which department do you work, [field:fda1954c-f7a3-4fd3-a8dc-dcad5160bab5]?"]}}, form_companyname =={{$json["Great! Now what company are you from?"]}}, and form_email =={{$json["Just a couple more questions left! What's your email address?"]}}. - Add boolean field form_interest =
={{$json["And are you currently looking to scale your visual content?"]}}. - Open Interest Validation and set the boolean condition to Value 1
={{$node["Map Form Fields"].json["form_interest"]}}equals Value 2true. - Confirm the flow: Map Form Fields → Generate HubSpot Contact → Interest Validation.
Step 4: Configure Email and Branch Outcomes
Send the intro email to interested leads and gracefully handle non-interested responses.
- Open Dispatch Intro Email and set To to
={{$json["properties"]["email"]["value"]}}. - Set Subject to
So you're interested in growing your business. - Set Message to
=Hello {{$json["properties"]["firstname"]["value"]}}, I'm glad to hear you're interested in our services. You can schedule a call with me here: [YOUR_LINK]. Until then, check out this presentation about how we can help your business: [YOUR_LINK]. Looking forward to talking to you! Best, Team. - Credential Required: Connect your gmailOAuth2 credentials in Dispatch Intro Email.
- Confirm routing: Interest Validation routes true outcomes to Modify Lead Stage → Dispatch Intro Email, and false outcomes to Idle Branch.
Step 5: Test and Activate Your Workflow
Validate the workflow end-to-end and enable it for production.
- Click Execute Workflow and submit a test response through your Typeform.
- Verify a contact is created in HubSpot by Generate HubSpot Contact and updated by Modify Lead Stage.
- Confirm the email is sent by Dispatch Intro Email when Interest Validation is true.
- Ensure false outcomes route to Idle Branch without errors.
- Toggle the workflow to Active for production use.
Common Gotchas
- HubSpot credentials can expire or need specific permissions. If things break, check your n8n HubSpot credential and app scopes in HubSpot 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.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Frequently Asked Questions
About 30 minutes if your accounts are already connected.
No. You’ll mostly map fields and tweak the qualification rule in the IF step.
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 HubSpot, Typeform, and Gmail plan limits based on your usage.
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. The easiest change is in the “Interest Validation” IF check, where you can qualify based on a specific answer (budget, service type, timeline) instead of a generic “interested” field. You can also modify the “Dispatch Intro Email” Gmail message so different services get different resources. If your HubSpot pipeline uses custom lifecycle stages, update the “Modify Lead Stage” step to write to your exact property.
Usually it’s expired or incorrect credentials in n8n, so reconnect the HubSpot account in your n8n credentials and confirm the required scopes. It can also happen when the workflow tries to create a contact that already exists and your settings don’t allow updates. Finally, if you’re pushing lots of submissions at once, HubSpot rate limits can cause intermittent failures that look random.
On n8n Cloud, it depends on your plan’s monthly executions, and on self-hosting it depends on your server.
For this workflow, n8n is usually the better pick if you care about control. You can branch logic (qualified vs. idle) without paying more for every filter and path, and you can self-host if executions become frequent. n8n also makes it easier to expand later, like adding enrichment via HTTP Request or writing a log to Google Sheets. Zapier or Make can be quicker for a simple “create contact” zap, honestly. Talk to an automation expert if you want help choosing.
This is the kind of automation that quietly improves everything: cleaner HubSpot data, faster replies, fewer missed opportunities. Set it up once, then let it run while you focus on 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.