Automate HubSpot Outreach Emails with n8n and Gmail

Struggling to track and email uncontacted HubSpot leads manually? This n8n workflow automates sending personalized outreach emails through Gmail and records engagement in HubSpot, saving hours and avoiding missed contacts.
hubspot
gmail
scheduleTrigger
+2
Learn how to Build this Workflow with AI:
Workflow Identifier: 1492
NODES in Use: gmail, hubspot, scheduleTrigger, set, stickyNote

Press CTRL+F5 if the workflow didn't load.

Visit through Desktop for Best experience

Opening Problem Statement

Meet Mutasem, a sales development representative at a mid-sized SaaS company using HubSpot as their CRM. Every morning, Mutasem spends nearly two hours manually filtering through HubSpot contacts to identify leads who have never been contacted before. He then crafts personalized outreach emails and sends them one-by-one through Gmail. This tedious routine not only wastes valuable time but also risks human errors—like missing leads or repetitive emails—that could cost potential business opportunities. Without an automated way to find and contact unengaged leads, Mutasem’s outreach process is inefficient and limits the company’s growth potential.

Specifically, the problem Mutasem faces is identifying HubSpot contacts who do not have a recorded “last contacted” date or any engagement notes and reaching out to them systematically with a personalized email. After sending the outreach, it’s crucial to log the interaction in HubSpot so the lead isn’t contacted again unnecessarily. Doing this manually daily is error-prone and time-draining.

What This Automation Does

This n8n workflow automates Mutasem’s daily outreach routine entirely by doing the following:

  • Every day at 9 AM, it triggers automatically.
  • Searches HubSpot for contacts who have no recorded last contact date (uncontacted leads).
  • Prepares a personalized outreach email for each uncontacted contact using their first name and email address.
  • Sends the outreach email using Gmail with a custom sender name and subject line.
  • Records the engagement in HubSpot under the contact’s profile so that these contacts are marked as contacted.
  • Ensures no lead is contacted twice by updating HubSpot engagement notes.

With this automation, Mutasem can save approximately two hours daily, avoid manual errors, reach more leads consistently, and focus on meaningful follow-ups rather than repetitive email tasks.

Prerequisites ⚙️

  • HubSpot account with OAuth2 credentials configured in n8n.
    (Make sure to include the exact OAuth2 scopes as per n8n HubSpot docs.)
  • Gmail account linked to n8n configured to send emails.
  • Access to an n8n instance—either cloud-hosted or self-hosted ⚙️. For affordable self-hosting, you can consider Hostinger with n8n.

Step-by-Step Guide

1. Schedule the Workflow to Run Daily at 9 AM

On your n8n canvas, add a Schedule Trigger node.

  • Navigate to Triggers > Schedule Trigger.
  • Set the interval to trigger daily at 9 AM by selecting the hour “9” in the time picker.
  • This will initialize the workflow every morning to start the outreach process automatically.
  • Common mistake: Forgetting to save or activate the node, so the workflow doesn’t run.

2. Search HubSpot for Uncontacted Leads

Add a HubSpot node configured for a search operation.

  • Select the HubSpot OAuth2 credentials you configured.
  • Under Filter Groups, add a filter with NOT_HAS_PROPERTY operator on the notes_last_contacted|datetime property. This filters all contacts lacking a last contact date.
  • This ensures only unengaged leads are processed.
  • Common mistake: Incorrect property name or filter operator can return no contacts.

3. Prepare Email Content with Contact Details

Add a Set node to assign keys and prepare email fields.

  • Create fields such as html, subject, to, and id.
  • Use expressions like =Hey {{ $json.properties.firstname }} to personalize the email body.
  • Set a friendly subject like “Why n8n?” and assign the email property from the HubSpot data.
  • This step formats the email content dynamically for every contact.
  • Common mistake: Incorrect reference in expressions resulting in empty or wrong email content.

4. Send the Outreach Email via Gmail

Use the Gmail node to send the personalized email.

  • Configure the recipient using {{ $json.properties.email }}.
  • Insert the subject and the personalized HTML message from prior step.
  • Set the sender name to “Mutasem from n8n” and disable attribution append.
  • Once executed, emails go out automatically to all uncontacted leads.
  • Common mistake: Gmail API rate limits if too many emails are sent quickly.

5. Record Engagement in HubSpot

Add another HubSpot node configured to record an email engagement.

  • Set resource to “engagement” and type to “email”.
  • Fill metadata with the same email content, subject, recipient, and sender information.
  • Associate this engagement with the contact ID retrieved earlier to ensure HubSpot updates the contact’s last contacted date.
  • Common mistake: Failing to map the contact IDs properly causes engagement to not be recorded.

Customizations ✏️

1. Modify the Email Content

In the Set keys node, change the html assignment to include your own company messaging, links, or calls to action.

2. Change the Email Sending Time

In the Schedule Trigger node, adjust the hour to send outreach at a different time based on your leads’ time zones or preferences.

3. Add Additional Filters in HubSpot Search

Within the Get uncontacted HubSpot contacts node, add more filters, e.g., filtering by lead status or region, so you contact only targeted segments.

4. Append a Tracking URL

Modify the email body in the Set keys node to include click-tracking URLs or UTM parameters for campaign analytics.

Troubleshooting 🔧

Problem: No contacts found in HubSpot search

Cause: The filter “NOT_HAS_PROPERTY” may be incorrect or no contacts meet the criteria.

Solution: Verify the property name in HubSpot and test filters manually in HubSpot’s UI. Check OAuth2 credentials and permissions.

Problem: Emails not sending via Gmail node

Cause: Gmail API limits, invalid OAuth2 setup, or missing send permissions.

Solution: Confirm credentials in n8n, refresh tokens if expired, and respect Gmail’s daily sending limits.

Problem: Engagements not recorded in HubSpot

Cause: Incorrect contact ID mapping or missing required fields in engagement metadata.

Solution: Ensure contact IDs are passed correctly from the Set node and all required metadata fields are filled.

Pre-Production Checklist ✅

  • Confirm OAuth2 credentials for both HubSpot and Gmail are active and properly scoped.
  • Run one test contact through the workflow to ensure emails send and engagements record correctly.
  • Verify email formatting and personalization tags render as expected.
  • Back up existing HubSpot data or work in a test environment to avoid impacting live leads.
  • Check time zone settings in the Schedule Trigger node to align with your target audience’s timezone.

Deployment Guide

Once fully tested, activate the workflow in n8n’s UI by toggling the active switch.

Ensure your n8n instance runs 24/7 or during the scheduled time to guarantee workflow execution daily.

Monitor email deliveries via Gmail logs and HubSpot engagement records for auditing.

FAQs

Can I use Outlook instead of Gmail for sending emails?

Yes, you can replace the Gmail node with the Outlook node in n8n. Just configure Outlook OAuth2 credentials and adjust email parameters accordingly.

Does this workflow consume API credits?

HubSpot’s free tier has limits on API calls; consider your volume to avoid hitting limits. Gmail also has daily sending limits that should be respected.

Is my data secure?

All OAuth2 authentications keep your data secure. However, always ensure your n8n instance is secured and access is controlled.

Can this handle large volumes of contacts?

For very large lead lists, consider batching requests or pacing emails to avoid rate limits.

Conclusion

By building this targeted n8n automation, you automated the tedious task of identifying and emailing uncontacted HubSpot leads while recording engagement seamlessly. You just saved hours of manual work and significantly improved outreach consistency.

This workflow can be further enhanced by integrating lead scoring, multi-channel outreach, or detailed reporting.

Next, you might want to automate follow-ups for unresponsive leads or sync new HubSpot contacts to a Google Sheet for easy analysis.

Get started now and empower your sales team with smarter outreach automation!

Related Workflows

Automate Viral UGC Video Creation Using n8n + Degaus (Beginner-Friendly Guide)

Learn how to automate viral UGC video creation using n8n, AI prompts, and Degaus. This beginner-friendly guide shows how to import, configure, and run the workflow without technical complexity.
Form Trigger
Google Sheets
Gmail
+37
Free

AI SEO Blog Writer Automation in n8n (Beginner Guide)

A complete beginner guide to building an AI-powered SEO blog writer automation using n8n.
AI Agent
Google Sheets
httpRequest
+5
Free

Automate CrowdStrike Alerts with VirusTotal, Jira & Slack

This workflow automates processing of CrowdStrike detections by enriching threat data via VirusTotal, creating Jira tickets for incident tracking, and notifying teams on Slack for quick response. Save hours daily by transforming complex threat data into actionable alerts effortlessly.
scheduleTrigger
httpRequest
jira
+5
Free

Automate Telegram Invoices to Notion with AI Summaries & Reports

Save hours on financial tracking by automating invoice extraction from Telegram photos to Notion using Google Gemini AI. This workflow extracts data, records transactions, and generates detailed spending reports with charts sent on schedule via Telegram.
lmChatGoogleGemini
telegramTrigger
notion
+9
Free

Automate Email Replies with n8n and AI-Powered Summarization

Save hours managing your inbox with this n8n workflow that uses IMAP email triggers, AI summarization, and vector search to draft concise replies requiring minimal review. Automate business email processing efficiently with AI guidance and Gmail integration.
emailReadImap
vectorStoreQdrant
emailSend
+12
Free

Automate Email Campaigns Using n8n with Gmail & Google Sheets

This n8n workflow automates personalized email outreach campaigns by integrating Gmail and Google Sheets, saving hours of manual follow-up work and reducing errors in email sequences. It ensures timely follow-ups based on previous email interactions, optimizing communication efficiency.
googleSheets
gmail
code
+5
Free