Beginner~12 min setupProductivity & CRMVerified April 2026
Google Sheets logo
HubSpot logo

How to Import Contacts from Google Sheets to HubSpot with Make

Automatically create or update HubSpot contacts whenever a new row is added to your Google Sheets spreadsheet.

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

Best for

Teams that regularly import contacts from spreadsheets and need reliable error handling with custom property mapping.

Not ideal for

One-time imports or teams that only need to sync basic contact information without custom fields.

Sync type

polling

Use case type

import

Real-World Example

πŸ’‘

A 25-person B2B SaaS company uses this to import leads from trade show spreadsheets into HubSpot within 15 minutes of their sales team updating the sheet. Before automation, marketing manually imported CSV files twice daily, often missing hot leads for hours and creating duplicate contacts when multiple team members imported the same data.

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

Google Sheets spreadsheet with contact data including email addresses in consistent columns
HubSpot account with contact creation permissions
Make account with available operations quota
Contact data formatted consistently with headers in the first row

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Email Addressemail
5 optional fieldsβ–Έ show
First Namefirstname
Last Namelastname
Company Namecompany
Phone Numberphone
Lead Sourcehs_lead_status

Step-by-Step Setup

1

Dashboard > Create a new scenario > Google Sheets

Create a new Make scenario

Start by creating a fresh scenario in Make. This will be the foundation for your Google Sheets to HubSpot contact import automation.

  1. 1Click 'Create a new scenario' from your Make dashboard
  2. 2Search for 'Google Sheets' in the app selector
  3. 3Click the Google Sheets icon to add it as your trigger module
βœ“ What you should see: You should see a Google Sheets module as the first step in your scenario canvas.
2

Google Sheets Module > Watch New Rows

Configure Google Sheets trigger

Set up the trigger to watch for new rows in your spreadsheet. Choose 'Watch New Rows' to detect when contacts are added.

  1. 1Click on the Google Sheets module to open its settings
  2. 2Select 'Watch New Rows' from the trigger options
  3. 3Connect your Google account if not already connected
  4. 4Choose your spreadsheet from the dropdown list
  5. 5Select the specific worksheet containing your contact data
βœ“ What you should see: The module should show your selected spreadsheet name and worksheet, with a green connection indicator.
⚠
Common mistake β€” Don't use 'Watch Updated Rows' unless you want updates to existing rows to create duplicate contacts in HubSpot.
Make
+
click +
search apps
Google Sheets
GO
Google Sheets
Configure Google Sheets trig…
Google Sheets
GO
module added
3

Google Sheets Module > Configuration

Set up row detection parameters

Configure how Make identifies new rows and which data to capture. Set the table to include headers and define your data range.

  1. 1Toggle 'Table contains headers' to YES
  2. 2Set 'Range' to include all your contact columns (e.g., A1:G)
  3. 3Leave 'Limit' at 1 to process one new contact at a time
  4. 4Click 'OK' to save the trigger configuration
βœ“ What you should see: Your trigger shows the correct range and header settings matching your spreadsheet structure.
⚠
Common mistake β€” If your headers contain spaces or special characters, Make will convert them to underscores in the data output.
4

Scenario Canvas > + > HubSpot > Create/Update a Contact

Add HubSpot module

Connect HubSpot as your action module to receive the contact data. This module will create or update contacts based on the spreadsheet data.

  1. 1Click the + button to add a new module after Google Sheets
  2. 2Search for 'HubSpot' in the app list
  3. 3Select HubSpot from the results
  4. 4Choose 'Create/Update a Contact' from the action options
βœ“ What you should see: A HubSpot module appears connected to your Google Sheets trigger with 'Create/Update a Contact' selected.
5

HubSpot Module > Connection > Create Connection

Connect your HubSpot account

Establish the connection between Make and your HubSpot portal. You'll need your HubSpot login credentials or API key.

  1. 1Click 'Create a connection' in the HubSpot module
  2. 2Choose 'OAuth2' connection type for easier setup
  3. 3Click 'Sign in with HubSpot' and authorize Make
  4. 4Verify the connection shows your correct HubSpot portal name
βœ“ What you should see: Green checkmark appears next to your HubSpot connection with your portal name displayed.
⚠
Common mistake β€” Make sure you're logged into the correct HubSpot account before authorizing - switching accounts later requires reconnection.
Make settings
Connection
Choose a connection…Add
click Add
Google Sheets
Log in to authorize
Authorize Make
popup window
βœ“
Connected
green checkmark
6

HubSpot Module > Email Field

Map email field for contact identification

Configure the email field mapping first since HubSpot uses email as the primary identifier for contacts. This determines whether to create new contacts or update existing ones.

  1. 1Click in the 'Email' field in the HubSpot module
  2. 2Select the email column from your Google Sheets data
  3. 3Verify the mapping shows the correct column header name
βœ“ What you should see: Email field shows your spreadsheet's email column mapped correctly with the column header visible.
⚠
Common mistake β€” Email is required for contact creation - if this field is empty or invalid, the entire operation will fail.
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 Module > Properties Mapping

Map contact properties

Connect your spreadsheet columns to HubSpot contact properties. Map standard fields like first name, last name, company, and phone number.

  1. 1Click 'Show advanced settings' to see all available fields
  2. 2Map 'First Name' to your spreadsheet's first name column
  3. 3Map 'Last Name' to your spreadsheet's last name column
  4. 4Map 'Company' to your company column if available
  5. 5Map 'Phone' to your phone number column
  6. 6Add any custom properties you need to populate
βœ“ What you should see: All mapped fields show your spreadsheet column names, and unmapped fields remain empty.
⚠
Common mistake β€” HubSpot phone numbers must include country codes for international formatting - plain numbers may not sync correctly.
8

Scenario Canvas > Run once

Test the scenario

Run a test to verify your mapping works correctly and data flows from Google Sheets to HubSpot as expected.

  1. 1Add a test row to your Google Sheets with sample contact data
  2. 2Return to Make and click 'Run once' at the bottom left
  3. 3Watch the modules execute and check for any error messages
  4. 4Verify the test contact appears in your HubSpot contacts list
βœ“ What you should see: Both modules show green checkmarks with successful execution, and your test contact appears in HubSpot with all mapped fields populated.
⚠
Common mistake β€” Test with real data formats you'll actually use - fake test data might not catch validation errors that real data will trigger.
Make
β–Ά Run once
executed
βœ“
Google Sheets
βœ“
HubSpot
HubSpot
πŸ”” notification
received
9

HubSpot Module > Right-click > Add error handler

Configure error handling

Set up proper error handling to manage duplicate contacts, invalid data, or API failures gracefully without breaking your automation.

  1. 1Right-click on the HubSpot module
  2. 2Select 'Add error handler'
  3. 3Choose 'Break' directive to stop on errors
  4. 4Add an email notification module to alert you of failures
βœ“ What you should see: Error handler appears as a dotted line from your HubSpot module with notification settings configured.
⚠
Common mistake β€” Don't use 'Ignore' error handling for contact imports - you'll lose data and never know it failed.
10

Scenario Canvas > ON/OFF toggle > Schedule

Turn on the scenario

Activate your automation so it runs automatically when new rows are added to your spreadsheet. Set the scheduling interval based on how quickly you need contacts imported.

  1. 1Click the 'ON/OFF' toggle in the bottom left to activate
  2. 2Set scheduling to 'Every 15 minutes' for regular imports
  3. 3Click 'Save' to store your scenario configuration
  4. 4Verify the scenario shows as 'Active' in your dashboard
βœ“ What you should see: Scenario status shows 'ON' with your selected schedule interval, and it appears active in your scenarios list.
⚠
Common mistake β€” Lower intervals like 1 minute will consume your operations faster - stick to 15+ minutes unless you need immediate imports.

Drop this into a Make custom function.

JavaScript β€” Custom Function{{if(1.email != ""; 1.email; "skip")}}
β–Έ Show code
{{if(1.email != ""; 1.email; "skip")}}
// Use this filter formula before HubSpot module to skip rows with empty emails and avoid API errors

... expand to see full code

{{if(1.email != ""; 1.email; "skip")}}

// Use this filter formula before HubSpot module to skip rows with empty emails and avoid API errors

Scaling Beyond 200+ contacts/day+ Records

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

1

Batch processing setup

Configure Google Sheets to process multiple rows per execution instead of one row at a time. Use Make's array iterator to handle batches of 10-20 contacts per run.

2

Rate limit management

Add a 2-second delay between HubSpot API calls to avoid hitting rate limits. HubSpot allows 150 requests per 10 seconds for contact creation.

3

Operation optimization

Remove unnecessary field mappings and use only required properties to reduce operations per contact. Each mapped property consumes additional API quota.

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 Make for this workflow

Use Make for this if you need real-time contact imports with complex field mapping or data transformation. Make handles HubSpot's custom properties better than most platforms and gives you granular control over error handling. Pick Zapier instead if your team doesn't code and you just need basic first name, last name, email imports - their HubSpot integration is simpler for basic use cases.

Cost

This workflow uses 2 operations per contact imported - one for the Google Sheets trigger and one for the HubSpot contact creation. At 100 new contacts per month, that's 200 operations monthly. Make's Core plan at $10.59/month includes 10,000 operations, easily covering this volume. Zapier's equivalent plan costs $19.99 for the same automation. N8n is free but requires hosting, which typically costs $15-20/month for reliable uptime.

Tradeoffs

Zapier wins on setup speed - their HubSpot integration has better field auto-mapping and requires less manual configuration. N8n offers unlimited executions if you self-host, making it cheaper for high-volume imports over 1,000 contacts monthly. But Make strikes the right balance with its visual interface, reasonable pricing, and robust error handling that actually tells you why contacts failed to import instead of silently skipping them.

Google Sheets API rate limits kick in at 300 requests per minute, which you'll hit if importing large batches. Make automatically handles retries, but imports will slow down significantly. HubSpot's contact API occasionally returns 'Property does not exist' errors for standard properties due to cache delays - adding a 30-second delay module before HubSpot usually fixes this. Phone number formatting is picky - international numbers without country codes get rejected, but Make doesn't show you the specific validation error, just 'Bad Request'.

Ideas for what to build next

  • β†’
    Set up contact list automation β€” Add contacts to specific HubSpot lists based on spreadsheet data like lead source or company type for better segmentation.
  • β†’
    Create Slack notifications for new contacts β€” Add a Slack module to notify your sales team immediately when high-value contacts are imported from the spreadsheet.
  • β†’
    Build contact enrichment workflow β€” Connect Clearbit or ZoomInfo after contact creation to automatically enrich imported contacts with additional company and contact data.

Related guides

Was this guide helpful?
← Google Sheets + HubSpot overviewMake profile β†’