Intermediate~20 min setupCRM & EmailVerified April 2026
HubSpot logo
Gmail logo

How to Auto-Create HubSpot Tasks from Gmail Meeting Requests with N8n

Automatically detect meeting request phrases in Gmail and create HubSpot tasks for assigned sales reps.

Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.

HubSpot Gmail extension exists as a native integration, but it requires manual setup per user and doesn't create contacts automatically. This guide uses an automation platform for full control. View native option →

Best for

Sales teams needing custom meeting detection logic with complex contact routing and HubSpot integration.

Not ideal for

Teams wanting simple keyword triggers without coding or those processing under 50 emails monthly.

Sync type

polling

Use case type

notification

Real-World Example

💡

A 25-person B2B SaaS company uses this to auto-assign meeting requests from their pricing page contact form to territory-based sales reps. Before automation, inbound leads waited 4-6 hours for initial response because reps manually checked a shared inbox. Now tasks appear in HubSpot within 2 minutes with proper rep assignment based on company domain matching.

What Will This Cost?

Drag the slider to your expected monthly volume.

/mo
505005K50K

Each platform counts differently — Zapier: 1 task per trigger. Make: 1 operation per module per record. n8n: 1 execution per run.

Prices shown for annual billing. Based on published pricing as of April 2026.

Estimated ROI

1000

min saved/mo

$583

labor value/mo

Free

no platform cost

Based on ~2 min manual effort per operation at $35/hr fully loaded labor cost.

Implementation

Skip the setup

Import this workflow directly into n8n

Copy the pre-built n8n blueprint and paste it straight into n8n. All modules, filters, and field mappings are already configured — you just need to connect your accounts.

Before You Start

Make sure you have everything ready.

Gmail account with API access enabled in Google Cloud Console
HubSpot account with private app token or OAuth credentials
N8n instance running (cloud or self-hosted)
Sales team contacts already exist in HubSpot CRM
Gmail labels configured to filter sales inquiries

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Task Subjecths_task_subject
Task Bodyhs_task_body
Task Typehs_task_type
Due Datehs_task_completion_date
Assigned Ownerhubspot_owner_id
2 optional fields▸ show
Associated Contactassociations
Task Priorityhs_task_priority

Step-by-Step Setup

1

Workflow > + > Gmail > Gmail Trigger

Install Gmail Node

Add the Gmail trigger node to monitor your inbox for new messages. This will be the starting point for detecting meeting requests.

  1. 1Click the + button to add a new node
  2. 2Search for 'Gmail' in the node list
  3. 3Select 'Gmail Trigger' from the available options
  4. 4Drag the node onto your workflow canvas
What you should see: You should see a Gmail Trigger node with a red exclamation mark indicating it needs configuration.
2

Gmail Node > Credentials > Gmail OAuth2 API

Connect Gmail Account

Authenticate your Gmail account to allow N8n to read incoming emails. You'll need OAuth2 credentials from Google Cloud Console.

  1. 1Click the Gmail Trigger node to open settings
  2. 2Click 'Create New Credential' next to Gmail OAuth2 API
  3. 3Enter your Google Client ID and Client Secret
  4. 4Click 'Connect my account' and complete OAuth flow
  5. 5Select 'On new email' as the trigger event
What you should see: Green checkmark appears next to Gmail OAuth2 API, showing successful connection.
Common mistake — Don't use your personal Gmail if this is for business - Gmail API has daily quotas that can break with high volume.
n8n settings
Connection
Choose a connection…Add
click Add
HubSpot
Log in to authorize
Authorize n8n
popup window
Connected
green checkmark
3

Gmail Trigger > Node Parameters

Configure Email Filter

Set up the Gmail trigger to only fire on relevant emails by filtering for your sales inbox or specific labels.

  1. 1In Gmail Trigger settings, set 'Label Names' to your sales label
  2. 2Set 'Format' to 'Full' to get complete email content
  3. 3Enable 'Include Spam and Trash' to false
  4. 4Set polling interval to 1 minute for faster detection
What you should see: Gmail trigger shows configured label and format settings in the node summary.
Common mistake — Avoid monitoring your entire inbox - filter to specific labels or you'll process every newsletter and notification.
HubSpot
HU
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Gmail
GM
notified
4

Workflow > + > Function

Add Text Analysis Node

Insert a function node to scan email content for meeting request phrases. This JavaScript code will return true/false for meeting detection.

  1. 1Click + to add a new node after Gmail
  2. 2Search for and select 'Function' node
  3. 3Connect the Gmail node output to Function node input
  4. 4Open the Function node settings panel
What you should see: Function node appears connected to Gmail with a code editor ready for input.
5

Function Node > JavaScript Code

Write Meeting Detection Code

Add JavaScript logic to identify meeting request phrases in email subject and body text. The function returns meeting intent and extracts key details.

  1. 1Paste the meeting detection function into the code editor
  2. 2Set the function to analyze both subject and body content
  3. 3Configure it to extract sender details and email timestamp
  4. 4Test with sample meeting request language
What you should see: Function node shows no syntax errors and displays sample output structure.
Common mistake — Don't make the phrase matching too strict - people use varied language like 'hop on a call', 'quick chat', or 'catch up' for meeting requests.

Drop this into an n8n Code node.

JavaScript — Code Node// Enhanced meeting detection with urgency scoring
▸ Show code
// Enhanced meeting detection with urgency scoring
const emailContent = $node["Gmail Trigger"].json.snippet.toLowerCase();
const subject = $node["Gmail Trigger"].json.subject.toLowerCase();

... expand to see full code

// Enhanced meeting detection with urgency scoring
const emailContent = $node["Gmail Trigger"].json.snippet.toLowerCase();
const subject = $node["Gmail Trigger"].json.subject.toLowerCase();

const meetingPhrases = ['schedule a call', 'book a meeting', 'hop on a call', 'quick chat', 'discuss further', 'set up time'];
const urgentPhrases = ['asap', 'urgent', 'this week', 'soon as possible', 'priority'];

const hasMeetingRequest = meetingPhrases.some(phrase => emailContent.includes(phrase) || subject.includes(phrase));
const isUrgent = urgentPhrases.some(phrase => emailContent.includes(phrase) || subject.includes(phrase));

return {
  meeting_detected: hasMeetingRequest,
  priority: isUrgent ? 'HIGH' : 'MEDIUM',
  task_type: subject.includes('demo') ? 'MEETING' : 'CALL'
};
6

Workflow > + > IF

Add Email Filtering Logic

Insert an IF node to only proceed when meeting request phrases are detected. This prevents creating tasks for every email.

  1. 1Add an IF node after the Function node
  2. 2Set condition to 'Boolean' and check if meeting_detected equals true
  3. 3Connect Function node output to IF node input
  4. 4Configure the 'true' branch to continue workflow
What you should see: IF node shows two output branches - true path continues to HubSpot, false path ends.
Common mistake — Filters are the most common place setups break. Double-check the field name and value exactly match what your app sends — a single capital letter difference will block everything.
7

Workflow > + > HubSpot > Task > Create

Connect HubSpot Account

Add HubSpot node and authenticate with your CRM. You'll need a private app token or OAuth credentials to create tasks.

  1. 1Click + on the IF node's true branch
  2. 2Search for and select 'HubSpot' node
  3. 3Choose 'Task' as the resource type
  4. 4Select 'Create' as the operation
  5. 5Click 'Create New Credential' for HubSpot API
What you should see: HubSpot node appears with task creation settings and credential prompt.
Common mistake — Use a private app token, not OAuth, for server-to-server automation - OAuth tokens expire and break workflows.
8

HubSpot Node > Credentials > Private App Token

Configure HubSpot Credentials

Enter your HubSpot API key or app token to authorize task creation. Private app tokens are more reliable for automation.

  1. 1Select 'Private App Token' as credential type
  2. 2Paste your HubSpot private app token
  3. 3Click 'Test' to verify connection
  4. 4Save the credential with a descriptive name
What you should see: Green checkmark shows successful HubSpot API connection and available scopes.
Common mistake — Ensure your private app has 'crm.objects.contacts.read' and 'crm.objects.tasks.write' scopes or task creation will fail.
9

HubSpot Node > Task Properties

Map Task Fields

Configure the HubSpot task with data from the email. Map sender info, email content, and meeting request details to task properties.

  1. 1Set 'Subject' to reference the email subject from Gmail data
  2. 2Map 'Body' to include meeting request details and email snippet
  3. 3Set 'Type' to 'CALL' or 'MEETING' task type
  4. 4Configure 'Due Date' to 24 hours from email received time
  5. 5Map 'Associated Contact' using email address lookup
What you should see: Task fields show mapped values from Gmail data with proper HubSpot field formatting.
Common mistake — HubSpot contact association requires the email sender to exist as a contact - add error handling for unknown senders.
HubSpot fields
firstname
lastname
email
company
hs_lead_status
available as variables:
1.props.firstname
1.props.lastname
1.props.email
1.props.company
1.props.hs_lead_status
10

Workflow > + > HubSpot > Contact > Get All

Add Contact Lookup

Insert a HubSpot contact search before task creation to find the assigned sales rep. This ensures tasks go to the right person.

  1. 1Add another HubSpot node between IF and task creation
  2. 2Set resource to 'Contact' and operation to 'Get All'
  3. 3Filter by email address from the Gmail sender
  4. 4Map the contact owner ID for task assignment
What you should see: Contact search node returns owner assignment and contact ID for task linking.
11

Workflow > Execute Workflow

Test Workflow

Execute the workflow with a sample email containing meeting request language. Verify task creation in HubSpot with correct assignment.

  1. 1Click 'Execute Workflow' button in top toolbar
  2. 2Send yourself a test email with 'schedule a call' phrase
  3. 3Watch workflow execution in real-time panel
  4. 4Check HubSpot for created task with proper details
  5. 5Verify task assignment to correct sales rep
What you should see: Workflow completes successfully and HubSpot shows new task with email details and rep assignment.
Common mistake — Test with real email content, not N8n's sample data - Gmail formatting and HubSpot field validation differ from mock data.
n8n
▶ Run once
executed
HubSpot
Gmail
Gmail
🔔 notification
received
12

Workflow > Settings > Active

Activate Automation

Enable the workflow to run automatically on new emails. Set up error notifications to catch failures in production.

  1. 1Click the 'Inactive' toggle to activate workflow
  2. 2Configure error handling to send alerts on failures
  3. 3Set workflow name to 'Meeting Request Task Creation'
  4. 4Add workflow to a folder for organization
What you should see: Workflow shows 'Active' status with green indicator and processes new emails automatically.
Common mistake — Start with a small test group before rolling out company-wide - email parsing edge cases can create duplicate or malformed tasks.

Scaling Beyond 200+ emails/day+ Records

If your volume exceeds 200+ emails/day records, apply these adjustments.

1

Switch to Webhook Triggers

Gmail polling becomes unreliable above 500 emails daily. Set up Gmail push notifications to Cloud Pub/Sub, then trigger N8n via webhook for real-time processing without API quota issues.

2

Batch Contact Lookups

HubSpot's batch API handles 100 contact searches per request vs single lookups. Modify the workflow to queue emails and process in batches every 5 minutes to reduce API calls and improve performance.

3

Add Redis Memory Store

Use N8n's Redis integration to track processed email IDs and prevent duplicates. Gmail polling can retrieve the same email multiple times during high-volume periods, causing duplicate tasks in HubSpot.

Going live

Production Checklist

Before you turn this on for real, confirm each item.

Troubleshooting

Common errors and how to fix them.

Frequently Asked Questions

Common questions about this workflow.

Analysis

VerdictWhy n8n for this workflow

Use N8n for this if you need custom meeting detection logic beyond simple keyword matching. The Function node lets you write JavaScript to parse complex email patterns, extract meeting details, and handle edge cases that Zapier's basic text filters miss. You can also store processed email IDs to prevent duplicates and add sophisticated contact matching logic. Skip N8n if you just want to trigger on emails containing 'meeting' - Make handles simple phrase detection faster with less setup.

Cost

This workflow runs 2-3 executions per qualifying email: Gmail fetch, meeting detection, contact lookup, and task creation. At 50 meeting requests per month, that's 150 executions monthly. N8n's free tier includes 5,000 executions, so you'd stay free until 800+ meeting emails monthly. The $20 Starter plan covers 20,000 executions (3,300 meeting emails). Zapier charges $20 for 750 tasks monthly, and Make costs $9 for 1,000 operations - both hit limits faster than N8n at medium volume.

Tradeoffs

Zapier's Gmail integration includes a 'New Email Matching Search' trigger that's more reliable than N8n's polling approach. Make's text parsing tools are simpler for basic phrase detection without writing JavaScript. But N8n wins on complex logic - you can analyze email thread context, detect meeting urgency levels, and route to different HubSpot pipelines based on sender domain. The JavaScript flexibility covers scenarios that break Zapier's rigid filters.

HubSpot's contact search API paginates at 100 records, so large contact databases slow down task assignment. Gmail's 'historyId' parameter helps avoid reprocessing old emails, but N8n doesn't expose this in the trigger - you'll need custom code to track it. Watch for HTML email formatting that breaks phrase detection - newsletters embed meeting language in images or heavily styled text that JavaScript string matching misses.

Ideas for what to build next

  • Add Slack NotificationsSend a Slack message to the assigned rep when high-priority meeting tasks are created. Use N8n's Slack node to post task details and direct links to the HubSpot record.
  • Create Follow-up RemindersSet up a scheduled workflow to check for overdue meeting tasks and send reminder emails to reps. Query HubSpot for tasks past due date and trigger automated follow-up sequences.
  • Build Meeting Outcome TrackingCapture when meeting tasks are completed and automatically create deal records for qualified prospects. Connect task completion webhooks to opportunity creation workflows in HubSpot.

Related guides

Was this guide helpful?
HubSpot + Gmail overviewn8n profile →