

How to Auto-Create HubSpot Contacts from Gmail with Make
Automatically create HubSpot contacts when you receive emails from people not already in your CRM.
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
Teams that want visual debugging and need reliable duplicate contact prevention.
Not ideal for
High-volume email processing (1000+ emails/day) due to operation costs.
Sync type
pollingUse case type
importReal-World Example
A 25-person B2B consulting firm uses this to automatically add prospects who email them to HubSpot for follow-up tracking. Before automation, inbound emails sat in Gmail while reps manually copied contact details into their CRM, often forgetting to do it for days. Now every prospect email becomes a trackable contact within 15 minutes.
What Will This Cost?
Drag the slider to your expected monthly volume.
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
Import this workflow directly into Make
Copy the pre-built Make blueprint and paste it straight into Make. 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.
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Email Address | email | |
5 optional fields▸ show
| First Name | firstname |
| Company Name | company |
| Lead Status | hs_lead_status |
| Contact Source | hs_analytics_source |
| Original Message | notes_last_contacted |
Step-by-Step Setup
Dashboard > Create scenario > Gmail > Watch emails
Create New Scenario in Make
Start a new automation scenario in Make. This will be the foundation for your email-to-contact workflow.
- 1Click 'Create a new scenario' from your Make dashboard
- 2Click the '+' button to add your first module
- 3Search for 'Gmail' in the app list
- 4Select 'Watch emails' from the Gmail trigger options
Gmail module > Connection > Add
Connect Gmail Account
Link your Gmail account to Make so it can monitor incoming emails. This requires OAuth authentication through Google.
- 1Click 'Add' next to the Connection field
- 2Select 'Google' as the connection type
- 3Click 'Continue' and sign in with your Gmail account
- 4Grant Make permission to read your emails
Gmail module > Settings
Configure Email Watch Settings
Set up which emails to monitor and how frequently to check. Focus on your main inbox to avoid noise from promotions or spam.
- 1Set Label/Mailbox to 'INBOX'
- 2Change Criteria to 'Unread emails only'
- 3Set Maximum number of emails to 10
- 4Leave Mark emails as read unchecked
Gmail module > + > HubSpot > Create a Contact
Add HubSpot Module
Add the HubSpot module that will create contacts. This connects after Gmail to process each incoming email.
- 1Click the '+' button after your Gmail module
- 2Search for 'HubSpot' in the apps list
- 3Select 'Create a Contact' action
- 4Click 'Add connection' to link your HubSpot account
HubSpot module > Connection > Add
Connect HubSpot Account
Authenticate with HubSpot using your account credentials. Make needs write access to create contacts in your CRM.
- 1Enter your HubSpot portal domain (company.hubspot.com)
- 2Click 'Continue' and sign in to HubSpot
- 3Grant Make permission to manage contacts
- 4Click 'Save' to store the connection
HubSpot module > Contact fields
Map Email to Contact Fields
Configure how Gmail data maps to HubSpot contact fields. This determines what information gets pulled from each email.
- 1Click in the Email field and select 'From: Email' from Gmail data
- 2Set First Name field to 'From: Name' (before the @ symbol)
- 3Map Company field to domain extraction from 'From: Email'
- 4Set Lead Status to 'NEW'
Between modules > + > HubSpot > Search for Contacts
Add Duplicate Contact Filter
Prevent creating duplicate contacts by checking if the email already exists in HubSpot first.
- 1Click '+' between Gmail and HubSpot modules
- 2Select 'HubSpot' and choose 'Search for Contacts'
- 3Set Search property to 'email'
- 4Map Search value to Gmail 'From: Email'
After Search > + > Flow Control > Router
Configure Router Logic
Add routing logic to only create contacts when the search returns no results (new contact).
- 1Click '+' after the Search module and select 'Flow Control'
- 2Choose 'Router' from the options
- 3Connect one route to 'Create Contact'
- 4Set route filter to 'Search results = empty'
Scenario footer > Run once
Test the Scenario
Run a test to verify your automation works correctly with real email data from your Gmail account.
- 1Click 'Run once' button at the bottom left
- 2Send yourself a test email from an address not in HubSpot
- 3Watch the execution flow in Make's debugger
- 4Check HubSpot to confirm the new contact was created
Scenario controls > Schedule > Every 15 minutes
Schedule and Activate
Turn on the scenario to run automatically and set how frequently it checks for new emails.
- 1Click the clock icon next to 'Run once'
- 2Set schedule to 'Every 15 minutes'
- 3Toggle the scenario 'ON' using the switch
- 4Click 'Save' to confirm your settings
Drop this into a Make custom function.
JavaScript — Custom Function{{split(1.from.name; " ")[1]}} - Use this formula in First Name field to extract only the first word from Gmail sender name, handling cases where full names or company names appear in the name field.▸ Show code
{{split(1.from.name; " ")[1]}} - Use this formula in First Name field to extract only the first word from Gmail sender name, handling cases where full names or company names appear in the name field.... expand to see full code
{{split(1.from.name; " ")[1]}} - Use this formula in First Name field to extract only the first word from Gmail sender name, handling cases where full names or company names appear in the name field.Scaling Beyond 500+ emails/day+ Records
If your volume exceeds 500+ emails/day records, apply these adjustments.
Batch Processing
Switch from 'Watch emails' to scheduled 'Search emails' module to process in batches instead of real-time polling. This reduces API calls significantly.
Filter Early
Add Gmail label filters to only process emails from external domains. Internal company emails rarely need contact creation and waste operations.
Webhook Alternative
Consider Gmail's push notifications via Google Pub/Sub instead of polling. Requires more setup but eliminates polling operations entirely.
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
Use Make for this if you need real-time contact creation and want visual debugging when things break. Make's router logic handles the duplicate checking cleanly, and you can see exactly which emails triggered contact creation in the execution log. The Gmail integration pulls sender names better than most platforms. Skip Make if you're processing 1000+ emails daily — Zapier's Gmail polling is more reliable at high volume.
This workflow uses 4 operations per email: Gmail watch, HubSpot search, router evaluation, and contact creation (when needed). At 200 emails/month, that's 800 operations monthly. That fits Make's Core plan at $10/month easily. Zapier would cost $20/month for the same volume with their multi-step Zaps. Make is cheaper by $10/month and gives you better error visibility.
Zapier handles Gmail parsing better — their formatter automatically splits first/last names from sender fields without custom logic. N8n lets you write custom JavaScript to handle edge cases like email aliases or complex company domain extraction. But Make's visual router makes the duplicate detection logic obvious to debug when contacts aren't being created or are being duplicated despite your filters.
You'll hit Gmail's API pagination if you let unread emails pile up — the watch trigger only grabs the first 250 unread messages. HubSpot's search API is fuzzy by default, so '[email protected]' might match '[email protected]' unexpectedly. The router's empty array detection is fragile — HubSpot sometimes returns null, sometimes [], sometimes an object with empty results depending on your search query format.
Ideas for what to build next
- →Add Deal Creation for Sales Inquiries — Create HubSpot deals automatically when emails contain keywords like 'pricing' or 'demo request' to track sales opportunities.
- →Set Up Lead Scoring Based on Email Content — Parse email content and set HubSpot lead scores based on keywords, company domain, or email signature details.
- →Create Slack Notifications for New Contacts — Add a Slack module to notify your sales team immediately when high-value contacts (based on company domain) are created from emails.
Related guides
How to Share Notion Meeting Notes to Slack with Pipedream
~15 min setup
How to Share Notion Meeting Notes to Slack with Power Automate
~15 min setup
How to Share Notion Meeting Notes to Slack with n8n
~20 min setup
How to Send Notion Meeting Notes to Slack with Zapier
~8 min setup
How to Share Notion Meeting Notes to Slack with Make
~12 min setup
How to Create Notion Tasks from Slack with Pipedream
~15 min setup