

How to Import contacts from spreadsheets with Power Automate
Automatically create or update HubSpot contacts when new rows are added to Google Sheets.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Teams that already use Office 365 and need reliable contact import without coding.
Not ideal for
High-volume imports over 500 contacts per day or complex data transformations.
Sync type
real-timeUse case type
importReal-World Example
A 12-person B2B marketing agency imports leads from event sign-up forms stored in Google Sheets. Before automation, their sales coordinator manually copied 20-30 contacts weekly into HubSpot, taking 2 hours and missing hot leads. Now contacts appear in HubSpot within 3 minutes of spreadsheet updates.
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 | ||
8 optional fields▸ show
| First Name | firstname |
| Last Name | lastname |
| Company | company |
| Phone | phone |
| Website | website |
| Job Title | jobtitle |
| Lead Source | hs_lead_source |
| Industry | industry |
Step-by-Step Setup
My flows > + New flow > Automated cloud flow
Create a new automated flow
Navigate to make.powerautomate.com and sign in with your Microsoft account. Click 'My flows' in the left sidebar, then the blue '+ New flow' button. Select 'Automated cloud flow' from the dropdown menu. Name your flow 'Google Sheets to HubSpot Contact Import' and leave the trigger selection for the next step.
- 1Click 'My flows' in the left navigation
- 2Click the blue '+ New flow' button
- 3Select 'Automated cloud flow'
- 4Enter flow name 'Google Sheets to HubSpot Contact Import'
- 5Click 'Skip' on trigger selection
Flow designer > Trigger > Search connectors
Add Google Sheets trigger
Click the trigger step box and search for 'Google Sheets' in the connector search. Select the 'When a row is added, modified or deleted' trigger. This gives you real-time updates when your spreadsheet changes. You'll need to authenticate with Google by clicking 'Sign in' and granting permissions to Power Automate.
- 1Click the empty trigger box
- 2Search for 'Google Sheets' in the connector list
- 3Select 'When a row is added, modified or deleted'
- 4Click 'Sign in' to authenticate with Google
- 5Grant permissions when prompted
Google Sheets trigger > Configuration
Configure Google Sheets connection
Select 'OneDrive for Business' or 'Google Drive' for Location depending on where your sheet lives. Choose your spreadsheet from the File dropdown and select the specific worksheet from the Worksheet dropdown. Set 'Change type' to 'Added' to only trigger on new rows, not edits.
- 1Select location where your sheet is stored
- 2Choose your contact spreadsheet from File dropdown
- 3Select the worksheet containing contact data
- 4Set 'Change type' to 'Added'
- 5Leave other fields as default
Flow designer > + New step > Control > Condition
Add condition to filter valid rows
Click '+ New step' below the trigger and search for 'Condition' under Control actions. This prevents empty rows or test data from creating contacts. Set the condition to check if the email column is not empty. Use 'is not equal to' and leave the comparison value blank.
- 1Click '+ New step' below the Google Sheets trigger
- 2Search for 'Condition' in the actions list
- 3Click on 'Condition' under Control
- 4Click in the left condition box and select your email column
- 5Set operator to 'is not equal to'
Condition > Yes branch > Add an action > HubSpot
Add HubSpot connection in Yes branch
Click 'Add an action' inside the 'Yes' branch of the condition. Search for 'HubSpot' and select the connector. Choose 'Create or update a contact' action since this handles both new contacts and updates to existing ones based on email. Click 'Sign in' to authenticate with your HubSpot account.
- 1Click 'Add an action' in the Yes branch
- 2Search for 'HubSpot' in connectors
- 3Select 'Create or update a contact' action
- 4Click 'Sign in' to connect HubSpot
- 5Authorize Power Automate access
HubSpot action > Field mapping
Map required contact fields
Click in each HubSpot field box and select the corresponding column from your Google Sheet using the dynamic content picker. Email is required for contact creation. First Name, Last Name, Company, and Phone are recommended for complete contact records. The dynamic content shows your sheet column headers.
- 1Click in the 'Email' field box
- 2Select your email column from dynamic content
- 3Map First Name to your name column
- 4Map Last Name if you have separate columns
- 5Map Company and Phone if available
HubSpot action > Advanced options
Configure duplicate handling
HubSpot's 'Create or update' action uses email as the unique identifier. If a contact with that email exists, it updates the record instead of creating a duplicate. No additional configuration needed, but you can add custom properties if your HubSpot has them set up.
- 1Expand 'Show advanced options' if needed
- 2Review the duplicate handling settings
- 3Add any custom HubSpot properties you want to populate
- 4Leave 'Update existing contacts' checked
HubSpot action > Settings > Configure run after
Add error handling
Click the three dots menu on the HubSpot action and select 'Settings'. Turn on 'Configure run after' and check both 'is successful' and 'has failed'. This lets you add error handling steps. Add a 'Compose' action that captures the error details for troubleshooting.
- 1Click the three dots on HubSpot action
- 2Select 'Settings' from the menu
- 3Click 'Configure run after'
- 4Check both 'is successful' and 'has failed'
- 5Add a Compose action for error logging
Flow designer > Save > Test > Manually
Test the flow
Click 'Save' at the top right, then 'Test' and choose 'Manually'. Add a test row to your Google Sheet with valid contact information. The flow should trigger within 2-3 minutes. Check the run history to see if the contact was created in HubSpot successfully.
- 1Click 'Save' in the top toolbar
- 2Click 'Test' next to Save
- 3Select 'Manually' and click 'Test'
- 4Add a test row to your Google Sheet
- 5Wait 2-3 minutes and check run history
Flow details > Turn on
Enable the flow for production
After successful testing, click 'Turn on' to activate the flow for live use. The flow will now run automatically whenever new rows are added to your Google Sheet. Monitor the run history for the first few days to catch any field mapping issues or API errors.
- 1Navigate back to flow details page
- 2Click the 'Turn on' toggle
- 3Confirm activation when prompted
- 4Bookmark the run history page for monitoring
Add this expression in a Compose action before the HubSpot step to clean email addresses and prevent duplicates caused by formatting differences. Paste this in the Inputs box of a Compose action.
JavaScript — Code Steptrim(toLower(triggerOutputs()?['body/Email']))▸ Show code
trim(toLower(triggerOutputs()?['body/Email'])) // This expression chains two functions: // toLower() converts email to lowercase
... expand to see full code
trim(toLower(triggerOutputs()?['body/Email'])) // This expression chains two functions: // toLower() converts email to lowercase // trim() removes leading/trailing spaces // Use the Compose output in HubSpot email field instead of raw spreadsheet data
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 Power Automate for this if you're already paying for Microsoft 365 and want something that just works without coding. The Google Sheets trigger is reliable and HubSpot integration handles duplicate detection automatically. Skip it if you need complex data transformation or processing more than 500 contacts daily - Make handles high volume better.
Real costs add up fast. Power Automate includes 2,000 actions per user per month in most business plans. Each contact import uses 3-4 actions (trigger, condition, HubSpot create). At 200 imports monthly you're using 800 actions, leaving plenty of headroom. Beyond the included limits, additional actions cost $15 per 10,000 - cheaper than Zapier's $20 starter plan.
Make beats Power Automate on data transformation with better text functions and error handling. Zapier wins on app selection with 5,000+ integrations vs Power Automate's 1,000. n8n gives you unlimited runs if you self-host. But Power Automate's advantage is dead-simple setup and enterprise security that works with existing Office admin policies without IT approval battles.
You'll hit three main issues after going live. Google Sheets triggers sometimes fire twice for the same row if someone edits cells quickly - add timestamp columns to track processed rows. HubSpot's API occasionally returns cryptic errors for malformed phone numbers or email addresses - validate data formats before sending. Power Automate's expression language is quirky compared to other platforms - expect to Google syntax for date formatting and text manipulation frequently.
Ideas for what to build next
- →Add lead scoring automation — Create a second flow that updates HubSpot lead scores based on company size or industry data from your spreadsheet.
- →Build reverse sync for updates — Set up HubSpot to Google Sheets sync so your team can see contact status changes and deal progress in the original spreadsheet.
- →Connect to email marketing — Trigger email sequences in HubSpot or Mailchimp when specific types of contacts are imported based on lead source or industry.
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