Intermediate~15 min setupProductivity & CRMVerified April 2026
Google Sheets logo
HubSpot logo

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-time

Use case type

import

Real-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.

/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 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.

Microsoft 365 account with Power Automate license (included in most business plans)
Google account with edit access to the source spreadsheet
HubSpot account with Marketing Hub Starter or higher (contacts API access)
HubSpot user permissions to create and edit contacts

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Emailemail
8 optional fields▸ show
First Namefirstname
Last Namelastname
Companycompany
Phonephone
Websitewebsite
Job Titlejobtitle
Lead Sourcehs_lead_source
Industryindustry

Step-by-Step Setup

1

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.

  1. 1Click 'My flows' in the left navigation
  2. 2Click the blue '+ New flow' button
  3. 3Select 'Automated cloud flow'
  4. 4Enter flow name 'Google Sheets to HubSpot Contact Import'
  5. 5Click 'Skip' on trigger selection
What you should see: You should see the flow designer with an empty trigger step at the top.
2

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.

  1. 1Click the empty trigger box
  2. 2Search for 'Google Sheets' in the connector list
  3. 3Select 'When a row is added, modified or deleted'
  4. 4Click 'Sign in' to authenticate with Google
  5. 5Grant permissions when prompted
What you should see: You should see 'Connected' status and dropdowns for Location, Document Library, and File.
Common mistake — The trigger fires for ANY row change including edits. Filter for 'Added' only if you don't want updates to existing rows creating duplicate contacts.
Power Automate
+
click +
search apps
Google Sheets
GO
Google Sheets
Add Google Sheets trigger
Google Sheets
GO
module added
3

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.

  1. 1Select location where your sheet is stored
  2. 2Choose your contact spreadsheet from File dropdown
  3. 3Select the worksheet containing contact data
  4. 4Set 'Change type' to 'Added'
  5. 5Leave other fields as default
What you should see: All dropdowns should show your selected values and the trigger should display 'Configured' status.
Common mistake — If your spreadsheet isn't appearing, check that it's shared with your Microsoft account and try refreshing the File list.
4

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.

  1. 1Click '+ New step' below the Google Sheets trigger
  2. 2Search for 'Condition' in the actions list
  3. 3Click on 'Condition' under Control
  4. 4Click in the left condition box and select your email column
  5. 5Set operator to 'is not equal to'
What you should see: You should see a condition block with 'Yes' and 'No' branches below it.
Common mistake — Don't use 'contains @' as your condition. Some test entries might have malformed emails that still contain @ but aren't valid.
Google Sheets
GO
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
HubSpot
HU
notified
5

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.

  1. 1Click 'Add an action' in the Yes branch
  2. 2Search for 'HubSpot' in connectors
  3. 3Select 'Create or update a contact' action
  4. 4Click 'Sign in' to connect HubSpot
  5. 5Authorize Power Automate access
What you should see: You should see the HubSpot action with empty field mapping boxes and a 'Connected' status.
Common mistake — Make sure you're signed into the correct HubSpot account. Power Automate will remember this connection for all future flows.
6

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.

  1. 1Click in the 'Email' field box
  2. 2Select your email column from dynamic content
  3. 3Map First Name to your name column
  4. 4Map Last Name if you have separate columns
  5. 5Map Company and Phone if available
What you should see: Each mapped field should show the column name in a gray bubble, like 'Email Address' or 'Full Name'.
Google Sheets fields
Column A
Column B
Email
Status
Notes
available as variables:
1.props.Column A
1.props.Column B
1.props.Email
1.props.Status
1.props.Notes
7

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.

  1. 1Expand 'Show advanced options' if needed
  2. 2Review the duplicate handling settings
  3. 3Add any custom HubSpot properties you want to populate
  4. 4Leave 'Update existing contacts' checked
What you should see: The action should show all mapped fields and any custom properties you've configured.
Common mistake — Test with a known email address first. The update behavior might overwrite existing data you want to keep.
8

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.

  1. 1Click the three dots on HubSpot action
  2. 2Select 'Settings' from the menu
  3. 3Click 'Configure run after'
  4. 4Check both 'is successful' and 'has failed'
  5. 5Add a Compose action for error logging
What you should see: You should see a parallel path for handling both success and failure scenarios.
9

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.

  1. 1Click 'Save' in the top toolbar
  2. 2Click 'Test' next to Save
  3. 3Select 'Manually' and click 'Test'
  4. 4Add a test row to your Google Sheet
  5. 5Wait 2-3 minutes and check run history
What you should see: You should see a green checkmark for each step and the new contact should appear in your HubSpot contacts list.
Common mistake — Google Sheets triggers can take up to 5 minutes to fire. Don't assume it's broken if you don't see immediate results.
Power Automate
▶ Test flow
executed
Google Sheets
HubSpot
HubSpot
🔔 notification
received
10

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.

  1. 1Navigate back to flow details page
  2. 2Click the 'Turn on' toggle
  3. 3Confirm activation when prompted
  4. 4Bookmark the run history page for monitoring
What you should see: The flow status should show 'On' with a green indicator and start processing new spreadsheet rows automatically.

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

VerdictWhy n8n for this workflow

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.

Cost

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.

Tradeoffs

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 automationCreate a second flow that updates HubSpot lead scores based on company size or industry data from your spreadsheet.
  • Build reverse sync for updatesSet up HubSpot to Google Sheets sync so your team can see contact status changes and deal progress in the original spreadsheet.
  • Connect to email marketingTrigger email sequences in HubSpot or Mailchimp when specific types of contacts are imported based on lead source or industry.

Related guides

Was this guide helpful?
Google Sheets + HubSpot overviewPower Automate profile →