

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
pollingUse case type
importReal-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.
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 |
| Last Name | lastname |
| Company Name | company |
| Phone Number | phone |
| Lead Source | hs_lead_status |
Step-by-Step Setup
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.
- 1Click 'Create a new scenario' from your Make dashboard
- 2Search for 'Google Sheets' in the app selector
- 3Click the Google Sheets icon to add it as your trigger module
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.
- 1Click on the Google Sheets module to open its settings
- 2Select 'Watch New Rows' from the trigger options
- 3Connect your Google account if not already connected
- 4Choose your spreadsheet from the dropdown list
- 5Select the specific worksheet containing your contact data
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.
- 1Toggle 'Table contains headers' to YES
- 2Set 'Range' to include all your contact columns (e.g., A1:G)
- 3Leave 'Limit' at 1 to process one new contact at a time
- 4Click 'OK' to save the trigger configuration
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.
- 1Click the + button to add a new module after Google Sheets
- 2Search for 'HubSpot' in the app list
- 3Select HubSpot from the results
- 4Choose 'Create/Update a Contact' from the action options
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.
- 1Click 'Create a connection' in the HubSpot module
- 2Choose 'OAuth2' connection type for easier setup
- 3Click 'Sign in with HubSpot' and authorize Make
- 4Verify the connection shows your correct HubSpot portal name
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.
- 1Click in the 'Email' field in the HubSpot module
- 2Select the email column from your Google Sheets data
- 3Verify the mapping shows the correct column header name
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.
- 1Click 'Show advanced settings' to see all available fields
- 2Map 'First Name' to your spreadsheet's first name column
- 3Map 'Last Name' to your spreadsheet's last name column
- 4Map 'Company' to your company column if available
- 5Map 'Phone' to your phone number column
- 6Add any custom properties you need to populate
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.
- 1Add a test row to your Google Sheets with sample contact data
- 2Return to Make and click 'Run once' at the bottom left
- 3Watch the modules execute and check for any error messages
- 4Verify the test contact appears in your HubSpot contacts list
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.
- 1Right-click on the HubSpot module
- 2Select 'Add error handler'
- 3Choose 'Break' directive to stop on errors
- 4Add an email notification module to alert you of failures
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.
- 1Click the 'ON/OFF' toggle in the bottom left to activate
- 2Set scheduling to 'Every 15 minutes' for regular imports
- 3Click 'Save' to store your scenario configuration
- 4Verify the scenario shows as 'Active' in your dashboard
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 errorsScaling Beyond 200+ contacts/day+ Records
If your volume exceeds 200+ contacts/day records, apply these adjustments.
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.
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.
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
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.
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.
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
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