

How to Import Event Leads from Google Sheets to Salesforce with Pipedream
Automatically import trade show attendee data from Google Sheets rows into Salesforce leads.
Steps and UI details are based on platform versions at time of writing β check each platform for the latest interface.
Best for
Sales teams who collect leads at events and need them in Salesforce within 15 minutes without manual data entry
Not ideal for
Teams needing instant sync or complex lead scoring before import should use webhooks or dedicated event platforms
Sync type
scheduledUse case type
importReal-World Example
A 25-person B2B software company collects 150 leads at a trade show and pastes them into a Google Sheet. Their workflow polls every 10 minutes and creates Salesforce leads automatically with proper lead source attribution. Before automation, the marketing coordinator spent 2 hours manually entering leads and made typos on 15% of records.
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 | ||
| Last Name | LastName | |
| Company | Company | |
8 optional fieldsβΈ show
Email | |
| First Name | FirstName |
| Lead Source | LeadSource |
| Lead Status | Status |
| Title | Title |
| Phone | Phone |
| Lead Source Detail | LeadSource_Detail__c |
| Industry | Industry |
Step-by-Step Setup
Pipedream Dashboard > New Workflow
Create New Pipedream Workflow
Go to pipedream.com and click 'New Workflow' in the top right. You'll see a blank canvas with a trigger step already added. This is where you'll configure the Google Sheets polling trigger to watch for new rows.
- 1Click 'New Workflow' button
- 2Name your workflow 'Event Lead Import'
- 3Click the default trigger step to configure it
Trigger Step > Choose App > Google Sheets
Configure Google Sheets Trigger
In the trigger configuration, search for 'Google Sheets' and select 'New Row Added'. This trigger polls your sheet every 15 minutes by default. You'll need to connect your Google account and select the specific spreadsheet containing your event leads.
- 1Search for 'Google Sheets' in the app list
- 2Select 'New Row Added (Instant)' trigger
- 3Click 'Connect Account' and authorize Google
- 4Choose your event leads spreadsheet from the dropdown
Google Sheets Trigger > Configuration
Select Sheet and Configure Polling
Choose the specific worksheet tab containing your leads data. Set the polling interval to 10 minutes if you need faster detection of new leads. The trigger will remember the last processed row to avoid duplicates.
- 1Select the worksheet tab (usually 'Sheet1' or 'Leads')
- 2Set 'Check for changes every' to 10 minutes
- 3Enable 'Include column headers' checkbox
- 4Click 'Save and Continue'
Workflow > + Add Step > Salesforce
Add Salesforce Step
Click the + button below your trigger to add a new step. Search for Salesforce and select 'Create Record'. This action will create a new lead record for each row detected in your Google Sheet.
- 1Click the + button to add a step
- 2Search for 'Salesforce' in the apps list
- 3Select 'Create Record' action
- 4Choose 'Lead' as the object type
Salesforce Step > Connect Account
Connect Salesforce Account
Click 'Connect Account' and log into your Salesforce org. Pipedream needs Create and Read permissions on Lead objects. After connecting, you'll see all available Lead fields for mapping in the configuration panel.
- 1Click 'Connect Account' button
- 2Enter your Salesforce username and password
- 3Click 'Allow' to grant Pipedream permissions
- 4Select your connected account from the dropdown
Salesforce Step > Field Mapping
Map Required Lead Fields
Map the required fields first: Last Name and Company. Click each field and select the corresponding column from your Google Sheet trigger data. Salesforce requires these two fields minimum for lead creation.
- 1Click 'Last Name' field and select the name column from your sheet
- 2Click 'Company' field and select the company column
- 3Map 'Email' to your email column
- 4Set 'Lead Source' to 'Trade Show' (static value)
Salesforce Step > Field Mapping > Optional Fields
Map Additional Lead Fields
Map optional fields like First Name, Title, Phone, and Lead Status. Use static values where appropriate - set Lead Status to 'New' and Lead Source to your event name for proper attribution.
- 1Map 'First Name' to your first name column
- 2Map 'Title' to job title column if available
- 3Map 'Phone' to phone number column
- 4Set 'Status' to 'New' (static value)
- 5Set 'Lead Source Detail' to your event name
Workflow > + Add Step > Code
Add Duplicate Check Logic
Add a code step before Salesforce to check for existing leads by email. This prevents creating duplicate records when you re-run the import. The code queries Salesforce and skips creation if a lead with that email already exists.
- 1Click + to add a step between Sheets and Salesforce
- 2Select 'Node.js' code step
- 3Paste the duplicate check code
- 4Drag this step above the Salesforce step
Salesforce Step > Advanced > Conditional Execution
Add Conditional Salesforce Creation
Modify your Salesforce step to only run when the duplicate check returns 'create'. Click the Salesforce step settings and add a condition that checks the previous code step's output.
- 1Click the gear icon on your Salesforce step
- 2Enable 'Conditional Execution'
- 3Set condition to 'steps.code.action === "create"'
- 4Save the condition
Workflow > Test > Deploy
Test and Deploy Workflow
Click 'Test' to run your workflow with sample data from your sheet. Check that leads are created correctly in Salesforce with all mapped fields. Then deploy the workflow to start automatic polling.
- 1Click 'Test' button in the top right
- 2Verify the test creates a lead in Salesforce
- 3Check all field mappings are correct
- 4Click 'Deploy' to activate polling
Add this Node.js code step before Salesforce to check for duplicate leads by email and skip creation if they already exist. Paste this in a code step between your trigger and Salesforce action.
JavaScript β Code Stepimport { SalesforceApi } from '@salesforce/salesforce-api'βΈ Show code
import { SalesforceApi } from '@salesforce/salesforce-api'
export default defineComponent({
async run({ steps, $ }) {... expand to see full code
import { SalesforceApi } from '@salesforce/salesforce-api'
export default defineComponent({
async run({ steps, $ }) {
const email = steps.trigger.event.Email
if (!email) {
return { action: 'create', reason: 'No email to check' }
}
// Query existing leads by email
const query = `SELECT Id, Email FROM Lead WHERE Email = '${email}' LIMIT 1`
try {
const response = await axios({
method: 'GET',
url: `${steps.salesforce.$auth.instance_url}/services/data/v54.0/query`,
headers: {
'Authorization': `Bearer ${steps.salesforce.$auth.oauth_access_token}`,
'Content-Type': 'application/json'
},
params: { q: query }
})
if (response.data.totalSize > 0) {
console.log(`Duplicate found for ${email}, skipping creation`)
return {
action: 'skip',
reason: 'Lead with this email already exists',
existingId: response.data.records[0].Id
}
}
return { action: 'create', reason: 'No duplicate found' }
} catch (error) {
console.error('Duplicate check failed:', error.message)
// Create anyway if check fails
return { action: 'create', reason: 'Duplicate check failed, creating anyway' }
}
}
})Scaling Beyond 500+ leads per import+ Records
If your volume exceeds 500+ leads per import records, apply these adjustments.
Use bulk API for large batches
Switch from single record creation to Salesforce Bulk API when importing more than 200 leads at once to avoid rate limits and timeouts.
Implement batch processing
Split large sheets into chunks of 100 rows and process them sequentially to prevent memory issues and improve error handling.
Add retry logic for failures
Wrap Salesforce calls in try/catch blocks with exponential backoff to handle temporary API limits or network issues during large imports.
Monitor API usage limits
Track your Salesforce API call consumption in Setup > System Overview to ensure you don't hit daily limits during large 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 Pipedream for this if you need custom duplicate detection logic or complex data transformation before import. The Node.js code steps handle phone number formatting, lead scoring, or conditional field mapping better than drag-and-drop tools. Pipedream's instant webhook processing also works well if you upgrade from polling to real-time sheet changes. Skip Pipedream if you want a simple point-and-click setup - Zapier handles basic lead imports with less configuration.
This workflow costs about 1 credit per lead imported. At 200 leads per month, you'll use 200 credits ($10 on the Basic plan). Zapier charges 1 task per lead but caps at 750 tasks free, making it cheaper for smaller volumes. Make.com processes the same 200 leads for about $3 using their bulk operations pricing.
Zapier beats Pipedream on setup speed - their Google Sheets trigger configures in 2 minutes versus Pipedream's 5-step process. Make handles larger batches better with native bulk operations and better rate limit handling. n8n gives you the same coding flexibility as Pipedream but runs on your infrastructure for unlimited volume. Power Automate integrates deeper with Microsoft environments if you're using Teams or Outlook for lead follow-up. But Pipedream's duplicate checking code and error handling beats all of them for complex event lead scenarios.
You'll hit Google Sheets rate limits at 300+ leads per minute if you paste everything at once. Salesforce daily API limits kick in around 5,000 leads if you're on Professional edition. Phone number formatting breaks constantly - European numbers with + symbols cause validation errors in US Salesforce orgs. Set up monitoring because authentication tokens expire after 2 weeks of inactivity, killing your imports silently.
Ideas for what to build next
- βAdd lead scoring logic β Insert a code step that calculates lead scores based on title, company size, or industry before creating Salesforce records.
- βSet up error handling notifications β Configure Slack or email alerts when lead imports fail due to validation errors or missing required fields.
- βCreate reverse sync for lead updates β Build a second workflow that updates your Google Sheet when lead status changes in Salesforce for better tracking.
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