

How to Auto-create contacts from emails with Power Automate
Auto-create HubSpot contacts when you receive Gmail emails from senders not already in your CRM database.
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
Microsoft 365 teams that get sales inquiries via Gmail and use HubSpot CRM.
Not ideal for
Teams processing 500+ emails daily or needing complex email parsing logic.
Sync type
real-timeUse case type
importReal-World Example
A 12-person consulting firm gets 40 prospect emails weekly through their Gmail info@ address. Before automation, their sales rep spent 20 minutes daily checking if senders exist in HubSpot and manually creating contacts. Now every new sender becomes a HubSpot contact within 3 minutes of email arrival.
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 Power Automate
Copy the pre-built Power Automate blueprint and paste it straight into Power Automate. 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 | ||
5 optional fields▸ show
| First Name | firstname |
| Last Name | lastname |
| Company | company |
| Lead Source | hs_lead_source |
| Contact Owner | hubspot_owner_id |
Step-by-Step Setup
My flows > New flow > Automated cloud flow
Create automated cloud flow
Navigate to make.powerautomate.com and sign in with your Microsoft account. Click 'My flows' from the left sidebar. Click 'New flow' then select 'Automated cloud flow'. Name your flow 'Gmail to HubSpot Contact Creation' and search for Gmail trigger.
- 1Click 'My flows'
- 2Click 'New flow'
- 3Select 'Automated cloud flow'
- 4Enter flow name
- 5Search 'Gmail'
Flow designer > Gmail trigger configuration
Configure Gmail trigger
Select 'When a new email arrives (V3)' trigger. Choose 'INBOX' as the folder. Leave other fields empty to catch all incoming emails. Power Automate will prompt you to connect your Gmail account through OAuth.
- 1Select 'When a new email arrives (V3)'
- 2Set Folder to 'INBOX'
- 3Click 'Sign in'
- 4Authorize Gmail access
Flow designer > New step > HubSpot
Add HubSpot connection
Click 'New step' below the Gmail trigger. Search for 'HubSpot' and select it. Choose 'Get a contact' action first - we need to check if the contact already exists. You'll need to connect your HubSpot account using your HubSpot login credentials.
- 1Click 'New step'
- 2Search 'HubSpot'
- 3Select HubSpot connector
- 4Choose 'Get a contact'
- 5Sign into HubSpot
HubSpot action > Get a contact configuration
Configure contact lookup
In the 'Get a contact' action, set the search property to 'email'. Click in the Contact email field and select 'From' from the dynamic content menu - this pulls the sender's email from the Gmail trigger. This step checks if the contact already exists in HubSpot.
- 1Set Property to 'email'
- 2Click Contact email field
- 3Select 'From' from dynamic content
Flow designer > New step > Control > Condition
Add condition check
Click 'New step' and search for 'Condition' under Control. This creates an if-then branch. In the condition, check if the HubSpot lookup failed (meaning contact doesn't exist). Set left side to 'Status Code' from the HubSpot action, condition to 'is equal to', and right side to '404'.
- 1Click 'New step'
- 2Search 'Condition'
- 3Select from Control category
- 4Choose 'Status Code' on left
- 5Set condition to 'is equal to'
- 6Enter '404' on right
Condition > If yes > Add an action > HubSpot
Configure create contact action
In the 'If yes' branch (contact doesn't exist), click 'Add an action'. Search for HubSpot again and select 'Create a contact'. This action only runs when the email sender isn't already in your CRM.
- 1Click 'Add an action' in 'If yes' branch
- 2Search 'HubSpot'
- 3Select 'Create a contact'
Create contact > Email field mapping
Map email field
In the 'Create a contact' action, click the Email field. Select 'From' from dynamic content - this maps the Gmail sender's email address to the HubSpot contact email field. This field is required and must be valid.
- 1Click Email field
- 2Select 'From' from dynamic content
Create contact > Name field mapping
Parse sender name
For the First name and Last name fields, you need to split the 'From (name)' field. Click First name field and select 'From (name)' from dynamic content. For better parsing, you'll want to add expressions to split on spaces. Leave empty for now and we'll use the full name.
- 1Click 'First name' field
- 2Select 'From (name)' from dynamic content
Create contact > Company field > Expression
Add company detection
For the Company field, you can extract the domain from the email address using an expression. Click the Company field, then click 'Expression' tab. Enter: split(triggerOutputs()?['body/from'], '@')[1]. This pulls everything after the @ symbol as a basic company identifier.
- 1Click Company field
- 2Click 'Expression' tab
- 3Enter domain extraction formula
- 4Click 'OK'
Condition > If no > Add an action > Data Operations
Configure 'If no' branch
In the 'If no' branch (contact exists), you can add actions like updating the last contact date or logging the email. For this basic setup, click 'Add an action' and select 'Compose' from Data Operations to log that the contact already exists.
- 1Click 'Add an action' in 'If no' branch
- 2Search 'Compose'
- 3Select from Data Operations
- 4Enter text like 'Contact already exists'
Flow toolbar > Save > Test
Test and save flow
Click 'Save' in the top toolbar to save your flow. Click 'Test' and choose 'Manually' to test with a real email. Send yourself a test email from an address not in HubSpot, then click 'Run flow' and monitor the execution.
- 1Click 'Save'
- 2Click 'Test'
- 3Select 'Manually'
- 4Send test email
- 5Click 'Run flow'
Use Power Fx expressions to better parse names and companies from email data. Paste this in the First name field expression editor.
JavaScript — Code Stepif(▸ Show code
if( contains(triggerOutputs()?['body/fromName'], ' '), first(split(triggerOutputs()?['body/fromName'], ' ')),
... expand to see full code
if( contains(triggerOutputs()?['body/fromName'], ' '), first(split(triggerOutputs()?['body/fromName'], ' ')), triggerOutputs()?['body/fromName'] )
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 Microsoft Power Automate for this if you're already on Microsoft 365, need tight integration with Outlook/Teams, or want built-in AI capabilities for email parsing. Power Automate includes 2,000 flow runs monthly with most Microsoft 365 Business plans, making it cost-effective for medium email volumes. It also handles OAuth refreshing automatically and provides better enterprise compliance than standalone tools. However, use Zapier if you need more advanced email parsing or aren't in the Microsoft ecosystem.
Costs run about $0.02 per email processed. At 200 emails monthly, you'll use 200 flow runs costing roughly $4/month with a Power Automate license. HubSpot's free tier supports this volume easily. Compare this to Zapier at $20/month minimum or Make at $9/month, making Power Automate cheaper if you already have Microsoft 365. The break-even point sits around 400 monthly emails.
Make offers superior conditional logic and data transformation functions that help with complex email parsing. Zapier provides 5x more pre-built email parsing options and better error handling. N8n gives you unlimited runs if self-hosted and more flexible webhook handling. Pipedream offers better debugging tools and real-time logs. Power Automate wins on cost for Microsoft shops and provides enterprise-grade security, but lags on advanced automation features.
You'll hit HubSpot's API rate limits at 100 requests per 10 seconds, so space out high-volume flows. Gmail's webhook delivery can delay up to 5 minutes during Google outages, causing contact creation gaps. Power Automate's expression language struggles with complex string manipulation - you'll need multiple steps to properly parse names with prefixes like 'Dr.' or 'Jr.' Email threading can trigger multiple flows for the same conversation, requiring message ID deduplication logic.
Ideas for what to build next
- →Add email parsing for phone numbers — Use AI Builder or regex expressions to extract phone numbers from email signatures and populate HubSpot contact fields.
- →Create follow-up email automation — Trigger automated welcome emails or sales sequences when new contacts are created from inbound 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