

How to Import Event Leads from Google Sheets to HubSpot with Pipedream
Automatically sync new event leads from Google Sheets to HubSpot contacts with event tagging.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Teams who collect leads at events and need them tagged and imported to HubSpot within 15 minutes.
Not ideal for
High-frequency imports over 1000 leads per event - use HubSpot's CSV import instead.
Sync type
scheduledUse case type
importReal-World Example
A 25-person B2B marketing team collects 150 leads at a trade show, pastes them into their Event Leads sheet, and needs them in HubSpot with 'Trade Show 2024' tags within 15 minutes. Before automation, someone manually imported CSV files which took 45 minutes and often missed the event source tag.
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 Pipedream
Copy the pre-built Pipedream blueprint and paste it straight into Pipedream. 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 | |
| First Name | firstname | |
| Last Name | lastname | |
5 optional fields▸ show
| Company | company |
| Phone Number | phone |
| Job Title | jobtitle |
| Lead Source | hs_lead_status |
| Event Notes | notes_last_contacted |
Step-by-Step Setup
Pipedream > Workflows > New
Create new Pipedream workflow
Go to pipedream.com and click New Workflow. You'll see a blank canvas with a trigger section at the top. This is where you'll configure the Google Sheets monitoring. Pipedream will check your sheet every 15 minutes by default.
- 1Click the blue New Workflow button
- 2Select 'Build your own' from the options
- 3Name your workflow 'Event Lead Import'
- 4Click Create Workflow
Trigger > Select App > Google Sheets
Add Google Sheets trigger
Click the trigger step and search for Google Sheets. Select 'New Row Added' as your trigger type. This will monitor your specific sheet for new rows and fire the workflow when leads are pasted. You'll need to authenticate with your Google account that has access to the sheet.
- 1Click 'Select an app' in the trigger
- 2Search for 'Google Sheets' and select it
- 3Choose 'New Row Added' trigger
- 4Connect your Google account
Trigger Configuration > Spreadsheet Settings
Configure sheet and range
Select your Event Leads spreadsheet from the dropdown. Choose the specific worksheet tab where you paste leads. Set the range to include all columns you need - typically A:H for name, email, company, phone, title, notes, and source. Leave the header row option enabled if row 1 contains column names.
- 1Select your spreadsheet from the Spreadsheet dropdown
- 2Choose the correct worksheet tab
- 3Set Range to 'A:H' or your column range
- 4Enable 'Worksheet contains headers'
Trigger > Test
Test the Google Sheets trigger
Add a test row to your sheet with sample lead data. Come back to Pipedream and click Test Trigger. Pipedream will fetch the new row and show you the data structure. You need this data to map fields in the next step.
- 1Add a sample lead row to your Google Sheet
- 2Click 'Test trigger' in Pipedream
- 3Wait for the data to appear
- 4Review the field names and values
Steps > Add Step > HubSpot
Add HubSpot step
Click the + button below your trigger to add a new step. Search for HubSpot and select 'Create Contact' action. This will create a new contact record for each lead row. You'll authenticate with HubSpot using an account that has contact creation permissions.
- 1Click the + button to add a step
- 2Search for 'HubSpot' and select it
- 3Choose 'Create Contact' action
- 4Connect your HubSpot account
HubSpot Step > Field Mapping
Map contact fields
Map your Google Sheets columns to HubSpot contact properties. Click each HubSpot field and select the corresponding data from your trigger. Email is required - HubSpot will reject records without it. Map firstname, lastname, company, phone, and jobtitle at minimum for useful contact records.
- 1Click the Email field and select your email column
- 2Map firstname to your first name column
- 3Map lastname to your last name column
- 4Map company and phone fields
- 5Set jobtitle if you collect titles
HubSpot Step > Additional Properties
Add event source tag
Scroll down to find the 'hs_lead_status' or custom tag fields in the HubSpot step. Set a fixed value like 'Event Lead - Trade Show 2024' so you can filter these contacts later. You can also map a dynamic tag if your sheet includes a source column with different event names.
- 1Scroll to additional properties section
- 2Find 'Lead Status' or tag fields
- 3Enter your event name as a fixed value
- 4Or map to a source column from your sheet
Steps > Add Step > Code
Add duplicate prevention
Add a Node.js code step before HubSpot to check for existing contacts. Pipedream's HubSpot integration doesn't prevent duplicates by default. Use the HubSpot API to search by email first, then only create if no match is found. This prevents duplicate contacts from repeat imports.
- 1Click + to add a step before HubSpot
- 2Select 'Code' and choose Node.js
- 3Paste the duplicate-check code
- 4Update the HubSpot step to use conditional logic
Workflow > Test
Test the complete workflow
Add another test row to your sheet with different lead data. Click Test Workflow to run all steps. Check that the contact appears in HubSpot with correct field values and your event tag. Verify the duplicate check works by running the same data twice.
- 1Add a new test lead to your sheet
- 2Click 'Test workflow' button
- 3Review each step's output
- 4Check HubSpot for the new contact
- 5Test duplicate prevention with same email
Workflow > Deploy
Deploy and set schedule
Click Deploy to activate your workflow. The trigger will check for new sheet rows every 15 minutes by default. You can change this to every 5 minutes if you need faster imports, but it will use more credits. The workflow will now run automatically whenever new leads are pasted.
- 1Click the Deploy button in the top right
- 2Confirm the deployment
- 3Check the trigger schedule setting
- 4Adjust timing if needed
Add this Node.js code step before the HubSpot step to prevent duplicate contacts and handle empty fields gracefully. Paste it in a new code step and adjust the email field reference to match your trigger data.
JavaScript — Code Stepimport axios from 'axios'▸ Show code
import axios from 'axios'
export default defineComponent({
async run({ steps, $ }) {... expand to see full code
import axios from 'axios'
export default defineComponent({
async run({ steps, $ }) {
const email = steps.trigger.event.email
const hubspotToken = process.env.HUBSPOT_TOKEN
// Check for existing contact
try {
const searchResponse = await axios.get(
`https://api.hubapi.com/contacts/v1/contact/email/${email}/profile`,
{ headers: { 'Authorization': `Bearer ${hubspotToken}` } }
)
if (searchResponse.status === 200) {
console.log(`Contact ${email} already exists, skipping creation`)
return { skip_creation: true, existing_contact: searchResponse.data }
}
} catch (error) {
if (error.response?.status !== 404) {
throw error
}
}
// Clean and prepare contact data
const contactData = {
email: email,
firstname: steps.trigger.event.first_name || '',
lastname: steps.trigger.event.last_name || '',
company: steps.trigger.event.company || 'Not provided',
phone: steps.trigger.event.phone || null,
jobtitle: steps.trigger.event.title || null,
hs_lead_status: steps.trigger.event.source || 'Event Lead'
}
// Remove null values
Object.keys(contactData).forEach(key => {
if (contactData[key] === null || contactData[key] === '') {
delete contactData[key]
}
})
return { skip_creation: false, contact_data: contactData }
}
})Scaling Beyond 50+ leads per import batch+ Records
If your volume exceeds 50+ leads per import batch records, apply these adjustments.
Split large batches across multiple sheet rows
Import 25-50 leads at a time to avoid timeout issues. Pipedream handles each row individually, so large batches may hit execution time limits.
Monitor your HubSpot API usage
HubSpot allows 10,000 API calls per day. Each contact creation uses 1-2 calls, so factor this into your import frequency planning.
Consider CSV import for 200+ leads
HubSpot's native CSV import handles large volumes better than automation. Use Pipedream for smaller, frequent imports that need immediate processing.
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 Pipedream for this if you need event leads in HubSpot within 15 minutes of pasting them in a sheet. The Node.js code steps handle duplicate prevention better than Zapier's basic filters. The instant processing means your sales team can start calling leads while the event buzz is fresh. Skip Pipedream if you're importing 500+ leads per event - HubSpot's CSV import is faster for bulk loads.
This costs about 1 credit per lead processed. At 100 event leads monthly, you'll use 100 credits ($5/month on the basic plan). Zapier charges $20/month for the same volume. Make is cheaper at $9/month but their Google Sheets polling is less reliable. Pipedream wins on cost and code flexibility.
Zapier's HubSpot integration has better built-in duplicate handling but costs 4x more. Make's visual interface is cleaner but their error handling is weaker when sheet formatting changes. n8n offers similar coding power but requires self-hosting. Power Automate works well if you're already in Microsoft ecosystem but has no built-in duplicate prevention. Pipedream strikes the right balance between coding power and managed hosting.
You'll hit Google Sheets API limits if checking every 5 minutes with large sheets - stick to 15-minute intervals. HubSpot sometimes rejects contacts with invalid phone formats, so add validation in your code step. The biggest gotcha: if someone edits your sheet headers, the whole mapping breaks until you reconfigure the trigger.
Ideas for what to build next
- →Add lead scoring automation — Create a follow-up workflow that scores new event leads based on company size and job title for sales prioritization.
- →Set up sales notification — Trigger Slack alerts to your sales team when high-value event leads are imported based on company domain or title keywords.
- →Create event ROI tracking — Build a dashboard workflow that tracks conversion rates from event leads to customers for measuring event effectiveness.
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