Intermediate~15 min setupProductivity & CRMVerified April 2026
Google Sheets logo
Salesforce logo

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

scheduled

Use case type

import

Real-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.

/mo
505005K50K

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

Skip the setup

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.

Google account with edit access to the event leads spreadsheet
Salesforce account with Lead create permissions and API access enabled
Google Sheets formatted with consistent column headers in the first row
Salesforce lead assignment rules configured if you want leads auto-assigned to reps

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Last NameLastName
CompanyCompany
8 optional fieldsβ–Έ show
EmailEmail
First NameFirstName
Lead SourceLeadSource
Lead StatusStatus
TitleTitle
PhonePhone
Lead Source DetailLeadSource_Detail__c
IndustryIndustry

Step-by-Step Setup

1

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.

  1. 1Click 'New Workflow' button
  2. 2Name your workflow 'Event Lead Import'
  3. 3Click the default trigger step to configure it
βœ“ What you should see: You should see a workflow canvas with one unconfigured trigger step labeled 'Untitled'.
2

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.

  1. 1Search for 'Google Sheets' in the app list
  2. 2Select 'New Row Added (Instant)' trigger
  3. 3Click 'Connect Account' and authorize Google
  4. 4Choose your event leads spreadsheet from the dropdown
βœ“ What you should see: The trigger step should show 'Google Sheets' with a green connected status and your spreadsheet name.
⚠
Common mistake β€” The 'instant' trigger actually polls every 15 minutes. For true real-time, you'd need a webhook setup.
Pipedream
+
click +
search apps
Google Sheets
GO
Google Sheets
Configure Google Sheets Trig…
Google Sheets
GO
module added
3

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.

  1. 1Select the worksheet tab (usually 'Sheet1' or 'Leads')
  2. 2Set 'Check for changes every' to 10 minutes
  3. 3Enable 'Include column headers' checkbox
  4. 4Click 'Save and Continue'
βœ“ What you should see: You should see sample data from your sheet displayed below the configuration options.
⚠
Common mistake β€” If your sheet has merged cells in the header row, the trigger will fail. Keep headers in single cells only.
4

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.

  1. 1Click the + button to add a step
  2. 2Search for 'Salesforce' in the apps list
  3. 3Select 'Create Record' action
  4. 4Choose 'Lead' as the object type
βœ“ What you should see: A new Salesforce step appears with empty field mapping options for Lead object.
⚠
Common mistake β€” Make sure you select 'Lead' not 'Contact' - they have different required fields and validation rules.
5

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.

  1. 1Click 'Connect Account' button
  2. 2Enter your Salesforce username and password
  3. 3Click 'Allow' to grant Pipedream permissions
  4. 4Select your connected account from the dropdown
βœ“ What you should see: The Salesforce step shows 'Connected' status and displays Lead field options like First Name, Last Name, Company.
⚠
Common mistake β€” If you have IP restrictions, add Pipedream's IPs to your Salesforce trusted IP list or the connection will fail.
Pipedream settings
Connection
Choose a connection…Add
click Add
Google Sheets
Log in to authorize
Authorize Pipedream
popup window
βœ“
Connected
green checkmark
6

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.

  1. 1Click 'Last Name' field and select the name column from your sheet
  2. 2Click 'Company' field and select the company column
  3. 3Map 'Email' to your email column
  4. 4Set 'Lead Source' to 'Trade Show' (static value)
βœ“ What you should see: Required fields show green checkmarks and display sample values from your sheet data.
⚠
Common mistake β€” Salesforce will reject records without Last Name and Company. Test with a sheet that has these columns populated.
Google Sheets fields
Column A
Column B
Email
Status
Notes
available as variables:
1.props.Column A
1.props.Column B
1.props.Email
1.props.Status
1.props.Notes
7

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.

  1. 1Map 'First Name' to your first name column
  2. 2Map 'Title' to job title column if available
  3. 3Map 'Phone' to phone number column
  4. 4Set 'Status' to 'New' (static value)
  5. 5Set 'Lead Source Detail' to your event name
βœ“ What you should see: All mapped fields show sample data preview from your Google Sheet row.
8

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.

  1. 1Click + to add a step between Sheets and Salesforce
  2. 2Select 'Node.js' code step
  3. 3Paste the duplicate check code
  4. 4Drag this step above the Salesforce step
βœ“ What you should see: A code step appears that will output 'skip' or 'create' based on duplicate check results.
⚠
Common mistake β€” Without duplicate checking, re-running your workflow will create duplicate leads for the same people.
9

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.

  1. 1Click the gear icon on your Salesforce step
  2. 2Enable 'Conditional Execution'
  3. 3Set condition to 'steps.code.action === "create"'
  4. 4Save the condition
βœ“ What you should see: The Salesforce step shows a conditional icon and will only execute when duplicates aren't found.
⚠
Common mistake β€” Filters are the most common place setups break. Double-check the field name and value exactly match what your app sends β€” a single capital letter difference will block everything.
Google Sheets
GO
trigger
filter
Condition
matches criteria?
yes β€” passes through
no β€” skipped
Salesforce
SA
notified
10

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.

  1. 1Click 'Test' button in the top right
  2. 2Verify the test creates a lead in Salesforce
  3. 3Check all field mappings are correct
  4. 4Click 'Deploy' to activate polling
βœ“ What you should see: Test execution shows green checkmarks for all steps and creates a new lead record in Salesforce.
⚠
Common mistake β€” Test with real data - Salesforce validation rules might reject test records that pass with fake data.

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' }
    }
  }
})
Pipedream
β–Ά Deploy & test
executed
βœ“
Google Sheets
βœ“
Salesforce
Salesforce
πŸ”” notification
received

Scaling Beyond 500+ leads per import+ Records

If your volume exceeds 500+ leads per import records, apply these adjustments.

1

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.

2

Implement batch processing

Split large sheets into chunks of 100 rows and process them sequentially to prevent memory issues and improve error handling.

3

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.

4

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

VerdictWhy n8n for this workflow

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.

Cost

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.

Tradeoffs

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

Was this guide helpful?
← Google Sheets + Salesforce overviewPipedream profile β†’