Smartlead + HubSpot, cold emails that stay personal
Your HubSpot lists look great. Then outreach day hits, and suddenly you’re copying fields, guessing who’s “ready,” and rewriting the same email with tiny tweaks. It’s slow, and honestly, it’s where good leads go to die.
This HubSpot Smartlead automation hits growth marketers first, but sales ops and agency owners feel it too. You get qualified leads pushed into Smartlead with AI-personalized drafts, plus a clean log you can audit later.
Below, you’ll see how the workflow runs, what it replaces, and what you need to get it live without turning your week into a “fix the automation” project.
How This Automation Works
See how this solves the problem:
n8n Workflow Template: Smartlead + HubSpot, cold emails that stay personal
flowchart LR
subgraph sg0["Schedule Flow"]
direction LR
n0@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini Chat Model1", pos: "b", h: 48 }
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/code.svg' width='40' height='40' /></div><br/>Code"]
n2@{ icon: "mdi:robot", form: "rounded", label: "Basic LLM Chain5", pos: "b", h: 48 }
n3@{ icon: "mdi:robot", form: "rounded", label: "Information Extractor2", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If7", pos: "b", h: 48 }
n5@{ icon: "mdi:cog", form: "rounded", label: "Aggregate5", pos: "b", h: 48 }
n6@{ icon: "mdi:robot", form: "rounded", label: "Basic LLM Chain6", pos: "b", h: 48 }
n7@{ icon: "mdi:robot", form: "rounded", label: "Information Extractor3", pos: "b", h: 48 }
n8@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini Chat Model2", pos: "b", h: 48 }
n9@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items1", pos: "b", h: 48 }
n10@{ icon: "mdi:cog", form: "rounded", label: "Aggregate6", pos: "b", h: 48 }
n11@{ icon: "mdi:cog", form: "rounded", label: "Aggregate7", pos: "b", h: 48 }
n12@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items9", pos: "b", h: 48 }
n13@{ icon: "mdi:cog", form: "rounded", label: "Aggregate8", pos: "b", h: 48 }
n14@{ icon: "mdi:robot", form: "rounded", label: "Basic LLM Chain7", pos: "b", h: 48 }
n15@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini Chat Model3", pos: "b", h: 48 }
n16@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini Chat Model4", pos: "b", h: 48 }
n17@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini Chat Model6", pos: "b", h: 48 }
n18["<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/>smatlead-create-campaign"]
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/>smartlead-add-leads-to-campa.."]
n20@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger", pos: "b", h: 48 }
n21["<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/supabase.svg' width='40' height='40' /></div><br/>Get many rows"]
n22["<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/supabase.svg' width='40' height='40' /></div><br/>Update a row"]
n23["<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/supabase.svg' width='40' height='40' /></div><br/>Update a row1"]
n24["<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/supabase.svg' width='40' height='40' /></div><br/>Update a row2"]
n4 --> n5
n4 --> n9
n1 --> n4
n5 --> n6
n10 --> n2
n11 --> n18
n13 --> n14
n22 --> n10
n21 --> n9
n23 --> n1
n24 --> n9
n2 --> n3
n6 --> n7
n14 --> n22
n9 --> n11
n9 --> n13
n12 --> n19
n20 --> n21
n3 --> n23
n7 --> n24
n18 --> n12
n0 -.-> n3
n8 -.-> n7
n15 -.-> n14
n16 -.-> n2
n17 -.-> n6
n19 --> n12
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 n20 trigger
class n2,n3,n6,n7,n14 ai
class n0,n8,n15,n16,n17 aiModel
class n4 decision
class n18,n19 api
class n1 code
classDef customIcon fill:none,stroke:none
class n1,n18,n19,n21,n22,n23,n24 customIcon
The Challenge: Scaling cold email without sounding fake
Personal cold email works, but the process usually doesn’t scale. You export a HubSpot list, sort it, sanity-check titles, then try to write something that doesn’t scream “template.” Meanwhile, the clock is running. Leads cool off, duplicate rows slip in, and someone inevitably sends to a contact who was never a fit in the first place. The worst part is the mental load: deciding who to email, what to say, and where to log it becomes a recurring chore that never really ends.
It adds up fast. Here’s where it breaks down in real teams.
- You end up personalizing based on guesswork because enrichment and context live in different places.
- Campaign setup becomes a mini-project, so “we’ll launch tomorrow” turns into next week.
- Manual copy-paste creates quiet errors, like wrong company names or mismatched first names.
- Reporting is messy because drafts, sends, and notes are scattered across tools and inboxes.
The Fix: Qualify in HubSpot, personalize with AI, send via Smartlead
This workflow runs on a schedule and pulls lead rows from your source, then builds a campaign batch and creates the matching outreach campaign in Smartlead via API. Next, it profiles each lead using an AI prompt (powered by Google Gemini in n8n), updates the profile, and runs a second AI pass to qualify them with structured fields you can actually trust. Only leads that pass your score threshold move forward. For those, the workflow assembles clean inputs, generates a tailored subject and email body, extracts the key fields (subject, greeting, CTA, closing), and stores the final content so you have an audit trail. Finally, it appends the right leads to the Smartlead campaign, keeping your sends consistent and your personalization real.
The workflow begins with scheduled retrieval and batching. Then AI handles profiling, qualification, and drafting, while n8n enforces your threshold logic so only the right contacts go out. Everything gets saved for review and tracking, which means you can spot-check quality without living inside five tabs.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say you send 50 cold emails a day from HubSpot-sourced leads. Manually, you might spend about 3 minutes per lead pulling context and drafting a “custom” opener, plus another minute to add them to a Smartlead campaign and log what happened. That’s roughly 3 hours a day. With this workflow, your only real time is a quick spot-check of the saved drafts (maybe 15 minutes total), while the scheduled run, AI drafting, and Smartlead campaign updates happen automatically.
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- HubSpot as the lead source and segmentation layer.
- Smartlead to run the cold email campaign and sends.
- Google AI (Gemini) API access (get it from Google AI Studio / Google Cloud credentials).
Skill level: Intermediate. You’ll connect accounts, set a scoring threshold, and verify a few field mappings end-to-end.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
A scheduled run kicks things off. n8n starts on a timer, then retrieves fresh lead rows so you’re not relying on someone to “remember to export.”
Leads are processed in batches. The workflow loops through contacts in controlled chunks, compiles campaign batches, and prepares payloads so one messy record doesn’t derail the whole run.
AI profiling and qualification happen before any send work. Gemini generates profile context, then a qualification prompt produces structured fields that get extracted and stored. A bit of code applies your score threshold, and an If check decides who moves forward.
Drafts are generated and stored for review. The workflow assembles email inputs, creates a subject and body, extracts the key components, and saves the finalized content so you can audit it later.
Smartlead campaign setup and lead appends run automatically. n8n creates the outreach campaign, cycles through approved leads, and appends them via API so Smartlead is ready to send.
You can easily modify the scoring threshold to be stricter (or looser) based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Scheduled Run Trigger
Set the workflow to run on a schedule so it can continuously process your lead list.
- Add and open Scheduled Run Trigger.
- In Rule, set your preferred interval (the current configuration is empty and must be defined).
- Connect Scheduled Run Trigger to Retrieve Lead Rows to start the data pull.
Tip: Use a low-frequency schedule while testing to avoid processing too many leads at once.
Step 2: Connect Supabase
Supabase stores and updates all lead data, scoring results, and generated email content.
- Open Retrieve Lead Rows and select the Table
Leads, set Operation togetAll, and enable Return All. - Credential Required: Connect your supabaseApi credentials in Retrieve Lead Rows.
- In Update Lead Profile, set the filter E-mail to
{{ $('Replace Me7').item.json['E-mail'] }}and map LEAD PROFILING to{{ $json.text }}. - Credential Required: Connect your supabaseApi credentials in Update Lead Profile.
- In Store Lead Scores, set the filter E-mail to
{{ $('Compile Lead Batch').item.json.data[0]['E-mail'] }}and map all scoring fields from{{ $json.output[...] }}as configured. - Credential Required: Connect your supabaseApi credentials in Store Lead Scores.
- In Save Email Content, set the filter E-mail to
{{ $('Collect Lead Info').item.json.data[0]['E-mail'] }}and map email fields from{{ $json.output[...] }}. - Credential Required: Connect your supabaseApi credentials in Save Email Content.
Step 3: Set Up Lead Processing and Profiling
This stage batches leads, aggregates records, and generates a profiling report for each lead.
- Open Batch Iterate Leads and keep the default batch settings unless you need smaller batches for rate limits.
- Batch Iterate Leads outputs to both Compile Campaign Batch and Compile Lead Batch in parallel.
- In Compile Lead Batch, keep Aggregate set to
aggregateAllItemData. - Open Profiling LLM Prompt and keep the long prompt text; confirm the embedded expressions like
{{ $('Replace Me
Watch Out For
- HubSpot credentials can expire or need specific permissions. If things break, check your connected app and private 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.
Common Questions
About an hour if your HubSpot and Smartlead access is ready.
Yes. You won’t write code, but you will need to connect accounts and confirm which HubSpot fields map into the email prompts.
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 Google Gemini API usage costs, which depend on your model and volume.
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.
You can. Most customizations happen in the score threshold code/If check and in the AI prompt nodes (the profiling prompt, qualification prompt, and the email draft prompt). Common tweaks include changing what “qualified” means, pulling different HubSpot properties into the prompt, and adjusting the extractor fields so your subject/CTA format matches your house style. If you want a manual QA step, route drafts to a review tool before you append leads to the Smartlead campaign.
Usually it’s an API key issue or missing permissions on the Smartlead side. Regenerate your Smartlead API key, then update the credentials used by the HTTP Request nodes that create campaigns and append leads. Also check if your payload fields match what Smartlead expects, because a small mismatch (like an empty email field) can cause a hard failure. If you’re pushing a lot of leads at once, rate limiting can show up as intermittent errors.
It’s built to run in batches, so it can handle hundreds of leads per run as long as your API limits and n8n resources support it.
Often, yes, if you care about conditional logic and structured AI outputs. This workflow uses batching, threshold logic, and multiple AI steps with field extraction, which tends to get clunky (and expensive) in simpler tools. n8n also lets you self-host for high volume, and you can inspect every step when something looks off. Zapier or Make can still be fine for a basic “HubSpot contact created → add to outreach tool” flow, especially if you don’t need scoring. Talk to an automation expert if you want help deciding.
You qualify once, draft automatically, and send through Smartlead with a record you can trust. Set it up, keep your voice, and stop rebuilding the same campaign every week.
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.