

How to Import Event Leads from Google Sheets to HubSpot with N8n
Automatically import event leads from a Google Sheet into HubSpot with custom tags using N8n's self-hosted workflow automation.
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 event leads and want unlimited executions without per-run costs
Not ideal for
Occasional importers who prefer simple setup over hosting complexity
Sync type
pollingUse case type
importReal-World Example
A 25-person marketing agency imports 100-300 leads per month from trade shows and conferences. Before automation, their sales team manually entered leads from spreadsheets, taking 2-3 hours per event and often losing leads in the process. Now they paste event leads into a standard Google Sheet format and contacts appear in HubSpot within 3 minutes with proper event source tags for campaign tracking.
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 |
| Job Title | jobtitle |
| Phone Number | phone |
Step-by-Step Setup
Main dashboard > New workflow
Install and configure N8n
Set up N8n on your server or local machine. You need the self-hosted version to handle lead imports efficiently without per-execution costs.
- 1Run 'npx n8n' in your terminal to start N8n locally
- 2Open http://localhost:5678 in your browser
- 3Create your admin account with email and password
- 4Click 'New workflow' to start building
Workflow canvas > + > Google Sheets
Add Google Sheets trigger node
Configure N8n to monitor your event leads spreadsheet. This watches for new rows you paste after collecting leads at events.
- 1Click the '+' button to add a new node
- 2Search for 'Google Sheets' and select it
- 3Choose 'On Row Added' as the trigger event
- 4Click 'Sign in with Google' to authenticate
Google Sheets node > Parameters
Select your event leads spreadsheet
Point the trigger to your specific Google Sheet where you paste event leads. This sets up monitoring for new lead entries.
- 1In the 'Spreadsheet' dropdown, find your event leads sheet
- 2Select the worksheet tab (usually 'Sheet1' or 'Leads')
- 3Set 'Trigger On' to 'Row Added'
- 4Click 'Test step' to verify connection
Workflow canvas > + > HubSpot
Add HubSpot node
Connect to HubSpot's API to create new contacts. This handles the actual import of lead data into your CRM.
- 1Click '+' after the Google Sheets node
- 2Search for 'HubSpot' and select it
- 3Choose 'Contact' as the resource type
- 4Select 'Create' as the operation
HubSpot node > Credential > Create New
Authenticate with HubSpot
Connect N8n to your HubSpot account using a private app token. This gives permission to create and update contacts.
- 1In HubSpot node, click 'Create New Credential'
- 2Select 'Private App Token' authentication method
- 3Go to HubSpot Settings > Private Apps > Create app
- 4Copy the token and paste into N8n credential field
HubSpot node > Additional Fields
Map lead data fields
Configure which columns from your Google Sheet map to HubSpot contact properties. This ensures lead information transfers correctly.
- 1In the HubSpot node, click 'Add Property' for each field
- 2Map 'email' to your spreadsheet's Email column using the expression editor
- 3Add 'firstname' mapped to your Name/First Name column
- 4Add 'company' mapped to your Company column
HubSpot node > Additional Fields > Tag
Add event source tag
Tag imported contacts with their event source for tracking. This helps identify which leads came from which events in HubSpot.
- 1In the HubSpot node, click 'Add Property'
- 2Select 'Tag' from the property dropdown
- 3Set the value to your event name like 'TechCrunch Disrupt 2024'
- 4Click 'Add Property' again to add more tags if needed
HubSpot node > Settings
Set up error handling
Configure what happens when lead imports fail. This prevents losing leads when HubSpot API issues occur or duplicate emails are detected.
- 1Click the HubSpot node settings (3 dots menu)
- 2Select 'Settings' from the dropdown
- 3Set 'Continue On Fail' to true
- 4Choose 'Output Error Data' to capture failed imports
Workflow > Test workflow
Test the complete workflow
Run a test import with sample lead data to verify the end-to-end process works. This catches mapping errors before you import real event leads.
- 1Click 'Test workflow' button in the top toolbar
- 2Add a test row to your Google Sheet with sample lead data
- 3Wait 30 seconds for the trigger to fire
- 4Check the execution log for success or error messages
Workflow header > Active toggle
Activate the workflow
Turn on automatic monitoring so the workflow runs whenever you paste new event leads. This enables hands-off lead import after events.
- 1Click the toggle switch at the top of the workflow to 'Active'
- 2Save the workflow with a descriptive name like 'Event Leads Import'
- 3Add a test row to verify the active workflow triggers correctly
- 4Check HubSpot to confirm the contact was created with proper tags
Drop this into an n8n Code node.
JavaScript — Code Node// Clean and validate email before sending to HubSpot▸ Show code
// Clean and validate email before sending to HubSpot
const email = $json['Email'].toLowerCase().trim();
if (!email.includes('@') || email.includes(' ')) {... expand to see full code
// Clean and validate email before sending to HubSpot
const email = $json['Email'].toLowerCase().trim();
if (!email.includes('@') || email.includes(' ')) {
throw new Error('Invalid email format: ' + email);
}
return { email };Scaling Beyond 100+ leads per import batch+ Records
If your volume exceeds 100+ leads per import batch records, apply these adjustments.
Add batch processing
Split large imports into chunks of 50 contacts using N8n's SplitInBatches node. This prevents API timeouts and makes error handling easier when individual contacts fail.
Implement delay nodes
Add 100ms delays between HubSpot API calls to stay under their 100 requests/10 seconds rate limit. Use the Wait node with 'Resume On Webhook' disabled for precise timing control.
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 import leads regularly and want to avoid per-execution costs. Self-hosting N8n means unlimited workflow runs - critical when importing 50+ leads per event. The code flexibility also lets you clean up messy event data before sending to HubSpot. Skip N8n if you only import leads quarterly - Zapier's simpler setup isn't worth the hosting overhead for occasional use.
This workflow uses 2 executions per imported lead - one for the trigger, one for the HubSpot contact creation. At 200 leads/month, that's 400 executions total. Self-hosted N8n costs only your server time (roughly $10/month for a basic VPS). N8n Cloud charges $20/month for 5,000 executions, so you'd stay well under limits. Zapier would cost $20/month for the same volume, while Make charges $9/month but limits you to 1,000 operations.
Zapier handles Google Sheets triggers faster - usually 1-2 minutes versus N8n's 2-3 minute polling interval. Make offers better error handling with automatic retry logic and cleaner visual debugging. But N8n wins on data transformation capabilities. You can write custom JavaScript to clean phone numbers, split full names into first/last, or validate email formats before sending to HubSpot - something that requires premium Zapier plans.
Google Sheets API occasionally returns stale data on rapid updates, causing N8n to miss recently pasted rows. The polling trigger can also fire multiple times if you paste rows quickly, creating duplicate contacts. HubSpot's rate limit is 100 requests per 10 seconds - if you import 50+ leads simultaneously, add a delay node between operations or HubSpot will reject the excess requests with 429 errors.
Ideas for what to build next
- →Set up lead scoring automation — Create a follow-up workflow that assigns lead scores based on company size, job title, and event type to prioritize your sales team's outreach efforts.
- →Add Slack notifications for VIP leads — Build a secondary workflow that sends Slack alerts when high-value contacts (enterprise companies, C-level titles) are imported from events for immediate sales follow-up.
- →Create event ROI tracking — Extend the workflow to log lead values in a separate tracking sheet, calculating cost-per-lead and conversion rates for different events and lead sources.
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