

How to Import Contacts from Google Sheets to HubSpot with N8n
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 need custom data cleaning or transformation before importing contacts from spreadsheets.
Not ideal for
Users who want the fastest setup with minimal configuration and don't need data transformation.
Sync type
pollingUse case type
importReal-World Example
A 25-person B2B marketing agency uses this to import leads from event sign-up sheets into HubSpot. Before automation, their marketing coordinator manually copied 50-100 contacts weekly from Google Forms responses, taking 2 hours and introducing typos. Now the workflow runs automatically and uses N8n's code nodes to standardize company names and split full names into first/last fields.
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 n8n
Copy the pre-built n8n blueprint and paste it straight into n8n. 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 |
| Job Title | jobtitle |
Step-by-Step Setup
Workflows > New > Add Node > Google Sheets
Create new workflow and add Google Sheets trigger
Start a fresh workflow in N8n and configure it to monitor your contact spreadsheet. The Google Sheets trigger will poll for new rows every few minutes.
- 1Click the '+' button to create a new workflow
- 2Click 'Add node' then search for 'Google Sheets'
- 3Select 'Google Sheets Trigger' from the results
- 4Choose 'On Row Added' as the trigger event
Node Settings > Credentials > Create New
Connect your Google account
Authenticate with Google to give N8n access to your spreadsheets. This creates a reusable credential for future workflows.
- 1Click 'Create New' next to the Credential field
- 2Select 'Google Sheets OAuth2 API' from the dropdown
- 3Click 'Connect my account' and sign in to Google
- 4Authorize N8n to access your Google Sheets
- 5Click 'Save' to store the credential
Google Sheets Node > Parameters
Select your contact spreadsheet and worksheet
Point the trigger to your specific contact sheet. N8n needs to know exactly which spreadsheet and tab to monitor for new rows.
- 1In the 'Document' dropdown, select your contact spreadsheet
- 2Choose the correct worksheet tab from the 'Sheet' dropdown
- 3Set 'Trigger On' to 'Row Added'
- 4Leave 'Poll Times' at the default unless you need faster checking
Node > Execute > Fetch Test Event
Test the Google Sheets trigger
Add a test row to verify N8n can read your spreadsheet structure. This also shows you the exact field names for mapping to HubSpot.
- 1Add a sample contact row to your Google Sheet
- 2Return to N8n and click 'Execute Node' on the Google Sheets trigger
- 3Click 'Fetch Test Event' to pull the sample data
- 4Review the output to see your column names and data format
Add Node > HubSpot > Contact > Create or Update
Add HubSpot node for contact creation
Connect the HubSpot node to create new contacts from your spreadsheet data. Configure it to handle both new contacts and updates to existing ones.
- 1Click the '+' button to add a new node after Google Sheets
- 2Search for 'HubSpot' and select it
- 3Set 'Resource' to 'Contact'
- 4Set 'Operation' to 'Create or Update'
- 5This operation will update existing contacts or create new ones
HubSpot Node > Credentials > Create New
Connect your HubSpot account
Authenticate with HubSpot using your API key or OAuth. The API key method is simpler for most users.
- 1Click 'Create New' next to the HubSpot Credential field
- 2Select 'HubSpot API Key' from the dropdown
- 3Go to HubSpot > Settings > Integrations > Private Apps
- 4Copy your API key and paste it into N8n
- 5Click 'Save' to store the credential
HubSpot Node > Properties > Email
Map email field for deduplication
Configure the email field first since HubSpot uses it to identify duplicate contacts. This ensures updates work correctly.
- 1Scroll to the 'Email' field in the HubSpot node
- 2Click the expression editor (gears icon) next to Email
- 3Select your email column from the Google Sheets data
- 4The expression should look like {{ $json.Email }} or similar
HubSpot Node > Properties > Add Property
Map contact fields from spreadsheet
Connect your Google Sheets columns to HubSpot contact properties. Focus on the essential fields first, then add others as needed.
- 1Click 'Add Property' to map additional fields
- 2Select 'First Name' and map it to your first name column
- 3Add 'Last Name' and map to your last name column
- 4Add 'Company' if you have company data in your sheet
- 5Map any other relevant fields like phone, title, or custom properties
Workflow > Execute Workflow
Test the complete workflow
Run the full workflow to verify data flows correctly from Google Sheets to HubSpot. Check both the N8n execution and your HubSpot contacts.
- 1Click 'Execute Workflow' in the top toolbar
- 2Watch each node execute and check for any error messages
- 3Review the HubSpot node output to confirm success
- 4Check your HubSpot contacts list for the new/updated contact
Workflow > Toggle Active > Settings
Activate the workflow
Turn on the workflow to start monitoring your Google Sheet for new contacts. Set a reasonable polling interval to balance responsiveness with API usage.
- 1Click the toggle switch next to 'Inactive' at the top
- 2The workflow status should change to 'Active'
- 3Click the workflow settings gear icon
- 4Set 'Timezone' to match your business hours
- 5Save the workflow with a descriptive name
Drop this into an n8n Code node.
JavaScript β Code Node// Clean phone numbers to match HubSpot formatβΈ Show code
// Clean phone numbers to match HubSpot format
if ($json.phone) {
const cleaned = $json.phone.replace(/[^\d]/g, '');... expand to see full code
// Clean phone numbers to match HubSpot format
if ($json.phone) {
const cleaned = $json.phone.replace(/[^\d]/g, '');
$json.phone = cleaned.length === 10 ? `+1${cleaned}` : `+${cleaned}`;
}
return $json;Scaling Beyond 100+ contacts/day+ Records
If your volume exceeds 100+ contacts/day records, apply these adjustments.
Add batch processing
Use Split in Batches node to process contacts in groups of 10-20. This prevents timeouts and makes error handling more manageable when large imports fail partway through.
Implement delay between requests
Add a Wait node set to 2-3 seconds between batches to stay under HubSpot's rate limits. Without delays, you'll hit 429 errors around contact 50-60 in bulk imports.
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 N8n for this if you need custom data transformation or have complex deduplication rules. N8n's code nodes let you clean messy spreadsheet data before it hits HubSpot β think splitting full names, formatting phone numbers, or mapping company domains to industries. The open-source version handles this workflow completely free. Skip N8n if you want the simplest possible setup β Zapier connects these apps in 3 clicks versus N8n's 10+ configuration steps.
This workflow uses 1 execution per new row. At 200 contacts/month, that's 200 executions total. N8n Cloud's Starter plan ($20/month) includes 5,000 executions, so you're well covered. Zapier's Professional plan ($49/month) handles the same volume but charges $0.30 per task over 2,000. Make's Core plan ($10/month) gives you 10,000 operations monthly. N8n Cloud costs twice as much as Make but half of Zapier's price.
Zapier wins on setup speed β their Google Sheets to HubSpot Zap configures in under 5 minutes with smart field suggestions. Make offers better error handling with automatic retry logic and clearer execution logs when contacts fail to import. But N8n gives you the most control over data transformation. You can write JavaScript to handle edge cases that break other platforms, like contacts with multiple email addresses or company names that need standardization.
Google Sheets API has a 5-minute delay before N8n sees new rows β don't expect instant imports. HubSpot's rate limit kicks in at 100 requests per 10 seconds, so bulk imports need throttling or they'll fail halfway through. Phone number formatting is tricky since HubSpot expects specific formats but spreadsheets rarely match β you'll need a code node to clean them. Watch for duplicate email detection issues when your sheet has multiple rows for the same person with different data.
Ideas for what to build next
- βAdd Slack notifications for new contacts β Connect a Slack node after HubSpot to notify your sales team when high-value contacts are imported based on company size or title.
- βCreate follow-up email sequences β Add contacts to specific HubSpot email workflows based on lead source or other spreadsheet data to trigger personalized nurture sequences.
- βSet up contact scoring automation β Use additional HubSpot nodes to assign lead scores based on spreadsheet data like company size, industry, or job title for better sales prioritization.
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